我想在Flutter中显示元素列表,其中包含图片,标题和一些其他信息。我的布局应该看起来像这样:
我已经使用ListView
和Card
个孩子来实现此目的。然后,我使用Row
在左侧显示图像,在右侧显示信息。然后,我使用Column
将标题放在顶部,其余信息放在下面。
我的问题是标题,标题对于其容器的宽度可能太大。我原本以为是让用户滚动文本,但是我不确定是否可以在Flutter中嵌套两个启用滚动的小部件,所以我选择使用TextOverflow.ellipsis
。但是在我的基本设置中,TextOverflow.ellipsis
没有任何作用,相反,我遇到了溢出错误。
在网上查找之后,我发现必须将Text
放入Expanded
或Flexible
中,它们本身必须是Flex
的直接子代(我使用了Row
)。但是,这还不够,因为出现以下错误:RenderFlex children have non-zero flex but incoming width constraints are unbounded.
。要解决此问题,我必须添加Container
作为Row
(Flex
)的父元素,并且宽度固定。
这是我当前的代码:
Card(
color: backgroundColor,
child: Row(
children: <Widget>[
MyImageWidget(),
Container(
height: 60,
child: Column(
children: <Widget>[
Container(
padding: EdgeInsets.symmetric(vertical: 4, horizontal: 12),
height: 30,
width: 340, // I don't want this
child: Row(
children: [
Expanded(
child: Text(
"Title which may be long, very very long",
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
],
),
),
],
),
),
],
),
);
是否有摆脱固定宽度约束的方法?我知道我可以使用“媒体查询”,但除非绝对必要,否则我不想这样做,因为我可能会更改多个元素的填充,甚至移动到大屏幕上的网格视图。
或者如果我绝对必须设置此固定宽度,是否可以让Flutter找出Container
的宽度(如果没有内容的话)是什么,然后将其应用为固定宽度本身?
答案 0 :(得分:1)
您只需要将右侧Column
包装在Expanded
小部件中,即可占用Row
内的所有剩余可用空间,而TextOverflow.ellipsis
将占用照顾其余的人。
return Card(
color: backgroundColor,
child: Row(
children: <Widget>[
MyImageWidget(),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 4,
horizontal: 12,
),
child: Column(
children: <Widget>[
Text(
"Title which may very very very very very very",
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
],
),
),
),
],
),
);