Asyn c запрос с использованием BLo C в Flutter - PullRequest
0 голосов
/ 16 января 2020

Я хотел бы загрузить данные, но также использовать приложение все время.

Можете ли вы сказать мне, если это правильное решение?

В этом случае мы нажимаем кнопку загрузки и вызова функции blo c .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));
    });
  }
}

1 Ответ

0 голосов
/ 16 января 2020

Дайте мне знать, если это работает

Изменение добавленной доходности * перед _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));
});
}
}
...