Flutter更新Firestore数据调用update方法报错问题咨询
问题根因
报错是因为对Firestore的API类型理解有误:
- 调用集合的
get()方法返回的是QuerySnapshot类型,它的docs属性是List<QueryDocumentSnapshot>,也就是所有匹配文档组成的数组,数组本身没有定义update方法,对着数组调用update自然会提示方法未定义。 - 你在
forEach回调里已经拿到了每一条单独的文档对象result,更新操作需要针对单篇文档的引用执行,而不是对着整个文档列表调用。
修正代码
把循环里的更新逻辑改成调用单篇文档的reference即可:
var tripQuery = await FirebaseFirestore.instance .collection("tripdetails") .doc(user?.uid) .collection("trips") .get(); tripQuery.docs.forEach((docItem) { print(docItem.id); docItem.reference.update({'tripname': 'Mumbai'}); });
补充说明
- 如果你要更新的是指定id的单篇trip文档,不需要先get整个集合再循环,直接拼接对应文档的ref调用update即可,性能更好:
// 替换成你要更新的trip文档id await FirebaseFirestore.instance .collection("tripdetails") .doc(user?.uid) .collection("trips") .doc("你的目标trip文档id") .update({'tripname': 'Mumbai'});
- 如果需要批量更新大量文档,建议用
WriteBatch做批量写入,减少网络请求次数,避免触发Firestore的限流规则。 forEach里执行异步方法不会等待任务完成,如果需要等所有更新执行完再走后续逻辑,换成普通for循环搭配await即可。
内容的提问来源于stack exchange,提问作者Naik Rahul
相关产品推荐
相关产品推荐

