Dart Equality e Equatable Package

Nov 27 2022
A igualdade é usada para verificar se dois objetos são iguais ou não usando o operador ==. Se dois objetos são iguais, o operador == é avaliado como verdadeiro, caso contrário, é avaliado como falso.

A igualdade é usada para verificar se dois objetos são iguais ou não usando o ==operador. Se dois objetos forem iguais, o ==operador será avaliado como true, caso contrário, será avaliado como false.

No Dart, por padrão, o ==operador verifica a igualdade referencial e avalia truequando dois objetos são a mesma instância ou pertencem à mesma referência. Se compararmos dois objetos não constantes que têm os mesmos valores, ele será avaliado como false.

  1. Vamos criar uma 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. Mas e se quisermos comparar dois objetos não constantes por valor e não por referência?

Então a solução é, precisamos substituir o ==operador e hashCodeassim:

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 agora, se compararmos dois Userobjetos não constantes que têm os mesmos valores, a instrução será impressa true.

E isso é um monte de código clichê!

Uma maneira simples de conseguir isso é usando o pacote Equatable .

  1. Adicione a dependência igualável em pubspec.yamlseu projeto 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];
    }
    

Obrigado por ler!

Youtube: Programador Bekar