import 'dart:async'; sealed class Event { const Event(); } class TimelineReloadEvent extends Event { const TimelineReloadEvent(); } class ViewerOpenBottomSheetEvent extends Event { const ViewerOpenBottomSheetEvent(); } class EventStream { EventStream._(); static final EventStream shared = EventStream._(); final StreamController _controller = StreamController.broadcast(); void emit(Event event) { _controller.add(event); } Stream where() { if (T == Event) { return _controller.stream as Stream; } return _controller.stream.where((event) => event is T).cast(); } StreamSubscription listen( void Function(T event)? onData, { Function? onError, void Function()? onDone, bool? cancelOnError, }) { return where().listen( onData, onError: onError, onDone: onDone, cancelOnError: cancelOnError, ); } /// Closes the stream controller void dispose() { _controller.close(); } }