Остановите прослушивание и перезапустите прослушивание потока в RxDart - PullRequest
0 голосов
/ 05 марта 2020

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

1 Ответ

1 голос
/ 05 марта 2020

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

"pause ([Future resumeSignal]) → void

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

resume () → void

Resume после паузы. "

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

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

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

...