डार्ट समानता और समान पैकेज

Nov 27 2022
समानता का उपयोग यह जांचने के लिए किया जाता है कि दो वस्तुएं बराबर हैं या नहीं == ऑपरेटर का उपयोग कर रही हैं। यदि दो वस्तुएँ समान हैं तो == ऑपरेटर सत्य का मूल्यांकन करता है अन्यथा यह असत्य का मूल्यांकन करता है।

समानता का उपयोग यह जांचने के लिए किया जाता है कि दो वस्तुएँ समान हैं या ==संकारक का उपयोग नहीं कर रही हैं। यदि दो वस्तुएं समान हैं तो ==ऑपरेटर मूल्यांकन करता है trueअन्यथा यह मूल्यांकन करता है false

डार्ट में, डिफ़ॉल्ट रूप से ==ऑपरेटर संदर्भात्मक समानता के लिए जाँच करता है और यह मूल्यांकन करता है कि 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

और वह बहुत सारे बॉयलरप्लेट कोड हैं!

इसे प्राप्त करने का एक आसान तरीका इक्विटेबल पैकेज का उपयोग कर रहा है।

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

पढ़ने के लिए शुक्रिया!

यूट्यूब: बेकर प्रोग्रामर