演示示例具有以下代码,这显然是 Flutter 应用程序的典型代码:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {...}
}
我很好,我想,MyHomePage
覆盖 StatefulWidget
createState
方法。这有点尴尬,但到底是什么?甚至取决于 State
子类。很好。
但是有了 State
子类转身依赖MyHomePage
?!我无法用我相当丰富的智慧来解决这个问题。
所以也许我不清楚是什么State<MyHomePage>
是/确实。比如说,Map<String, Object>
意思很明确:将一个字符串与一个对象相关联。有人可以解释一下吗?如果您可以包括一些关于需要状态对象来扩展小部件的内容,我会很乐意阅读。
最佳答案
这是为了使小部件属性访问更容易。 当你这样做的时候
new MyStatefulWidget(foo: 42, bar: "string")
那么您很可能想从您的State
访问foo
/bar
。
如果没有这样的语法,您必须键入自定义 State
构造函数并将所有 StatefulWidget
子类属性传递给 createState 内的
。基本上你会有:State
子类
class MyStatefulWidget extends StatefulWidget {
final int foo;
MyStatefulWidget({this.foo});
@override
MyStatefulWidgetState createState() => MyStatefulWidgetState(foo: foo);
}
class MyStatefulWidgetState extends State<MyStatefulWidget> {
final int foo;
MyStatefulWidgetState({this.foo});
@override
Widget build(BuildContext context) {
return Container(
);
}
}
无聊。您必须将 StatefulWidget
子类的所有字段编写两次。
使用当前语法;你不必这样做。您可以使用 widget
字段直接访问 State
中当前实例化的小部件的所有属性。
class MyStatefulWidgetState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
print(widget.foo);
return Container();
}
}
关于dart - 为什么 Flutter State 对象需要 Widget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51872999/