发送通知
EventBusUtil.fireEvent(LogOutEvent());
监听通知
late StreamSubscription<LogOutEvent> _logOutSubscription;
_logOutSubscription = EventBusUtil.addListener((LogOutEvent event) {
clearWhenLogOut();
});
取消通知
_logOutSubscription.cancel();
工具类代码
其中LoginEvent是其中的一个通知事件,建议把所有的通知都放到该类。方便管理。 另外看到同事写的发布订阅者模式的eventbus工具类,不依赖任何第三方库,这种思路很好。
class EventBusUtil {
factory EventBusUtil.shared() => _getInstance();
static EventBusUtil get instance => _getInstance();
static EventBusUtil? _instance;
static final EventBus _eventBus = EventBus();
EventBusUtil._internal() {}
static EventBusUtil _getInstance() {
_instance ??= EventBusUtil._internal();
return _instance!;
}
// 发送事件
static void fireEvent(Object event) {
_eventBus.fire(event);
}
// 订阅事件
static StreamSubscription<T> addListener<T>(void onData(T event)) {
return _eventBus.on<T>().listen((event) {
onData(event);
});
}
// 取消订阅
static void removeListener(StreamSubscription subscription) {
subscription.cancel();
}
}
class LoginEvent {
bool isLogin = false;
LoginEvent(this.isLogin);
}