listen method

Listener<T> listen(
  1. T event,
  2. EventCallback callback,
  3. bool isOnce
)

Implementation

Listener<T> listen(
  T event,
  EventCallback callback,
  bool isOnce,
) {
  var subs =
      // ignore: prefer_collection_literals
      _listeners.putIfAbsent(event, () => Set<Listener<T>>());

  // Create new element.
  Listener<T> listener = Listener.Default(event, callback);
  if (isOnce) {
    listener.updateCallback((ev) {
      listener.cancel();
      callback(ev);
    });
  }

  // Apply cancellation callback.
  listener._cancelCallback = () {
    _removeListener(listener);
  };

  subs.add(listener);
  return listener;
}