flutter - 向 setState 添加回调而不只是在没有回调的情况下调用 setState 有什么意义?
问题描述
我仍然对这两者之间的区别感到有些困惑
isBusy = false;
setState(() {
});
和
setState(() {
isBusy = true;
});
两者有什么区别?我已经阅读了 API,但不幸的是,我仍然不清楚它有什么区别。我知道 setState 调用了小部件的构建方法。API 状态
每当您更改 State 对象的内部状态时,请在传递给 setState 的函数中进行更改: setState(() { _myState = newValue }); 提供的回调会立即同步调用。
这到底是什么意思?谁能给我一个超级简单的例子,说明什么时候会有所作为?
解决方案
setState
实际使用与不使用回调没有区别。
那有什么意义呢?
这是自愿进行的,以防止在处理异步数据时出错。
通过使用回调,你不能做一个错误:
function() async {
setState(() {});
myState = await future;
}
这会导致一个问题,因为如果您的未来没有同步完成,build
方法将被调用,并且状态无效。
通过使用回调,您被迫执行以下操作:
function() async {
final value = await future;
setState(() {
myState = value;
});
}
这一次,它不会引起问题,因为在 setState之前等待未来。
我不能进行异步回调并且仍然有问题吗?
不,因为setState
方法在内部检查回调是否返回未来。如果是这样,它会抛出