design-patterns

Quick-reference guide to software design patterns with concise Dart examples.

View project on GitHub

Defines a one-to-many dependency so when one object changes state, all dependents are notified.

The classic pub/sub pattern.

class EventEmitter<T> {
  final List<void Function(T)> _listeners = [];

  void on(void Function(T) listener) => _listeners.add(listener);
  void off(void Function(T) listener) => _listeners.remove(listener);
  void emit(T event) {
    for (final listener in _listeners) {
      listener(event);
    }
  }
}

// Usage
final prices = EventEmitter<double>();
prices.on((price) => print('Display updated: \$$price'));
prices.on((price) => print('Alert checked: \$$price'));
prices.emit(29.99);
// Display updated: $29.99
// Alert checked: $29.99