仅在尚未将对象添加到列表中时,我才尝试将其添加到列表中。
for (var interest in poll.poll.interests) {
InterestDrop n = new InterestDrop(interest, false);
print(interest);
print(dropInterestsList);
print(dropInterestsList.contains(n));
if (!(dropInterestsList.contains(n))){
dropInterestsList.add(n);
}
}
但这总是返回false,即使对象已经存在也要添加它……如何解决这个问题?
答案:
class InterestDrop {
String name;
bool isClicked;
InterestDrop(this.name, this.isClicked);
bool operator == (o) => o is InterestDrop && name == o.name && isClicked == o.isClicked;
int get hashCode => hash2(name.hashCode, isClicked.hashCode);
}
答案 0 :(得分:2)
您需要在自定义类中覆盖equality operator。
从文档中
所有对象的默认行为是仅当且仅当返回true 这个和另一个是同一对象。
因此,如果您的数组包含与之比较的确切对象,则contains方法将仅返回true。
答案 1 :(得分:1)
您需要执行以下操作:
class InterestDrop {
operator ==(InterestDrop other) => identifier == other.identifier;
}