Flutter FIrebase пытается добавить пользователей в список пользователей, но не добавляет список, список имеет только недавно добавленное значение

#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 он будет добавлен к текущему значению массива.