在Flutter中使用BLoC进行异步请求

时间:2020-01-16 13:44:07

标签: flutter bloc 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));
    });
  }
}

1 个答案:

答案 0 :(得分:0)

让我知道它是否有效

_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));
});
}
}