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 发送事件,监听者收到回调,处理事件
  1. 先创建Event Bus
    /// 创建全局共享的event bus
    final eventBus = EventBus();
    /// 创建自己需要共享的数据
    class AMCommonViewModel {
    int count;
    AMCommonViewModel(this.count);
    }
  2. 重写initState 添加监听
    @override
    void initState() {
    // TODO: implement initState
    super.initState();
    eventBus.on().listen((commonModel) {
    // count 其实是个局部变量,需要重写initState,所以肯定是fullwidget
      count = commonModel.count;
      print("count:${commonModel.count}");
    });
    }
  3. 调用eventbus.fire()发送数据,监听者收到回调,实现处理逻辑
    MaterialButton(
    color: Colors.redAccent,
    textColor: Colors.white,
    onPressed: () {
      /// 修改数据
      setState(() {
        model.count += 1;
        eventBus.fire(model);
      });
    },
    child: Text("计数器+1")
    )

通过对比也可以发现,单纯的Provider可以实现局部更新数据,但是单独的Event Bus是无法完成的,因为他需要重写initState设置监听

版权声明:
作者:Amber
链接:https://late.run/archives/113
来源:LATE-努力努力再努力
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录