Middle
Comment redéfinir l'opération de comparaison pour les objets dans Flutter?
sobes.tech IA
Réponse de l'IA
Pour redéfinir les opérations de comparaison == et hashCode, il est nécessaire de les implémenter dans la classe. Pour cela, le package equatable est souvent utilisé.
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];
}
Sans equatable, l'implémentation serait la suivante:
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;
}
En redéfinissant ==, il est toujours obligatoire de redéfinir également hashCode pour maintenir le contrat entre eux : si deux objets sont égaux selon ==, leurs codes hash doivent être égaux. La réciproque n'est pas vraie.
Utilisation :
final obj1 = MyObject(1, 'Test');
final obj2 = MyObject(1, 'Test');
final obj3 = MyObject(2, 'Autre');
print(obj1 == obj2); // Affiche : true
print(obj1 == obj3); // Affiche : false