这是我的代码:
child: new Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
new Icon(
Icons.call
),
new Container(
height: 30.0,
width: 100.0,
child: new TextFormField(
decoration: new InputDecoration(
labelText: 'User Name'),
validator: (val) =>
!val.contains('@')
? 'Not a valid email.'
: null,
onSaved: (val) => _email = val,
),
)
],
),
)
Run Code Online (Sandbox Code Playgroud)
这里Icon和TextFormField没有垂直对齐。TextFormField为其顶部留有边距,而电话图标稍有下降。
首先删除height的属性Container,然后设置crossAxisAlignment到CrossAxisAlignment.center其对齐到的行向中心的元件相对于竖直轴线。
例:
new Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
new Icon(Icons.call),
new Container(
width: 100.0,
child: new TextFormField(
decoration: const InputDecoration(labelText: 'User Name'),
validator: (val) =>
!val.contains('@') ? 'Not a valid email.' : null,
onSaved: (val) => _email = val,
),
)
],
)
Run Code Online (Sandbox Code Playgroud)
问题是TextFormField要在其自身周围添加一些填充。由于您只想对齐图标,因此您可能应该将其添加到您的 中InputDecoration,并且可以Row完全放弃使用; 您还可以将其向下移动一点,以强制其与文本输入底部下划线一致,并带有一些Padding:
new TextFormField(
decoration: const InputDecoration(
labelText: 'User Name',
icon: const Padding(
padding: const EdgeInsets.only(top: 15.0),
child: const Icon(Icons.call))),
validator: (val) =>
!val.contains('@') ? 'Not a valid email.' : null,
onSaved: (val) => _email = val,
),
Run Code Online (Sandbox Code Playgroud)
如果您希望它按照 Flutter 认为应该的方式对齐,您可以跳过Padding它,但我怀疑您可能仍然不满意它像默认情况下那样高。
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |