颤振|在Listview中使用Listview.builder-使整个页面可滚动

颤振|在Listview中使用Listview.builder-使整个页面可滚动,listview,dart,flutter,Listview,Dart,Flutter,我想建立一个类似instagram的个人资料页面,其中当前用户的所有帖子都列在一个提要中。在上面,应该显示关于用户的一些信息(化身、追随者数量、帖子数量、个人简历等)用户应该能够滚动整个页面。目前,页面只能滚动到my ListView.builder中sizedBox小部件的高度。就这样, Widget build(BuildContext context) { return SafeArea( child: Scaffold( appBar: Ap

我想建立一个类似instagram的个人资料页面,其中当前用户的所有帖子都列在一个提要中。在上面,应该显示关于用户的一些信息(化身、追随者数量、帖子数量、个人简历等)用户应该能够滚动整个页面。目前,页面只能滚动到my ListView.builder中sizedBox小部件的高度。就这样,

Widget build(BuildContext context) {

    return SafeArea(
      child: Scaffold(    
        appBar: AppBar(),
        body: ListView(    
          children: <Widget>[
           Padding(
                    padding: const EdgeInsets.only(left: 25.0, top: 30.0),
                    child: Text(_user.displayName,
                        style: TextStyle(
                            color: Colors.black,
                            fontWeight: FontWeight.bold,
                            fontSize: 20.0)),
                  ),
                  ...(all the other information for the "header-part")

                  postImagesWidget(),

            ])));}

ProfilePage类的构建方法如下所示:

Widget build(BuildContext context) {

    return SafeArea(
      child: Scaffold(    
        appBar: AppBar(),
        body: ListView(    
          children: <Widget>[
           Padding(
                    padding: const EdgeInsets.only(left: 25.0, top: 30.0),
                    child: Text(_user.displayName,
                        style: TextStyle(
                            color: Colors.black,
                            fontWeight: FontWeight.bold,
                            fontSize: 20.0)),
                  ),
                  ...(all the other information for the "header-part")

                  postImagesWidget(),

            ])));}
小部件构建(构建上下文){
返回安全区(
儿童:脚手架(
appBar:appBar(),
正文:列表视图(
儿童:[
填充物(
填充:仅限常量边集(左:25.0,顶:30.0),
子项:文本(_user.displayName,
样式:TextStyle(
颜色:颜色,黑色,
fontWeight:fontWeight.bold,
字体大小:20.0),
),
…(标题部分的所有其他信息)
postImagesWidget(),
])));}
postImagesWidget中,我正在使用ListView.builder构建提要:

Widget postImagesWidget(){
return FutureBuilder(
            future: _future,
            builder:
                ((context, AsyncSnapshot<List<DocumentSnapshot>> snapshot) {
              if (snapshot.hasData) {
                if (snapshot.connectionState == ConnectionState.done) {
                  return SizedBox(
                    height: 600,
                      child: ListView.builder(
                          physics: const NeverScrollableScrollPhysics(),

                          //shrinkWrap: true,
                          itemCount: snapshot.data.length,
                          itemBuilder: ((context, index) => ListItem(
                              list: snapshot.data,
                              index: index,
                              user: _user))));
                } else {
                  return Center(
                    child: CircularProgressIndicator(),
                  );
                }
              } else {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
            }),
          );

}
Widget positmageswidget(){
回归未来建设者(
未来:未来,
建设者:
((上下文,异步快照){
if(snapshot.hasData){
if(snapshot.connectionState==connectionState.done){
返回大小框(
身高:600,
子项:ListView.builder(
物理学:const NeverScrollableScrollPhysics(),
//收缩膜:对,
itemCount:snapshot.data.length,
itemBuilder:((上下文,索引)=>ListItem(
列表:snapshot.data,
索引:索引,,
用户:_user));
}否则{
返回中心(
子对象:CircularProgressIndicator(),
);
}
}否则{
返回中心(
子对象:CircularProgressIndicator(),
);
}
}),
);
}
我必须添加一个sizedBox小部件以避免此错误:

引发了另一个异常:RenderBox未布局:RenderViewport#50ccf NEEDS-PAINT

此错误的描述说,我应该向我的ListView.builder中添加包覆面提取,但在使用此错误滚动一段时间后,这会使我的整个应用程序崩溃:

失败的断言:第470行位置12:“child.hasSize”:不正确

如何使整个页面可滚动,而不是将两部分(页眉和提要)分开?

我知道这与我在ListView中使用ListView.builder有关


致以最诚挚的问候。

我个人不会在颤振列表中使用大小合适的组件,除非您希望布局的一部分可以在特定区域中滚动

但是在您的例子中,我看到您希望整个页面都是可滚动的,因此您有一个起点,从这里可以设计页面的其余部分。(整个页面应该是可滚动的,所以我知道这个页面的顶部小部件应该是可滚动的小部件,比如SingleChildScrollView、CustomScrollView、ListView等。)

现在,您的方法并没有错,但需要知道SizedBox的最终高度,您可以根据列表进行计算。(太难了)

为了解决您的问题,我使用了带有SliverList小部件的CustomScrollView

返回安全区域(
孩子:脚手架(
appBar:appBar(),
正文:自定义滚动视图(
条子:[
银表(
委托:SliverChildListDelegate(
[
填充物(
填充:仅限常量边集(左:25.0,顶:30.0),
子项:文本(显示名称,
样式:TextStyle(
颜色:Colors.black,fontwweight:fontwweight.bold,fontSize:20.0)),
),
],
),
),
未来建设者(
future:ApiProvider.getPictures(),
生成器:((上下文,异步快照){
if(snapshot.hasData){
if(snapshot.connectionState==connectionState.done){
返回银表(
代表:SliverChildBuilderDelegate(
(上下文,索引)=>容器(
边缘:边缘组。对称(垂直:10),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
显示名称,
样式:TextStyle(
fontSize:17,fontWeight:fontWeight.bold),
),
文本(快照.数据[索引].位置),
形象(
image:NetworkImage(snapshot.data[index].pictureUrl),
宽度:MediaQuery.of(context).size.width,
)
],
),
),
子计数:快照