gpt4 book ai didi

flutter - 使用带有 flutter_bloc 的 Equatable 类

转载 作者:行者123 更新时间:2023-12-03 16:01:28 24 4
gpt4 key购买 nike

为什么当我们需要使用带有 flutter_bloc 的 Equatable 类时? ,还有我们需要的 Prop 呢?这是在 flutter 中以块模式创建状态的示例代码,请我需要详细的答案。先感谢您

abstract class LoginStates extends Equatable{}

class LoginInitialState extends LoginStates{
@override
List<Object> get props => [];

}

最佳答案

我们正在使用 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 之类的
class Person extends Equatable
在集体案件中;如果您尝试使用具有可变状态的 bloc,您将面临没有 Equatable 的问题。它使资源不可变降低性能。创建副本比改变属性更昂贵。
如果你不清楚我试图解释,阅读 this可以帮助你。

关于flutter - 使用带有 flutter_bloc 的 Equatable 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64316700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com