1.基于注册的路由器或者是[MaterialApp]注册的路由器
/// [context]上下文
/// [pageName]页面名称
/// [params]参数
/// [replace] 是否将当前页面从路由中移除
/// [clear] 是否清除
Future<dynamic> open(BuildContext context, String pageName,
{Object? params, bool replace = false, bool clear = false}) {
var route = router(RouteSettings(name: pageName, arguments: params));
if (route != null) {
if (clear || pageName == homePageName) {
return Navigator.pushAndRemoveUntil(context, route, (route) => false);
} else if (replace) {
return Navigator.pushReplacement(context, route);
} else {
return Navigator.push(context, route);
}
} else {
if (pageName == homePageName) {
return Navigator.pushNamedAndRemoveUntil(
context, pageName, (route) => false,
arguments: params);
} else if (replace) {
return Navigator.pushReplacementNamed(context, pageName,
arguments: params);
} else {
return Navigator.pushNamed(context, pageName, arguments: params);
}
}
}
2.未注册的页面路由要跳转的Widget
/// [context]上下文
/// [page]页面对象
/// [params]参数
/// [replace] 是否将当前页面从路由中移除
Future<dynamic> openPage(BuildContext context, Widget page,
{Object? params, bool replace = false, bool clear = false}) {
var route = MaterialPageRoute(
builder: (context) => page, settings: RouteSettings(arguments: params));
if (clear) {
return Navigator.pushAndRemoveUntil(context, route, (route) => false);
} else if (replace) {
return Navigator.pushReplacement(context, route);
} else {
return Navigator.push(context, route);
}
}
3.关闭功能、包括 页面以及弹出窗
void close(BuildContext context, [dynamic params]) {
if (Navigator.canPop(context)) {
Navigator.pop(context, params);
}
}
4.获取路由跳转获取页面参数
T? getPageParam<T>(BuildContext context) {
var params = ModalRoute.of(context)?.settings.arguments;
return params == null ? null : params as T;
}