Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
flutter-to-return列表中的嵌套期货_Flutter_Dart - Fatal编程技术网

flutter-to-return列表中的嵌套期货

flutter-to-return列表中的嵌套期货,flutter,dart,Flutter,Dart,我试图从未来返回一个列表,并将此列表提供给ListView.builder,但每个帖子都需要等待另一个未来才能获取创建帖子的用户的数据。我首先尝试在build方法中返回一个future builder,然后在其中返回一个ListView.builder,对于每一篇文章,我都会返回第二个future builder来获取用户的数据。它似乎是第一个工作,但第二个未来构建器在滚动时不断返回数据,listview变得不可用 这是我的代码: @override Widget build(BuildCo

我试图从未来返回一个列表,并将此列表提供给ListView.builder,但每个帖子都需要等待另一个未来才能获取创建帖子的用户的数据。我首先尝试在build方法中返回一个future builder,然后在其中返回一个ListView.builder,对于每一篇文章,我都会返回第二个future builder来获取用户的数据。它似乎是第一个工作,但第二个未来构建器在滚动时不断返回数据,listview变得不可用

这是我的代码:

@override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: FirestoreService().posts(),
        builder: (context, posts) {
          if (posts.connectionState == ConnectionState.done && 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 &&
                            user.hasData) {
                          posts.data[index].user = user.data;
                          return postTile(
                            postObject: posts.data[index],
                            showUserInfo: true,
                          );
                        } else {
                          return Container();
                        }
                      });
                });
          } else {
            return Container();
          }
        });
}

你知道我如何从两个未来中获得一个列表并直接提供给listview构建吗?

异步方法包装这两个未来,然后调用它。异步方法起作用,但它会影响应用程序的性能。取而代之的是,我先加载帖子,这样用户在屏幕上就有了一些东西,在每个帖子磁贴中,我得到了用户的数据。这将如何影响应用程序的性能?帖子页面将在很长一段时间内保持加载状态,屏幕上不会显示帖子,直到加载所有帖子和每个帖子用户,而在第二种方法中,所有帖子都会被加载,用户可以滚动并与帖子交互,即使用户数据仍在加载中,这与性能无关,也与用户体验无关。虽然它看起来更具响应性,但如果用户在帖子加载之前试图对帖子中的用户数据进行处理,则应该小心用户操作。