EventBus概述
// EventBus 是一个用于Dart的事件总线。它可以用来帮助应用组件之间进行解耦合的通信。
// 更多详情和使用方法可以访问官方文档:
https://pub.dev/packages/event_bus
创建eventBus.dart文件
// 导入event_bus包
import 'package:event_bus/event_bus.dart';
// 初始化EventBus实例
EventBus eventBus = EventBus();
// 创建一个LoggedInEvent事件类,用于标识用户登录事件并传递用户数据
class LoggedInEvent {
var user;
LoggedInEvent(this.user);
}
在父组件中发送事件
// 使用RaisedButton组件,当按下时,通过eventBus发送LoggedInEvent事件给子组件
RaisedButton(
child: Text('向子组件发送'),
onPressed: () {
eventBus.fire(LoggedInEvent('你好啊LoggedInEvent'));
},
),
ChildPage(),
在子组件中监听事件
// 在子组件中声明一个用于取消监听的变量
var cancleLoggedInEvent;
// 在组件的初始化方法中设置监听
@override
initState() {
super.initState();
// 使用eventBus的on方法监听特定类型的事件
cancleLoggedInEvent = eventBus.on<LoggedInEvent>().listen((event) {
// 当收到事件时,输出用户数据并调用change()方法
print(event.user);
change();
});
}
// 组件销毁时取消事件监听,避免内存泄漏
dispose(){
super.dispose();
cancleLoggedInEvent.cancel(); // 注意: 这里的方法应为cancel,而不是cancle
}
// 可以使用以下方法监听特定事件或所有事件
// eventBus.on<LoggedInEvent>().listen((event) {});
// eventBus.on().listen((event) {});