Middle
Flutter-də obyektlər üçün müqayisə əməliyyatını necə yenidən təyin etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Müqayisə əməliyyatlarını == və hashCode yenidən təyin etmək üçün, onları sinifdə həyata keçirmək lazımdır. Bunun üçün tez-tez equatable paketi istifadə olunur.
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 olmadan, implementasiya belə görünər:
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;
}
==-ni yenidən təyin etdikdə, həmişə hashCode-u da yenidən təyin etmək vacibdir, çünki onlar arasında müqavilə saxlanılmalıdır: əgər iki obyekt ==-ə görə bərabərdirsə, onların hash kodları da bərabər olmalıdır. Əks halda, bu düzgün deyil.
İstifadə:
final obj1 = MyObject(1, 'Test');
final obj2 = MyObject(1, 'Test');
final obj3 = MyObject(2, 'Digər');
print(obj1 == obj2); // Çıxış: true
print(obj1 == obj3); // Çıxış: false