![](/img/trans.png)
[英]How to get nested collection from Firebase Firestore on Android?
[英]How to remove a nested property from Firestore collection
我正在學習如何在 Flutter 中使用 BLoC 模式的“Firestore”。我正在學習 Sagar Suri 的本教程。 https://medium.com/codechai/when-firebase-meets-bloc-pattern-fb5c405597e0 。 但是,本教程很舊,我正在嘗試刪除錯誤並更新它以供學習之用。 我面臨其中的 2 個問題。 第一個問題與“updateGoal”function 有關。例如,他從集合中復制目標值,將其轉換為字符串,然后更新值。 我在這里遇到錯誤。 任何人都可以幫助我,我如何從用戶那里提取目標值,復制到 Map,投射然后更新。 . 這就是我想要做的。
Future<void> uploadGoal(String title, String documentId, String goal) async {
DocumentSnapshot doc =
await _firestore.collection("users").doc(documentId).get();
Map<String, String> data = doc.data()! as Map<String, String>;
/****/
//Getting error here "The operator '[]' isn't defined for the type 'Object? Function()'."
Map<String, String> goals = doc.data["goals"] != null
? doc.data["goals"].cast<String, String>()
: null;
/****/
if (data != null) {
data[title] = goal;
} else {
data = Map();
data[title] = goal;
}
return _firestore
.collection("users")
.doc(documentId)
.set({'goals': data, 'goalAdded': true}, SetOptions(merge: true));
}
類似的問題,我在 removeGoal function 中面臨。
void removeGoal(String title, String documentId) async {
DocumentSnapshot doc =
await _firestore.collection("users").doc(documentId).get();
Map<String, String> data = doc.data()! as Map<String, String>;
//How to remove goals title from collection here
goals.remove(title);
if (goals.isNotEmpty) {
_firestore
.collection("users")
.doc(documentId)
.update({"goals": goals});
} else {
_firestore
.collection("users")
.doc(documentId)
.update({'goals': FieldValue.delete(), 'goalAdded': false});
}
}
任何人都可以幫助我嗎? 謝謝。
這看起來是錯誤的:
Map<String, String> data = doc.data()! as Map<String, String>;
雖然文檔中的所有鍵都是字符串,但goals
是對象/字典而不是字符串。 所以充其量你可以將它轉換為:
Map<String, dynamic> data = doc.data()! as Map<String, dynamic>;
執行此操作后,您為獲取goals
字段而注釋掉的語句應該起作用,但它不起作用:使用更新的代碼以及您獲得的確切錯誤消息和堆棧跟蹤為您的問題提供更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.