Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions lib/src/equatable_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
21 changes: 21 additions & 0 deletions test/equatable_utils_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<Object?> get props => [value];
}

class Person with EquatableMixin {
Person({required this.name});

Expand Down Expand Up @@ -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);
});
});
}