dart - 理解 Flutter 中 StatefulWidget 的使用
问题描述
我刚刚开始摆弄 Flutter,我无法理解StatefulWidget
. 我在教程等中看到的所有这些小部件都会实例化 aState<MyWidget>
并让它完成所有工作。
例如,来自这个(官方)教程:
class RandomWords extends StatefulWidget {
@override
createState() => new RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
...
}
我想知道的是为什么它会这样构建以及外部类的用途是什么(在我的示例中RandomWords
)。
提前致谢。
解决方案
“外部类”是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
final
State
但是,可以更改数据。setState
将执行其回调,然后重建(State
使用新数据)。
StatelessWidget
也可以重建,即当它的父级正在重建时,但所有状态都丢失并且没有数据被保留。这就是State
's 的用途。
推荐阅读
- python - 在控制台中打印数据时,熊猫数据框仅显示外列
- python - 如何在熊猫数据框中展平数组
- python - Pandas 使用元组和通配符进行过滤
- asp.net-core - 如何验证 ASP.NET Core DI 中的所有注册类型?
- flutter - 如何在颤动中更改时间选择器的标题文本主题
- php - League\Monga 更新查询示例
- excel - VBA代码将工作簿中的每个工作表打印为合法大小
- java - org.openqa.selenium.TimeoutException:预期条件失败:等待 By.xpath 定位的元素的可见性:
- twitter-bootstrap-3 - Bootstrap Accordion:subcollapse 应在关闭 supercollapse 时关闭
- windows - 在编辑器打开文件夹之前,Unity 不会通过脚本创建 apk