route.dart 5.41 KB
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/home/home_page.dart';
import 'package:wow_english/lessons/lesson_page.dart';
import 'package:wow_english/listen/listen_page.dart';
import 'package:wow_english/login/forgetpwd/forget_password_home_page.dart';
import 'package:wow_english/login/loginpage/login_page.dart';
import 'package:wow_english/login/setpwd/set_pwd_page.dart';
import 'package:wow_english/practice/chosetopic/topicpicture/topic_picture_page.dart';
import 'package:wow_english/practice/chosetopic/topicword/topic_word_page.dart';
import 'package:wow_english/practice/voicetopic/voicepicture/voice_pic_page.dart';
import 'package:wow_english/practice/voicetopic/voiceword/voice_word_page.dart';
import 'package:wow_english/repeatafter/repeat_after_page.dart';
import 'package:wow_english/shop/exchane/exchange_lesson_page.dart';
import 'package:wow_english/shop/exchangelist/exchange_lesson_list_page.dart';
import 'package:wow_english/shop/home/shop_home_page.dart';
import 'package:wow_english/tab/tab_page.dart';
import 'package:wow_english/user/user_page.dart';
import 'package:wow_english/video/lookvideo/look_video_page.dart';
import 'package:wow_english/voiceanswer/voice_answer_page.dart';


class AppRouteName {
  static const String splash = 'splash';
  static const String login = 'login';
  static const String home = 'home';
  static const String fogPwd = 'fogPwd';
  static const String setPwd = 'setPwd';
  static const String webView = 'webView';
  static const String lesson = 'lesson';
  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 topicWord = 'topicWord';
  static const String voicePic = 'voicePic';
  static const String voiceWord = 'voiceWord';
  static const String voiceAnswer = 'voiceAnswer';
  static const String user = 'user';
  static const String lookVideo = 'lookVideo';
  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:
        return CupertinoPageRoute(builder: (_) =>  const LoginPage());
      case AppRouteName.home:
        return CupertinoPageRoute(builder: (_) =>  const HomePage());
      case AppRouteName.fogPwd:
        return CupertinoPageRoute(builder: (_) =>  const ForgetPasswordHomePage());
      case AppRouteName.lesson:
        return CupertinoPageRoute(builder: (_) =>  const LessonPage());
      case AppRouteName.listen:
        return CupertinoPageRoute(builder: (_) =>  const ListenPage());
      case AppRouteName.shop:
        return CupertinoPageRoute(builder: (_) =>  const ShopHomePage());
      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.topicPic:
        return CupertinoPageRoute(builder: (_) =>  const TopicPicturePage());
      case AppRouteName.topicWord:
        return CupertinoPageRoute(builder: (_) =>  const TopicWordPage());
      case AppRouteName.voicePic:
        return CupertinoPageRoute(builder: (_) =>  const VoicePicPage());
      case AppRouteName.voiceWord:
        return CupertinoPageRoute(builder: (_) =>  const VoiceWordPage());
      case AppRouteName.voiceAnswer:
        return CupertinoPageRoute(builder: (_) =>  const VoiceAnswerPage());
      case AppRouteName.lookVideo:
        return CupertinoPageRoute(builder: (_) =>  const LookVideoPage());
      case AppRouteName.setPwd:
        final phoneNum = (settings.arguments as Map)['phoneNumber'] as String;
        return CupertinoPageRoute(builder: (_) =>  SetPassWordPage(phoneNum: phoneNum));
      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.tab:
        return PageRouteBuilder(
            opaque: false,
            settings: const RouteSettings(name: AppRouteName.tab),
            transitionDuration: Duration.zero,
            pageBuilder: (_,__,___) => const TabPage(),
            transitionsBuilder: (_, __, ___, child) => child);
      default:
        return CupertinoPageRoute(
            builder: (_) => Scaffold(
                body: Center(
                    child: Text('No route defined for ${settings.name}'))));
    }
  }
}