是否有一个订阅流,它不会抛出异常。相反,它会自动取消旧订阅吗?

Is there a single subscription stream, which doesn't throw an exception. Instead it cancels the old subscription automatically?

标题几乎描述了一切。我发现自己经常这样做:

  StreamSubscription willDismissPageStreamSubscription;

  @override
  void initState() {
    willDismissPageStreamSubscription?.cancel();
    willDismissPageStreamSubscription =
        bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {});
  }

我在一个可以多次调用的方法中监听一个流。如果我不取消订阅,它会在每次调用 initState 时创建一个新订阅。我想知道是否有一个 Stream,谁允许这样做,每次通过调用 listen 创建一个新的 StreamSubscription,旧的订阅被取消:

  @override
  void initState() {
        bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {});
  }

编辑:我正在或多或少地搜索 Single-Subscription-Stream,但它应该取消最后一个 StreamSubscription 而不是抛出异常。

编辑 2:如果这样的 Stream 不存在,我将如何创建它?

通常,您不希望新订阅改变旧订阅。它使可观察量难以推理。

这是一个串行模式,一般使用SerialDisposable来实现。调用 set 自动取消之前的订阅。

  SerialDisposable serial = new SerialDisposable();

  @override
  void initState() {
       serial.set(bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {}));
  }

如果您希望 Observable 中有此行​​为,您可以发送已完成的通知而不是导致管道拆卸的错误,但我不推荐这样做。