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

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,
);
}
}