Flutter:State类:为什么不在调用setState方法之前而不是在setState方法中更改状态变量呢



通过示例指定问题:如果你创建了一个新的Flutter项目,你会得到默认的计数器应用程序,其中_counter变量在State类的setState方法中递增:

class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
....

但以下代码也很好用:

class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
_counter++;
setState(() {});
}
....

以下是DartPad中一个工作示例的链接。setState方法的文件规定

提供的回调将立即同步调用。

和。。。

调用setState会通知框架,此对象的内部状态发生了变化,可能会影响子树中的用户界面,从而导致框架计划为此state对象进行构建。

根据这个定义,我认为没有理由不在调用setState方法之前更改状态变量,然后向setState提供一个空回调。是否存在这种方法不起作用的情况,或者或多或少";只是";品味问题(可读性、干净的编码…(?

你说得绝对正确。我不知道确切的原因是什么,但我会尽力解释我的想法。

setState目前有一个目的。它确保您同步更新状态。参见实施

例如

Future.delayed(Duration(seconds: 3), (){
// Updated State variables
});
setState((){});

此代码可能不起作用,因为小部件将在变量更改之前重新生成。


我并不是说不能异步更改状态,也不是说仔细的编码不起作用。这只是对初学者的一次初步检查。

我认为Flutter保留了这种方法,以更好地应对框架变化带来的风险。现在可能不需要回调,但在未来,框架可能需要包括需要这种方法的某些功能。

无论真正的原因是什么,只有Flutter团队才能知道。

最新更新