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