Flutter中使用event_bus進行事件廣播和事件監聽

前面我聊過狀態管理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銷燬方法裏取消監聽:

//銷燬@overridevoid dispose() { this._eventBusOn.cancel();//取消事件監聽 super.dispose();}


以上。


本文分享自微信公衆號 - iOS小生活(iOSHappyLife)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索