Flutter 默认路由的配置及传参
通常入口组件MyApp的格式如下:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: const Home(),
onGenerateRoute: Routes.generateRoute,
onUnknownRoute: (_) {
return MaterialPageRoute(builder: (BuildContext context) {
return const NotFoundPage();
});
},
);
}
}
home
入口组件,默认对应命名路由的 '/' ,所以如果定义了home,命名路由中就不要定义 '/' 了。
routes
命名路由列表,格式如下所示:
return {
'/error/404': (BuildContext context) => const NotFoundPage(),
'/home': (BuildContext context, {arguments}) => Home(),
};
如果要进行路由拦截和传参,就不要传入此参数,因为传入此参数后,onGenerateRoute
不会执行。
onUnknownRoute
未知路由的处理方法,通常用于返回未找到页面的组件。
onGenerateRoute
关键属性,用于路由拦截和传参
///路由配置
static Map<String, WidgetBuilder> initRoutes() {
return {
'/error/404': (BuildContext context) => const NotFoundPage(),
'/home': (BuildContext context, {arguments}) => const Home(),
'/login': (BuildContext context) => const LoginPage()
};
}
///路由跳转拦截,支持传参
static Route<dynamic>? generateRoute(RouteSettings settings) {
final String name = settings.name ?? '';
Map<String, WidgetBuilder> routes = initRoutes();
final Function? builder = routes[name] as Function;
if (builder != null) {
if (settings.arguments != null) {
return MaterialPageRoute(builder: (BuildContext context) => builder(context, arguments: settings.arguments),settings: settings);//此处将参数传递给ModalRoute
} else {
return MaterialPageRoute(builder: (BuildContext context) => builder(context));
}
}
}
路由跳转时,传递参数:
Navigator.pushNamed(context, '/home', arguments: {"name": "张三"});
获取传递过来的参数:
Widget build(BuildContext context) {
Map? arguments = ModalRoute.of(context)?.settings.arguments as Map;
return Scaffold(
appBar: AppBar(
),
body: Text(arguments['name']),// 张三
);
}
本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/15538531.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)