gpt4 book ai didi

firebase - 如何在flutter中更新firebase中的集合文档?

转载 作者:行者123 更新时间:2023-12-03 03:08:50 24 4
gpt4 key购买 nike

我想更新一个文档字段,我已经尝试了以下代码,但它没有更新。

任何人都可以给我一个解决方案吗?

我的代码:

var snapshots = _firestore
.collection('profile')
.document(currentUserID)
.collection('posts')
.snapshots();

await snapshots.forEach((snapshot) async {
List<DocumentSnapshot> documents = snapshot.documents;

for (var document in documents) {
await document.data.update(
'writer',
(name) {
name = this.name;
return name;
},
);
print(document.data['writer']);
//it prints the updated data here but when i look to firebase database
//nothing updates !
}
});

最佳答案

对于这种情况,我总是建议遵循 documentation 中的确切类型,以查看可用的选项。例如, DocumentSnapshot objectdata 属性是 Map<String, dynamic> 。当您调用 update() 时,您只是在更新文档的内存表示,而不是实际更新数据库中的数据。

要更新数据库中的文档,您需要调用 DocumentReference.updateData method 。并且要从 DocumentSnapshotDocumentReference ,您可以调用 DocumentSnapshot.reference property

所以像:

document.reference.updateData(<String, dynamic>{
name: this.name
});

与此无关,您的代码看起来有点不习惯。我建议使用 getDocuments 而不是 snapshots() ,因为后者可能会导致无限循环。
var snapshots = _firestore
.collection('profile')
.document(currentUserID)
.collection('posts')
.getDocuments();

await snapshots.forEach((document) async {
document.reference.updateData(<String, dynamic>{
name: this.name
});
})

这里的区别在于 getDocuments() 读取数据一次,然后返回它,而 snapshots() 将开始观察文档,并在发生更改时(包括更新名称时)将它们传递给我们。

关于firebase - 如何在flutter中更新firebase中的集合文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59017373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com