这是我的代码:
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,
),
)
],
),
)
这里Icon和TextFormField没有垂直对齐。 TextFormField为自己提供了一个优势,并且稍微降低了电话图标。
问题是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,
),
你可以跳过那个Padding
,如果你想让它像Flutter认为的那样对齐,但我怀疑你可能仍然不满意它坐在默认情况下的高度。
首先删除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,
),
)
],
)