gpt4 book ai didi

dart - 检查列表是否包含 dart 中对象的属性

转载 作者:行者123 更新时间:2023-12-03 02:43:50 26 4
gpt4 key购买 nike

我需要检查是否myItemsList包含 myitem.itemId与否,如果存在需要添加itemQuantity , 如果不存在需要添加 myitem反对 myItemsList .

List<MyItem> myItemsList = new List();

MyItem myitem = new MyItem (
itemId: id,
itemName: name,
itemQuantity: qty,
);

if (myItemsList.contains(myitem.itemId)) {
print('Allready exists!');
} else {
print('Added!');
setState(() {
myItemsList.add(myitem);
});
}
MyItem类(class)
class MyItem {
final String itemId;
final String itemName;
int itemQuantity;

MyItem ({
this.itemId,
this.itemName,
this.itemQuantity,
});
}

上面的代码没有按预期工作,请帮助我找出问题所在。

最佳答案

contains() 比较整个对象。
除了覆盖 == 运算符或循环之外,您还可以使用列表的 singleWhere 方法:

  if ((myItemsList.singleWhere((it) => it.itemId == myitem.itemId,
orElse: () => null)) != null) {
编辑:
正如 Dharaneshvar 所经历的和评论中提到的 YoApps 一样,当找到更多元素时,.singleWhere 会引发 StateError。
当您期望唯一元素时,例如在比较 ID 的情况下,这是需要的。
引发的错误是这里的 friend ,因为它表明数据有问题。
对于其他情况, .firstWhere() 是正确的工具:
  if ((myItemsList.firstWhere((it) => it.itemName == myitem.itemName,
orElse: () => null)) != null) {
//EO 编辑
整个例子:
List<MyItem> myItemsList = new List();

class MyItem {
final String itemId;
final String itemName;
int itemQuantity;

MyItem({
this.itemId,
this.itemName,
this.itemQuantity,
});
}

void main() {
MyItem myitem = new MyItem(
itemId: "id00",
itemName: "name",
itemQuantity: 50,
);

myItemsList.add(myitem);

String idToCheck = "id00";

if ((myItemsList.singleWhere((it) => it.itemId == idToCheck,
orElse: () => null)) != null) {

print('Already exists!');
} else {
print('Added!');
}
}

关于dart - 检查列表是否包含 dart 中对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55757708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com