Dart Equality und Equatable Package

Nov 27 2022
Gleichheit wird verwendet, um mit dem Operator == zu prüfen, ob zwei Objekte gleich sind oder nicht. Wenn zwei Objekte gleich sind, wird der Operator then== als wahr ausgewertet, andernfalls als falsch.

==Gleichheit wird verwendet, um mithilfe des Operators zu prüfen, ob zwei Objekte gleich sind oder nicht . Wenn zwei Objekte gleich sind, wird der ==Operator zu ausgewertet, trueandernfalls zu false.

In Dart prüft der Operator standardmäßig ==auf referenzielle Gleichheit und wertet aus, truewenn zwei Objekte dieselbe Instanz sind oder zu derselben Referenz gehören. Wenn wir zwei nicht konstante Objekte vergleichen, die dieselben Werte haben, wird es zu ausgewertet false.

  1. Lassen Sie uns eine UserKlasse erstellen:
  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. Was aber, wenn wir zwei nicht konstante Objekte nach Wert und nicht nach Referenz vergleichen wollen?

Die Lösung ist also, wir müssen den ==Operator überschreiben und hashCodeso:

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

Und jetzt, wenn wir zwei nicht konstante UserObjekte vergleichen, die die gleichen Werte haben, dann wird die Anweisung drucken true.

Und das ist eine Menge Boilerplate-Code!

Eine einfache Möglichkeit, dies zu erreichen, ist die Verwendung des Equatable -Pakets.

  1. Fügen Sie die gleichwertige Abhängigkeit pubspec.yamlIhres Flutter-Projekts hinzu:
  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];
    }
    

Danke fürs Lesen!

Youtube: Bekar Programmierer