Я создал приложение для чата и хочу, чтобы пользователь мог отметить чат как избранный или отключить его.
Структура моей базы данных похожа на изображение ниже
Я хочу, чтобы пользователь пытался отключить звук в чате или пометить его как избранное, я обновляю только элемент, соответствующий 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});
}
Итак, я получаю все данные, обновляю нужное поле и снова обновляю данные, но это не хорошее решение, поскольку я также получаю чаты, которые мне не нужны.
Как я могу эффективно выполнить эту операцию?
Спасибо.