Screenshot of the problem 我试图通过在元素之间保持均匀的间距将元素放在红色框中。 (就像给每个权重1一样)。为此,我将“ mainAxisAlignment:MainAxisAlignment.spaceEvenly”放在父列中,但是它不起作用。
Container(
margin: EdgeInsets.only(bottom: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
CachedNetworkImage(
imageUrl:
"https://image.tmdb.org/t/p/w500/${movieDetails
.posterPath}",
height: 120.0,
fit: BoxFit.fill),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, //NOT WORKING!
children: <Widget>[
generateRow(
Strings.released, movieDetails.releaseDate),
generateRow(Strings.runtime,
movieDetails.runtime.toString()),
generateRow(Strings.budget,
movieDetails.budget.toString())
],
)))
],
)),
这是电影图像和红色框的代码。我创建了一个包含2个元素的行。第一个是那个图像,第二个是红色框。
Row generateRow(String key, String value) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[Text(key), Text(value)],
); }
我的generateRow方法
我该如何解决这个问题?
答案 0 :(得分:5)
由于您已将image
的高度设置为120.0
,您是否可以为另一个Container
的孩子做同样的事情。通过这样做,我能够实现您想要的东西。
代码段:
Container(
margin: EdgeInsets.only(bottom: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
CachedNetworkImage(
imageUrl:
"https://image.tmdb.org/t/p/w500/${movieDetails
.posterPath}",
height: 120.0,
fit: BoxFit.fill),
Expanded(
child: Container(
height: 120.0 //added to fix
margin: EdgeInsets.only(left: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, //NOT WORKING!
children: <Widget>[
generateRow(
Strings.released, movieDetails.releaseDate),
generateRow(Strings.runtime,
movieDetails.runtime.toString()),
generateRow(Strings.budget,
movieDetails.budget.toString())
],
)))
],
)),
调试技巧:
Flutter Inspector
来查找问题。 Refer Expanded
,它也只占据了图像大小的一半。 Expanded
的大小由孩子的大小决定(几乎是图像大小的一半)。 答案 1 :(得分:1)
尝试:
new Container(
margin: EdgeInsets.only(bottom: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
CachedNetworkImage(
imageUrl:
"https://image.tmdb.org/t/p/w500/${movieDetails
.posterPath}",
height: 120.0,
fit: BoxFit.fill),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, //NOT WORKING!
children: <Widget>[
new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
new Text("Released : "),
new Text("25-07-2018 "),
],
),
new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
new Text("Released : "),
new Text("25-07-2018 "),
],
),
new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
new Text("Released : "),
new Text("25-07-2018 "),
],
),
],
)))
],
)),
答案 2 :(得分:1)
获得结果的另一种方法:
Expanded(
child: Center(
child: // your widget here,
),
)
此人应该是Column
的孩子,那么它将起作用。
答案 3 :(得分:0)
尝试查看此信息: Flutter Layout Row / Column - share width, expand height
本质上,Row
中的图像元素使行在横轴上展开,但行的实际约束未修改。这就是Column
的{{1}}无法正常工作的原因。它需要一个父约束。这是在mainAxisAlignment: MainAxisAlignment.spaceEvenly
的帮助下实现的。将IntrinsicHeight
小部件包裹起来,会将行的约束设置为最大子级的大小(即图像)。