4

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

class RandomWords extends StatefulWidget {
  @override
  createState() => new RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
  ...
}

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

提前致谢。

4

4 回答 4

5

外部类”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所有字段中,显然不会更改,因为它们是.StatefulWidgetfinal

State但是,可以更改数据setState将执行其回调,然后重建State使用新数据)。

StatelessWidget也可以重建,即当它的父级正在重建时,但所有状态都丢失并且没有数据被保留。这就是State's 的用途。

于 2018-06-19T20:50:08.397 回答
1

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

于 2020-07-27T03:18:22.467 回答
0

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

于 2018-06-19T20:47:40.210 回答
0

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

于 2021-12-31T23:44:50.057 回答