Прекратить прослушивание и перезапустить прослушивание потока в RxDart

В моем приложении есть один класс, который добавляет значения в поток 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, которое, насколько я понимаю, можно использовать для остановки прослушивания, но как снова начать прослушивание?


person codeKiller    schedule 05.03.2020    source источник


Ответы (1)


Из https://api.flutter.dev/flutter/dart-async/StreamSubscription-class.html, вы можете увидеть, что у вас есть методы приостановки и возобновления для объектов StreamSubscription.

"пауза ([Future resumeSignal]" → недействительно

Запросить, чтобы поток приостанавливал события до дальнейшего уведомления.

возобновить () → недействительно

Возобновить после паузы. "

Также из https://api.flutter.dev/flutter/dart-async/Stream-class.html:

"Вы слушаете поток, чтобы он начал генерировать события, и настраиваете слушателей, которые получают события. Когда вы слушаете, вы получаете объект StreamSubscription, который является активным объектом, предоставляющим события, и который можно использовать, чтобы снова прекратить прослушивание. , или временно приостановить мероприятия из подписки ".

Поэтому, когда вы начинаете прослушивать поток, он возвращает объект StreamSubscription. Используя это, вы можете приостановить и возобновить его, когда захотите.

person Morez    schedule 05.03.2020
comment
выглядит многообещающе, я проверю его, когда у меня будет время, и приму ответ, если он мне помог. Спасибо. - person codeKiller; 05.03.2020