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

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 true
nế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á true
khi 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
.
- Hãy tạo một
User
lớp:
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à hashCode
như 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 .
- Thêm phần phụ thuộc tương đương vào
pubspec.yaml
dự án rung của bạn:
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
