Как сравнить два разных объекта в Dart
Если вы программист, я знаю, что только один раз в вашей карьере у вас была следующая «проблема»:
Это происходит потому, что по умолчанию dart сравнивает экземпляр/адрес памяти, а не значения. В этом примере у нас есть два разных экземпляра.
В ООП для большинства языков не имеет значения значение переменной, язык проверит, совпадают ли экземпляры, и если вы создадите две разные переменные, возврат будет ложным.
Как это решить
Чтобы изменить равенство dart по умолчанию, нам нужно переопределить оператор равенства и хэш-код.
С помощью этого кода мы меняем стандартную логику Dart для сравнения объектов. Теперь для нас, если в приложении у нас есть два разных экземпляра пользователя, но значения одинаковы, когда мы используем оператор ==, возврат будет истинным.
Теперь мы получили такой результат:
Хорошо, теперь мы видим, как реализовать самостоятельно, но у нас есть одна «проблема». Для каждого класса нам нужно переопределить два метода, а в классе может быть много строк. Итак, у нас есть дополнительный пакет для изменения логики равенства.
Пакет: https://pub.dev/packages/equable
Преимущества:
Мы упрощаем наш класс, потому что не нужно писать много строк.
Недостатки:
Мы создаем зависимость в каждом классе.
Тем не менее, это очень полезно и просто в реализации. Нам просто нужно установить пакет и сделать так, чтобы класс расширял его.
Та же логика, но класс короче и понятнее. Этот пакет очень часто используется с блоком/кубитом, потому что, когда у нас есть класс состояния и мы выдаем одно и то же состояние с теми же атрибутами, если мы не изменим логику равенства, блок снова выдаст то же состояние.