首页 > 解决方案 > 如何不在列表飞镖中重复相同的项目?

问题描述

我创建了一个 listView 和按钮,当我单击该按钮时,它会将一个项目添加到 listView。

问题是我实际上不想在列表中重复相同的项目。

我已经尝试过 .contains 方法,但它没有用。

我想要一个好的解决方案,

标签: arrayslistbuttonflutterdart

解决方案


有不同的方法可以实现这一点:

1)迭代列表并检查每个元素是否不具有您认为相等的属性:

items = [Item(id: 1), Item(id: 2)];
newItem = Item(id: 2);
if (items.every((item) => item.id != newItem.id)) {
  items.add(newItem);
}

2)在具有您认为相等的属性的对象类中使用contains()和覆盖== operator(也覆盖hashCode)。

items = [Item(id: 1), Item(id: 2)];
newItem = Item(id: 2);
if (!items.contains(newItem)) {
  items.add(newItem);
}

// inside Item class
@override
bool operator ==(other) {
  return this.id == other.id;
}

@override
int get hashCode => id.hashCode;

3)而不是Listuse Set,每个元素只能出现一次。它的默认实现是LinkedHashSet跟踪订单。


推荐阅读