颤动对齐极端的两个项目 - 一个在左边,一个在右边

时间:2018-05-16 08:22:44

标签: flutter flutter-layout

我正在尝试将两个项目对齐在左边的一个极端,一个在右边。 我有一行与左边对齐,然后该行的子项与右边对齐。但是,子行似乎从其父级中获取了对齐属性。这是我的代码

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属性?

4 个答案:

答案 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),
  ],
);

输出

enter image description here

答案 3 :(得分:1)

是的,CopsOnRoad是正确的,通过堆栈,您可以将一个在右边对齐,另一个在中心对齐。

Stack(
    children: [
      Align(
        alignment: Alignment.centerRight,
        child: Text("right"),
      ),
      Align(
        alignment: Alignment.center,
        child: Text("center"),
      )
    ],
  )
相关问题