前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter中使用event_bus进行事件广播和事件监听

Flutter中使用event_bus进行事件广播和事件监听

作者头像
拉维
发布2019-10-14 16:29:26
5.2K0
发布2019-10-14 16:29:26
举报
文章被收录于专栏:iOS小生活iOS小生活

前面我聊过状态管理Provider的使用。

通俗地讲,状态管理就是:当我们想在多个页面(组件/Widget)之间共享状态(数据),或者一个页面(组件/widget)中的多个子组件之间共享状态(数据),这个时候我们就可以使用Flutter中的状态管理来管理统一的状态(数据),实现不同组件间直接的传值和数据共享

一个页面中数据改变了,另一个页面中展示的该数据也相应改变,此时可以使用Provider来实现。

一个页面(组件/widget)中调用另外一个页面(组件/widget)中的方法,可以通过event_bus来实现。

event_bus的使用步骤如下。

1,配置依赖,pub.dev上搜“event_bus”,按照文档配置即可。

2,在services文件夹下新建一个EventBus.dart,并在其中配置全局监听的类。如下:

代码语言:javascript
复制
//EventBus.dart
import 'package:event_bus/event_bus.dart';

//初始化Bus
EventBus eventBus = EventBus();

/**
 * 下面是定义全局监听的事件类
 * 后面根据需要依次在下面累加
 */

//商品详情中全局监听的事件(点击购物车)
class ProductDetailEvent {
  String string;
  ProductDetailEvent(this.string);
}

3,在需要广播事件的页面发送广播

代码语言:javascript
复制
//广播
eventBus.fire(ProductDetailEvent("加入购物车传入的参数"));

4,在需要监听广播的地方监听广播(一般是在 initState 中监听)

代码语言:javascript
复制
/**
 * 监听广播(只监听ProductDetailEvent广播事件)
 * 需要注意的是,如果不写尖括号里面的内容(<ProductDetailEvent>),那么表示监听所有广播
 */
eventBus.on<ProductDetailEvent>().listen((event){
  print(event);
  _showFilterBottomSheet();
});

5,取消事件监听

先定义一个变量用于记录事件监听事件:

代码语言:javascript
复制
var _eventBusOn;//记录事件监听事件,用于取消事件监听

在监听广播的时候(即第4步)记录一下该广播:

代码语言:javascript
复制
/**
 * 监听广播(只监听ProductDetailEvent广播事件)
 * 需要注意的是,如果不写尖括号里面的内容(<ProductDetailEvent>),那么表示监听所有广播
 */
this._eventBusOn = eventBus.on<ProductDetailEvent>().listen((event){
  print(event);
  _showFilterBottomSheet();
});

在dispose销毁方法里取消监听:

代码语言:javascript
复制
//销毁
@override
void dispose() {
  this._eventBusOn.cancel();//取消事件监听
  super.dispose();
}

以上。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档