问题重现
当在学习Flutter时,页面间传参是必须要学习的,我也不例外。因为最开始主要是上网搜索前人文章学习的,所以一旦文章有些时日了,很容易被误导。在下记录一些学习的过程和介绍一下Flutter的命名路由传参。
对了,非大神,大三小萌新一枚,如言论理解有不对请指出~
命名路由
命名路由传参在Flutter最初的版本中,命名路由是不能传递参数的,后来才支持了参数。但是一开始我并不知道这一回事儿,去四处搜索得到的结论基本是:命名路由即静态路由不可传参,但可以通过异步接收返回值。这就很鸡肋了。
但是翻到官方文档才发现其实从某一个版本开始,命名路由开始支持传递参数了。
命名路由
新建一个MD风格的App的时候,可以传入一个routes参数来定义路由。这里定义的路由是静态也就是命名路由。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Vince He',
debugShowCheckedModeBanner: false,
home: Nav(),
//路由列表
routes: {
"/login": (BuildContext context) => Login(),
"/register": (BuildContext context) => Register(),
},
);
}
}
复制代码
然后调用Navigator.pushNamed()
Navigator.pushNamed("/register", arguments: '我是传递参数');
复制代码
在Register这个页面就可以通过RouteSetting对象获取路由参数啦~
var args=ModalRoute.of(context).settings.arguments;
复制代码
然后就可以展示出来啦