route.dart 1.97 KB
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:wow_english/app/splash_page.dart';
import 'package:wow_english/home/home_page.dart';
import 'package:wow_english/login/forget_password_page.dart';
import 'package:wow_english/login/login_page.dart';
import 'package:wow_english/tab/tab_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 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:
        final phoneNum = (settings.arguments as Map)['phoneNumber'] as String;
        return CupertinoPageRoute(builder: (_) =>  ForgetPassWordPage(phoneNum: phoneNum));
      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}'))));
    }
  }
}