Flutter 导致布局问题的列小部件
我目前有一个由Flutter 导致布局问题的列小部件,flutter,dart,Flutter,Dart,我目前有一个由Containers()组成的列表(因为我不能使用ListView,因为我需要外部滚动),它工作得很好,只是因为在每个列表中,我都有一个Row(),带有两个Column()小部件。第一列应限制为打印图像,第二列以行的形式显示某些信息。这是做列表的一种非常典型的方式,所以我认为它不应该引起问题 问题是,第二个列()中的第二个Text()小部件似乎总是导致上方的Text()向右移动,导致溢出并使文本无法读取,用户无法访问。请看这张图片: 是的,标题在那里(即使你看不到第二个)。它们只
Containers()
组成的列表(因为我不能使用ListView,因为我需要外部滚动),它工作得很好,只是因为在每个列表中,我都有一个Row()
,带有两个Column()
小部件。第一列应限制为打印图像,第二列以行的形式显示某些信息。这是做列表的一种非常典型的方式,所以我认为它不应该引起问题
问题是,第二个列()
中的第二个Text()
小部件似乎总是导致上方的Text()
向右移动,导致溢出并使文本无法读取,用户无法访问。请看这张图片:
是的,标题在那里(即使你看不到第二个)。它们只是完全向右移动了。如果我删除下面的描述,它们会正确地显示在左侧,只留下一点空白。问题是,无论下面的元素是什么,这些标题都应该存在,或者至少,这就是我理解Column()
小部件应该工作的方式
看看代码:
getListItems(List<Artist> artistList) {
// Iterate through the whole Artists array and render a list item for each one
return artistList.map((Artist artist) {
return Container(
margin: EdgeInsets.only(top: 12),
height: 100,
color: Colors.grey[600],
child: Row(
children: <Widget>[
Padding(padding: EdgeInsets.only(left: 15)),
Column(
children: <Widget>[
Image(
width: 100,
height: 100,
fit: BoxFit.cover,
image: artist.avatar)
],
),
Padding(padding: EdgeInsets.only(top: 5)),
Column(
children: <Widget>[
Text(
artist.name,
style: TextStyle(fontSize: 18),
),
Padding(padding: EdgeInsets.only(top: 5)),
Text(artist.description, style: TextStyle(fontSize: 13))
],
)
],
));
}).toList();
getListItems(列表artistList){
//迭代整个美工数组,并为每个数组呈现一个列表项
返回artistList.map((艺术家){
返回容器(
页边距:仅限边缘集(顶部:12),
身高:100,
颜色:颜色。灰色[600],
孩子:排(
儿童:[
填充(填充:仅限边集(左:15)),
纵队(
儿童:[
形象(
宽度:100,
身高:100,
适合:BoxFit.cover,
图片:艺术家(阿凡达)
],
),
填充(填充:仅限边集(顶部:5)),
纵队(
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
文本(艺术家描述,样式:TextStyle(字体大小:13))
],
)
],
));
}).toList();
此代码中有什么错误?谢谢!您需要对包含
文本小部件的列进行一些修改
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
artist.name,
style: TextStyle(fontSize: 18),
),
Padding(padding: EdgeInsets.only(top: 5)),
Container(
width: MediaQuery.of(context).size.width * 0.5, // can change "0.5" according to your requirement
child: Text(
artist.description,
style: TextStyle(fontSize: 13),
),
),
],
)
列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
容器(
宽度:MediaQuery.of(context).size.width*0.5,//可以根据需要更改“0.5”
子:文本(
艺术家描述,
样式:TextStyle(字体大小:13),
),
),
],
)
您需要对包含文本
小部件的列
进行一些修改
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
artist.name,
style: TextStyle(fontSize: 18),
),
Padding(padding: EdgeInsets.only(top: 5)),
Container(
width: MediaQuery.of(context).size.width * 0.5, // can change "0.5" according to your requirement
child: Text(
artist.description,
style: TextStyle(fontSize: 13),
),
),
],
)
列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
容器(
宽度:MediaQuery.of(context).size.width*0.5,//可以根据需要更改“0.5”
子:文本(
艺术家描述,
样式:TextStyle(字体大小:13),
),
),
],
)
您可以使用Flexible
包装第二列,以避免溢出:
Container(
margin: EdgeInsets.only(top: 12),
height: 100,
color: Colors.grey[600],
child: Row(
children: <Widget>[
Padding(padding: EdgeInsets.only(left: 15)),
Column(
children: <Widget>[
Image(
width: 100,
height: 100,
fit: BoxFit.cover,
image: artist.avatar)
],
),
Flexible(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
artist.name,
style: TextStyle(fontSize: 18),
),
Padding(padding: EdgeInsets.only(top: 5)),
Text(artist.description, style: TextStyle(fontSize: 13))
],
),
)
],
))
容器(
页边距:仅限边缘集(顶部:12),
身高:100,
颜色:颜色。灰色[600],
孩子:排(
儿童:[
填充(填充:仅限边集(左:15)),
纵队(
儿童:[
形象(
宽度:100,
身高:100,
适合:BoxFit.cover,
图片:艺术家(阿凡达)
],
),
灵活的(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
文本(艺术家描述,样式:TextStyle(字体大小:13))
],
),
)
],
))
您可以使用Flexible
包装第二列,以避免溢出:
Container(
margin: EdgeInsets.only(top: 12),
height: 100,
color: Colors.grey[600],
child: Row(
children: <Widget>[
Padding(padding: EdgeInsets.only(left: 15)),
Column(
children: <Widget>[
Image(
width: 100,
height: 100,
fit: BoxFit.cover,
image: artist.avatar)
],
),
Flexible(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
artist.name,
style: TextStyle(fontSize: 18),
),
Padding(padding: EdgeInsets.only(top: 5)),
Text(artist.description, style: TextStyle(fontSize: 13))
],
),
)
],
))
容器(
页边距:仅限边缘集(顶部:12),
身高:100,
颜色:颜色。灰色[600],
孩子:排(
儿童:[
填充(填充:仅限边集(左:15)),
纵队(
儿童:[
形象(
宽度:100,
身高:100,
适合:BoxFit.cover,
图片:艺术家(阿凡达)
],
),
灵活的(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
文本(艺术家描述,样式:TextStyle(字体大小:13))
],
),
)
],
))
您可以使用Flexible()
小部件将文本小部件包装在Flexible小部件中
return Center(
child: Padding(padding: EdgeInsets.only(left: 50, right: 50),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Flexible(
child: Text('Hii....helloo....how r u?...here you can show multiple line.', textAlign: TextAlign.center,style: TextStyle(fontSize: 20.0, color: Colors.white))),
],
),
)
);
返回中心(
Expanded(
child:
Container(
margin: EdgeInsets.only(top: 12),
height: 100,
color: Colors.grey[600],......
Container(
margin: EdgeInsets.only(top: 12),
height: `MediaQuery.of(context).size.height`,
color: Colors.grey[600],
child: Row(
children: <Widget>[
Padding(padding: EdgeInsets.only(left: 15)),
Column(
children: <Widget>[
Image(
width: 100,
height: 100,
fit: BoxFit.cover,
image: artist.avatar)
],
),
Padding(padding: EdgeInsets.only(top: 5)),
Column(
children: <Widget>[
Text(
artist.name,
style: TextStyle(fontSize: 18),
),
Padding(padding: EdgeInsets.only(top: 5)),
Text(artist.description, style: TextStyle(fontSize: 13))
],
)
],
));
}).toList();