在进行Flutter项目开始发时,避免不了页面之间的消息通信,比如,我在A页面push到B页面后,点击B页面中的某一个按钮,然后想将这个事件回调给A页面,以前在做ios对的时候很容易想到使用(通知Notification或者Block)可以处理这个业务需求,在Flutter中的话,可以考虑使用event_bus这块框架进行实现
简单描述一下event_bus的使用步骤
- 首先为了保证我的A页面和B页面使用的是同一个event_bus对象,我将这次的event_bus事件对象放在一个单利类里面进行了初始化:
// 单例类的关联模块
import 'package:event_bus/event_bus.dart';
class Manager {
// eventBus对象
EventBus demoEventBus;
// 工厂模式
factory Manager() => _getInstance();
static Manager get instance => _getInstance();
static Manager _instance;
Manager._internal() {
// 初始化Event_Bus对象
demoEventBus = new EventBus();
}
static Manager _getInstance() {
if (_instance == null) {
_instance = new Manager._internal();
}
return _instance;
}
}
- 在A页面中进行demoEventBus的注册监听,一般放在initState中进行初始化
class ClassADemoView extends StatefulWidget {
ClassADemoView({@required this.pageTag});
@override
_ClassADemoViewState createState() => _ClassADemoViewState();
}
class _ClassADemoViewState extends State<ClassADemoViewView> with AutomaticKeepAliveClientMixin {
Manager manager;
@override
void initState() {
// TODO: implement initState
super.initState();
manager = Manager.instance;
// 监听demoEventBus
// 这里说明一下manager.demoEventBus.on<String>()中的<String>属性,这里其实是一个泛型<T>所有可以是任何你想监听的数据类型
manager.demoEventBus.on<String>().listen((event) {
// 打印监听到的消息
print(event);
});
- 假如在B页面中有一个按钮点击事件btnClick,点击按钮之后,发送事件
// 这是B页面中的一个按钮点击事件
onPressed: (){
Manager manager = Manager.instance;
manager.demoEventBus.fire("我是B页面,现在进行事件发送");
}
当完成这些步骤之后,点击B页面的按钮,你就可以在控制台看到打印信息:我是B页面,现在进行事件发送,这些就是关于event_bus的简单使用的介绍
不急不躁,好好学习