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

问题描述 投票:0回答:1

我的应用程序中有一个类正在向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 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属性,可以用来停止收听,但是如何重新开始收听?

flutter dart stream rxdart
1个回答
1
投票

https://api.flutter.dev/flutter/dart-async/StreamSubscription-class.html,您可以看到您具有StreamSubscription对象的暂停和恢复方法。

“暂停([未来履历信号]→无效

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

resume()→无效

暂停后恢复。“

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

“您在流上进行侦听以使其开始生成事件,并设置接收事件的侦听器。当您侦听时,您会收到一个StreamSubscription对象,该对象是提供事件的活动对象,可用于停止事件再次收听,或暂时暂停订阅中的事件。“

因此,当您开始收听流时,它将返回一个StreamSubscription对象。通过使用它,您可以在需要时暂停和恢复它。

© www.soinside.com 2019 - 2024. All rights reserved.