停止收听并重新开始收听 RxDart 中的流

Stop listening and restart listening to a stream in RxDart

我的应用程序中有一个 class 正在向 BehaviorSubject 流添加值:

class MyClassA{

    BehaviorSubject<int> _signalSubject = BehaviorSubject();
    Stream<int> get signalStream => _signalSubject.stream;

    //at some other point in the same class i have:
    _signalSubject.add(someIntValue)

}

现在,在我的应用程序中的另一个 class 上,我有:

  class MyClassWidget extends StatefulWidget {
      MyClassWidget();

      @override
      _MyClassWidgetState createState() => _MyClassWidgetState();
    }

    class _MyClassWidgetState extends State<MyClassWidget>{

        MyClassA classA = MyClassA();
        ... etc

        @override
        void initState() {
        super.initState();

        classA.signalStream
            .listen((signal) => print("Signal received $signal"));

    });
  }

 }

是否可以在某种情况下停止收听 signalStream 并在另一种情况下重新开始收听?

流中有 属性 .takeUntil 据我了解,可以用来停止收听,但如何重新开始收听?

https://api.flutter.dev/flutter/dart-async/StreamSubscription-class.html,你可以看到你有 StreamSubscription 对象的 pause 和 resume 方法。

” 暂停([未来的恢复信号])→无效

请求流暂停事件,直至另行通知。

恢复()→无效

暂停后继续。 “

也来自https://api.flutter.dev/flutter/dart-async/Stream-class.html

" 您监听流以使其开始生成事件,并设置接收事件的监听器。当您监听时,您会收到一个 StreamSubscription 对象,它是提供事件的活动对象,并且可以是用于再次停止收听,或暂时暂停来自订阅的事件。"

所以当你开始收听流时,它 returns 一个 StreamSubscription 对象。通过使用它,您可以在需要时暂停和恢复它。