EventRule<T> constructor

EventRule<T>(
  1. Event<T> event, {
  2. required List<EventListener<T>> targets,
})

An EventBus Subscriber

EventRule subscribe to EventBus's Event to call corresponding EventListener's callbacks.

Example

final event1 = Event<int>("int");

final rule = EventRule<int>(event1, targets: [

  // On Receiving `event1` call `onEvent`
  // with `payload` of type [int]
  EventListener(
    (payload) {
      print("integer event: $payload");
    },
  ),
]);


// NOTE: DO NOT FORGOT TO CANCEL THE SUBSCRIPTION
dispose() {
  rule.cancel();
}

....

// Release Event
EventBus.emit(event1.createPayload(100))

// prints "integer event: 100"

See Also:

Implementation

EventRule(
  this.event, {
  required List<EventListener<T>> targets,
}) {
  final stream = EventBus._instance._stream.stream;

  _subscription = stream.listen(
    (_event) {
      if (_event.name == event.name && _event.value is T) {
        for (var listener in targets) {
          listener(_event.value as T);
        }
      }
    },
  );
}