cims_apps/lib/core/route/route.dart
2024-02-05 11:18:08 +07:00

63 lines
1.6 KiB
Dart

import 'package:cims_apps/features/splash_screen.dart';
import 'package:cims_apps/routes/all_route.dart';
import 'package:flutter/material.dart';
enum RouteType { push, pushReplace, pushRemove }
const initialRoute = SplashScreen.routeName;
Route<dynamic>? generateRoutes(RouteSettings settings) {
AllRoute().key();
return MaterialPageRoute(
builder: (context) =>
AllRoute.allRouteMap[settings.name]?.clazz ?? const SizedBox(),
settings: settings);
}
Future routePush(
BuildContext context, {
RouteType? routeType,
Object? arguments,
required Widget page,
}) {
var pageRoute = MaterialPageRoute(
builder: (context) => page,
settings: RouteSettings(name: "/${page.toString()}", arguments: arguments),
);
if (routeType == RouteType.pushReplace) {
return Navigator.pushReplacement(
context,
pageRoute,
result: ModalRoute.of(context)?.currentResult,
);
}
if (routeType == RouteType.pushRemove) {
return Navigator.of(context).pushAndRemoveUntil(
pageRoute,
(route) => false,
);
}
return Navigator.push(context, pageRoute);
}
Future routeNamed(
BuildContext context, {
RouteType? routeType,
Object? arguments,
required String routeName,
}) {
if (routeType == RouteType.pushReplace) {
return Navigator.pushReplacementNamed(context, routeName,
arguments: arguments, result: ModalRoute.of(context)?.currentResult);
}
if (routeType == RouteType.pushRemove) {
return Navigator.of(context).pushNamedAndRemoveUntil(
routeName,
(route) => false,
arguments: arguments,
);
}
return Navigator.pushNamed(context, routeName);
}