为何在StatefulWidget中无法直接访问title属性,必须使用widget.title?
为什么State类里必须用widget.title访问StatefulWidget的属性?
先看你写的代码:
StatefulWidget定义
class MyHomePage extends StatefulWidget { String? title='hello'; MyHomePage({ this.title, }) ; @override State<MyHomePage> createState() => _MyHomePageState(); }
对应的State类
class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title!), ), // ... 其他代码 ); } }
原因核心就两点:
- 类的隔离性:
title是MyHomePage这个StatefulWidget类的成员变量,而_MyHomePageState是完全独立的另一个类,它本身并没有title属性,自然不能直接访问。 - State的内置关联属性:Flutter的
State<T>类里自带了一个widget属性,它的类型就是你指定的泛型T(这里就是MyHomePage),专门用来指向和当前State对象绑定的那个StatefulWidget实例。所以必须通过widget.title才能拿到对应Widget实例里的title值。
另外补充个细节:StatefulWidget可能会因为父组件重建而被重新创建,但State对象有时候会被复用(比如用GlobalKey),这时候widget属性会自动更新为最新的StatefulWidget实例,确保你拿到的永远是最新的属性值。
内容的提问来源于stack exchange,提问作者LeThanhDat
相关产品推荐
相关产品推荐

