我可以一步定义状态吗?

时间:2018-03-02 08:09:57

标签: flutter

Flutter中,StatefulWidget窗口小部件需要分两步定义,首先定义一个扩展StatefulWidget的类:

class Counter extends StatefulWidget {
  @override
  _CounterState createState() => new _CounterState();
}

然后是一个扩展前一个State的类,如:

class _CounterState extends State<Counter> {
  int _counter = 0;

  void _increment() {
    setState(() {
      ++_counter;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Row(children: <Widget>[
      ...
    ]);
  }
}

我没有办法在createState()类中定义StatefulWidget,而无需定义单独的State

我尝试从此开始,但不知道下一步该怎么做

class Counter extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return ????
  }
}

1 个答案:

答案 0 :(得分:3)

简短的回答是:不,你不能。

但为什么呢?事实上,理解起来相当简单。 在颤动中,每次你想要使用小工具new MyWidget(...)。注意单词 new 。这意味着每次更新窗口小部件树时都会实例化一个新对象。但这也意味着每次更新时,小部件都会获得一个很好的硬重置。防止您在窗口小部件中存储任何可变数据。

但是,状态窗口小部件如何工作?

看到第一部分的createState?在小部件的第一个实例化中,它将被调用。 然后它将缓存在下层之一。

因此,下次实例化窗口小部件时,将从缓存中获取状态,从而保留其自定义值。