【问题标题】:Flutter dart update array in Firestore [closed]Firestore中的Flutter dart更新数组[关闭]
【发布时间】:2020-11-24 06:08:23
【问题描述】:

我的代码有问题。我想更新我的 Firestore 数据库中的一个数组,但这种方法不起作用。我想每次都重写数组: 此代码不起作用:

List<LineupModel> newLineup = List<LineupModel>();
var playerInField1 = LineupModel(playerId: 850, position: "0-0");
var playerInField2 = LineupModel(playerId: 870, position: "1-0");
newLineup.add(playerInField1);
newLineup.add(playerInField2);
FirebaseFirestore.instance.collection("users").doc("123").update({"lineup": []});
FirebaseFirestore.instance.collection("users").doc("123").update({"lineup": FieldValue.arrayUnion(newLineup)});

如果我直接写对象,更新工作正常。

FirebaseFirestore.instance.collection("users").doc("123").update({"lineup": FieldValue.arrayUnion([{"playerId": 850, "position": "0-0"}, {"playerId": 870, "position": "1-0"}])});

这段代码也不行

FirebaseFirestore.instance.collection("users").doc("123").update({"lineup": newLineup});

非常感谢!

【问题讨论】:

  • 无法运行的代码有什么问题?它的作用与您的预期有何不同?

标签: flutter dart google-cloud-firestore


【解决方案1】:

我有办法解决这个问题。我认为您不能直接在 arrayUnion 上传递数组列表(不确定)。我解决这个问题的方法是迭代列表并一一存储。还有像我的例子一样的批量上传

      newLineup.forEach((value) async {
        await FirebaseFirestore.instance.collection("users").doc("123").set({
          "lineup": FieldValue.arrayUnion([
            value, //Make sure this is Map<String, dynamic> so that firestore can read it
          ])
        }, SetOptions(merge: true));
      });

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 2021-02-24
    • 2021-08-22
    • 1970-01-01
    • 2021-02-03
    • 2022-11-17
    • 2018-05-23
    相关资源
    最近更新 更多