1.创建事件总线
创建EventBus
实例,并将其提供给其他类。
通常每个应用程序只有一个事件总线,但可以设置多个事件总线来对一组特定的事件进行分组。
import 'package:event_bus/event_bus.dart';
EventBus eventBus = EventBus();
注意:默认构造函数将创建一个异步事件总线。要创建同步总线,您必须提供可选的sync: true
属性。
2.定义事件
任何Dart类都可以用作事件。
class UserLoggedInEvent {
User user;
UserLoggedInEvent(this.user);
}
class NewOrderEvent {
Order order;
NewOrderEvent(this.order);
}
-------------------------------
// 比如
class updateData {
final String _msg;
updateData(this._msg);
}
3.注册监听器
为特定事件注册侦听器:
eventBus.on<UserLoggedInEvent>().listen((event) {
// All events are of type UserLoggedInEvent (or subtypes of it).
print(event.user);
});
----------------------------
Events = eventBus.on<updateData>().listen((event) {
print(event._msg);
});
注册所有事件的听众:
eventBus.on().listen((event) {
// Print the runtime type. Such a set up could be used for logging.
print(event.runtimeType);
});
4.发布消息
User myUser = User('Mickey');
eventBus.fire(UserLoggedInEvent(myUser));
-----------------------------
eventBus.fire(updateData(_tabController.index.toString()));
监听函数的返回值,一定要在dispose中进行销毁
var Events;
void initState() {
// TODO: implement initState
_listController = ScrollController();
_listController.addListener(() {
if (_listController.position.pixels >
_listController.position.maxScrollExtent - 40) {
setState(() {
for (var i = 0; i < 6; i++) {
listData.add(i);
}
});
}
});
Events = eventBus.on<updateData>().listen((event) {
print(event._msg);
});
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
_listController.dispose();
Events.cancel();
super.dispose();
}