了解Flutter中StatefulWidget的用法

时间:2018-06-19 20:22:29

标签: dart flutter statefulwidget

我刚刚开始摆弄Flutter,我不明白StatefulWidget的意义。所有这些小部件都可以在教程等我见过的任何地方执行,都实例化State<MyWidget>并让其完成所有工作。
例如,来自this(官方)教程:

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

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

谢谢。

3 个答案:

答案 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。有状态小部件用于小部件的值(状态)时改变或具有可变的状态,可以随时间变化。

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

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

一些有状态小部件的示例

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

  • 收音机:如果未选中,请保持其状态。

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