Flutter 颤振-设定状态法参数使用

Flutter 颤振-设定状态法参数使用,flutter,Flutter,我今天刚开始尝试颤振。我遵循官方教程:(这个问题涉及第3步) 我理解有状态小部件的概念以及对setState()的需求,但我不理解其参数(函数)的意义。为什么我们要传递一个函数给它?setState不能是无参数的吗?然后我们只需在调用setState之前将状态更改代码(我们将在该参数函数上添加)放在正确的位置 所以基本上我的问题是:两者的区别是什么 A) setState((){myCounter++;}) 及 B) myCounter++;setState((){}) ? Obs:在我上面链接

我今天刚开始尝试颤振。我遵循官方教程:(这个问题涉及第3步)

我理解有状态小部件的概念以及对setState()的需求,但我不理解其参数(函数)的意义。为什么我们要传递一个函数给它?setState不能是无参数的吗?然后我们只需在调用setState之前将状态更改代码(我们将在该参数函数上添加)放在正确的位置

所以基本上我的问题是:两者的区别是什么

A) setState((){myCounter++;})

B) myCounter++;setState((){})

?


Obs:在我上面链接的教程中,如果我采用任何一种方法,结果都是相同的。

回调函数用于确保您对模型所做的更改是同步的,并且您应该只设置UI所需的内容。 这将确保在框架刷新UI之前设置更改,因为您无法对回调进行异步工作,并且结果是可预测的

如果你必须做大量的计算,你应该在调用setState之前完成

在您的示例中,这是相同的,因为它只是一个简单的变量增量,但在实践中,如果您有繁重的操作或异步操作,并且希望运行这些操作。如果允许的话,回调内部会对性能产生影响


查看oficinal文档了解更多示例:

我也有同样的疑问,我检查了
setState
的代码,但仍然找不到方法参数的任何特殊用法。因此我认为
setState
方法参数的设计不合理,让
setState
成为无参数函数更好理解:

myCounter++; 
setState();

可能是?的重复。为了将来参考,经过一个月的学习,我仍然不知道答案,似乎你可以做任何一种方式,唯一的区别是,在方法上,a设置状态有一些检查,如果检查失败(无效状态等),将不会执行其中的代码,而B方法没有这些检查。另外,不是建议的重复,下面的单一答案也不适用于这个问题(我知道我不应该用繁重的计算来锁定主线,这个问题与此无关)“通常,建议使用setState方法仅包装对状态的实际更改,而不是任何可能与更改相关的计算。”但如果我的更改是从base64字符串读取的大型HD图像,该怎么办?我在
setState()中放了什么
,如果在此之前已完成图像的读取和转换?您应该创建一个异步方法,在该方法中执行await BigComputeFunction(),然后调用setState。您可以在异步函数中使用setState。您不能将异步函数传递给setState。