Igualdad de dardos y paquete igualable

Nov 27 2022
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 verdadero; de lo contrario, se evalúa como falso.

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 truelo contrario se evalúa como false.

En Dart, por defecto, el ==operador comprueba la igualdad referencial y evalúa truecuá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.

  1. Vamos a crear una Userclase:
  2. 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 hashCodeasí:

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 Userobjetos 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 .

  1. Agregue la dependencia equiparable en pubspec.yamlsu proyecto flutter:
  2. 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