Blame view

lib/route/route.dart 12.8 KB
2a29701f   liangchengyou   feat:提交代码
1
2
  import 'package:flutter/cupertino.dart';
  import 'package:flutter/material.dart';
a117a5a3   liangchengyou   feat:更新代码
3
  import 'package:wow_english/app/splash_page.dart';
bfb40cd0   liangchengyou   feat:忘记密码获取验证码
4
  import 'package:wow_english/common/pages/wow_web_page.dart';
578f1729   吴启风   fix:修复老bug:修改密码后跳...
5
  import 'package:wow_english/generated/json/base/json_convert_content.dart';
2187c85f   吴启风   feat:课程结构调整
6
  import 'package:wow_english/models/course_unit_entity.dart';
07599105   吴启风   feat:商品列表请求&路由
7
  import 'package:wow_english/models/product_entity.dart';
6d61919a   吴启风   feat:增加过渡页&集成串联游戏
8
  import 'package:wow_english/pages/games/view.dart';
2187c85f   吴启风   feat:课程结构调整
9
  import 'package:wow_english/pages/home/view.dart';
4b358e22   liangchengyou   feat:调整文件结构
10
11
12
13
  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';
5b87e560   吴启风   feat:导航栏视觉优化
14
  import 'package:wow_english/pages/module/course_module_page.dart';
842b7132   liangchengyou   feat:磨耳朵/练习页面调整
15
  import 'package:wow_english/pages/practice/topic_picture_page.dart';
4b358e22   liangchengyou   feat:调整文件结构
16
  import 'package:wow_english/pages/repeatafter/repeat_after_page.dart';
08a0f5a8   liangchengyou   feat:路由方式更新
17
  import 'package:wow_english/pages/repeataftercontent/repeat_after_content_page.dart';
4b358e22   liangchengyou   feat:调整文件结构
18
19
  import 'package:wow_english/pages/shop/exchane/exchange_lesson_page.dart';
  import 'package:wow_english/pages/shop/exchangelist/exchange_lesson_list_page.dart';
fc3c67bf   吴启风   feat:新增购前须知页
20
  import 'package:wow_english/pages/shop/home/shop_desc_page.dart';
4b358e22   liangchengyou   feat:调整文件结构
21
  import 'package:wow_english/pages/shop/home/shop_home_page.dart';
da82bd70   Key   feat: user_inform...
22
  import 'package:wow_english/pages/user/information/user_information_page.dart';
c948a9ea   liangchengyou   feat:个人信息更改模块功能
23
  import 'package:wow_english/pages/user/modify/modify_user_avatar_page.dart';
c9df43c8   Key   feat: 修改个人信息、接口
24
  import 'package:wow_english/pages/user/modify/modify_user_information_page.dart';
3840b7fe   liangchengyou   feat:更新设置页面
25
  import 'package:wow_english/pages/user/setting/setting_page.dart';
4b358e22   liangchengyou   feat:调整文件结构
26
27
  import 'package:wow_english/pages/user/user_page.dart';
  import 'package:wow_english/pages/video/lookvideo/look_video_page.dart';
383462ef   吴启风   feat: 新增视频专区列表与播放功能
28
29
30
  import 'package:wow_english/pages/video/zone/video_zone_item.dart';
  import 'package:wow_english/pages/video/zone/video_zone_page.dart';
  import 'package:wow_english/pages/video/zone/video_zone_player_page.dart';
4b358e22   liangchengyou   feat:调整文件结构
31
  
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
32
  import '../models/course_module_entity.dart';
2a427e12   吴启风   feat:绘本静态ui基本完成
33
  import '../pages/reading/reading_page.dart';
2187c85f   吴启风   feat:课程结构调整
34
  import '../pages/section/section_page.dart';
4224b3f8   吴启风   feat:支付详情页ui
35
  import '../pages/shopping/view.dart';
2187c85f   吴启风   feat:课程结构调整
36
  import '../pages/tab/tab_page.dart';
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
37
  import '../pages/unit/view.dart';
