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