Middle
Hogyan írjuk felül az összehasonlító műveletet az objektumok esetében Flutterben?
sobes.tech MI
Válasz az MI-től
A == és a hashCode műveletek felülírásához azokat a osztályban kell megvalósítani. Ehhez gyakran használják a equatable csomagot.
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 nélkül a megvalósítás így néz ki:
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;
}
Az == felülírásakor mindig kötelező a hashCode-ot is felülírni, hogy megőrizzük a közöttük lévő szerződést: ha két objektum az == szerint egyenlő, akkor a hash kódjuknak is egyeznie kell. Fordítva nem igaz.
Használat:
final obj1 = MyObject(1, 'Teszt');
final obj2 = MyObject(1, 'Teszt');
final obj3 = MyObject(2, 'Másik');
print(obj1 == obj2); // Kimenet: true
print(obj1 == obj3); // Kimenet: false