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 կոդերը պետք է լինեն հավասար: հակառակը ճիշտ չէ:
Օգտագործում:
final obj1 = MyObject(1, 'Թեստ');
final obj2 = MyObject(1, 'Թեստ');
final obj3 = MyObject(2, 'Այլ');
print(obj1 == obj2); // Արտածում՝ true
print(obj1 == obj3); // Արտածում՝ false