mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	* chore: bump dart sdk to 3.8 * chore: make build * make pigeon * chore: format files --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
		
			
				
	
	
		
			39 lines
		
	
	
		
			845 B
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			845 B
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'dart:async';
 | 
						|
 | 
						|
class Event {
 | 
						|
  const Event();
 | 
						|
}
 | 
						|
 | 
						|
class EventStream {
 | 
						|
  EventStream._();
 | 
						|
 | 
						|
  static final EventStream shared = EventStream._();
 | 
						|
 | 
						|
  final StreamController<Event> _controller = StreamController<Event>.broadcast();
 | 
						|
 | 
						|
  void emit(Event event) {
 | 
						|
    _controller.add(event);
 | 
						|
  }
 | 
						|
 | 
						|
  Stream<T> where<T extends Event>() {
 | 
						|
    if (T == Event) {
 | 
						|
      return _controller.stream as Stream<T>;
 | 
						|
    }
 | 
						|
    return _controller.stream.where((event) => event is T).cast<T>();
 | 
						|
  }
 | 
						|
 | 
						|
  StreamSubscription<T> listen<T extends Event>(
 | 
						|
    void Function(T event)? onData, {
 | 
						|
    Function? onError,
 | 
						|
    void Function()? onDone,
 | 
						|
    bool? cancelOnError,
 | 
						|
  }) {
 | 
						|
    return where<T>().listen(onData, onError: onError, onDone: onDone, cancelOnError: cancelOnError);
 | 
						|
  }
 | 
						|
 | 
						|
  /// Closes the stream controller
 | 
						|
  void dispose() {
 | 
						|
    _controller.close();
 | 
						|
  }
 | 
						|
}
 |