removeListener method

  1. @override
void removeListener(
  1. Function listener, [
  2. Iterable<T>? properties
])
override

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);
    }
  }
}