3840b7fe   liangchengyou   feat:更新设置页面
38
39
  import '../pages/user/setting/delete_account_page.dart';
  import '../pages/user/setting/reback_page.dart';
2a427e12   吴启风   feat:绘本静态ui基本完成
40
  
2a29701f   liangchengyou   feat:提交代码
41
42
43
  class AppRouteName {
    static const String splash = 'splash';
    static const String login = 'login';
95edef4f   liangchengyou   feat:更新适配代码
44
    static const String home = 'home';
2187c85f   吴启风   feat:课程结构调整
45
    static const String games = 'games';
4bf67b91   liangchengyou   feat:设置密码
46
    static const String fogPwd = 'fogPwd';
c61b3c1a   Key   feat: toast_util....
47
  
c9df43c8   Key   feat: 修改个人信息、接口
48
49
    /// 设置密码,修改密码;不要自己调用,使用[SetPassWordPage.push]方法,隐藏这种实现
    //static const String setPwd = 'setPwd';
bfb40cd0   liangchengyou   feat:忘记密码获取验证码
50
    static const String webView = 'webView';
2187c85f   吴启风   feat:课程结构调整
51
52
53
    static const String courseModule = 'courseModules';
    static const String courseUnit = 'courseUnits';
    static const String courseSection = 'courseSections';
d35a4e87   liangchengyou   feat:磨耳朵功能UI
54
    static const String listen = 'listen';
d1d32220   liangchengyou   feat:兑换课程+购买记录
55
    static const String shop = 'shop';
fc3c67bf   吴启风   feat:新增购前须知页
56
    static const String shopDesc = 'shopDesc';
d1d32220   liangchengyou   feat:兑换课程+购买记录
57
58
    static const String exLesson = 'exLesson';
    static const String exList = 'exList';
9d080046   liangchengyou   feat:视频跟读逻辑
59
    static const String reAfter = 'reAfter';
624214d0   liangchengyou   feat:看题选字/选图UI和部分逻辑
60
    static const String topicPic = 'topicPic';
22b7d4da   Key   feat: user, api path
61
    static const String user = 'user';
4224b3f8   吴启风   feat:支付详情页ui
62
    static const String pay = 'pay';
da82bd70   Key   feat: user_inform...
63
64
65
  
    /// 用户详细信息页
    static const String userInformation = 'userInformation';
2187c85f   吴启风   feat:课程结构调整
66
  
c948a9ea   liangchengyou   feat:个人信息更改模块功能
67
68
    /// 修改用户头像
    static const String userAvatar = 'userAvatar';
c9df43c8   Key   feat: 修改个人信息、接口
69
70
71
  
    /// 用户修改信息页,不要自己调用,使用[ModifyUserInformationPage.push]方法,隐藏这种实现
    //static const String userModifyInformation = 'userModifyInformation';
08a0f5a8   liangchengyou   feat:路由方式更新
72
    ///看视频
119ba920   liangchengyou   feat:视频播放器
73
    static const String lookVideo = 'lookVideo';
2187c85f   吴启风   feat:课程结构调整
74
  
383462ef   吴启风   feat: 新增视频专区列表与播放功能
75
76
77
78
79
80
    ///视频专区
    static const String videoZone = 'videoZone';
  
    ///视频专区播放器
    static const String videoZonePlayer = 'videoZonePlayer';
  
08a0f5a8   liangchengyou   feat:路由方式更新
81
    ///绘本
c61b3c1a   Key   feat: toast_util....
82
    static const String reading = 'reading';
2187c85f   吴启风   feat:课程结构调整
83
  
08a0f5a8   liangchengyou   feat:路由方式更新
84
85
86
    ///视频跟读详情
    static const String readAfterContent = 'readAfterContent';
  
3840b7fe   liangchengyou   feat:更新设置页面
87
88
    ///设置
    static const String setting = 'setting';
2187c85f   吴启风   feat:课程结构调整
89
  
3840b7fe   liangchengyou   feat:更新设置页面
90
91
    ///注销账号
    static const String deleteAccount = 'deleteAccount';
2187c85f   吴启风   feat:课程结构调整
92
  
3840b7fe   liangchengyou   feat:更新设置页面
93
94
95
    ///帮助与反馈
    static const String reBack = 'reBack';
  
2a29701f   liangchengyou   feat:提交代码
96
97
98
99
100
    static const String tab = '/';
  }
  
  class AppRouter {
    static final navigatorKey = GlobalKey<NavigatorState>();
94342c3f   Key   feat: user util
101
  
2a29701f   liangchengyou   feat:提交代码
102
103
    // App 根节点Context
    static BuildContext get context => navigatorKey.currentContext!;
22b7d4da   Key   feat: user, api path
104
  
2a29701f   liangchengyou   feat:提交代码
105
106
107
108
109
    static Route<dynamic> generateRoute(RouteSettings settings) {
      switch (settings.name) {
        case AppRouteName.splash:
          return PageRouteBuilder(
              opaque: false,
94342c3f   Key   feat: user util
110
              pageBuilder: (_, __, ___) => const SplashPage(),
2a29701f   liangchengyou   feat:提交代码
111
112
113
              transitionDuration: Duration.zero,
              transitionsBuilder: (_, __, ___, child) => child);
        case AppRouteName.login:
578f1729   吴启风   fix:修复老bug:修改密码后跳...
114
          // 是否默认密码登录,修改密码后跳登录页,优先密码登录体验好点
2187c85f   吴启风   feat:课程结构调整
115
116
117
118
119
120
121
122
          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());
6d61919a   吴启风   feat:增加过渡页&集成串联游戏
123
124
        case AppRouteName.games:
          return CupertinoPageRoute(builder: (_) => const GamesPage());
2187c85f   吴启风   feat:课程结构调整
125
126
127
128
        case AppRouteName.fogPwd:
          return CupertinoPageRoute(
              builder: (_) => const ForgetPasswordHomePage());
        case AppRouteName.courseModule:
5b87e560   吴启风   feat:导航栏视觉优化
129
          return CupertinoPageRoute(builder: (_) => const CourseModulePage());
2187c85f   吴启风   feat:课程结构调整
130
        case AppRouteName.courseUnit:
42f15f6c   吴启风   feat:模块选择持久化&模块主题...
131
          CourseModuleEntity? courseModuleEntity;
8988aa69   liangchengyou   feat:首页+课程列表数据获取
132
          if (settings.arguments != null) {
2187c85f   吴启风   feat:课程结构调整
133
134
            courseModuleEntity = (settings.arguments as Map)
                .getOrNull('courseModuleEntity') as CourseModuleEntity;
8988aa69   liangchengyou   feat:首页+课程列表数据获取
135
          }
c61b3c1a   Key   feat: toast_util....
136
          return CupertinoPageRoute(
2187c85f   吴启风   feat:课程结构调整
137
138
139
              builder: (_) => UnitPage(courseModuleEntity: courseModuleEntity));
        case AppRouteName.courseSection:
          CourseUnitEntity courseUnitEntity = CourseUnitEntity();
66a7e3e7   吴启风   feat:退出课堂和结束课堂优化
140
          int courseUnitDetail = 0;
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
141
          if (settings.arguments != null) {
2187c85f   吴启风   feat:课程结构调整
142
143
            courseUnitEntity = (settings.arguments as Map)
                .getOrNull('courseUnitEntity') as CourseUnitEntity;
6baa39bd   吴启风   feat:儿歌/视频保留url传参...
144
145
            courseUnitDetail =
                (settings.arguments as Map).getOrNull('courseUnitId');
2a3621f8   吴启风   feat:课程层级调整(增加unit层)
146
          }
2187c85f   吴启风   feat:课程结构调整
147
148
149
          return CupertinoPageRoute(
              builder: (_) => SectionPage(
                  courseUnitEntity: courseUnitEntity,
66a7e3e7   吴启风   feat:退出课堂和结束课堂优化
150
                  courseUnitId: courseUnitDetail));
d35a4e87   liangchengyou   feat:磨耳朵功能UI
151
        case AppRouteName.listen:
94342c3f   Key   feat: user util
152
          return CupertinoPageRoute(builder: (_) => const ListenPage());
d1d32220   liangchengyou   feat:兑换课程+购买记录
153
        case AppRouteName.shop:
94342c3f   Key   feat: user util
154
          return CupertinoPageRoute(builder: (_) => const ShopHomePage());
fc3c67bf   吴启风   feat:新增购前须知页
155
156
        case AppRouteName.shopDesc:
          return CupertinoPageRoute(builder: (_) => const ShopDescPage());
4224b3f8   吴启风   feat:支付详情页ui
157
        case AppRouteName.pay:
07599105   吴启风   feat:商品列表请求&路由
158
159
160
161
          var productEntity = ProductEntity();
          if (settings.arguments != null && settings.arguments is ProductEntity) {
            productEntity = settings.arguments as ProductEntity;
          }
2187c85f   吴启风   feat:课程结构调整
162
163
          return CupertinoPageRoute(
              builder: (_) => ShoppingPage(productEntity: productEntity));
d1d32220   liangchengyou   feat:兑换课程+购买记录
164
        case AppRouteName.exLesson:
94342c3f   Key   feat: user util
165
          return CupertinoPageRoute(builder: (_) => const ExchangeLessonPage());
d1d32220   liangchengyou   feat:兑换课程+购买记录
166
        case AppRouteName.exList:
2187c85f   吴启风   feat:课程结构调整
167
168
          return CupertinoPageRoute(
              builder: (_) => const ExchangeLessonListPage());
9d080046   liangchengyou   feat:视频跟读逻辑
169
        case AppRouteName.reAfter:
94342c3f   Key   feat: user util
170
          return CupertinoPageRoute(builder: (_) => const RepeatAfterPage());
22b7d4da   Key   feat: user, api path
171
        case AppRouteName.user:
94342c3f   Key   feat: user util
172
          return CupertinoPageRoute(builder: (_) => const UserPage());
da82bd70   Key   feat: user_inform...
173
174
        case AppRouteName.userInformation:
          return CupertinoPageRoute(builder: (_) => const UserInformationPage());
c948a9ea   liangchengyou   feat:个人信息更改模块功能
175
176
177
        case AppRouteName.userAvatar:
          var pageType = 0;
          if (settings.arguments != null) {
934e2b47   liangchengyou   feat:权限调整+课程进度接口对接
178
            final content = (settings.arguments as Map)['pageType'] as String;
c948a9ea   liangchengyou   feat:个人信息更改模块功能
179
180
            pageType = int.parse(content);
          }
e55bbdf3   Key   fixed: aliyun oss...
181
182
183
184
185
          return CupertinoPageRoute(
              builder: (_) => ModifyUserAvatarPage(
                    pageType: pageType,
                  ));
        /*case AppRouteName.userModifyInformation:
c9df43c8   Key   feat: 修改个人信息、接口
186
187
188
189
190
191
192
          return CupertinoPageRoute(builder: (_) {
            ModifyUserInformationType argument = ModifyUserInformationType.name;
            if (settings.arguments != null) {
              argument = settings.arguments as ModifyUserInformationType;
            }
            return ModifyUserInformationPage(type: argument);
          });*/
624214d0   liangchengyou   feat:看题选字/选图UI和部分逻辑
193
        case AppRouteName.topicPic:
608c05b4   liangchengyou   feat:兑换课程
194
          var courseLessonId = '';
07b173c9   吴启风   feat:练习页上方进度信息改成进...
195
          Color? moduleColor;
608c05b4   liangchengyou   feat:兑换课程
196
          if (settings.arguments != null) {
2187c85f   吴启风   feat:课程结构调整
197
198
            courseLessonId =
                (settings.arguments as Map)['courseLessonId'] as String;
07b173c9   吴启风   feat:练习页上方进度信息改成进...
199
            moduleColor = (settings.arguments as Map)['moduleColor'] as Color?;
608c05b4   liangchengyou   feat:兑换课程
200
          }
2187c85f   吴启风   feat:课程结构调整
201
          return CupertinoPageRoute(
07b173c9   吴启风   feat:练习页上方进度信息改成进...
202
203
              builder: (_) => TopicPicturePage(
                  courseLessonId: courseLessonId, moduleColor: moduleColor));
119ba920   liangchengyou   feat:视频播放器
204
        case AppRouteName.lookVideo:
6baa39bd   吴启风   feat:儿歌/视频保留url传参...
205
          final videoUrl = (settings.arguments as Map)['videoUrl'] as String?;
842b7132   liangchengyou   feat:磨耳朵/练习页面调整
206
          final title = (settings.arguments as Map)['title'] as String?;
2187c85f   吴启风   feat:课程结构调整
207
208
          final courseLessonId =
              (settings.arguments as Map)['courseLessonId'] as String?;
6baa39bd   吴启风   feat:儿歌/视频保留url传参...
209
  
46675a89   吴启风   feat:过渡页-视频环节
210
          ///是否是课程内的视频环节,用于播放结束判断要不要再来一次以及下一环节用
6baa39bd   吴启风   feat:儿歌/视频保留url传参...
211
212
          final isTopic =
              (settings.arguments as Map)['isTopic'] as bool? ?? false;
c61b3c1a   Key   feat: toast_util....
213
214
          return CupertinoPageRoute(
              builder: (_) => LookVideoPage(
2187c85f   吴启风   feat:课程结构调整
215
216
217
                    videoUrl: videoUrl,
                    typeTitle: title,
                    courseLessonId: courseLessonId,
46675a89   吴启风   feat:过渡页-视频环节
218
                    isTopic: isTopic,
2187c85f   吴启风   feat:课程结构调整
219
                  ));
383462ef   吴启风   feat: 新增视频专区列表与播放功能
220
221
222
223
224
225
226
227
228
229
230
        case AppRouteName.videoZone:
          return CupertinoPageRoute(builder: (_) => const VideoZonePage());
        case AppRouteName.videoZonePlayer:
          final arguments = settings.arguments as Map;
          final items = arguments['items'] as List<VideoZoneItem>;
          final initialVideoId = arguments['initialVideoId'] as int?;
          return CupertinoPageRoute(
              builder: (_) => VideoZonePlayerPage(
                    items: items,
                    initialVideoId: initialVideoId,
                  ));
e55bbdf3   Key   fixed: aliyun oss...
231
        /*case AppRouteName.setPwd:
cb38bc90   liangchengyou   feat:视频跟读逻辑处理
232
        case AppRouteName.setPwd:
c61b3c1a   Key   feat: toast_util....
233
234
235
                    phoneNum: phoneNum,
                    smsCode: smsCode,
                    pageType: pageType,
c9df43c8   Key   feat: 修改个人信息、接口
236
                  ));*/
bfb40cd0   liangchengyou   feat:忘记密码获取验证码
237
238
        case AppRouteName.webView:
          final urlStr = (settings.arguments as Map)['urlStr'] as String;
2187c85f   吴启风   feat:课程结构调整
239
          final webViewTitle =
99b94d6c   吴启风   feat:首页增加信息弹窗
240
              (settings.arguments as Map)['webViewTitle'] as String?;
94342c3f   Key   feat: user util
241
242
          return CupertinoPageRoute(
              builder: (_) => WowWebViewPage(
e55bbdf3   Key   fixed: aliyun oss...
243
244
245
                    urlStr: urlStr,
                    webViewTitle: webViewTitle,
                  ));
08a0f5a8   liangchengyou   feat:路由方式更新
246
        case AppRouteName.readAfterContent:
cb38bc90   liangchengyou   feat:视频跟读逻辑处理
247
248
          var videoFollowReadId = '';
          if (settings.arguments != null) {
2187c85f   吴启风   feat:课程结构调整
249
250
            videoFollowReadId =
                (settings.arguments as Map)['videoFollowReadId'] as String;
cb38bc90   liangchengyou   feat:视频跟读逻辑处理
251
          }
2187c85f   吴启风   feat:课程结构调整
252
253
254
          return CupertinoPageRoute(
              builder: (_) =>
                  RepeatAfterContentPage(videoFollowReadId: videoFollowReadId));
3840b7fe   liangchengyou   feat:更新设置页面
255
        case AppRouteName.setting:
2187c85f   吴启风   feat:课程结构调整
256
          return CupertinoPageRoute(builder: (_) => const SettingPage());
3840b7fe   liangchengyou   feat:更新设置页面
257
        case AppRouteName.deleteAccount:
2187c85f   吴启风   feat:课程结构调整
258
          return CupertinoPageRoute(builder: (_) => const DeleteAccountPage());
3840b7fe   liangchengyou   feat:更新设置页面
259
260
        case AppRouteName.reBack:
          return CupertinoPageRoute(builder: (_) => const ReBackPage());
2a29701f   liangchengyou   feat:提交代码
261
262
263
264
265
        case AppRouteName.tab:
          return PageRouteBuilder(
              opaque: false,
              settings: const RouteSettings(name: AppRouteName.tab),
              transitionDuration: Duration.zero,
94342c3f   Key   feat: user util
266
              pageBuilder: (_, __, ___) => const TabPage(),
2a29701f   liangchengyou   feat:提交代码
267
              transitionsBuilder: (_, __, ___, child) => child);
2a427e12   吴启风   feat:绘本静态ui基本完成
268
        case AppRouteName.reading:
53e9e6db   吴启风   feat:绘本语音评测逻辑
269
          var courseLessonId = '';
d1ab5cb2   吴启风   feat:绘本跟读页上方进度信息改...
270
          Color? moduleColor;
53e9e6db   吴启风   feat:绘本语音评测逻辑
271
          if (settings.arguments != null) {
2187c85f   吴启风   feat:课程结构调整
272
273
            courseLessonId =
                (settings.arguments as Map)['courseLessonId'] as String;
d1ab5cb2   吴启风   feat:绘本跟读页上方进度信息改...
274
            moduleColor = (settings.arguments as Map)['moduleColor'] as Color?;
53e9e6db   吴启风   feat:绘本语音评测逻辑
275
          }
2187c85f   吴启风   feat:课程结构调整
276
          return CupertinoPageRoute(
d1ab5cb2   吴启风   feat:绘本跟读页上方进度信息改...
277
              builder: (_) => ReadingPage(courseLessonId: courseLessonId, moduleColor: moduleColor));
2a29701f   liangchengyou   feat:提交代码
278
279
        default:
          return CupertinoPageRoute(
2187c85f   吴启风   feat:课程结构调整
280
281
282
              builder: (_) => Scaffold(
                  body: Center(
                      child: Text('No route defined for ${settings.name}'))));
2a29701f   liangchengyou   feat:提交代码
283
284
      }
    }
