網站首頁 編程語言 正文
前言
flutter項目中,有許多可以實現跨組件通訊的方案,其中包括InheritedWidget,Notification,EventBus等。本文主要探討的是EventBus事件總線實現跨組件通訊的方法。
EventBus的簡介
EventBus
的核心是基于Streams
。它允許偵聽器訂閱事件并允許發布者觸發事件,使得不同組件的數據不需要一層層傳遞,可以直接通過EventBus
實現跨組件通訊。
EventBus
最主要是通過觸發事件和監聽事件兩項操作來實現不同頁面的跨層訪問。觸發事件是通過fire(event)方法進行,監聽事件則是通過on<T>()方法進行的,其中泛型可以傳入指定類型,事件總線將進行針對性監聽,如果泛型傳值為空,則默認監聽所有類型的事件:
void fire(event) { streamController.add(event); }
Stream<T> on<T>() { if (T == dynamic) { return streamController.stream as Stream<T>; } else { return streamController.stream.where((event) => event is T).cast<T>(); } }
EventBus的實際應用
1、在pubspec.yaml
文件中引用eventBus事件總線依賴;
2、創建一個全局的EventBus
實例;
3、使用fire(event)
方法在事件總線上觸發一個新事件(觸發事件);
4、為事件總線注冊一個監聽器(監聽事件);
5、取消EventBus事件訂閱,防止內存泄漏。
// 1、在pubspec.yaml文件中引用eventBus事件總線依賴; dependencies: event_bus: ^2.0.0
// 2、創建一個全局的EventBus實例; EventBus myEventBus = EventBus();
// 3、使用fire(event)方法在事件總線上觸發一個新事件(觸發事件); Center( child: ElevatedButton( onPressed: () { myEventBus.fire('通過EventBus觸發事件'); }, child: Text('觸發事件'), ), )
var getData; @override void initState() { // TODO: implement initState super.initState(); // 4、為事件總線注冊一個監聽器(監聽事件); getData = myEventBus.on().listen((event) { print(event); }); } @override void dispose() { // TODO: implement dispose super.dispose(); // 5、取消EventBus事件訂閱,防止內存泄漏。 getData.cancel(); }
總結
EventBus
遵循的是發布/訂閱模式,能夠通過事件的觸發和監聽操作,有效實現跨組件通訊的功能。
原文鏈接:https://juejin.cn/post/7137327139061727262
相關推薦
- 2023-11-13 linux平臺下ZeroMQ zmq(C++)編譯安裝以及調用
- 2022-10-21 GO語言實現文件上傳的示例代碼_Golang
- 2022-04-17 create-react-app新版本快速搭建一個簡易的路由頁面
- 2022-10-05 C語言各種符號的使用介紹下篇_C 語言
- 2022-04-01 SQL?Server?Transact-SQL編程詳解_MsSql
- 2022-07-21 ubutu虛擬機和主機共享同一網絡
- 2022-07-09 linux用戶態使用gpio中斷方法
- 2022-12-25 Redis對象與redisObject超詳細分析源碼層_Redis
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支