我想下载数据,但也一直使用该应用程序。
你能告诉我这是否是正确的解决方案?
情况是我们按下下载按钮并调用函数 bloc.dispatch(Event.download());
在 _Download 事件的 mapEventToState 中,我们请求数据。但我们不等待响应,因为我们不想阻止其他正在改变视图的事件。
因此,我创建 Future,并在收到响应后调用事件 _UpdateData(),在其中处理下载的数据并用它们生成状态。
没关系?
有 _requestTime 参数来检查是否是最后一次请求。
class Bloc {
DateTime _requestTime;
@override
Stream<State> mapEventToState(Event event) async* {
if (event is _Download) {
yield DownloadingState();
_request();
} else if (event is _UpdateData) {
if(!event.requestTime.isBefore(_requestTime))
yield DownladedState(event.response);
}
}
_request() {
_requestTime = DateTime.now();
repository.downloadData().then((response) {
dispatch(_UpdateData(response));
});
}
}
让我知道它是否有效
更改在_request前面添加了yield*
@override
Stream<State> mapEventToState(Event event) async* {
if (event is _Download) {
yield DownloadingState();
yield* _request();
} else if (event is _UpdateData) {
if(!event.requestTime.isBefore(_requestTime))
yield DownladedState(event.response);
}
}
_request() async*{
_requestTime = DateTime.now();
repository.downloadData().then((response) {
dispatch(_UpdateData(response));
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)