【问题标题】:StreamBuilder. Bad state: Stream has already been listened to [duplicate]流生成器。不良状态:流已被收听[重复]
【发布时间】:2019-03-23 08:44:42
【问题描述】:

我有 StreamBuilder

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

为了初始化我调用的小部件:

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

这会产生错误“Bad state: Stream has been listened”。 没有distinct() 它可以工作,但它不适合我。

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

有谁知道,我该如何处理

附:我已经研究过这些:

topic1topic2topic3 - 没有任何帮助

附言 当我使用没有StreamBuilder 的流时 - 一切正常

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

}

【问题讨论】:

  • 改用StreamController.broadcast

标签: flutter


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    查看他们的 GitHub:https://github.com/ReactiveX/rxdart

    【讨论】:

    • 我不需要 rx - 正如我上面写的 - 我可以在没有 StreamBuilder 的情况下完成它,它工作得很好。我不想添加其他依赖项。只是想弄清楚并解决这个问题。
    • 正如我所说,rx_dart 是默认 Stream dart 对象的扩展。 RX_dart 修复了流类存在的一些问题。其中之一是流的“广播类型”。
    • @DanielOliveira 使用 rxDart 真的很重要吗?我有同样的问题,.broadcast() 解决了这个问题。 RX_dart fixes some issues that the stream classes has Stream 类有 bug?我应该使用 Rxdart 吗?
    • 当我说“问题”时,我指的是“缺少功能”。它建立在标准的 Stream 类之上(它们工作得非常好)
    • 我试过StreamController.broadcast(),但我遇到了很多问题!切换到 rx_dart 后,我​​的生活好多了 :) 谢谢大家的提示!
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2018-12-26
    • 2019-05-19
    • 2021-02-26
    • 2020-03-08
    • 2020-01-13
    • 2021-06-19
    • 2019-07-23
    相关资源
    最近更新 更多