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/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_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 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(); // App 根节点Context static BuildContext get context => navigatorKey.currentContext!; static Route 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 ModulePage()); 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(); CourseUnitDetail courseUnitDetail = CourseUnitDetail(); if (settings.arguments != null) { courseUnitEntity = (settings.arguments as Map) .getOrNull('courseUnitEntity') as CourseUnitEntity; courseUnitDetail = (settings.arguments as Map) .getOrNull('courseUnitDetail') as CourseUnitDetail; } return CupertinoPageRoute( builder: (_) => SectionPage( courseUnitEntity: courseUnitEntity, courseUnitDetail: courseUnitDetail)); case AppRouteName.listen: return CupertinoPageRoute(builder: (_) => const ListenPage()); case AppRouteName.shop: return CupertinoPageRoute(builder: (_) => const ShopHomePage()); 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 = ''; if (settings.arguments != null) { courseLessonId = (settings.arguments as Map)['courseLessonId'] as String; } return CupertinoPageRoute( builder: (_) => TopicPicturePage(courseLessonId: courseLessonId)); 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); }