首页 > 解决方案 > 向 setState 添加回调而不只是在没有回调的情况下调用 setState 有什么意义?

问题描述

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

isBusy = false;
  setState(() {
});

setState(() {
  isBusy = true;
});

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

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

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

标签: flutter

解决方案


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

那有什么意义呢?

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

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

function() async {
  setState(() {});
  myState = await future;
}

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

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

function() async {
  final value = await future;
  setState(() {
    myState = value;
  });
}

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

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

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


推荐阅读