List Dart将无序列表与对象进行比较

List Dart将无序列表与对象进行比较,list,flutter,dart,compare,List,Flutter,Dart,Compare,我有以下问题。有两个列表,其中包含文章。在下面的示例中,结果打印为false。但是文章是一样的。我认为这是因为这些是不同的对象,如果我把这两个列表都加在第1条中,那将是真的 我还尝试了DeepCollectionQuality.unordered()。此版本中的等于: 但它也给了我虚假的回报。 在我真正的项目中,我有两个列表,其中有文章。这些列表未排序,因此一篇文章可以是一个列表中的第一篇,而具有相同id和名称的文章可以是另一个列表中的最后一篇。但是,如果两个列表都有相同的项目(具有相同的名称

我有以下问题。有两个列表,其中包含文章。在下面的示例中,结果打印为false。但是文章是一样的。我认为这是因为这些是不同的对象,如果我把这两个列表都加在第1条中,那将是真的

我还尝试了DeepCollectionQuality.unordered()。此版本中的等于:

但它也给了我虚假的回报。 在我真正的项目中,我有两个列表,其中有文章。这些列表未排序,因此一篇文章可以是一个列表中的第一篇,而具有相同id和名称的文章可以是另一个列表中的最后一篇。但是,如果两个列表都有相同的项目(具有相同的名称和id),则结果应该为true

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(listEquals(a, b));
var a=List();
var b=List();
var Article 1=物品(id:“1”,名称:“啤酒”);
var article2=物品(id:“1”,名称:“啤酒”);
a、 增加(第1条);
b、 增加(第2条);
印刷品(列名(a、b));

正如您所说,这些是不同的对象,您需要重写类的equal运算符,如下所示:

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;
}
那么结果将是真的,因为ID是相同的

你也可以看看这个包裹

作为我的解决方案,我使用了“equalable”包:

为了检查无序列表,我使用deepcollectionquality.unordered().equals而不是listquals

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));
var a=List();
var b=List();
var Article 1=物品(id:“1”,名称:“啤酒”);
var article2=物品(id:“2”,名称:“龙舌兰”);
var Article 3=物品(id:“3”,名称:“伏特加酒”);
var Article 4=物品(id:“1”,名称:“啤酒”);
var Article 5=物品(id:“2”,名称:“龙舌兰”);
var Article 6=物品(id:“3”,名称:“伏特加酒”);
a、 增加(第1条);
a、 增加(第2条);
a、 增加(第3条);
b、 增加(第4条);
b、 增加(第5条);
b、 增加(第6条);
印刷品(列名(a、b));
打印(deepCollectionQuality.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];
}
import'包:equalable/equalable.dart';
类文章扩展了equalable{
字符串id;
字符串名;
第条({this.id,this.name});
@凌驾
//TODO:实现道具
列表获取道具=>[id,name];
}

谢谢,我将使用“Equalable”软件包。更舒适:)