将回调添加到setState有什么意义,而不只是在没有回调的情况下调用setState?

时间:2018-05-27 10:45:37

标签: flutter

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

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

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

两者有什么区别?我已经读过api,但不幸的是我仍然不清楚它有什么不同。我知道setState调用widget的构建方法.api陈述

  

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

这究竟是什么意思?任何人都可以给我一个超级简单的例子,这会产生影响吗?

1 个答案:

答案 0 :(得分:3)

使用setState回调之间没有区别,实际上没有。

重点是什么?

这是为了防止处理异步数据时出错。

通过使用回调,您无法做到错误:

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

这会导致问题,因为如果您的未来未同步完成,则会以无效状态调用build方法。

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

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

这一次,它不会导致问题,因为在 setState之前等待

我不能进行异步回调,stil有问题吗?

没有。 因为setState方法会在内部检查回调不会返回未来。如果确实如此,它将抛出