我不熟悉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)); } }
问题:
为什么用两个类而不是一个类来定义它们?我猜State类可以在其他地方使用,所以最好拆分。
据我了解,该createState()函数返回一个类型的对象State,因此_YellowBirdState extends State有意义,但是为什么将其YellowBird传递给的泛型类State呢?我的猜测与Yellowbird扩展StatefulWidget类有关,但不确定。
createState()
State
_YellowBirdState extends State
YellowBird
Yellowbird
StatefulWidget
有多种原因:
小部件是不可变的。由于StatefulWidget扩展Widget,因此它也必须是不变的。将声明分为两个类可以使它们既StatefulWidget不变又 State可变。
Widget
使用语法实例化窗口小部件new MyWidget()。如果我们将两个类合并为一个,new MyWidget()则每次其父级更新时,都会重置该状态的所有属性。
new MyWidget()
至于解释 class _MyStatefulState extends State<MyStateful>
class _MyStatefulState extends State<MyStateful>
那是因为State该类可以Stateful使用该this.widget字段访问它的一部分。泛型在这里使该类型的字段MyStateful而不是just StatefulWidget。您可能要访问MyStateful属性。
Stateful
this.widget
MyStateful