Flutter 在极端情况下对齐两个项目——一个在左边,一个在右边

Flutter align two items on extremes - one on the left and one on the right

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

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 也有足够的 space。我的问题是为什么子 Row 没有展示它的 MainAxisAlignment.end 属性 ?

使用单个 RowmainAxisAlignment: 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,
    ),
  ],
);

一个简单的解决方案是在两个小部件之间使用 Spacer()

Row(
  children: [
    Text("left"),
    Spacer(),
    Text("right")
  ]
);

您可以通过多种方式做到这一点。

使用mainAxisAlignment: MainAxisAlignment.spaceBetween

Row(
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: <Widget>[
    FlutterLogo(),
    FlutterLogo(),
  ],
);

使用Spacer

Row(
  children: <Widget>[
    FlutterLogo(),
    Spacer(),
    FlutterLogo(),
  ],
);

使用Expanded

Row(
  children: <Widget>[
    FlutterLogo(),
    Expanded(child: SizedBox()),
    FlutterLogo(),
  ],
);

使用Flexible

Row(
  children: <Widget>[
    FlutterLogo(),
    Flexible(fit: FlexFit.tight, child: SizedBox()),
    FlutterLogo(),
  ],
);

输出:

是的CopsOnRoad是对的,通过堆叠你可以一个右对齐一个居中

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

连续使用代码行mainAxisAlignment: MainAxisAlignment.spaceBetween,。这将使小部件处于两个极端。但是,如果您正在处理 TextField,请改用装饰 class 和属性前缀*** 和后缀***

使用 Flexing 小部件

Row(
            children: [
              Text(
                '1',
                style: TextStyle(
                    fontSize: 18, color: Colors.black),
              ),
              Flexible(fit: FlexFit.tight, child: SizedBox()),
              Text(
                '10',
                style: TextStyle(
                    fontSize: 18, color: Colors.black),
              ),
            ],
          ),

我的行中有 多个条目,而接受的答案对我不起作用。
我需要 将最后一个条目包装在 Align 中。


我有:

Row( 
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: [
    ...allMyLeftAlignedChildren,
    Expanded( 
      child: myRightAlignedChild, 

我需要:

Row( 
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: [
    ...allMyLeftAlignedChildren,
    Expanded( 
      child: Align(                       // <---  these 2 lines fixed it 
        alignment: Alignment.centerRight, // <---  these 2 lines fixed it
        child: myRightAlignedChild,