Flutter:更新列表中的特定索引(Firestore)

时间:2019-12-01 07:28:04

标签: flutter google-cloud-firestore

如何根据索引的索引精确地更新列表中的特定值?例如,在下面的列表中:

0 [
    {
      first_name: name0,
      last_name: lastName0,
    }
  ]
1 [
    {
      first_name: name1,
      last_name: lastName1,
    }
  ]          

如何仅更新“ lastName1”?此刻,我正在使用一些使用ArrayUnion的解决方案,该解决方案使用数据比较而不是实际的索引(我将这些值加载到表单中,删除了原始值,然后再次将其重新添加):

 // Retrieve data at index, load into form

// Remove that index from List 
await Firestore.instance.collection(col).document(doc).updateData({
  'people': FieldValue.arrayRemove([person])
});

// Make changes to data via form

// Save back to list
 await Firestore.instance.collection(col).document(doc).updateData({
  'people': FieldValue.arrayUnion([person])
});

有没有可以让我指定要更新哪个特定索引数据的功能?诸如此类(但使用列表而不是Map):

 await Firestore.instance.collection(col).document(doc).updateData({
  'people.$index.lastName1': 'newName')
 });

1 个答案:

答案 0 :(得分:1)

对于所有客户端语言和平台,当前不可能发出单个命令来按索引更新数组项。对此没有特殊的语法。相反,您需要做的是阅读文档,以所需的方式修改字段数组数据,然后将该字段全部更新回文档。如果您希望更新是原子更新,则可以在事务中完成此操作。

另请参阅: