StreamBuilder.状态不好:已经收听了Stream

And*_*sky 7 flutter

我有StreamBuilder

Widget build(BuildContext context) {
  return StreamBuilder(
    initialData: false,
    stream: widget.stream, ...
Run Code Online (Sandbox Code Playgroud)

对于初始化小部件,我调用:

_EventSpeakerPager(..., streamController.stream.distinct());
Run Code Online (Sandbox Code Playgroud)

这会产生错误"Bad state:Stream已经被收听了." 没有distinct()它可行,但它不适合我.

我试过asBroadcastStream()并得到了同样的错误

有谁知道,我该怎么办?

PS我已经研究了这些:

TOPIC1,标题2,topic3 -没有什么帮助

PPS当我没有使用流时StreamBuilder- 一切正常

void initState() {
super.initState();
widget.stream.listen((bool data) {
  setState(() {
    ...
  });
});
Run Code Online (Sandbox Code Playgroud)

}

And*_*sky 11

所以,我需要做的就是更换

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

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


Dan*_*ira 5

使用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

  • 我不需要 rx - 正如我上面写的 - 我可以在没有 StreamBuilder 的情况下完成它并且它工作得很好。我不想添加额外的依赖项。只是想弄清楚并解决这个问题。 (3认同)