在Flutter中实现iOS里的NotificationCenter通知

import 'dart:async';

class AppEvent {
  String name;
  dynamic data;
  AppEvent({required this.name, this.data});
}

/// 事件通知
/// 类似于iOS中的通知
class AppEventBus {
  AppEventBus._();
  static final shared = AppEventBus._();
  final StreamController<AppEvent> _controller = StreamController<AppEvent>.broadcast();
  Stream<AppEvent> get _stream => _controller.stream;

  /// 发送消息
  Future<void> sendEvent(AppEvent event) async {
    _controller.add(event);
  }

  /// 取消
  Future<void> dispose() async {
    _controller.close();
  }

  /// 监听
  /// - 记得在dispose中使用 StreamSubscription.cancel()
  StreamSubscription<AppEvent> listen(
    List<String> names,
    void Function(AppEvent event) onData,
  ) {
    final nameSet = names.toSet();
    return _stream.where((event) => nameSet.contains(event.name)).listen(onData);
  }
}

// 示例 ==================================
late final StreamSubscription<AppEvent> _sub;

@override
void initState() {
  super.initState();

  _sub = AppEventBus.shared.listen(
    [
      'refresh',
      'changed',
    ],
    (event) {
      switch (event.name) {
        case 'refresh':
          break;

        case 'changed':
          break;
      }
    },
  );
}

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


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容