正如您所说,这些是不同的对象,您需要重写类的等号运算符,如下所示:
class Article {
final String name;
final String id;
const Article({this.id,this.name});
@override
bool operator ==(Object other) =>
identical(this,other) ||
other is Article &&
runtimeType == other.runtimeType &&
id == other.id;
@override
int get hashCode => id.hashCode;
}
然后结果将为true,因为id相同。
您还可以查看此软件包
https://pub.dev/packages/equatable
,
在无法(或不希望)修改比较对象的情况下,可以使用此方法。
import 'package:enumerable/enumerable.dart';
void main(List<String> args) {
var a = List<Article>();
var b = List<Article>();
var article1 = Article(id: "1",name: "Beer");
var article2 = Article(id: "1",name: "Beer");
a.add(article1);
b.add(article2);
print(a.sequenceEqual(b,ArticleEqualityComparer()));
}
class Article {
String id;
String name;
Article({this.id,this.name});
}
class ArticleEqualityComparer implements IEqualityComparer<Article> {
@override
bool equals(Article a,Article b) {
if (identical(a,b)) {
return true;
}
if (a == null || b == null) {
return false;
}
return a.id == b.id && a.name == b.name;
}
@override
int getHashCode(Article object) {
if (object == null) {
return null.hashCode;
}
return object.id.hashCode ^ object.name.hashCode;
}
}
,
作为解决方案,我使用了“等于”包装:https://pub.dev/packages/equatable
要检查无序列表,我使用 DeepCollectionEquality.unordered()。equals 而不是 listEquals
var a = List<Article>();
var b = List<Article>();
var article1 = Article(id: "1",name: "Beer");
var article2 = Article(id: "2",name: "Tequilla");
var article3 = Article(id: "3",name: "VodkaBull");
var article4 = Article(id: "1",name: "Beer");
var article5 = Article(id: "2",name: "Tequilla");
var article6 = Article(id: "3",name: "VodkaBull");
a.add(article1);
a.add(article2);
a.add(article3);
b.add(article4);
b.add(article5);
b.add(article6);
print(listEquals(a,b));
print(DeepCollectionEquality.unordered().equals(a,b));
“我的文章”的代码如下:
import 'package:equatable/equatable.dart';
class Article extends Equatable {
String id;
String name;
Article({this.id,this.name});
@override
// TODO: implement props
List<Object> get props => [id,name];
}
本文链接:https://www.f2er.com/3134717.html