diff --git a/lib/src/equatable_utils.dart b/lib/src/equatable_utils.dart index 21cffbc6..e578e266 100644 --- a/lib/src/equatable_utils.dart +++ b/lib/src/equatable_utils.dart @@ -68,6 +68,9 @@ bool objectsEquals(Object? a, Object? b) { return iterableEquals(a, b); } else if (a is Map && b is Map) { return mapEquals(a, b); + } else if (a is Record && b is Record) { + // See https://github.com/felangel/equatable/issues/211. + return a == b; } else if (a?.runtimeType != b?.runtimeType) { return false; } else if (a != b) { diff --git a/test/equatable_utils_test.dart b/test/equatable_utils_test.dart index e0385a4b..4868219e 100644 --- a/test/equatable_utils_test.dart +++ b/test/equatable_utils_test.dart @@ -3,6 +3,16 @@ import 'package:equatable/src/equatable_utils.dart'; import 'package:test/test.dart' hide equals; // ignore: deprecated_member_use_from_same_package + +class NumInRecord with EquatableMixin { + NumInRecord(this.value); + + final ({num value}) value; + + @override + List get props => [value]; +} + class Person with EquatableMixin { Person({required this.name}); @@ -312,5 +322,16 @@ void main() { const num b = 1; expect(objectsEquals(a, b), isFalse); }); + + test('returns true for records whose nums compare equal (int and double)', + () { + const int i = 1; + const double d = 1.0; + expect(objectsEquals((value: i), (value: d)), isTrue); + }); + + test('returns true for Equatable props that are records of equal nums', () { + expect(NumInRecord((value: 1)) == NumInRecord((value: 1.0)), isTrue); + }); }); }