Middle
Πώς να υπερισχύσετε τη λειτουργία σύγκρισης για αντικείμενα στο Flutter;
sobes.tech AI
Απάντηση από 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, για να διατηρείται η σύμβαση μεταξύ τους: αν δύο αντικείμενα είναι ίσα σύμφωνα με το ==, τα hash codes τους πρέπει να είναι ίσα. Το αντίστροφο δεν ισχύει.
Χρήση:
final obj1 = MyObject(1, 'Test');
final obj2 = MyObject(1, 'Test');
final obj3 = MyObject(2, 'Άλλο');
print(obj1 == obj2); // Εμφάνιση: true
print(obj1 == obj3); // Εμφάνιση: false