У меня проблема с закрытием потоков: плохое состояние: невозможно добавить новые события после вызова close
При удалении я вызываю метод закрытия контроллера, но когда я go перехожу на новый экран моего приложения и go назад перед загрузкой данных генерируется эта ошибка, я видел, что метод слива контроллера может быть выполнен, но тогда метод закрытия не выполняется, то есть он ждет будущего, чтобы закончить sh .
Использование метода слива больше не показывает ошибку, но я не знаю, правильно ли закрывать поток.
import 'dart:async';
import 'package:rxdart/rxdart.dart';
class PersonBloc {
final BehaviorSubject<String> _nameController = BehaviorSubject<String>();
Function(String) get nameSink => _nameController.sink.add;
Stream<String> get nameStream => _nameController.stream;
final BehaviorSubject<String> _cityController = BehaviorSubject<String>();
Function(String) get nameSink => _cityController.sink.add;
Stream<String> get nameStream => _cityController.stream;
Future<void> dispose() async {
_nameController?.close();
_cityController?.close();
}
Future<void> dispose2() async {
await _nameController.drain();
_nameController?.close();
await _cityController?.drain();
_cityController?.close();
}
}
Я не знаю, правильно использовать условие, чтобы проверить, закрыт ли поток, и тем самым избежать этой ошибки.
if(!_nameController.isClosed){
nameSink("Maria")
...
}