Dart Equality และ Equatable Package
Equality ใช้ตรวจสอบว่าวัตถุ 2 ชิ้นเท่ากันหรือไม่โดยใช้ตัว==
ดำเนินการ หากวัตถุสองชิ้นมีค่าเท่ากัน==
ผู้ดำเนินการจะประเมินเป็นtrue
อย่างอื่น จะประเมินfalse
เป็น
ใน Dart ==
ตัวดำเนินการเริ่มต้นจะตรวจสอบความเท่าเทียมกันของการอ้างอิง และจะประเมินtrue
เมื่อวัตถุสองชิ้นเป็นอินสแตนซ์เดียวกันหรือเป็นของการอ้างอิงเดียวกัน หากเราเปรียบเทียบวัตถุที่ไม่คงที่สองตัวที่มีค่าเท่ากัน มันจะประเมินfalse
เป็น
- มาสร้าง
User
ชั้นเรียนกันเถอะ:
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
- เพิ่มการพึ่งพาที่เท่าเทียมกันใน
pubspec.yaml
โครงการกระพือของคุณ:
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 โปรแกรมเมอร์