Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
317 views
in Technique[技术] by (71.8m points)

flutter - Flutter:更新列表中的特定索引(Firestore)(Flutter: Update specific index in list (Firestore))

How exactly do you update a specific value in a list based on it's index?

(如何根据索引精确地更新列表中的特定值?)

For example, in the following list:

(例如,在下面的列表中:)

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

How can I update only "lastName1"?

(如何仅更新“ lastName1”?)

At the moment, I'm using a bit of a hacky solution using ArrayUnion, which uses data comparison instead of the actual index (I load the values into a form, delete the original value and then re-add it again):

(目前,我正在使用一些使用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])
});

Is there a function that will allow me to specify which specific index's data to update?

(有没有可以让我指定要更新哪个特定索引数据的功能?)

Something like (but using a List, not Map):

(诸如此类(但使用列表而不是地图):)

 await Firestore.instance.collection(col).document(doc).updateData({
  'people.$index.lastName1': 'newName')
 });
  ask by Mr Jax translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

For all client languages and platforms, it's currently not possibly to issue a single command to update an array item by index.

(对于所有客户端语言和平台,当前不可能发出单个命令来按索引更新数组项。)

There is no special syntax for that.

(对此没有特殊的语法。)

What you will need to do instead is read the document, modify the field array data in the way that you want, and update that field back to the document, in its entirety.

(相反,您需要做的是阅读文档,以所需的方式修改字段数组数据,然后将该字段全部更新回文档。)

You can do this in a transaction if you want the update to be atomic.

(如果您希望更新是原子更新,则可以在事务中执行此操作。)

See also:

(也可以看看:)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...