removeListener method
Removes listener
for the given properties
. listener
must not be null.
If properties
is null or empty, listener
will be removed as a global listener.
Removing a listener will not affect any other properties listeners
is registered for.
Removing a non-existent listener is no-op.
Removing a listener for a non-existent property will not fail.
Implementation
@override
void removeListener(Function listener, [Iterable<T>? properties]) {
assert(_debugAssertNotDisposed());
// Remove global listener only
if (properties == null || properties.isEmpty) {
_globalListeners!.remove(listener);
return;
}
// Remove listener for every property
for (final property in properties) {
// If no map entry exists for property, ignore
if (!_propertyListeners!.containsKey(property)) {
continue;
}
// Remove listener
final listeners = _propertyListeners![property]!;
listeners.remove(listener);
// Remove map entry if needed
if (listeners.isEmpty) {
_propertyListeners!.remove(property);
}
}
}