向 setState 添加回调而不是仅在没有回调的情况下调用 setState 有什么意义?

Mis*_*tyD 8 flutter

我仍然对这两者之间的区别感到有些困惑

isBusy = false;
setState(() {
});
Run Code Online (Sandbox Code Playgroud)

setState(() {
   isBusy = true;
    });
Run Code Online (Sandbox Code Playgroud)

两者有什么区别 ?我已经阅读了 api,但不幸的是我仍然不清楚它有什么区别。我知道 setState 调用小部件的构建方法。api 状态

每当您更改 State 对象的内部状态时,请在传递给 setState 的函数中进行更改: setState(() { _myState = newValue }); 提供的回调会立即同步调用。

这到底是什么意思 ?谁能给我一个超级简单的例子,当这会有所作为吗?

Rém*_*let 11

setState实际上使用回调与不使用没有区别。

那有什么意义呢?

这是自愿进行的,以防止在处理异步数据时出错。

通过使用回调,有一个你不能做的错误:

function() async {
  setState(() {});
  myState = await future;
}
Run Code Online (Sandbox Code Playgroud)

这会导致一个问题,因为如果你的未来没有同步完成,build方法将被调用为无效状态。

通过使用回调,您将被迫执行以下操作:

function() async {
  final value = await future;
  setState(() {
    myState = value;
  });
}
Run Code Online (Sandbox Code Playgroud)

这一次,它不会引起问题,因为在 setState之前等待了未来。

我不能进行异步回调并且仍然有问题吗?

否。因为setState方法在内部检查回调是否不返回未来。如果是这样,它会抛出