flutter - Flutter 中使用 BLoC 的异步请求
问题描述
我想下载数据,但也一直使用该应用程序。
你能告诉我这是否是正确的解决方案吗?
案例是我们按下按钮下载并调用函数 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 前面更改了产量*
@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));
});
}
}
推荐阅读
- spring-boot - GCP 上的 Spring Cloud Consul 健康检查和状态配置
- c++ - 使用 OpenMP 无障碍地在不同端口中并行化函数
- docker - 如何使用 jenkins pipline 步骤在 docker 映像中进行 pip 安装?
- javascript - jQuery交互后提交按钮不起作用
- c# - 使用 JsonConvert.DeserializeObject 或 JObject.Parse 将类反序列化为 c# 中的字典
- javascript - 离子不能发布嵌套数组
- c# - 在主屏幕上打开表格
- azure - 如何在 App 洞察力上创建 Azure Kusto 查询以仅按客户端操作系统名称(已删除操作系统版本)分组?
- php - 如何隐藏选择选项值并用新值替换 2 个选项?
- git - 如何从存储库中已有的特定 TAG 更改文件?