【问题标题】:How to push object value instead of reference of the object in array如何推送对象值而不是数组中对象的引用
【发布时间】:2022-01-17 19:00:21
【问题描述】:

我创建了一个对象并尝试将其推送到一个数组上。 当我第一次尝试在数组中添加一个对象时,它被完美地添加了,但是当我编辑对象并再次将对象推送到同一个数组时。但是数组中的两个值看起来都一样。

在数组中,它会推送我的对象的引用,当它发生变化时,也会反映在数组中。

能否请人帮我在数组中推送对象值而不是对象的引用?

void checkedItem(int id) {
    obj!.clear();
    obj = {
      "id": id,
      "items": {
        "artical": "",
        "item": "",
        "vol": "",
        "pc/ctm": "",
        "total": "",
        "option": false,
        "action": "",
      },
    };

    filterList!['special_cases'].forEach((data) {
      if (data['value'] == true) {
        temp.add(obj);
      }
    });
    filterList!['categories'].forEach((data) {
      data['subCategories'].forEach((item) {
        if (item['value'] == true) {
          obj!['items']['item'] = item['name'];
          temp.add(obj);
        }
      });
    });
    // print(temp);
    update();
  }

  void addPhaseItem() {
    phaseData.add(temp);
    print(phaseData);
    Get.back();
    temp.clear();
    update();
  } 

【问题讨论】:

  • 首先尝试识别列表中的 id 是否重复,如果没有,则添加新的
  • 快速提问:这与 Firestore 有什么关系? (我同意@ArbiterChil,如果您使用的是通用对象,请检查该项目是否已存在于列表中)

标签: java android flutter dart


【解决方案1】:

替换

temp.add(obj);

temp.add({...obj}); // note the curly braces for maps and sets

在所有情况下。

"..." 是扩展运算符,允许您将一个集合中的项目插入另一个集合。你可以在 Dart Language Tour 页面上阅读更多关于它们的信息。

【讨论】:

  • 不能解决同样的问题
  • 这很奇怪,因为我编写的代码在 dartpad 上运行良好。你能告诉我你的其余代码吗?我想知道“checkedItem”在哪里被调用,以及你是否不小心覆盖了你自己的列表。
猜你喜欢
  • 2021-12-03
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多