Igualdad de dardos y paquete igualable

La igualdad se usa para verificar si dos objetos son iguales o no usando el ==
operador. Si dos objetos son iguales, el ==
operador se evalúa como de true
lo contrario se evalúa como false
.
En Dart, por defecto, el ==
operador comprueba la igualdad referencial y evalúa true
cuándo dos objetos son la misma instancia o pertenecen a la misma referencia. Si comparamos dos objetos no constantes que tienen los mismos valores, entonces se evalúa como false
.
- Vamos a crear una
User
clase:
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. Pero, ¿y si queremos comparar dos objetos no constantes por valor y no por referencia?

Entonces, la solución es que necesitamos anular el ==
operador y hashCode
así:
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;
}
Y ahora, si comparamos dos User
objetos no constantes que tienen los mismos valores, la declaración se imprimirá true
.
¡Y eso es mucho código repetitivo!

Una forma sencilla de lograr esto es utilizando el paquete Equatable .
- Agregue la dependencia equiparable en
pubspec.yaml
su proyecto 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];
}
¡Gracias por leer!
Youtube: Programador Bekar
