如何在Flutter的StatefulWidget状态类中访问路由传递的对象
在Flutter StatefulWidget的State中访问传递的参数
嘿,这个问题其实很简单,你直接利用State类内置的widget属性就能访问到传递给MyTestPage的foo对象啦!
具体做法:
在你的MyTestPageState里,不需要额外定义Foo foo;(除非你需要创建一个本地副本用来修改),直接通过widget.foo就能获取到父Widget传递过来的那个Foo实例。
比如在initState里用它来查询Firebase:
@override void initState() { super.initState(); // 直接访问传递过来的foo对象,用它的属性做Firebase查询条件 _fetchFirebaseData(widget.foo.documentId); } void _fetchFirebaseData(String docId) { // 这里写你的Firebase查询逻辑 FirebaseFirestore.instance.collection('foos').doc(docId).get().then((snapshot) { // 处理查询结果 }); }
在build方法里展示数据也一样方便:
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(widget.foo.title)), body: Padding( padding: const EdgeInsets.all(16.0), child: Text(widget.foo.description), ), ); }
为什么能这么用?
每个State类都和对应的StatefulWidget实例绑定在一起,Flutter会自动给State提供一个widget属性,指向这个绑定的StatefulWidget对象,所以你可以直接通过它访问StatefulWidget里的所有公开属性,包括你传递的foo。
如果你之后需要在State里修改这个对象的本地副本(比如做UI状态更新),那可以在State里定义Foo foo;,然后在initState或者didChangeDependencies里把widget.foo赋值给它,之后操作这个本地变量即可。
内容的提问来源于stack exchange,提问作者RyGuy
相关产品推荐
相关产品推荐

