#flutter #dart
#flutter #dart
Вопрос:
Цель состоит в том, чтобы выполнить какое-то объединение. Получите каждый пользовательский документ из пользовательского документа в firestore и прикрепите его к некоторой коллекции с помощью uid. Затем верните коллекцию с полными сведениями о пользовательском документе, а не только uid.
Future<List<ChatRoom>> getChatsrooms(uid) async {
ChatRoom chatroom = new ChatRoom();
try {
List<ChatRoom> chatrooms = new List();
var snapshots = await _db
.collection('my-chats-chats')
.where('users', arrayContains: uid)
.orderBy('updated_at', descending: true)
.get();
for (var room in snapshots.docs) {
chatroom.chatroomid = room.data()['chatroomid'];
chatroom.users = room.data()['users'];
// get user profile that isn'nt u.
List<dynamic> userids = await room.data()['users']
..remove(uid);
var doc = await _db.collection('my-chats-users').doc(userids[0]).get();
UserModel user = UserModel.fromMap(doc.data());
chatroom.users.add(user);
// Remove the users string UID from users list
chatroom.users.remove(user.uid);
chatroom.users.remove(uid);
chatrooms.add(chatroom);
}
return chatrooms.toList();
} catch (e) {
print("Couldn't get user's chatrooms exception: " e.toString());
return null;
}
}
Кажется, что приведенное выше делает то, что я хочу, за исключением того, что возвращенный список чатов содержит только дубликаты одной комнаты чата. Таким образом, даже если существует 10 разных комнат чата, я получаю дубликаты одной комнаты чата только 10 раз.
О чем я думаю, так это о том, chatrooms.add(chatroom);
что добавляет только один элемент. Но список чатов должен быть растущим списком. Итак, почему в итоге получается только один дублированный элемент?
Какой был бы лучший способ написать это?
Комментарии:
1. У вас есть один
ChatRoom
экземпляр, потому что вы создали только один. ПереместитесьChatRoom chatroom = new ChatRoom();
в начало цикла for.2. Спасибо, что увидели это. Мой плохой.