Сценарий: я создаю поток снимков Firebase и делаю некоторые вычисления из этих данных, прежде чем показывать эти окончательные данные на виджете / странице. Пользователь нажимает на элементы в этом виджете и переходит на новую страницу. (работа, проделанная на этой странице, влияет на поток на первой странице). После того, как пользователь вернется назад с помощью кнопки «Назад», я хочу создать новый поток и снова выполнить расчет, чтобы показать правильные данные.
Вопрос: как мне это сделать без утечек памяти. Я имею в виду, как отследить навигацию назад и избавиться от предыдущего потока и создать новый поток? На данный момент я получаю Badstate исключения, если я пытаюсь воссоздать streamcontroller или stream.
Код:
Поток
Future<Stream> getData() async {
Stream stream1 = _getReceiverStream();
Stream stream2 = _getSenderStream();
return StreamGroup.merge([stream1, stream2]).asBroadcastStream();
}
Контроллер потока
@override
void initState() {
streamController = StreamController();
streamController.stream.listen((p) => readData(p));
setupData();
}
setupData() async {
Stream<dynamic> stream = await service.getData();
stream.pipe(streamController);
}