我是Flutter的新手,每次调用addActivity时都尝试更改代码以在Firebase中添加新文档。现在,我的代码使用的是setData函数,该函数将覆盖单个文档,而在这里我找不到适合我情况的可行解决方案。
我已经附上了如何设置Firebase数据库以及正在使用的代码的屏幕截图。如果有人可以帮助,将不胜感激。
我正在使用的代码:
Future addActivity(
User myUser,
User client,
String title, {
bool mineImage = true,
}) async {
print("Add Activity Called");
var activityCollection =
usersCollection.document(myUser.email).collection("activity");
await activityCollection.document(client.username).setData({
"title": title,
// "time": DateTime.now().toString(),
"time": getTime(),
"imageUrl": (mineImage) ? myUser.imageUrl : client.imageUrl,
});
print("Added Activity");
}
String getTime() {
DateTime time = DateTime.now();
return(new DateFormat.yMMMd().add_jm().format(new DateTime.now()));
}
Future<DocumentSnapshot> docExists(
String id,
) async {
DocumentSnapshot document = await chatRoomsCollection.document(id).get();
if (!document.exists) {
print("Document $id does not exist");
return null;
} else {
print("document $id exists");
return document;
}
}
答案 0 :(得分:1)
setData
用传递给该函数的数据替换整个文档。
updateData
仅更新您传递给该函数的值,并且文档中存在的数据保持不变。
add
将使用新的唯一文档ID在您的集合中创建一个新文档。
您需要更改addActivity函数:
Future addActivity(
User myUser,
User client,
String title, {
bool mineImage = true,
}) async {
print("Add Activity Called");
var activityCollection =
usersCollection.document(myUser.email).collection("activity");
await activityCollection.add({
"title": title,
// "time": DateTime.now().toString(),
"time": getTime(),
"imageUrl": (mineImage) ? myUser.imageUrl : client.imageUrl,
});
print("Added Activity");
}