Dart Equality e pacchetto Equatable

L'uguaglianza viene utilizzata per verificare se due oggetti sono uguali o meno utilizzando l' ==
operatore. Se due oggetti sono uguali, ==
l'operatore valuta true
altrimenti restituisce false
.
In Dart, per impostazione predefinita, ==
l'operatore controlla l'uguaglianza referenziale e valuta true
quando due oggetti sono la stessa istanza o appartengono allo stesso riferimento. Se confrontiamo due oggetti non costanti che hanno gli stessi valori, allora restituisce false
.
- Creiamo una
User
classe:
class User {
final String? name;
final int? age;
const User({this.name, this.age});
}
void main() {
User user = User(name: "Usama", age: 10);
User administrator = User(name: "Usama", age: 10);
print(user == administrator);
}
void main() {
User user = const User(name: "Usama", age: 10);
User administrator = const User(name: "Usama", age: 10);
print(user == administrator);
}
4. Ma cosa succede se vogliamo confrontare due oggetti non costanti per valore e non per riferimento?

Quindi la soluzione è, dobbiamo sovrascrivere l' ==
operatore e in hashCode
questo modo:
class User {
final String? name;
final int? age;
const User({this.name, this.age});
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is User &&
runtimeType == other.runtimeType &&
name == other.name &&
age == other.age;
@override
int get hashCode => name.hashCode ^ age.hashCode;
}
E ora se confrontiamo due User
oggetti non costanti che hanno gli stessi valori, l'istruzione stamperà true
.
E questo è un sacco di codice boilerplate!

Un modo semplice per raggiungere questo obiettivo è utilizzare il pacchetto Equatable .
- Aggiungi la dipendenza equatable nel
pubspec.yaml
tuo progetto flutter:
dependencies:
flutter:
sdk: flutter
equatable: ^2.0.5
import 'package:equatable/equatable.dart';
class User extends Equatable {
const User({this.name, this.age});
final String? name;
final int? age;
@override
List<Object?> get props => [name, age];
}
Grazie per aver letto!
Youtube: Programmatore Bekar
