我刚刚开始摆弄Flutter,我不明白StatefulWidget
的意义。所有这些小部件都可以在教程等我见过的任何地方执行,都实例化State<MyWidget>
并让其完成所有工作。
例如,来自this(官方)教程:
class RandomWords extends StatefulWidget {
@override
createState() => new RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
...
}
我想知道的是为什么要这样构建,以及外部类的用途是什么(在我的示例RandomWords
中)。
谢谢。
答案 0 :(得分:2)
“外部类” 为 final
,每个小部件均为final
。这意味着其所有属性也必须为 final
:
class RandomWords extends StatefulWidget {
final String name;
@override
createState() => new RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
String name;
@override
void initState() {
name = widget.name;
super.initState();
}
@override
Widget build(BuildContext context) => Text(name);
void someMethod() {
print(widget.name);
setState(() => name = 'new name');
}
}
可以从 State
中访问 StatefulWidget
的所有字段,显然不能< / strong>更改了,因为它们是final
。
State
可以更改数据。 setState
将执行其回调,然后重建 State
(带有新数据)。
StatelessWidget
也可以重建,即在重建其父项时,所有状态都会丢失,并且不会保留任何数据。这就是State
的用途。
答案 1 :(得分:0)
据我了解,这是保存有关小部件的信息。因此,每次要保存变量或其他内容时,都可以实现setState。请参阅有关在Flutter中添加交互性的教程。
答案 2 :(得分:0)
在Flutter中构建UI时,我们使用两种主要类型的小部件: StatelessWidget 和 StatefulWidget。有状态小部件用于小部件的值(状态)时改变或具有可变的状态,可以随时间变化。
重要的有状态小部件的属性
一些有状态小部件的示例
复选框:无论是否选中复选框,都保持其状态。
收音机:如果未选中,请保持其状态。
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
return Container();
}
}
有状态窗口小部件用两个类声明,即 StatefulWidget类和 State类。当窗口小部件的配置更改时,将重建StatefulWidget类,但是State类可以保留(保留)。
例如,当状态更改时,将重新构建窗口小部件。如果将StatefulWidget从树中删除,然后在一段时间后重新插入树中,则会创建一个新的State对象。