Dart Equality และ Equatable Package

Nov 27 2022
Equality ใช้ในการตรวจสอบว่าวัตถุ 2 ชิ้นเท่ากันหรือไม่โดยใช้ตัวดำเนินการ == ถ้าสองอ็อบเจกต์เท่ากัน == โอเปอเรเตอร์จะประเมินเป็นจริง มิฉะนั้นจะประเมินเป็นเท็จ

Equality ใช้ตรวจสอบว่าวัตถุ 2 ชิ้นเท่ากันหรือไม่โดยใช้ตัว==ดำเนินการ หากวัตถุสองชิ้นมีค่าเท่ากัน==ผู้ดำเนินการจะประเมินเป็นtrueอย่างอื่น จะประเมินfalseเป็น

ใน Dart ==ตัวดำเนินการเริ่มต้นจะตรวจสอบความเท่าเทียมกันของการอ้างอิง และจะประเมินtrueเมื่อวัตถุสองชิ้นเป็นอินสแตนซ์เดียวกันหรือเป็นของการอ้างอิงเดียวกัน หากเราเปรียบเทียบวัตถุที่ไม่คงที่สองตัวที่มีค่าเท่ากัน มันจะประเมินfalseเป็น

  1. มาสร้างUserชั้นเรียนกันเถอะ:
  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. แต่ถ้าเราต้องการเปรียบเทียบวัตถุที่ไม่คงที่สองชิ้นตามค่าและไม่ใช่โดยการอ้างอิง

วิธีแก้ไขคือ เราต้องแทนที่==โอเปอเรเตอร์และhashCodeทำดังนี้

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

และตอนนี้ถ้าเราเปรียบเทียบสองUserวัตถุที่ไม่คงที่ซึ่งมีค่าเท่ากัน คำสั่งจะพิมพ์ออกtrueมา

และนั่นเป็นรหัสสำเร็จรูปจำนวนมาก!

วิธีง่ายๆ ในการบรรลุเป้าหมายนี้คือการใช้แพ็คเกจEquatable

  1. เพิ่มการพึ่งพาที่เท่าเทียมกันในpubspec.yamlโครงการกระพือของคุณ:
  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];
    }
    

ขอบคุณที่อ่าน!

Youtube: Bekar โปรแกรมเมอร์