Middle
Wie kann man den Vergleichsoperator für Objekte in Flutter überschreiben?
sobes.tech KI
Antwort von AI
Um Operationen wie == und hashCode zu überschreiben, ist es notwendig, sie in der Klasse zu implementieren. Dafür wird häufig das Paket equatable verwendet.
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];
}
Ohne equatable sieht die Implementierung so aus:
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;
}
Beim Überschreiben von == ist es immer notwendig, auch hashCode zu überschreiben, um den Vertrag zwischen ihnen zu wahren: Wenn zwei Objekte nach == gleich sind, müssen ihre Hash-Codes gleich sein. Das Gegenteil ist nicht wahr.
Verwendung:
final obj1 = MyObject(1, 'Test');
final obj2 = MyObject(1, 'Test');
final obj3 = MyObject(2, 'Anderes');
print(obj1 == obj2); // Ausgabe: true
print(obj1 == obj3); // Ausgabe: false