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

问题描述 投票:16回答:3

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

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上还有足够的空间。我的问题是为什么Row不展示其MainAxisAlignment.end财产?

flutter flutter-layout
3个回答
46
投票

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

14
投票

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

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

4
投票

你可以通过很多方式做到这一点。

使用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

© www.soinside.com 2019 - 2024. All rights reserved.