Flutter 中的Event Bus
原则上还是属于Flutter中状态管理相关吧,个人理解感觉挺像iOS里面的通知的
Event Bus (事件总线)
插件地址:https://pub.dev/packages/event_bus
基于Dart中StreamController 和 Stream 实现
这个插件的,可以很大程度上降低各个模块之间的耦合,非常的好用。
不同于iOS的通知,这个全局可以共享一个event bus 对象
官方示例图(以MVC举例)
未使用Event Bus
使用了Event Bus
Event Bus 使用
- 创建全局的EventBus对象
- 在需要的地方,重写该类initState方法,添加监听事件类型
- 触发方法里面,调用eventbus.fire 发送事件,监听者收到回调,处理事件
- 先创建Event Bus
/// 创建全局共享的event bus final eventBus = EventBus(); /// 创建自己需要共享的数据 class AMCommonViewModel { int count; AMCommonViewModel(this.count); }
- 重写initState 添加监听
@override void initState() { // TODO: implement initState super.initState(); eventBus.on
().listen((commonModel) { // count 其实是个局部变量,需要重写initState,所以肯定是fullwidget count = commonModel.count; print("count:${commonModel.count}"); }); } - 调用eventbus.fire()发送数据,监听者收到回调,实现处理逻辑
MaterialButton( color: Colors.redAccent, textColor: Colors.white, onPressed: () { /// 修改数据 setState(() { model.count += 1; eventBus.fire(model); }); }, child: Text("计数器+1") )
通过对比也可以发现,单纯的Provider可以实现局部更新数据,但是单独的Event Bus是无法完成的,因为他需要重写initState设置监听
文章目录
关闭
共有 0 条评论