一、RouteUtils路由核心类
/*** 路由封装*/
class RouteUtils {RouteUtils._();static final navigatorKey = GlobalKey<NavigatorState>();// App 根节点Contextstatic BuildContext get context => navigatorKey.currentContext!;static NavigatorState get navigator => navigatorKey.currentState!;///普通动态跳转-->pagestatic Future push(BuildContext context,Widget page, {bool? fullscreenDialog,RouteSettings? settings,bool maintainState = true,}) {return Navigator.push(context,MaterialPageRoute(builder: (_) => page,fullscreenDialog: fullscreenDialog ?? false,settings: settings,maintainState: maintainState,));}//常规路由导航static Future pushForName(BuildContext context,String routeName, {Object? arguments,}) {return Navigator.pushNamed(context, routeName, arguments: arguments);}///白定义route动态跳转static Future pushForPageRoute(BuildContext context, Route route) {return Navigator.push(context, route);}//清空栈,只留目标页面static Future pushNamedAndRemoveUntil(BuildContext context,String name, {Object? arguments,}) {return Navigator.pushNamedAndRemoveUntil(context, name, (route) => false,arguments: arguments);}//清空栈,只留目标页面static Future pushAndRemoveUntil(BuildContext context,Widget page, {bool? fullscreenDialog,RouteSettings? settings,bool maintainState = true,}) {return Navigator.pushAndRemoveUntil(context,MaterialPageRoute(builder: (_) => page,fullscreenDialog: fullscreenDialog ?? false,settings: settings,maintainState: maintainState,),(route) => false);}//用新的路由替换当路由static Future pushReplacement(BuildContext context, Route route,{Object? result}) {return Navigator.pushReplacement(context, route, result: result);}//用新的路由替换当路由static Future pushReplacementNamed(BuildContext context,String name, {Object? result,Object? arguments,}) {return Navigator.pushReplacementNamed(context, name,arguments: arguments, result: result);}//关闭当前页面static void pop(BuildContext context) {Navigator.pop(context);}///关闭当前页面:包含返回值static void popOfData<T extends Object?>(BuildContext context, {T? data}) {Navigator.of(context).pop(data);}
}
二、Routes辅助类(可用可不用)
class Routes {static MaterialPageRoute _jumpRoutePage(Widget pageWidget, {RouteSettings? settings,bool maintainState = true,bool fullscreenDialog = false,bool allowSnapshotting = true,}) {return MaterialPageRoute(builder: (BuildContext context) {return pageWidget;},settings: settings,maintainState: maintainState,fullscreenDialog: fullscreenDialog,allowSnapshotting: allowSnapshotting);}
}
三、RoutePath路径配置类(可用可不用)
class RoutePath {static const String tabBarPage = "/";static const String webViewPage = "web_View";static const String loginUserPage = 'login_user';static const String loginRegisterUser = 'login_register_user';
}