了解 Flutter 中 StatefulWidget 的使用

Posted

技术标签:

【中文标题】了解 Flutter 中 StatefulWidget 的使用【英文标题】:Understanding the use of StatefulWidget in Flutter 【发布时间】:2018-11-28 21:17:49 【问题描述】:

我刚开始玩 Flutter,我无法理解 StatefulWidget 的意思。我在教程等中看到的所有这些小部件都在实例化 State<MyWidget> 并让它完成所有工作。 比如来自this(官方)教程:

class RandomWords extends StatefulWidget 
  @override
  createState() => new RandomWordsState();

class RandomWordsState extends State<RandomWords> 
  ...

我想知道的是为什么要这样构建以及外部类的用途是什么(在我的示例中为RandomWords)。

提前致谢。

【问题讨论】:

【参考方案1】:

“外部类”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's 也可以重建,即当它的父级正在重建时,但所有状态都丢失并且没有数据保留。这就是State 的用途。

【讨论】:

【参考方案2】:

在 Flutter 构建 UI 时,我们主要使用两种类型的小部件,StatelessWidgetStatefulWidget。 有状态小部件用于当小部件的值(状态)变化或具有可随时间变化的可变状态。

一些重要的有状态的属性小部件

有状态小部件是可变的。它跟踪状态。 有状态小部件的 build() 方法被多次调用。 它会在其生命周期内多次重建。

一些有状态的示例小部件

复选框:无论复选框是否被选中,都保持其状态。

Radio:无论是否被选中,都保持其状态。

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 对象。

【讨论】:

【参考方案3】:

据我了解,这是为了保存有关小部件的信息。因此,您每次要保存变量或其他内容时都执行 setState 。请参阅有关在 Flutter 中添加交互性的教程。

【讨论】:

为什么我需要两个类?【参考方案4】:

无状态小部件就像恒定显示, 只喜欢展示一些东西 有状态用于可变显示,我的意思是如果该屏幕中的任何值必须更改,那么它应该是有状态的

【讨论】:

以上是关于了解 Flutter 中 StatefulWidget 的使用的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Hooks — 快速了解

Flutter 详解(八深入了解布局)

了解 Flutter 开发者们的 IDE 使用情况

了解 Flutter 开发者们的 IDE 使用情况

需要帮助了解 flutter_bloc 如何注入 bloc

Flutter了解之手势