You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.7 KiB
Dart
99 lines
2.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:penguin_flutter_sample/routes/routes.dart';
|
|
import 'package:penguin_flutter_sample/ui/home/home_page.dart';
|
|
|
|
class AppRouter {
|
|
const AppRouter._();
|
|
|
|
static final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
|
|
|
/// The name of the route that loads on app startup
|
|
static const String initialRoute = Routes.splashScreen;
|
|
|
|
static Route<dynamic>? generateRoute(RouteSettings settings) {
|
|
switch (settings.name) {
|
|
case Routes.splashScreen:
|
|
return _setPage(
|
|
page: const HomePage(),
|
|
settings: settings,
|
|
);
|
|
default:
|
|
return _errorRoute();
|
|
}
|
|
}
|
|
|
|
static Route<dynamic> _errorRoute() {
|
|
return MaterialPageRoute<dynamic>(
|
|
builder: (_) => Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text('Unknown Route'),
|
|
),
|
|
body: const Center(
|
|
child: Text('Unknown Route'),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
static MaterialPageRoute<dynamic> _setPage({
|
|
required Widget page,
|
|
required RouteSettings settings,
|
|
}) {
|
|
return MaterialPageRoute<dynamic>(
|
|
builder: (_) => page,
|
|
settings: settings,
|
|
);
|
|
}
|
|
|
|
static Future<dynamic> pushNamed(String routeName, {dynamic args}) {
|
|
return navigatorKey.currentState!.pushNamed(routeName, arguments: args);
|
|
}
|
|
|
|
static Future<dynamic> pushNamedAndRemoveUntil(
|
|
String routeName,
|
|
String untilRoute, {
|
|
dynamic args,
|
|
}) {
|
|
return navigatorKey.currentState!.pushNamedAndRemoveUntil(
|
|
routeName,
|
|
ModalRoute.withName(untilRoute),
|
|
arguments: args,
|
|
);
|
|
}
|
|
|
|
static Future<dynamic> pushReplacement(String routeName, {dynamic args}) {
|
|
return navigatorKey.currentState!.pushReplacementNamed(routeName, arguments: args);
|
|
}
|
|
|
|
static Future<dynamic> popAndPushNamed(String routeName, {dynamic args}) {
|
|
return navigatorKey.currentState!.popAndPushNamed(routeName, arguments: args);
|
|
}
|
|
|
|
static Future<dynamic> popAndPushNamedWithTransition(
|
|
String routeName, {
|
|
dynamic args,
|
|
}) {
|
|
return navigatorKey.currentState!.popAndPushNamed(routeName, arguments: args);
|
|
}
|
|
|
|
static Future<void> pop([dynamic result]) async {
|
|
navigatorKey.currentState!.pop(result);
|
|
}
|
|
|
|
static void popUntil(String routeName) {
|
|
navigatorKey.currentState!.popUntil(ModalRoute.withName(routeName));
|
|
}
|
|
|
|
static void popUntilRoot() {
|
|
navigatorKey.currentState!.popUntil(ModalRoute.withName(initialRoute));
|
|
}
|
|
|
|
static Future<dynamic> startNewRoute(String routeName, {dynamic args}) {
|
|
return navigatorKey.currentState!.pushNamedAndRemoveUntil(
|
|
routeName,
|
|
(Route<dynamic> route) => false,
|
|
arguments: args,
|
|
);
|
|
}
|
|
}
|