Flutter Can';t在LayoutBuilder小部件中设置ListView(颤振)
我需要这样的结构 我使用Flutter Can';t在LayoutBuilder小部件中设置ListView(颤振),flutter,dart,Flutter,Dart,我需要这样的结构 我使用LayoutBuilder获取内容的高度(在应用程序栏和TabsBottomNavigation之间)。在这里,我构建了配置文件信息容器,并希望使用一些列表平铺构建ListView,但当我尝试在布局生成器中构建它时,控制台中出现了错误 如果我用LayoutBuilder创建ListView,它会工作 请帮我解决它。 我的代码如下: Widget build(BuildContext context) { return LayoutBuilder(
LayoutBuilder
获取内容的高度(在应用程序栏和TabsBottomNavigation
之间)。在这里,我构建了配置文件信息容器,并希望使用一些列表平铺构建ListView,但当我尝试在布局生成器中构建它时,控制台中出现了错误
如果我用LayoutBuilder
创建ListView
,它会工作
请帮我解决它。
我的代码如下:
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return SingleChildScrollView(
child: Container(
child: Column(
children: <Widget>[
Container(
height: viewportConstraints.maxHeight * .44,
color: Theme.of(context).primaryColor,
padding: EdgeInsets.only(bottom: 2),
child: Align(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildProfileImage(context),
SizedBox(height: 17),
Text(userName)
],
),
),
),
Expanded(
child: ListView(
children: <Widget>[
ListTile(
leading: Icon(Icons.print),
title: Text('asdad'),
)
],
),
)
],
),
),
);
},
);
}
小部件构建(构建上下文){
返回布局生成器(
生成器:(BuildContext上下文,BoxConstraints视口Constraints){
返回SingleChildScrollView(
子:容器(
子:列(
儿童:[
容器(
高度:viewportConstraints.maxHeight*.44,
颜色:主题。背景。原色,
填充:仅限边缘设置(底部:2),
子对象:对齐(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_buildProfileImage(上下文),
尺寸箱(高度:17),
文本(用户名)
],
),
),
),
扩大(
子:ListView(
儿童:[
列表砖(
前导:图标(Icons.print),
标题:文本(“asdad”),
)
],
),
)
],
),
),
);
},
);
}
小部件构建(构建上下文){
返回列(
儿童:[
扩大(
子:布局生成器(
生成器:(BuildContext上下文,BoxConstraints视口Constraints){
返回SingleChildScrollView(
子:容器(
子:列(
儿童:[
容器(
高度:viewportConstraints.maxHeight*.44,
颜色:主题。背景。原色,
填充:仅限边缘设置(底部:2),
子对象:对齐(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_buildProfileImage(上下文),
尺寸箱(高度:17),
文本(用户名)
],
),
),
),
扩大(
子:ListView(
儿童:[
列表砖(
前导:图标(Icons.print),
标题:文本(“asdad”),
)
],
),
)
],
),
),
);
},
),
),
]
);
}
使用下面的构建
方法将适用于您的情况。(我已经检查过了,它正在工作,所以我希望它在您的情况下也能工作,并且符合您的要求。)
小部件构建(构建上下文){
返回布局生成器(
生成器:(BuildContext上下文,BoxConstraints视口Constraints){
返回容器(
子:列(
儿童:[
容器(
高度:viewportConstraints.maxHeight*.44,
颜色:主题。背景。原色,
填充:仅限边缘设置(底部:2),
子对象:对齐(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_buildProfileImage(上下文),
尺寸箱(高度:17),
文本(用户名),
],
),
),
),
尺寸箱(高度:16),
灵活的(
子:ListView(
儿童:[
卡片(
孩子:ListTile(
前导:图标(Icons.print),
标题:文本(“asdad”),
),
),
],
),
),
],
),
);
},
);
}
我认为在这种情况下,SingleChildScrollView
是没有用的,所以我删除了它,但如果你这样填写,你可以使用它
您仍然需要根据自己的意愿进行一些UI改进,因为这是符合您需求的基本结构
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return Container(
child: Column(
children: <Widget>[
Container(
height: viewportConstraints.maxHeight * .44,
color: Theme.of(context).primaryColor,
padding: EdgeInsets.only(bottom: 2),
child: Align(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildProfileImage(context),
SizedBox(height: 17),
Text(userName),
],
),
),
),
SizedBox(height: 16),
Flexible(
child: ListView(
children: <Widget>[
Card(
child: ListTile(
leading: Icon(Icons.print),
title: Text('asdad'),
),
),
],
),
),
],
),
);
},
);
}
希望这能对您有所帮助。小部件构建(BuildContext){
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return SingleChildScrollView(
child: ListView(
shrinkWrap: true,
children: <Widget>[
new Container(
height: MediaQuery.of(context).size.height/3,
color: Theme.of(context).primaryColor,
padding: EdgeInsets.only(bottom: 2),
child: Align(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildProfileImage(context),
SizedBox(height: 17),
Text(userName)
],
),
),
),
new ListView(
shrinkWrap: true,
children: <Widget>[
ListTile(
leading: Icon(Icons.print),
title: Text('asdad'),
)
],
)
],
),
);
},
);
}
返回布局生成器(
生成器:(BuildContext上下文,BoxConstraints视口Constraints){
返回SingleChildScrollView(
子:ListView(
收缩膜:对,
儿童:[
新容器(
高度:MediaQuery.of(context).size.height/3,
颜色:主题。背景。原色,
填充:仅限边缘设置(底部:2),
子对象:对齐(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_buildProfileImage(上下文),
尺寸箱(高度:17),
文本(用户名)
],
),
),
),
新列表视图(
收缩膜:对,
儿童:[
列表砖(
前导:图标(Icons.print),
标题:文本(“asdad”),
)
],
)
],
),
);
},
);
}
如果您阅读错误日志,它会显示
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return SingleChildScrollView(
child: ListView(
shrinkWrap: true,
children: <Widget>[
new Container(
height: MediaQuery.of(context).size.height/3,
color: Theme.of(context).primaryColor,
padding: EdgeInsets.only(bottom: 2),
child: Align(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildProfileImage(context),
SizedBox(height: 17),
Text(userName)
],
),
),
),
new ListView(
shrinkWrap: true,
children: <Widget>[
ListTile(
leading: Icon(Icons.print),
title: Text('asdad'),
)
],
)
],
),
);
},
);
}
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return ListView(
shrinkWrap: true, // That's it
children: <Widget>[
Container(
color: Theme.of(context).primaryColor,
height: viewportConstraints.maxHeight * .44,
padding: EdgeInsets.only(bottom: 2),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildProfileImage(context),
SizedBox(height: 17),
Text(userName)
],
),
),
ListTile(
leading: Icon(Icons.print),
title: Text('asdad'),
),
ListTile(
leading: Icon(Icons.print),
title: Text('asdad'),
),
ListTile(
leading: Icon(Icons.print),
title: Text('asdad'),
)
],
);
},
);
}
MediaQuery.of(context).padding.top //APP bar height
MediaQuery.of(context).padding.bottom //Bottom bar height
MediaQuery.of(context).size.height //Screen height