Dart Equality dan Equatable Package

Nov 27 2022
Kesetaraan digunakan untuk memeriksa apakah dua objek sama atau tidak menggunakan operator ==. Jika dua objek sama maka== operator mengevaluasi ke true jika tidak, ia mengevaluasi ke false.

Persamaan digunakan untuk memeriksa apakah dua objek sama atau tidak menggunakan ==operator. Jika dua objek sama maka ==operator akan mengevaluasi truejika tidak maka akan mengevaluasi ke false.

Di Dart, secara default, ==operator memeriksa persamaan referensial dan mengevaluasi truekapan dua objek adalah contoh yang sama atau milik referensi yang sama. Jika kita membandingkan dua objek non-konstanta yang memiliki nilai yang sama, maka nilainya menjadi false.

  1. Mari kita membuat Userkelas:
  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. Tapi bagaimana jika kita ingin membandingkan dua objek non-konstan dengan nilai dan bukan dengan referensi?

Jadi solusinya, kita perlu mengganti ==operator dan hashCodeseperti ini:

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

Dan sekarang jika kita membandingkan dua Userobjek non-konstanta yang memiliki nilai yang sama maka pernyataan akan dicetak true.

Dan itu banyak kode boilerplate!

Cara sederhana untuk mencapai ini adalah dengan menggunakan paket Equatable .

  1. Tambahkan ketergantungan yang setara dalam pubspec.yamlproyek flutter Anda:
  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];
    }
    

Terima kasih sudah membaca!

Youtube: Bekar Programmer