为什么Streamlistener的反应不同?

时间:2019-09-10 13:26:19

标签: flutter stream event-loop bloc

我正在尝试与Bloc合作使用Streambuilder。问题在于,UI仅在完成昂贵的Funktions后才更新。似乎只有那时,才对流进行更新。但是我不知道为什么吗?

我实现了一个包含4个事件的简单Bloc: 1.调用Bloc Sate对象的Future 2.在集团内部被称为未来 3.团体内部的功能 4只使用Future.delay

我试图理解为什么一切都按预期运行,但是当我使用前两个时却不是。我的猜测是我对eventloop有一个基本的误解,但我看不到为什么2和4或1和4之间的行为应该有所不同

为了简单起见,我在Github上做了一个示例项目 https://github.com/pekretsc/bloceventloop.git

因此,我有刷新方法,可以将新状态发布到Stream中。

if (event is ExpensiveEventInState) {
  refresh(BlocUIState.Waiting);
  String result = await blocState.doSomeThing();
  if (result == '') {
    refresh(BlocUIState.Fin);
  } else {
    refresh(BlocUIState.Fail);
  }
}

    if (event is ExpensiveEventWhyDoesThisWork) {
  refresh(BlocUIState.Waiting);
  await Future.delayed(Duration(seconds: 3));
  refresh(BlocUIState.Fin);
}

所以问题是,第一个事件和第二个事件的行为方式是否应该不同? 但是,发生的情况是,在第一种情况下,刷新将被完全忽略,而仅将Fin添加到流中。 (我检查过,不是太快认出)

1 个答案:

答案 0 :(得分:0)

在事件推送到流上时,

StreamListener的回调被称为立即

另一方面,StreamBuilder的{​​{1}}回调不是。对于大多数常见用例,每帧最多调用一次。