当前位置: 首页 > news >正文

flutter event_bus 底层技术

event_bus 的底层就是 Dart 自带的 dart:async:用 Stream + StreamController 做“事件流”,没有用别的黑科技。


1. 核心:StreamController.broadcast

_streamController = StreamController.broadcast(sync: sync);
  • StreamController:管理一条“流”,一边可以往里 add(事件),另一边可以 listen
  • broadcast:多播流,多个监听者都能收到同一条流里的事件(普通 StreamController 只允许一个 listener)。
  • sync
    • false(默认):事件在本次 fire() 返回之后、在后续的 microtask 里再分发给监听者(异步)。
    • true:在 fire() 调用时立刻同步把事件交给所有监听者。

所以 event_bus 的“总线”本质上就是:一个广播型的 StreamController


2. 发事件:fire(event)streamController.add(event)

void fire(event) {streamController.add(event);
}

就是把事件对象放进这条流里,所有正在监听这条流的人都会收到(在 broadcast 下)。


3. 按类型订阅:on<T>() → 对 stream 做 where + cast

Stream<T> on<T>() {if (T == dynamic) {return streamController.stream as Stream<T>;} else {return streamController.stream.where((event) => event is T).cast<T>();}
}
  • 底层用的还是 同一条 streamController.stream
  • where((event) => event is T):只保留类型为 T(或子类)的事件。
  • .cast<T>():把 Stream 转成 Stream<T>,方便监听方拿到的就是 T

所以“按事件类型监听”没有用反射或代码生成,就是 Stream 的过滤 + 类型转换


总结成一句话

概念 底层技术
事件通道 StreamController.broadcast() 产生的一条 Stream
发事件 StreamController.add(event),即往流里塞数据
收事件 对这条流 listen,即 Dart 的 Stream 订阅
按类型收 对同一条流做 where((e) => e is T).cast<T>()

所以 event_bus 的底层技术就是:Dart 的 Stream + StreamController.broadcast + 按类型过滤,没有额外依赖,也没有用到 Native 或平台特有 API。

http://www.jsqmd.com/news/411104/

相关文章:

  • MySQL8.0最新最全下载及安装配置教程(保姆级)——亲测可用
  • 瀑布管理软件哪个更适配?2026年瀑布管理软件推荐与评价,针对成本与集成痛点 - 十大品牌推荐
  • 2026年光伏熔断器怎么选?这几家口碑厂家值得关注,行业内熔断器推荐排行西安五环引领行业标杆 - 品牌推荐师
  • Java 编程IP限流被绕过了?5种实战方案让恶意请求无处遁形!
  • 哪款软件能替代Confluence?2026年Confluence替代软件推荐与排名,解决成本与集成痛点 - 十大品牌推荐
  • 2026全国矿山环境监理企业实力TOP5|中钲集团,生态护航全流程监理标杆 - 朴素的承诺
  • Java礼物系统:让心意传递更智能高效
  • 2026渭南地区发光字Top5榜单:从材质到运维,一文读懂选谁靠谱 - 深度智识库
  • 亲测好用!领军级的降AIGC软件 —— 千笔·专业降AIGC智能体
  • 深圳彩色打印机租赁品牌推荐,口碑好的有哪几家? - 工业推荐榜
  • 2026全国矿山监理企业实力TOP5|中钲集团,甲级水准全流程监理标杆 - 朴素的承诺
  • 如何在Mac上调整外星人鼠标AW720M的灯光颜色
  • 创意赠礼新选择,Java礼物商城来助力
  • 佳视路护眼仪在多地口碑怎样,值得消费者选购吗? - 工业品牌热点
  • 2026全国矿山设计企业实力TOP5|中钲集团,全矿种设计一站式赋能标杆 - 朴素的承诺
  • 江苏地区流延机哪家性价比高?共话诺达机械产品优势 - 工业设备
  • SpringBoot + 文件预览(PDF/Word/Excel)+ LibreOffice:在线文档无需下载即可查看
  • 2026年四川二手空调回收厂家推荐榜单:权威甄选与合规服务报告 - 深度智识库
  • 轻食加盟优质品牌推荐适配中小成本创业者 - 优质品牌商家
  • 知识库平台哪个好?2026年类似Confluence软件推荐与排名,解决数据迁移与权限管控核心痛点 - 十大品牌推荐
  • 陀螺匠企业管理——商机管理
  • SpringBoot + 图片压缩 + 水印 + CDN 回源:用户上传头像自动优化
  • 2026 高精度加速度计厂家排行:陕西航天长城居首,技术参数全解析 - 深度智识库
  • 智能房间助手的设计与实现
  • 终于找到了!这个开源框架让 AI 真正融入开发流程
  • 2026年四川电线电缆回收厂家权威推荐:专业合规引领绿色循环新篇章 - 深度智识库
  • 哪款软件替代Confluence好?2026年类似Confluence软件推荐评测,解决合规与体验痛点 - 十大品牌推荐
  • 汉字的时空传承优势:千年文脉,一脉相承
  • 2026年四川设备回收行业权威报告:成都辉浩聚焦合规与专业 - 深度智识库
  • 聊聊德耀BHH心脏维护胶囊口碑,哪家性价比高的品牌揭秘 - mypinpai