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

Posted

技术标签:

【中文标题】Flutter:更新列表中的特定索引(Firestore)【英文标题】:Flutter: Update specific index in list (Firestore) 【发布时间】:2020-03-26 03:41:14 【问题描述】:

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

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

如何只更新“lastName1”?目前,我正在使用一个使用 ArrayUnion 的 hacky 解决方案,它使用数据比较而不是实际索引(我将值加载到表单中,删除原始值然后重新添加):

 // 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])
);

是否有一个函数可以让我指定要更新哪个特定索引的数据?类似的东西(但使用列表,而不是地图):

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

【问题讨论】:

【参考方案1】:

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

另见:

Is there any way to update a specific index from the array in Firestore Firestore Update single item in an array field How to update an array item in Firestore How to update an "array of objects" with Firestore?

【讨论】:

以上是关于Flutter:更新列表中的特定索引(Firestore)的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 上传列表到 Google Firestore

在列表中的特定索引处插入元素并返回更新后的列表

扑。镖。 Flutter - 替换列表中的项目

有啥方法可以滚动到 Flutter 列表视图中的某个位置

使用节点js的地图中列表中特定索引处的Dynamodb sdk更新条目

Flutter BLoC:在父 Widget 更新时维护子状态