Вложенные фьючерсы в flutter для возврата списка

#flutter #dart

#flutter #dart

Вопрос:

Я пытаюсь вернуть список из будущего и передать этот список в ListView.builder, но каждому сообщению нужно ждать другого будущего, чтобы получить данные пользователя, создавшего сообщение. Сначала я попытался вернуть future builder в методе build, а внутри него вернуть ListView.builder, и для каждого сообщения я возвращаю второй future builder для получения пользовательских данных. Кажется, он работает первым, но второй конструктор будущего продолжает возвращать данные при прокрутке, и listview становится непригодным для использования.

это мой код:

 @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: FirestoreService().posts(),
        builder: (context, posts) {
          if (posts.connectionState == ConnectionState.done amp;amp; posts.hasData) {
            return ListView.builder(
                itemCount: posts.data.length,
                itemBuilder: (cobtext, index) {
                  return FutureBuilder(
                      future: FirestoreService()
                          .getUserById(posts.data[index].postedBy),
                      builder: (context, user) {
                        if (user.connectionState == ConnectionState.done amp;amp;
                            user.hasData) {
                          posts.data[index].user = user.data;
                          return postTile(
                            postObject: posts.data[index],
                            showUserInfo: true,
                          );
                        } else {
                          return Container();
                        }
                      });
                });
          } else {
            return Container();
          }
        });
}
  

Есть идеи, как я могу получить список из двух фьючерсов и передать его непосредственно в сборку listview?

Комментарии:

1. Оберните оба фьючерса в async метод и просто вызовите его.

2. Метод async сработал, но он снижает производительность приложения. Сначала я загрузил сообщения, чтобы у пользователя было что-то на экране, и внутри каждой плитки сообщений я получаю данные пользователя..

3. Как это повлияет на производительность приложения?

4. Страница сообщений будет находиться в состоянии загрузки в течение длительного периода времени, при этом сообщения не будут отображаться на экране, пока не будут загружены все сообщения и каждый пользователь post, в то время как во втором методе загружаются все сообщения, и пользователь может прокручивать и взаимодействовать с сообщениями, даже если данные пользователей все еще загружаются

5. Это не имеет ничего общего с производительностью и все, что связано с UX. И хотя это выглядит более отзывчивым, вы должны быть осторожны с действиями пользователей, если они пытаются что-то сделать с пользовательскими данными в сообщении до его загрузки.