22b7d4da   Key   feat: user, api path
285
  }
08a0f5a8   liangchengyou   feat:路由方式更新
286
  
934e2b47   liangchengyou   feat:权限调整+课程进度接口对接
287
  Future pushNamed(String routeName, {Object? arguments}) {
2187c85f   吴启风   feat:课程结构调整
288
289
290
    return Navigator.of(AppRouter.context)
        .pushNamed(routeName, arguments: arguments)
        .then((value) {
934e2b47   liangchengyou   feat:权限调整+课程进度接口对接
291
292
      return value;
    });
08a0f5a8   liangchengyou   feat:路由方式更新
293
294
  }
  
2187c85f   吴启风   feat:课程结构调整
295
296
297
298
  Future pushNamedAndRemoveUntil(String routeName, RoutePredicate predicate,
      {Object? arguments}) {
    return Navigator.of(AppRouter.context)
        .pushNamedAndRemoveUntil(routeName, predicate, arguments: arguments);
08a0f5a8   liangchengyou   feat:路由方式更新
299
300
  }
  
934e2b47   liangchengyou   feat:权限调整+课程进度接口对接
301
  void popPage({dynamic data}) {
2187c85f   吴启风   feat:课程结构调整
302
    Navigator.of(AppRouter.context).pop(data);
08a0f5a8   liangchengyou   feat:路由方式更新
303
  }