flutter - 作为等值对象成员的等值对象列表
问题描述
我目前正在关注 resocoders clean 架构,他强烈建议将Equatable用于未来将进行比较的基本数据保存类。问题是我的课看起来像这样:
class Person extends Equatable {
final String name;
final List<AlterEgo> alterEgos;
Person({@required name, @required alterEgos}):super([name, alterEgos]);
@override
List<Object> get props => [name, alterEgos];
}
class AlterEgo extends Equatable {
final String name;
final String superPower;
AlterEgo({@required name, @required superPower}):super([name, superPower]);
@override
List<Object> get props => [name, superPower];
}
void main(){
Person("Clark", <AlterEgo>[AlterEgo("Superman", "Flying")]) == Person("Clark", <AlterEgo>[AlterEgo("Superman", "Flying")]) //true
}
问题是当我编写构造函数时,IDE 抱怨列表不可比较。对于现在要定义哪些函数/类以获取由原始类型组成的对象列表以与 equatable 一起使用,我有点迷失了。该包的文档似乎也省略了这个用例,只说明 Equatable 仅适用于不可变类型。但是我不介意列表是不可变的。
编辑:完成的例子。现在在手机上,不能马上测试。
解决方案
好的,我的错误一定在其他地方,在正确的 MWE 中使用列表似乎根本不是问题:
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';
class Person extends Equatable {
final String name;
final List<AlterEgo> alterEgos;
Person({@required this.name, @required this.alterEgos});
@override
List<Object> get props => [name, alterEgos];
}
class AlterEgo extends Equatable {
final String name;
final String superPower;
AlterEgo({@required this.name, @required this.superPower});
@override
List<Object> get props => [name, superPower];
}
void main() {
print(Person(name: "Clark", alterEgos: <AlterEgo>[
AlterEgo(name: "Superman", superPower: "Flying"),
AlterEgo(name: "Spiderman", superPower: "Climbing"),
]) ==
Person(name: "Clark", alterEgos: <AlterEgo>[
AlterEgo(name: "Superman", superPower: "Flying"),
AlterEgo(name: "Spiderman", superPower: "Climbing"),
]));
print(Person(name: "Clark", alterEgos: <AlterEgo>[
AlterEgo(name: "Superman", superPower: "Flying"),
AlterEgo(name: "Spiderman", superPower: "Climbing"),
]) ==
Person(name: "Clark", alterEgos: <AlterEgo>[
AlterEgo(name: "Superman", superPower: "Flying"),
]));
print(Person(name: "Clark", alterEgos: <AlterEgo>[
AlterEgo(name: "Superman", superPower: "Flying"),
AlterEgo(name: "Spiderman", superPower: "Climbing"),
]) ==
Person(name: "Clark", alterEgos: <AlterEgo>[
AlterEgo(name: "Superman", superPower: "Flying"),
AlterEgo(name: "Spiderman", superPower: "Jumping"),
]));
}
结果符合预期:
true
false
false
推荐阅读
- google-chrome - 如何确定连接的主机与 Chrome 中的请求 URL 不同的原因?
- c# - Unicode 转义序列
- php - 如何将数组值传递到准备好的 SQL WHERE IN 语句中?
- java - 如何更改 PDF 上书写的文本比例(scaleX 和 scaleY)?
- terraform - 将存储共享添加到 Azure 存储帐户时出错
- quarkus - 在运行时更改 quarkus 应用程序的 http 根路径
- javascript - JavaScript 多次使用 window.onload
- spring-boot - 继续强制关闭生产者,因为挂起的请求无法在超时 30000 毫秒内完成
- java - HttpsURLConnections 默认主机名验证程序
- angular - 如何使用 ngx-translate 本地化来自后端的数据