Пакет Dart Equality и Equatable
Равенство используется для проверки равенства двух объектов с помощью ==оператора. Если два объекта равны, ==оператор оценивается как , в 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: Бекар Программист

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































