FlutterIM项目_Part4_eventbus工具类

75 阅读1分钟

发送通知

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);
}