StreamBuilder.Плохое состояние: поток уже прослушан - PullRequest
0 голосов
/ 18 октября 2018

У меня есть StreamBuilder

Widget build(BuildContext context) {
  return StreamBuilder(
    initialData: false,
    stream: widget.stream, ...

Для инициализации виджета я вызываю:

_EventSpeakerPager(..., streamController.stream.distinct());

И это выдает ошибку «Плохое состояние: поток уже прослушан».Без distinct() он работает, но он мне не подходит.

Я пробовал asBroadcastStream() и получил ту же ошибку

Кто-нибудь знает, как мне справиться с этим

PS Я уже изучил это:

topic1 , topic2 , topic3 ​​ - ничего не помогает

PPS Когда я использую поток без StreamBuilder - все отлично работает

void initState() {
super.initState();
widget.stream.listen((bool data) {
  setState(() {
    ...
  });
});

}

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Итак, все, что мне нужно сделать, это заменить

final StreamController<bool> streamController = StreamController<bool>();

на final StreamController<bool> streamController = StreamController<bool>.broadcast();

0 голосов
/ 18 октября 2018

Используйте библиотеку rx_dart из pubspec: https://pub.dartlang.org/packages/rxdart

Теперь измените ваше объявление Stream<Something> на BehaviorSubject<Something>.(BehaviorSubject - это король потока, в памяти которого хранится последнее переданное значение. В библиотеке доступны другие объекты, такие как PublishSubject и ReplaySubject, проверьте их документы на предмет использования).

Библиотека rx_dart является расширением базовых классов Stream и является гораздо более мощной и простой в работе.

Проверьте их GitHub: https://github.com/ReactiveX/rxdart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...