Gói bình đẳng và bình đẳng phi tiêu

Nov 27 2022
Đẳng thức được sử dụng để kiểm tra xem hai đối tượng có bằng nhau hay không bằng cách sử dụng toán tử ==. Nếu hai đối tượng bằng nhau thì == toán tử đánh giá là đúng nếu không nó sẽ đánh giá là sai.

Bằng nhau dùng để kiểm tra xem hai đối tượng có bằng nhau hay không bằng ==toán tử. Nếu hai đối tượng bằng nhau thì ==toán tử sẽ ước tính truenếu không nó sẽ ước tính là false.

Trong Dart, theo mặc định, ==toán tử kiểm tra sự bằng nhau về tham chiếu và nó đánh giá truekhi hai đối tượng là cùng một thể hiện hoặc thuộc về cùng một tham chiếu. Nếu chúng ta so sánh hai đối tượng không cố định có cùng giá trị, thì nó sẽ ước tính thành false.

  1. Hãy tạo một Userlớp:
  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. Nhưng nếu chúng ta muốn so sánh hai đối tượng không cố định theo giá trị và không theo tham chiếu thì sao?

Vì vậy, giải pháp là, chúng ta cần ghi đè ==toán tử và hashCodenhư thế này:

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

Và bây giờ nếu chúng ta so sánh hai Userđối tượng không cố định có cùng giá trị thì câu lệnh sẽ in ra true.

Và đó là rất nhiều mã soạn sẵn!

Một cách đơn giản để đạt được điều này là sử dụng gói Equatable .

  1. Thêm phần phụ thuộc tương đương vào pubspec.yamldự án rung của bạn:
  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];
    }
    

Cảm ơn vì đã đọc!

Youtube: Lập trình viên Bekar