flutter软件开发笔记14-事件总线
wptr33 2025-04-26 21:39 26 浏览
Flutter 中的 事件总线(Event Bus) 就像一个 广播电台,专门负责帮不同组件之间传递消息。举个通俗的例子:
想象你在一个商场里:
- 顾客(组件A)想买鞋,但不知道库存情况
- 仓库(组件B)有到货通知要发布
- 商场广播系统(事件总线)负责传递消息: 仓库通过广播喊:"新款球鞋到货啦!" 顾客不用跑去仓库问,直接听到广播就能行动
一 事件总线
二 程序界面
二 代码实现
2.1 添加依赖库
在pubspec.yaml文件中添加:
dependencies:
event_bus: ^2.0.02.2 代码实现
import 'package:flutter/material.dart';
import 'package:event_bus/event_bus.dart';
// 创建全局事件总线(相当于商场的广播系统)
EventBus eventBus = EventBus();
// 定义事件类型(相当于广播内容模板)
class ShoeArrivalEvent {
final String shoeName;
ShoeArrivalEvent(this.shoeName);
}
void main() => runApp(MallApp());
class MallApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('商场通知系统')),
body: Column(
children: [
WarehouseSection(), // 仓库区域
CustomerSection(), // 顾客区域
],
),
),
);
}
}
// 仓库组件(发送事件)
class WarehouseSection extends StatelessWidget {
void _sendArrivalNotice() {
// 发送新款到货事件(相当于仓库喊广播)
eventBus.fire(ShoeArrivalEvent('AJ38 限量版'));
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: _sendArrivalNotice,
child: Text('仓库:发送到货通知'),
);
}
}
// 顾客组件(接收事件)
class CustomerSection extends StatefulWidget {
@override
_CustomerSectionState createState() => _CustomerSectionState();
}
class _CustomerSectionState extends State<CustomerSection> {
String _latestNotice = '暂无通知';
// 订阅事件(顾客打开广播接收器)
void _listenEvent() {
eventBus.on<ShoeArrivalEvent>().listen((event) {
setState(() {
_latestNotice = '最新到货:${event.shoeName}!';
});
});
}
@override
void initState() {
super.initState();
_listenEvent(); // 初始化时开始监听
}
@override
void dispose() {
// 关闭时取消订阅(顾客离开商场时关闭收音机)
eventBus.destroy();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(20),
child: Text(_latestNotice,
style: TextStyle(fontSize: 18, color: Colors.blue)),
);
}
}运行效果:
1. 点击"仓库:发送到货通知"按钮
2. 顾客区域会立即显示:最新到货:AJ38 限量版!
三 事件总结
最佳实践建议
- 事件分类管理:为不同模块创建独立的事件类
- 及时取消订阅:在dispose()中关闭事件监听
- 避免滥用:简单的状态变化仍推荐使用setState
- 结合使用:与状态管理库(如Provider)配合处理复杂场景
通过这个"商场广播系统"的比喻,你应该能直观理解事件总线的工作机制了。实际开发中,它特别适合处理那些 不需要知道是谁发送/接收 的全局通知场景!
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
