#firebase #flutter #dart #google-cloud-firestore
#firebase #flutter #dart #google-cloud-firestore
Вопрос:
Итак, я пытался добавить пользователей в список пользователей, но он не добавляет список, список имеет только недавно добавленное значение. Я не могу найти, что я делаю неправильно.
Вот код
sendToChatroom({String chatRoomId}) {
List<dynamic> users = List();
databaseMethods.getMap(chatRoomId).then((value) async {
users = await value.data()['users'];
print(users);
});
if (!users.contains(Constants.myName)) {
users = users [Constants.myName];
print(users);
}
Map<String, dynamic> chatRoomMap = {
"users": users,
"chatRoomId": chatRoomId
};
databaseMethods.setMap(chatRoomId, chatRoomMap);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => GroupChat(chatRoomId)));
}
Методы базы данных
getMap(String groupChatName) async {
return await FirebaseFirestore.instance
.collection("groupChat")
.doc(groupChatName)
.get();
}
setMap(String groupChatName, Map groupChatMap) async {
return await FirebaseFirestore.instance
.collection("groupChat")
.doc(groupChatName)
.set(groupChatMap);
}
Ответ №1:
Если вы хотите добавить массив, вы должны использовать FieldValue.arrayUnion
Пример:
Map<String, dynamic> chatRoomMap = {
"users": FieldValue.arrayUnion(users),
"chatRoomId": chatRoomId
};
При этом users
он будет добавлен к текущему значению массива.