Flutter: блок утилизировать, не дожидаясь ответа сервера - PullRequest
0 голосов
/ 01 января 2019

Как только пользователь заходит на страницу, будет выполнен вызов на сервер.Если моментальный снимок содержит данные, поток будет отправлен в пользовательский интерфейс, с помощью которого будет создан ListView, в противном случае, если моментальный снимок содержит ошибку, сообщение об ошибке потока будет утоплено.

Итак, вызов, который я имею:

try {
      List answer = await call();
      createList.sink.add(answer);
    } on Exception catch (e) {
      createList.sink.addError(e);
    }

Проблема в том, что если соединение медленное, и пользователь закрывает эту страницу до завершения вызова, контроллеры будут удалены, и приложение будет жаловаться, что ошибка не может быть устранена после этого.Я утилизировал контроллер.Итак, есть ли способ «прервать» вызов на сервер, когда пользователь закрывает страницу?

1 Ответ

0 голосов
/ 03 января 2019

Используя свойство isClosed контроллера, вы можете просто проверить, закрыт ли контроллер перед добавлением событий, например:

try {
  List answer = await call();
  if (!createList.isClosed) {
    createList.sink.add(answer);
  }
} on Exception catch(e) {
  if (!createList.isClosed) {
    createList.sink.addError(e);
  }
}
...