我对flutter/dart还不熟悉,所以在try 制作应用程序的同时,我也试图理解为什么事情会以某种方式发展.在Flatter文档中,有一个有状态小部件的示例代码,如图所示:

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类可以使用this.widget字段访问它的Stateful部分. 泛型在这里是为了使字段类型为MyStateful,而不仅仅是StatefulWidget.因为您可能想要访问MyStateful个属性.

Flutter相关问答推荐

飘动的文本用/字符绕转

Flutter—如何在Riverpod中使用全类状态?

如何等待抖动S定时器.定期取消?

如何在Firebase项目中更改包名称和包ID

Android NFC未收到空的NFC标签

为什么Riverpod生成器在这种情况下不生成AsyncNotiator?

如何将Will POP示波器转换为POP数据抖动的POP示波器

如何从RealmResults获取Flutter Flutter 流?

Firebase WHERE过滤器在日期字段中不起作用

上传的图像不能在FireBase中预览.S档案类型为空白,摆动

如何在flutter中更改showModalBottomSheet小部件中CheckboxListTile小部件的值?

Flutter:使用不包含导航器的上下文请求导航器操作

找不到任何与 com.google.firebase:firebase-sessions:[15.0.0, 16.0.0) 匹配的版本

Flutter中如何实现带有变化图标的浮动操作按钮?

Flutter: pie_chart 插件动画滚动问题

无状态小部件被奇怪地重建

Flutter 自定义对齐

启动画面中的淡入淡出图像

如何在 flutter 的 onChanged(更改字符)处更改 TextField 边框 colored颜色 ?

CircleAvatar 在 ListTile 中领先