我们正在使用 Equatable 包,以便我们可以比较类的实例,而无需手动覆盖“==”和 hashCode。
Equatable 类允许我们比较两个对象是否相等。
这是一个平等的例子。假设我们有以下类:
class Person {
final String name;
const Person(this.name);
}
我们可以像这样创建 Person 的实例:
void main() {
final Person bob = Person("Bob");
}
稍后,如果我们尝试在生产代码或测试中比较 Person 的两个实例,我们会遇到问题。
print(bob == Person("Bob")); // false
为了能够比较 Person 的两个实例,我们需要更改我们的类以覆盖 == 和 hashCode,如下所示:
class Person {
final String name;
const Person(this.name);
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is Person &&
runtimeType == other.runtimeType &&
name == other.name;
@override
int get hashCode => name.hashCode;
}
现在如果我们再次运行以下代码:
print(bob == Person("Bob")); // true
它将能够比较不同的 Person 实例。
因此,当覆盖“==”和 hashCode 时,您不必浪费时间编写大量样板代码。
使用 Equatable like
class Person extends Equatable
在整体情况下;如果您尝试使用具有可变状态的 bloc,您将面临没有 Equatable 的问题。它使资源不可变降低了性能。创建副本比更改属性更昂贵。
如果您不清楚我试图解释的内容,阅读this 可能会对您有所帮助。