Flutter 通信技巧 event_bus
它是一个事件总线,也能被归类为是数据通信组件
正好别的资料说他适合用来做跨页面和跨组件的通信,刚好我碰到的问题是需要跨页面通信,把它找出来用了,发现确实还挺好用的。
添加依赖
dependencies:
event_bus: ^2.0.0
创建事件类
这里为了好管理,单独创建了一个文件,这里我也给他起名叫做event_bus.dart
import 'package:event_bus/event_bus.dart';
EventBus eventBus = EventBus();
class UnitChangeEvent{
String unit;
UnitChangeEvent(this.unit);
}
然后这里做了一个单位变化事件,就是用来在设置页面切换单位之后,通知别的页面要跟着刷新。
发布消息
这里在设置单位变化的事件里加上这一条就行
eventBus.fire(UnitChangeEvent(unit));//unit 这里是字符串
订阅消息
这里只针对这个事件接收
eventBus.on<UnitChangeEvent>().listen((event){
setState(() {
print(event.unit);
//do refresh
});
});
以上这些就是正在用的,确认可行。
另外还有我没有确认过的全部事件订阅和取消订阅,如下:
/// 监听所有方法
eventBus.on().listen((event) {
print(event);
//do something
});
/// 取消监听
StreamSubscription UnitSubscription = eventBus.on<UnitChangeEvent>().listen((event) {
print(event.unit);
});
UnitSubscription.cancel();
感觉上,在触发刷新的时候,这个比回调啥的都要好写,就是看代码可能稍稍麻烦一些。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)