gpt4 book ai didi

generics - 为什么有状态的小部件在flutter中定义为两个类?

转载 作者:IT老高 更新时间:2023-10-28 12:29:37 26 4
gpt4 key购买 nike

我是 Flutter/dart 的新手,所以当我尝试制作应用程序时,我也在尝试理解为什么事情会以某种方式出现。在 flutter 文档中有一个有状态小部件的示例代码,如下所示:

class YellowBird extends StatefulWidget {
const YellowBird({ Key key }) : super(key: key);

@override
_YellowBirdState createState() => new _YellowBirdState();
}

class _YellowBirdState extends State<YellowBird> {
@override
Widget build(BuildContext context) {
return new Container(color: const Color(0xFFFFE306));
}
}

问题:

  1. 为什么它们被定义为两个类而不是一个类?我猜 State 类可以在其他地方使用,所以最好分开。

  2. 据我了解,createState() 函数返回 State 类型的对象,因此使用 _YellowBirdState extends State 是有意义的,但是为什么YellowBird会传入State的泛型类呢?我猜这与 Yellowbird 扩展 StatefulWidget 类有关,但不太确定。

最佳答案

有多种原因:

  • 小部件是不可变的。从 StatefulWidget延长 Widget因此它也必须是不可变的。将声明分成两个类允许 StatefulWidget是不可变的,State是可变的。

  • 小部件使用语法 new MyWidget() 进行实例化.如果我们将两个类合并为一个,new MyWidget()每次父更新时都会重置状态的所有属性。

至于class _MyStatefulState extends State<MyStateful>的解释

那是因为 State类可以访问它的Stateful部分使用 this.widget field 。泛型在这里使该类型的字段 MyStateful而不仅仅是StatefulWidget .您可能想访问 MyStateful属性。

关于generics - 为什么有状态的小部件在flutter中定义为两个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50612237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com