Как остановить подписку на поток одноэлементного класса? - PullRequest
0 голосов
/ 14 июля 2020

Как остановить подписку на поток одноэлементного класса и при повторном создании подписки не продолжать данные этого потока?

class MyClass {
  static MyClass _instance;

  factory MyClass() {
    _instance ??= MyClass._internal();
    return _instance;
  }

  MyClass._internal();

  final BehaviorSubject<Status> _streamController = BehaviorSubject<Status>();
  Stream<Status> get stream => _streamController.stream;
  Function(Status) get sink => _streamController.sink.add;

  StreamSubscription subscriptionImage;

  void dispose() {
    _streamController?.close();
  }

  void listen() {
    subscriptionImage = stream.listen((Status statusAnalysis) async {
      if (statusAnalysis.saving) {
        try {
          await patch(statusAnalysis);
        } on MyException catch (e) {}
      }
    });
  }
}

1 Ответ

0 голосов
/ 14 июля 2020

Просто добавьте subscriptionImage?.cancel(); перед

subscriptionImage = stream.listen((Status statusAnalysis){...});

, и вы убедитесь, что отменили свою предыдущую подписку (если таковая имеется), прежде чем создавать новую.

...