Flutter中如何通过Navigator将变量_id传递至另一个类?
嘿,这事儿很简单,咱们直接用构造函数传参就搞定了,这也是Flutter里最常用的页面传参方式,分两步走:
第一步:修改目标页面(Search类),让它能接收参数
先给你的Search类加一个接收id的构造函数,这样它就能拿到从之前页面传过来的值了:
class Search extends StatelessWidget { // 声明要接收的id变量,用final保证不可变 final int id; // 构造函数,用required标记这个参数是必须传递的(空安全要求) const Search({Key? key, required this.id}) : super(key: key); @override Widget build(BuildContext context) { // 在这里你就可以直接用this.id来使用传递过来的_id啦 return Scaffold( appBar: AppBar(title: const Text('Search Page')), body: Center( child: Text('从上个页面传来的ID是: $id'), ), ); } }
第二步:在跳转的时候把_id传进去
回到你原来的代码里,修改Navigator.push的部分,在创建Search实例的时候把_id传进去就行:
// 原来的跳转代码 Navigator.push( context, new MaterialPageRoute( builder: (context) => new Search ())); // 修改后的代码 Navigator.push( context, MaterialPageRoute( builder: (context) => Search(id: _id), // 这里把_id作为参数传入 ), );
额外小提醒
- 如果你的
_id有可能是null的话,记得把Search类里的id类型改成int?,同时构造函数里的required可以根据业务需求调整,比如改成this.id(允许空值)或者保留required但确保_id赋值后不为空。 - 要是以后需要传递更复杂的数据(比如自定义对象),这种构造函数传参的方式同样适用,只需要把参数类型换成对应的对象即可。
这样一来,当你点击CHECK IN按钮跳转后,Search页面就能正常获取到你之前赋值的_id啦!
内容的提问来源于stack exchange,提问作者heyr
相关产品推荐
相关产品推荐

