Dart Equality e pacchetto Equatable

Nov 27 2022
L'uguaglianza viene utilizzata per verificare se due oggetti sono uguali o meno utilizzando l'operatore ==. Se due oggetti sono uguali, l'operatore == restituisce true, altrimenti restituisce false.

L'uguaglianza viene utilizzata per verificare se due oggetti sono uguali o meno utilizzando l' ==operatore. Se due oggetti sono uguali, ==l'operatore valuta truealtrimenti restituisce false.

In Dart, per impostazione predefinita, ==l'operatore controlla l'uguaglianza referenziale e valuta truequando 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.

  1. Creiamo una 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. 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 hashCodequesto 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 Useroggetti 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 .

  1. Aggiungi la dipendenza equatable nel pubspec.yamltuo progetto 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];
    }
    

Grazie per aver letto!

Youtube: Programmatore Bekar