felangel / equatable

A Dart package that helps to implement value based equality without needing to explicitly override == and hashCode.

Home Page:https://pub.dev/packages/equatable

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Equality and Hashcode differ for Sets with different order

devmil opened this issue · comments

Describe the bug
For properties of type Set the result of hashCode is unexpected.
Equality works like expected (order of Set elements doesn't have an impact) but hashCode produces different values depending on the order in the Set.

To Reproduce
Steps to reproduce the behavior:

import 'package:equatable/equatable.dart';

class EquatableWithSet extends Equatable {
  final Set<int> intSet;

  EquatableWithSet(this.intSet);

  @override
  List<Object?> get props => [
        intSet,
      ];
}

void main(List<String> arguments) {
  final obj1 = EquatableWithSet({1,2,3});
  final obj2 = EquatableWithSet({3,1,2});

  assert(obj1 == obj2, 'Are not equal!');
  assert(obj1.hashCode == obj2.hashCode, 'Don\'t have the same hashcode!');
}

Expected behavior
Two objects that are equal also have the same hashCode (independent of the order in the Set)

Screenshots
If applicable, add screenshots to help explain your problem.

Version
Dart SDK version: 2.17.5 (stable) (Tue Jun 21 11:05:10 2022 +0200) on "macos_x64"

Additional context
Add any other context about the problem here.