【发布时间】:2020-01-12 06:33:27
【问题描述】:
我正在尝试与 Bloc 合作使用 Streambuilder。问题是,UI 仅在昂贵的 Funktion 完成时才会更新。似乎那时,然后才对流进行更新。但我不知道为什么?
我实现了一个包含 4 个事件的简单 Bloc: 1. 通过 Bloc Sate 对象调用的 Future 2. 一个在集团内部被调用的未来 3. 在 Bloc 内部调用的函数 4 只使用 Future.delay
我试图理解为什么一切都像预期的那样,但当我使用前两个时却没有。我的猜测是我对事件循环有一个基本的误解,但我不明白为什么 2 和 4 或 1 和 4 之间的行为应该有所不同
为了方便起见,我在 Github 上做了一个示例项目 https://github.com/pekretsc/bloceventloop.git
所以我有我的刷新方法,可以将新状态广告到流中。
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 被添加到流中。 (我查了一下,不是识别太快)
【问题讨论】:
标签: flutter stream event-loop bloc