Dart Equality 및 Equatable 패키지

Nov 27 2022
같음은 == 연산자를 사용하여 두 개체가 같은지 여부를 확인하는 데 사용됩니다. 두 개체가 같으면 == 연산자는 true로 평가되고 그렇지 않으면 false로 평가됩니다.

==같음은 연산자 를 사용하여 두 개체가 같은지 여부를 확인하는 데 사용됩니다 . 두 개체가 같으면 ==연산자는 로 평가되고 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.yamlFlutter 프로젝트 에 equatable 종속성을 추가합니다 .
  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];
    }
    

읽어 주셔서 감사합니다!

유튜브: Bekar 프로그래머