如何配置订阅?

How to dispose subscription?

如果我的 class 不在 StatefulWidge 中,我该如何处理订阅?有什么方法吗?

class EventNotifier extends ValueNotifier<List<String>> {
  EventNotifier(List<String> value) : super(value);
  final List<String> events = ['add', 'delete', 'edit'];
  final stream = Stream.periodic(const Duration(seconds: 5));
  late final streamSub = stream.listen(
    (event) {
      value.add(
        events[Random().nextInt(3)],
      );
      notifyListeners();
    },
  );
}

我认为在这种情况下没有必要,因为当实例被释放时,流和订阅都将被 GC 释放。

然而,ValueNotifier 确实有一个 dispose method。您可以覆盖它,并在需要时从那里取消您的直播:

class EventNotifier extends ValueNotifier<List<String>> {
  // Omitted

  @override
  void dispose() {
    streamSub.cancel();
    super.dispose();
  }
}