如何垂直对齐行项目?

Far*_*rwa 3 dart flutter

这是我的代码:

        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为其顶部留有边距,而电话图标稍有下降。

Hem*_*Raj 6

首先删除height的属性Container,然后设置crossAxisAlignmentCrossAxisAlignment.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)


Dan*_*eld 3

问题是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它,但我怀疑您可能仍然不满意它像默认情况下那样高。