前面我聊过状态管理Provider的使用。
javascript
通俗地讲,状态管理就是:当咱们想在多个页面(组件/Widget)之间共享状态(数据),或者一个页面(组件/widget)中的多个子组件之间共享状态(数据),这个时候咱们就能够使用Flutter中的状态管理来管理统一的状态(数据),实现不一样组件间直接的传值和数据共享。java
一个页面中数据改变了,另外一个页面中展现的该数据也相应改变,此时能够使用Provider来实现。
微信
一个页面(组件/widget)中调用另一个页面(组件/widget)中的方法,能够经过event_bus来实现。
app
event_bus的使用步骤以下。
ide
1,配置依赖,pub.dev上搜“event_bus”,按照文档配置便可。ui
2,在services文件夹下新建一个EventBus.dart,并在其中配置全局监听的类。以下:this
//EventBus.dartimport 'package:event_bus/event_bus.dart';
//初始化BusEventBus eventBus = EventBus();
/** * 下面是定义全局监听的事件类 * 后面根据须要依次在下面累加 */
//商品详情中全局监听的事件(点击购物车)class ProductDetailEvent { String string; ProductDetailEvent(this.string);}
3,在须要广播事件的页面发送广播
spa
//广播eventBus.fire(ProductDetailEvent("加入购物车传入的参数"));
4,在须要监听广播的地方监听广播(通常是在 initState 中监听).net
/** * 监听广播(只监听ProductDetailEvent广播事件) * 须要注意的是,若是不写尖括号里面的内容(<ProductDetailEvent>),那么表示监听全部广播 */eventBus.on<ProductDetailEvent>().listen((event){ print(event); _showFilterBottomSheet();});
5,取消事件监听
code
先定义一个变量用于记录事件监听事件:
var _eventBusOn;//记录事件监听事件,用于取消事件监听
在监听广播的时候(即第4步)记录一下该广播:
/** * 监听广播(只监听ProductDetailEvent广播事件) * 须要注意的是,若是不写尖括号里面的内容(<ProductDetailEvent>),那么表示监听全部广播 */this._eventBusOn = eventBus.on<ProductDetailEvent>().listen((event){ print(event); _showFilterBottomSheet();});
在dispose销毁方法里取消监听:
//销毁void dispose() { this._eventBusOn.cancel();//取消事件监听 super.dispose();}
以上。
本文分享自微信公众号 - iOS小生活(iOSHappyLife)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。