我今天才开始尝试Flutter。我正在关注官方教程:https://flutter.dev/docs/development/ui/interactive(此问题涉及步骤3)
我了解有状态小部件的概念以及对setState()的需求,但我不了解其参数(功能)的重点。我们为什么要传递一个函数呢? setState不能是无参数的,然后我们只需在调用setState之前就将状态更改代码(我们将放置在该参数函数上的代码)放进去?
所以基本上我的问题是:两者之间有什么区别
A)setState((){myCounter ++;});
和
B)myCounter ++; setState((){});
?
Obs:在上面链接的教程中,如果我以任何一种方式执行,结果都是(或似乎是)相同。
答案 0 :(得分:0)
这里提供了回调函数,以确保对模型所做的更改是同步的,并且只应设置UI所需的内容。 这样可以确保在框架刷新UI之前已对更改进行了设置,因为您无法对回调执行异步工作,并且结果是可以预期的。
如果必须进行大量计算,则应在调用setState之前进行。
在您的示例中,它是相同的,因为它只是一个简单的变量增量,但是在实践中,如果您有繁重的操作或异步操作并希望运行这些操作。如果允许,回调中的内容可能会对性能产生影响。
查看官方文档以获取更多示例:https://api.flutter.dev/flutter/widgets/State/setState.html
答案 1 :(得分:0)
我也有同样的疑问,我查了setState
的代码,仍然没有找到方法参数的特殊用法。所以我觉得setState
方法参数的设计不合理,让setState
做一个无参数函数比较好理解:
myCounter++;
setState();