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();
感觉上,在触发刷新的时候,这个比回调啥的都要好写,就是看代码可能稍稍麻烦一些。

浙公网安备 33010602011771号