在《flutter实战》一书中的第八章的第三节介绍了关于事件总线,但是并没有详细介绍怎么使用。如果大家想买这本书的话可以点击这个链接或者是扫描二维码:
https://mall.csdn.net/item/56490
虽然没有详细给出使用的示例,可还是写了它的相关原理。
在看它书中介绍这个事件总线,总的来说使用了一种观察者设计模式,就是把要观察的对象放入总线当中,使用到这个观察的地方添加一个了监听,然后在别的地方更改观察者并触发监听动作。大致就是一个这么一个原理。然后最主要的是要把eventBus的创建放在一个全局变量。下面就是我根据这本书讲解以及书上的例子写出来的使用示例,我写的是一个添加购物车后下面的购物车图标出现购物车中物品种类数量,例子有点bug,但是不影响对总线的理解。开始写的时候没有注意到是种类数量不适合用总线来更改状态,我感觉更适合共享状态来处理添加购物车种类数量,我写成了添加了几个商品就在购物车图标显示几个。
使用了一个事件总线的包:
event_bus 2.0.0
创建全局变量
class Global{
static EventBus eventBus = EventBus();
}
创建一个事件
class ShopCartNumEvent{
int cartNum;
ShopCartNumEvent(this.cartNum);
}
在购物车页面注册并订阅这个事件
void initState() {
// TODO: implement initState
super.initState();
_tabController = TabController(length: tabs.length, vsync: this);
Global.eventBus.on<ShopCartNumEvent>().listen((event) {
cartNum = event.cartNum;
setState(() {});
});
}
在发布方添加事件并强制更新
Global.eventBus.fire(ShopCartNumEvent(_num));
自此已经事件总线使用过程已经完了。如果不明白的地方可以留言,一块交流一下,我也是刚刚学习flutter