6

我目前正在学习 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) {
    ...
  }
}

我认为后者使来源变得简单。但我不知道他们为什么使用前一种风格?

4

1 回答 1

12

之所以StatefulWidget使用单独的类并且在其主体中State没有方法是因为 a 中的所有字段都是不可变的,这包括它的所有子类。buildWidget

您可能已经注意到其中定义StatelessWidget了它的build和其他相关的方法,但这是可能的,因为它的性质StatelessWidget是完全使用提供的信息呈现的,并且不期望它的State.

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

于 2019-08-16T07:13:12.847 回答