diff method

  1. @override
List<MapChangeRecord<K, V>> diff(
  1. Map<K, V> oldValue,
  2. Map<K, V> newValue
)
override

Returns a list of change records between oldValue and newValue.

A return value of an empty ChangeRecord.NONE means no changes found.

Implementation

@override
List<MapChangeRecord<K, V>> diff(Map<K, V> oldValue, Map<K, V> newValue) {
  if (identical(oldValue, newValue)) {
    return const [];
  }
  final changes = <MapChangeRecord<K, V>>[];
  oldValue.forEach((oldK, oldV) {
    final newV = newValue[oldK];
    if (newV == null && !newValue.containsKey(oldK)) {
      changes.add(MapChangeRecord<K, V>.remove(oldK, oldV));
    } else if (newV != oldV) {
      changes.add(MapChangeRecord<K, V>(oldK, oldV, newV));
    }
  });
  newValue.forEach((newK, newV) {
    if (!oldValue.containsKey(newK)) {
      changes.add(MapChangeRecord<K, V>.insert(newK, newV));
    }
  });
  return freezeInDevMode(changes);
}