Какой был бы лучший способ написать эту итерацию dart и вернуть список

#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. Спасибо, что увидели это. Мой плохой.