route.dart
11.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:wow_english/app/splash_page.dart';
import 'package:wow_english/common/pages/wow_web_page.dart';
import 'package:wow_english/generated/json/base/json_convert_content.dart';
import 'package:wow_english/models/course_unit_entity.dart';
import 'package:wow_english/models/product_entity.dart';
import 'package:wow_english/pages/games/view.dart';
import 'package:wow_english/pages/home/view.dart';
import 'package:wow_english/pages/listen/listen_page.dart';
import 'package:wow_english/pages/login/forgetpwd/forget_password_home_page.dart';
import 'package:wow_english/pages/login/loginpage/login_page.dart';
import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart';
import 'package:wow_english/pages/module/course_module_page.dart';
import 'package:wow_english/pages/practice/topic_picture_page.dart';
import 'package:wow_english/pages/repeatafter/repeat_after_page.dart';
import 'package:wow_english/pages/repeataftercontent/repeat_after_content_page.dart';
import 'package:wow_english/pages/shop/exchane/exchange_lesson_page.dart';
import 'package:wow_english/pages/shop/exchangelist/exchange_lesson_list_page.dart';
import 'package:wow_english/pages/shop/home/shop_desc_page.dart';
import 'package:wow_english/pages/shop/home/shop_home_page.dart';
import 'package:wow_english/pages/user/information/user_information_page.dart';
import 'package:wow_english/pages/user/modify/modify_user_avatar_page.dart';
import 'package:wow_english/pages/user/modify/modify_user_information_page.dart';
import 'package:wow_english/pages/user/setting/setting_page.dart';
import 'package:wow_english/pages/user/user_page.dart';
import 'package:wow_english/pages/video/lookvideo/look_video_page.dart';
import '../models/course_module_entity.dart';
import '../pages/reading/reading_page.dart';
import '../pages/section/section_page.dart';
import '../pages/shopping/view.dart';
import '../pages/tab/tab_page.dart';
import '../pages/unit/view.dart';
import '../pages/user/setting/delete_account_page.dart';
import '../pages/user/setting/reback_page.dart';
class AppRouteName {
static const String splash = 'splash';
static const String login = 'login';
static const String home = 'home';
static const String games = 'games';
static const String fogPwd = 'fogPwd';
/// 设置密码,修改密码;不要自己调用,使用[SetPassWordPage.push]方法,隐藏这种实现
//static const String setPwd = 'setPwd';
static const String webView = 'webView';
static const String courseModule = 'courseModules';
static const String courseUnit = 'courseUnits';
static const String courseSection = 'courseSections';
static const String listen = 'listen';
static const String shop = 'shop';
static const String shopDesc = 'shopDesc';
static const String exLesson = 'exLesson';
static const String exList = 'exList';
static const String reAfter = 'reAfter';
static const String topicPic = 'topicPic';
static const String user = 'user';
static const String pay = 'pay';
/// 用户详细信息页
static const String userInformation = 'userInformation';
/// 修改用户头像
static const String userAvatar = 'userAvatar';
/// 用户修改信息页,不要自己调用,使用[ModifyUserInformationPage.push]方法,隐藏这种实现
//static const String userModifyInformation = 'userModifyInformation';
///看视频
static const String lookVideo = 'lookVideo';
///绘本
static const String reading = 'reading';
///视频跟读详情
static const String readAfterContent = 'readAfterContent';
///设置
static const String setting = 'setting';
///注销账号
static const String deleteAccount = 'deleteAccount';
///帮助与反馈
static const String reBack = 'reBack';
static const String tab = '/';
}
class AppRouter {
static final navigatorKey = GlobalKey<NavigatorState>();
// App 根节点Context
static BuildContext get context => navigatorKey.currentContext!;
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case AppRouteName.splash:
return PageRouteBuilder(
opaque: false,
pageBuilder: (_, __, ___) => const SplashPage(),
transitionDuration: Duration.zero,
transitionsBuilder: (_, __, ___, child) => child);
case AppRouteName.login:
// 是否默认密码登录,修改密码后跳登录页,优先密码登录体验好点
final bool showPasswordPage = (settings.arguments as Map?)
?.getOrNull('showPasswordPage') as bool? ??
false;
return CupertinoPageRoute(
builder: (_) =>
LoginPage(preferencesPasswordLogin: showPasswordPage));
case AppRouteName.home:
return CupertinoPageRoute(builder: (_) => const HomePage());
case AppRouteName.games:
return CupertinoPageRoute(builder: (_) => const GamesPage());
case AppRouteName.fogPwd:
return CupertinoPageRoute(
builder: (_) => const ForgetPasswordHomePage());
case AppRouteName.courseModule:
return CupertinoPageRoute(builder: (_) => const CourseModulePage());
case AppRouteName.courseUnit:
CourseModuleEntity courseModuleEntity = CourseModuleEntity();
if (settings.arguments != null) {
courseModuleEntity = (settings.arguments as Map)
.getOrNull('courseModuleEntity') as CourseModuleEntity;
}
return CupertinoPageRoute(
builder: (_) => UnitPage(courseModuleEntity: courseModuleEntity));
case AppRouteName.courseSection:
CourseUnitEntity courseUnitEntity = CourseUnitEntity();
int courseUnitDetail = 0;
if (settings.arguments != null) {
courseUnitEntity = (settings.arguments as Map)
.getOrNull('courseUnitEntity') as CourseUnitEntity;
courseUnitDetail =
(settings.arguments as Map).getOrNull('courseUnitId');
}
return CupertinoPageRoute(
builder: (_) => SectionPage(
courseUnitEntity: courseUnitEntity,
courseUnitId: courseUnitDetail));
case AppRouteName.listen:
return CupertinoPageRoute(builder: (_) => const ListenPage());
case AppRouteName.shop:
return CupertinoPageRoute(builder: (_) => const ShopHomePage());
case AppRouteName.shopDesc:
return CupertinoPageRoute(builder: (_) => const ShopDescPage());
case AppRouteName.pay:
var productEntity = ProductEntity();
if (settings.arguments != null && settings.arguments is ProductEntity) {
productEntity = settings.arguments as ProductEntity;
}
return CupertinoPageRoute(
builder: (_) => ShoppingPage(productEntity: productEntity));
case AppRouteName.exLesson:
return CupertinoPageRoute(builder: (_) => const ExchangeLessonPage());
case AppRouteName.exList:
return CupertinoPageRoute(
builder: (_) => const ExchangeLessonListPage());
case AppRouteName.reAfter:
return CupertinoPageRoute(builder: (_) => const RepeatAfterPage());
case AppRouteName.user:
return CupertinoPageRoute(builder: (_) => const UserPage());
case AppRouteName.userInformation:
return CupertinoPageRoute(builder: (_) => const UserInformationPage());
case AppRouteName.userAvatar:
var pageType = 0;
if (settings.arguments != null) {
final content = (settings.arguments as Map)['pageType'] as String;
pageType = int.parse(content);
}
return CupertinoPageRoute(
builder: (_) => ModifyUserAvatarPage(
pageType: pageType,
));
/*case AppRouteName.userModifyInformation:
return CupertinoPageRoute(builder: (_) {
ModifyUserInformationType argument = ModifyUserInformationType.name;
if (settings.arguments != null) {
argument = settings.arguments as ModifyUserInformationType;
}
return ModifyUserInformationPage(type: argument);
});*/
case AppRouteName.topicPic:
var courseLessonId = '';
Color? moduleColor;
if (settings.arguments != null) {
courseLessonId =
(settings.arguments as Map)['courseLessonId'] as String;
moduleColor = (settings.arguments as Map)['moduleColor'] as Color?;
}
return CupertinoPageRoute(
builder: (_) => TopicPicturePage(
courseLessonId: courseLessonId, moduleColor: moduleColor));
case AppRouteName.lookVideo:
final videoUrl = (settings.arguments as Map)['videoUrl'] as String?;
final title = (settings.arguments as Map)['title'] as String?;
final courseLessonId =
(settings.arguments as Map)['courseLessonId'] as String?;
///是否是课程内的视频环节,用于播放结束判断要不要再来一次以及下一环节用
final isTopic =
(settings.arguments as Map)['isTopic'] as bool? ?? false;
return CupertinoPageRoute(
builder: (_) => LookVideoPage(
videoUrl: videoUrl,
typeTitle: title,
courseLessonId: courseLessonId,
isTopic: isTopic,
));
/*case AppRouteName.setPwd:
case AppRouteName.setPwd:
phoneNum: phoneNum,
smsCode: smsCode,
pageType: pageType,
));*/
case AppRouteName.webView:
final urlStr = (settings.arguments as Map)['urlStr'] as String;
final webViewTitle =
(settings.arguments as Map)['webViewTitle'] as String;
return CupertinoPageRoute(
builder: (_) => WowWebViewPage(
urlStr: urlStr,
webViewTitle: webViewTitle,
));
case AppRouteName.readAfterContent:
var videoFollowReadId = '';
if (settings.arguments != null) {
videoFollowReadId =
(settings.arguments as Map)['videoFollowReadId'] as String;
}
return CupertinoPageRoute(
builder: (_) =>
RepeatAfterContentPage(videoFollowReadId: videoFollowReadId));
case AppRouteName.setting:
return CupertinoPageRoute(builder: (_) => const SettingPage());
case AppRouteName.deleteAccount:
return CupertinoPageRoute(builder: (_) => const DeleteAccountPage());
case AppRouteName.reBack:
return CupertinoPageRoute(builder: (_) => const ReBackPage());
case AppRouteName.tab:
return PageRouteBuilder(
opaque: false,
settings: const RouteSettings(name: AppRouteName.tab),
transitionDuration: Duration.zero,
pageBuilder: (_, __, ___) => const TabPage(),
transitionsBuilder: (_, __, ___, child) => child);
case AppRouteName.reading:
var courseLessonId = '';
if (settings.arguments != null) {
courseLessonId =
(settings.arguments as Map)['courseLessonId'] as String;
}
return CupertinoPageRoute(
builder: (_) => ReadingPage(courseLessonId: courseLessonId));
default:
return CupertinoPageRoute(
builder: (_) => Scaffold(
body: Center(
child: Text('No route defined for ${settings.name}'))));
}
}
}
Future pushNamed(String routeName, {Object? arguments}) {
return Navigator.of(AppRouter.context)
.pushNamed(routeName, arguments: arguments)
.then((value) {
return value;
});
}
Future pushNamedAndRemoveUntil(String routeName, RoutePredicate predicate,
{Object? arguments}) {
return Navigator.of(AppRouter.context)
.pushNamedAndRemoveUntil(routeName, predicate, arguments: arguments);
}
void popPage({dynamic data}) {
Navigator.of(AppRouter.context).pop(data);
}