【问题标题】:Flutter: Exception while trying to listen to Broadcast stream twiceFlutter:尝试两次收听广播流时出现异常
【发布时间】:2023-03-21 12:56:02
【问题描述】:

我有一个包含广播流的存储

 Stream<List<DeliveryModel>> get deliveriesStream {
    this._getDeliveries();
    return this._controller.stream.asBroadcastStream();
  }

并且有两个订阅者,一旦我开始手动收听,

var stream = this._deliveryRepo.deliveriesStream;
    deliveriesSubscription = stream.listen((deliveries) {
    // to do something 
});

一次通过 StreamBuilder

@override
  void initState() {
    super.initState();
    this.stream = this.widget.deliveriesFetcher.getDeliveriesStream();
  }

  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
        stream: this.stream,
        builder: (context, snapshot) {
          // do something
        });
  }

在哪里

@override
  Stream<List<DeliveryModel>> getDeliveriesStream() {
    return this._deliveryRepo.deliveriesStream;
  }

如果我理解正确,我订阅了两次广播流,所以一切都应该没问题,但是当我第二次尝试订阅流时(通过StreamBuilder),它会抛出异常: 状态不佳:Stream 已被收听。 有什么建议吗?

【问题讨论】:

    标签: flutter dart-async


    【解决方案1】:

    原因是每次deliveriesStream getter 调用时,您都在创建一个新的 BroadcastStream。尝试使用这样的东西:

    Stream<List<DeliveryModel>> _deliveriesStream;
    
    Stream<List<DeliveryModel>> get deliveriesStream {
      this._getDeliveries();
      _deliveriesStream ??= _controller.stream.asBroadcastStream();
      return _deliveriesStream;
    }
    

    【讨论】:

    • 感谢您的帮助。完美运行!
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2019-12-06
    • 2011-11-09
    • 2022-06-26
    相关资源
    最近更新 更多