removeWhere method

  1. @override
void removeWhere(
  1. _Predicate<K, V> predicate, {
  2. bool notifyListeners = true,
})
override

Removes all entries of this map that satisfy the given test.

final terrestrial = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'};
terrestrial.removeWhere((key, value) => value.startsWith('E'));
print(terrestrial); // {1: Mercury, 2: Venus}

Implementation

@override
void removeWhere(_Predicate<K, V> predicate, {bool notifyListeners = true}) {
  final map = notifyListeners ? _toMap() : null;

  if (notifyListeners) {
    final events = <K, V>{};

    map!.forEach((key, value) {
      if (predicate(key, value)) {
        events.addAll(<K, V>{key: value});
        this.value.remove(key);
        notifyChangeListeners(
            CollectionChangeEvent(CollectionEventType.removal, key, value));
      }
    });

    if (events.isNotEmpty) {
      notifyEventListeners(
          CollectionEvent<K, V>(CollectionEventType.removal, events));
    }
  } else {
    value.removeWhere(predicate);
  }

  if (notifyListeners && value.length != map!.length) {
    this.notifyListeners(value);
  }
}