111
This commit is contained in:
50
flutter_monisuo/lib/core/event/app_event_bus.dart
Normal file
50
flutter_monisuo/lib/core/event/app_event_bus.dart
Normal file
@@ -0,0 +1,50 @@
|
||||
import 'dart:async';
|
||||
|
||||
/// 应用事件类型
|
||||
enum AppEventType {
|
||||
/// 资产变动(余额、持仓等)
|
||||
assetChanged,
|
||||
|
||||
/// 订单变动(充提订单状态变化)
|
||||
orderChanged,
|
||||
}
|
||||
|
||||
/// 应用事件
|
||||
class AppEvent {
|
||||
final AppEventType type;
|
||||
final Map<String, dynamic>? data;
|
||||
|
||||
const AppEvent(this.type, {this.data});
|
||||
}
|
||||
|
||||
/// 轻量级应用内事件总线
|
||||
/// 基于 StreamController.broadcast,零外部依赖
|
||||
class AppEventBus {
|
||||
final StreamController<AppEvent> _controller =
|
||||
StreamController<AppEvent>.broadcast();
|
||||
|
||||
/// 广播事件
|
||||
void fire(AppEventType type, {Map<String, dynamic>? data}) {
|
||||
if (!_controller.isClosed) {
|
||||
_controller.add(AppEvent(type, data: data));
|
||||
}
|
||||
}
|
||||
|
||||
/// 监听指定类型事件
|
||||
StreamSubscription<AppEvent> on(
|
||||
AppEventType type,
|
||||
void Function(AppEvent) callback,
|
||||
) {
|
||||
return _controller.stream
|
||||
.where((event) => event.type == type)
|
||||
.listen(callback);
|
||||
}
|
||||
|
||||
/// 监听任意事件
|
||||
Stream<AppEvent> get stream => _controller.stream;
|
||||
|
||||
/// 销毁
|
||||
void dispose() {
|
||||
_controller.close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user