Как сравнить два разных объекта в Dart

Если вы программист, я знаю, что только один раз в вашей карьере у вас была следующая «проблема»:

Это происходит потому, что по умолчанию dart сравнивает экземпляр/адрес памяти, а не значения. В этом примере у нас есть два разных экземпляра.

В ООП для большинства языков не имеет значения значение переменной, язык проверит, совпадают ли экземпляры, и если вы создадите две разные переменные, возврат будет ложным.

Как это решить

Чтобы изменить равенство dart по умолчанию, нам нужно переопределить оператор равенства и хэш-код.

С помощью этого кода мы меняем стандартную логику Dart для сравнения объектов. Теперь для нас, если в приложении у нас есть два разных экземпляра пользователя, но значения одинаковы, когда мы используем оператор ==, возврат будет истинным.

Теперь мы получили такой результат:

Хорошо, теперь мы видим, как реализовать самостоятельно, но у нас есть одна «проблема». Для каждого класса нам нужно переопределить два метода, а в классе может быть много строк. Итак, у нас есть дополнительный пакет для изменения логики равенства.

Пакет: https://pub.dev/packages/equable

Преимущества:

Мы упрощаем наш класс, потому что не нужно писать много строк.

Недостатки:

Мы создаем зависимость в каждом классе.

Тем не менее, это очень полезно и просто в реализации. Нам просто нужно установить пакет и сделать так, чтобы класс расширял его.

Та же логика, но класс короче и понятнее. Этот пакет очень часто используется с блоком/кубитом, потому что, когда у нас есть класс состояния и мы выдаем одно и то же состояние с теми же атрибутами, если мы не изменим логику равенства, блок снова выдаст то же состояние.