【发布时间】:2020-08-23 05:10:06
【问题描述】:
我制作了一个聊天应用程序,我希望用户能够将聊天室标记为收藏或将聊天室静音。
我的数据库结构如下图所示
我想要的是当用户尝试将聊天室静音或将其标记为收藏时, 我只更新与 chatroomId 匹配的项目,但经过大量搜索,我发现 Firebase 不允许您更新数组的元素,您只能从数组中添加或删除。
这是我将聊天室静音或标记为收藏的功能:
static final Firestore dbReference = Firestore.instance;
static Future<void> currentUserChatroomChangeMuteOrFavouriteMethod({
@required String chatroomId,
@required bool muteValue,
@required bool favouriteValue,
@required ChatroomMuteFavouriteOption operationToBeDone,
}) async {
DocumentReference docRef = dbReference
.collection("user_chatrooms")
.document(CurrentUserDetails.id);
DocumentSnapshot docSnapshot = await docRef.get();
Map<String, dynamic> docData = docSnapshot.data;
List<Map<String, dynamic>> userChatrooms =
(docData["chatrooms"] as List<dynamic>)
.map((chatroom) => Map<String, dynamic>.from(chatroom))
.toList();
for (int index = 0; index < userChatrooms.length; index++) {
Map<String, dynamic> chatroom = userChatrooms[index];
if (chatroom["chatroomId"] == chatroomId) {
if (operationToBeDone == ChatroomMuteFavouriteOption.muteOperation) {
chatroom["isMuted"] = !muteValue;
} else {
chatroom["isMarkedFavourite"] = !favouriteValue;
}
break;
}
}
await docRef.updateData({"chatrooms": userChatrooms});
}
所以基本上我得到了所有的数据,我更新了我想要的字段,我再次更新了数据,但这不是一个好的解决方案,因为我也得到了我不需要的聊天室。
我怎样才能有效地执行此操作?
谢谢。
【问题讨论】:
标签: firebase flutter google-cloud-firestore