Как отменить асинхронные запросы Firebase в флаттере вместо проверки смонтированного - PullRequest
0 голосов
/ 03 июля 2018

У меня есть флаттер приложение, говорящее с базой данных Firebase Realtime. Я получаю данные асинхронно, очевидно, но мой пользовательский интерфейс позволяет пользователю переходить в другую часть приложения, что означает, что к моменту завершения запроса Widget может быть отключен. Лучшие практики говорят об отмене асинхронной работы вместо проверки свойства mounted, но я не могу понять, как это сделать по какой-то причине.

@override void initState() {
  super.initState();

  firebaseRealtimeReference.child('myData').once().then((results) {
    if (mounted) {
      setState(() {
        _myLocalData = results;
      }
    }
  }

  /* Alternately with async/await: */
  _myLocalData = firebaseRealtimeDatabaseReference.child('myData').once();
}

@override Widget build(BuildContext context) {
  return new MyWidget(_myLocalData);
}

@override dispose() {
  // Instead of checking mounted in the future, I should instead
  // cancel the work in progress here.
  super.dispose();
}
...