为什么在StatefulWidget中未定义build方法?

时间:2019-08-16 02:30:51

标签: flutter statefulwidget

我正在学习Flutter。我试图深入研究Flutter Widget的生命周期,不知道为什么StatefulWidget是这样写的:

class Example extends StatefulWidget {
  @override
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  // initState
  // setState
  // ...
  @override
  Widget build(BuildContext build) {
    ...
  }
}

但不是:

class Example extends StatefulWidget {
  // initState
  // setState
  // ...
  @override
  Widget build(BuildContext build) {
    ...
  }
}

我认为后者简化了源代码。但是我不知道他们为什么使用以前的样式?

1 个答案:

答案 0 :(得分:0)

StatefulWidget使用单独的State类并且其主体内部没有 build 方法的原因是,Widget内的所有字段是不可变的,并且包括其所有子类。

您可能已经注意到 StatelessWidget 具有其 build 及其内部定义的其他相关方法,但是由于其性质,这是可能的的 StatelessWidget 完全使用所提供的信息呈现,并且不希望其 State 将来有任何更改。

StatefulWidget 的情况下, State 信息在应用过程中偶尔会更改(或预期会更改),因此信息不适合存储在满足build类条件(所有字段都是不变的)的最终字段( Widget )中。这就是为什么引入 State 类的原因。您只需要覆盖 createState 函数,即可将定义的 State 附加到您的 StatefulWidget ,并让所有更改发生在单独的类中。