我可以单步定义状态吗
Can I define the State in single step
在Flutter
中,需要分两步定义StatefulWidget
小部件,首先定义一个class扩展StatefulWidget
,如:
class Counter extends StatefulWidget {
@override
_CounterState createState() => new _CounterState();
}
然后 class 扩展了前一个的 State
,例如:
class _CounterState extends State<Counter> {
int _counter = 0;
void _increment() {
setState(() {
++_counter;
});
}
@override
Widget build(BuildContext context) {
return new Row(children: <Widget>[
...
]);
}
}
有没有一种方法可以在 StatefulWidget
class 中定义 createState()
而无需定义单独的 State
class
我试着从这里开始,但不知道下一步该做什么
class Counter extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return ????
}
}
简短的回答是:不,你不能。
但是为什么呢?其实理解起来相当简单。
在 flutter 中,每次你想使用你做的小部件 new MyWidget(...)
。请注意 new 这个词。这意味着每次更新小部件树时都会实例化一个新对象。但这也意味着每次更新时小部件都会得到很好的 硬重置 。阻止您在小部件中存储任何可变数据。
但是,有状态小部件如何工作?
看到第一部分的 createState
了吗?在您的小部件的第一次实例化时,它将被调用。
然后它将被缓存在较低层之一中。
这样下次您实例化小部件时,状态将从缓存中获取,从而保留其自定义值。
在Flutter
中,需要分两步定义StatefulWidget
小部件,首先定义一个class扩展StatefulWidget
,如:
class Counter extends StatefulWidget {
@override
_CounterState createState() => new _CounterState();
}
然后 class 扩展了前一个的 State
,例如:
class _CounterState extends State<Counter> {
int _counter = 0;
void _increment() {
setState(() {
++_counter;
});
}
@override
Widget build(BuildContext context) {
return new Row(children: <Widget>[
...
]);
}
}
有没有一种方法可以在 StatefulWidget
class 中定义 createState()
而无需定义单独的 State
class
我试着从这里开始,但不知道下一步该做什么
class Counter extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return ????
}
}
简短的回答是:不,你不能。
但是为什么呢?其实理解起来相当简单。
在 flutter 中,每次你想使用你做的小部件 new MyWidget(...)
。请注意 new 这个词。这意味着每次更新小部件树时都会实例化一个新对象。但这也意味着每次更新时小部件都会得到很好的 硬重置 。阻止您在小部件中存储任何可变数据。
但是,有状态小部件如何工作?
看到第一部分的 createState
了吗?在您的小部件的第一次实例化时,它将被调用。
然后它将被缓存在较低层之一中。
这样下次您实例化小部件时,状态将从缓存中获取,从而保留其自定义值。