Я хочу скачать данные, но при этом постоянно использую приложение.
Можете ли вы сказать мне, правильное ли это решение?
Дело в том, что мы нажимаем кнопку загрузки и вызываем функцию bloc.dispatch (Event.download ());
В mapEventToState в событии _Download мы запрашиваем данные. Но мы не ждем ответа, потому что не хотим блокировать другие события, которые меняют представление.
Итак, я создаю 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));
});
}
}