route.dart
1.57 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
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:wow_english/app/splash_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 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 title = (settings.arguments as Map)['title'] as String;
return CupertinoPageRoute(builder: (_) => LoginPage(title: title));
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}'))));
}
}
}