我正在尝试将两个项目对齐在左边的一个极端,一个在右边。 我有一行与左边对齐,然后该行的子项与右边对齐。但是,子行似乎从其父级中获取了对齐属性。这是我的代码
var SettingsRow = new Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Text("Right",softWrap: true,),
],
);
var nameRow = new Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Text("Left"),
SettingsRow,
],
);
因此我得到了类似的东西
Left Right
我想要的是
Left Right
行上还有足够的空间。我的问题是为什么Row不会展示其MainAxisAlignment.end
属性?
答案 0 :(得分:43)
使用单Row
代替mainAxisAlignment: MainAxisAlignment.spaceBetween
。
new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
new Text("left"),
new Text("right")
]
);
或者您可以使用Expanded
new Row(
children: [
new Text("left"),
new Expanded(
child: settingsRow,
),
],
);
答案 1 :(得分:13)
一个简单的解决方案是在两个小部件之间使用Spacer()
Row(
children: [
Text("left"),
Spacer(),
Text("right")
]
);
答案 2 :(得分:2)
您可以通过多种方式进行操作。
使用 mainAxisAlignment: MainAxisAlignment.spaceBetween
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
FlutterLogo(size: 120),
FlutterLogo(size: 120),
],
);
使用 Spacer
Row(
children: <Widget>[
FlutterLogo(size: 120),
Spacer(),
FlutterLogo(size: 120),
],
);
使用 Expanded
Row(
children: <Widget>[
FlutterLogo(size: 120),
Expanded(child: SizedBox()),
FlutterLogo(size: 120),
],
);
使用 Flexible
Row(
children: <Widget>[
FlutterLogo(size: 120),
Flexible(fit: FlexFit.tight, child: SizedBox()),
FlutterLogo(size: 120),
],
);
输出:
答案 3 :(得分:1)
是的,CopsOnRoad
是正确的,通过堆栈,您可以将一个在右边对齐,另一个在中心对齐。
Stack(
children: [
Align(
alignment: Alignment.centerRight,
child: Text("right"),
),
Align(
alignment: Alignment.center,
child: Text("center"),
)
],
)