Dart Equality et Equatable Package

Nov 27 2022
L'égalité est utilisée pour vérifier si deux objets sont égaux ou non en utilisant l'opérateur ==. Si deux objets sont égaux, alors l'opérateur == est évalué à vrai, sinon il est évalué à faux.

L'égalité est utilisée pour vérifier si deux objets sont égaux ou non en utilisant l' ==opérateur. Si deux objets sont égaux, alors l' ==opérateur est évalué à truesinon il est évalué à false.

Dans Dart, par défaut, ==l'opérateur vérifie l'égalité référentielle et évalue le truemoment où deux objets sont la même instance ou appartiennent à la même référence. Si nous comparons deux objets non constants qui ont les mêmes valeurs, alors il est évalué à false.

  1. Créons une Userclasse :
  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. Mais que se passe-t-il si nous voulons comparer deux objets non constants par valeur et non par référence ?

La solution est donc que nous devons remplacer l' ==opérateur et hashCodecomme ceci :

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;
}

Et maintenant, si nous comparons deux Userobjets non constants qui ont les mêmes valeurs, la déclaration imprimera true.

Et c'est beaucoup de code passe-partout !

Un moyen simple d'y parvenir consiste à utiliser le package Equatable .

  1. Ajoutez la dépendance equatable dans pubspec.yamlde votre projet 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];
    }
    

Merci d'avoir lu!

Youtube : Programmeur Bekar