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();
}
在Flutter中实现iOS里的NotificationCenter通知
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- AppDelegate.m FlutterPlugin.h FlutterPlugin.m 最新微信SDK处理-u...
- https://blog.csdn.net/shengpeng3344/article/details/10574...
- 打印结果:1、子线程注册 子线程发送 2、主线程注册 子线程发送 结论:不管你在哪个线程注册通知,发送通知在哪个线...
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...