fix: `mapEquals` to correctly compare maps with different keys and null values (#207)
Co-authored-by: Danilospano <d.spano@tandu.it>
diff --git a/lib/src/equatable_utils.dart b/lib/src/equatable_utils.dart
index 022aa79..c56ce62 100644
--- a/lib/src/equatable_utils.dart
+++ b/lib/src/equatable_utils.dart
@@ -49,7 +49,7 @@
if (identical(a, b)) return true;
if (a.length != b.length) return false;
for (final key in a.keys) {
- if (!objectsEquals(a[key], b[key])) return false;
+ if (!b.containsKey(key) || !objectsEquals(a[key], b[key])) return false;
}
return true;
}
diff --git a/test/equatable_utils_test.dart b/test/equatable_utils_test.dart
index 1445dd7..678a991 100644
--- a/test/equatable_utils_test.dart
+++ b/test/equatable_utils_test.dart
@@ -244,6 +244,13 @@
final map2 = {'a': 1, 'b': 2, 'c': 3};
expect(mapEquals(map1, map2), isFalse);
});
+
+ test('returns false for maps with different keys containing null values',
+ () {
+ expect(mapEquals({'x': null}, {'y': 42}), isFalse);
+ expect(mapEquals({'x': null}, {'y': null}), isFalse);
+ expect(mapEquals({'a': 1, 'b': null}, {'a': 1, 'c': null}), isFalse);
+ });
});
group('objectsEquals', () {