Назад к вопросам
Middle
140
questionbank
Как переопределить операцию сравнения для объектов в Flutter?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для переопределения операции сравнения == и hashCode необходимо реализовать их в классе. Для этого часто используется пакет equatable.
import 'package:equatable/equatable.dart';
class MyObject extends Equatable {
final int id;
final String name;
const MyObject(this.id, this.name);
@override
List<Object?> get props => [id, name];
}
Без equatable реализация будет выглядеть так:
class MyObject {
final int id;
final String name;
const MyObject(this.id, this.name);
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is MyObject &&
other.id == id &&
other.name == name;
}
@override
int get hashCode => id.hashCode ^ name.hashCode;
}
При переопределении == всегда обязательно переопределять и hashCode, чтобы сохранить контракт между ними: если два объекта равны по ==, то их хеш-коды должны быть равны. Обратное неверно.
Использование:
final obj1 = MyObject(1, 'Тест');
final obj2 = MyObject(1, 'Тест');
final obj3 = MyObject(2, 'Другой');
print(obj1 == obj2); // Вывод: true
print(obj1 == obj3); // Вывод: false