我正在学习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) {
...
}
}
我认为后者简化了源代码。但是我不知道他们为什么使用以前的样式?
答案 0 :(得分:0)
StatefulWidget
使用单独的State
类并且其主体内部没有 build
方法的原因是,Widget
内的所有字段是不可变的,并且包括其所有子类。
您可能已经注意到 StatelessWidget
具有其 build
及其内部定义的其他相关方法,但是由于其性质,这是可能的的 StatelessWidget
完全使用所提供的信息呈现,并且不希望其 State
将来有任何更改。
在 StatefulWidget
的情况下, State
信息在应用过程中偶尔会更改(或预期会更改),因此信息不适合存储在满足build
类条件(所有字段都是不变的)的最终字段( Widget
)中。这就是为什么引入 State
类的原因。您只需要覆盖 createState
函数,即可将定义的 State
附加到您的 StatefulWidget
,并让所有更改发生在单独的类中。