on method
API to register for notification. It is mandatory to pass event name and callback parameters.
Implementation
Listener on(String event, Object context, EventCallback callback) {
if (null == event || event.trim().length == 0) {
throw ArgumentError.notNull("event");
}
if (null == callback) {
throw ArgumentError.notNull("callback");
}
// Check if the particular listener is there in the listeners collection
// Return the listener instance, if already registered.
Listener listener;
List<Listener> subs =
this._listeners.putIfAbsent(event, () => new List<Listener>());
// Check if element is already there in cache matching all criteria.
listener = subs.firstWhere(
(element) =>
element?.eventName == event && element?.callback == callback,
orElse: () => null);
if (null == listener) {
// Create new element.
listener = new Listener(event, context, callback, () {
this._listeners[event].removeWhere((element) =>
element?.eventName == event && element?.callback == callback);
});
this._listeners[event].add(listener);
}
return listener;
}