StreamBuilder。不良状态:流已被收听

时间:2018-10-18 13:58:37

标签: flutter

我有StreamBuilder

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

我初始化小部件为:

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

这将产生错误“错误状态:流已被收听”。 如果没有distinct(),它会起作用,但是不适合我。

我尝试过asBroadcastStream()并遇到了相同的错误

有人知道,我该怎么处理

P.S。我已经研究过这些:

topic1topic2topic3-没有帮助

P.P.S。 当我使用不带StreamBuilder的流时-一切正常

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

}

2 个答案:

答案 0 :(得分:8)

所以,我要做的就是替换

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

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

答案 1 :(得分:2)

使用pubspec中的rx_dart库:https://pub.dartlang.org/packages/rxdart

现在将您的Stream<Something>声明更改为BehaviorSubject<Something>。 (BehaviorSubject是流的国王,它存储了所传输的最后一个值。库中还有其他可用的主题,例如PublishSubjectReplaySubject,请查看其文档以了解您的用例)。 / p>

rx_dart库是Stream基类的扩展,功能更强大,更易于使用。

检查其GitHub:https://github.com/ReactiveX/rxdart