为什么图标按钮没有居中?

时间:2019-03-29 17:25:00

标签: user-interface flutter

我正在开发Flutter应用程序,但无法弄清楚为什么我的图标按钮不在页面中间居中。 我将代码包装在Center()

这是我的页面:

https://imgur.com/a/YlCW3Xu

这是我的代码:

import "package:flutter/material.dart";
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

class LogInScreen extends StatefulWidget {
  @override
  _LogInScreenState createState() => new _LogInScreenState();
}

class _LogInScreenState extends State<LogInScreen> {
  String _email, _password;
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: Center(
          child: ListView(
        children: <Widget>[
          Column(children: <Widget>[
            new Container(
              padding: (EdgeInsets.only(top: 50)),
              child: Text(
                "Sign In",
                style: TextStyle(
                  fontSize: 40,
                ),
              ),
            ),
            new Container(
                padding: (EdgeInsets.only(top: 50, left: 35, right: 35)),
                child: Column(children: <Widget>[
                  new Form(
                      child: new Column(children: <Widget>[
                    Padding(
                      padding: EdgeInsets.only(top: 20),
                      child: new RaisedButton(
                        onPressed: () {},
                        color: Colors.blue,
                        textColor: Colors.white,
                        child: const Text('Login'),
                      ),
                    ),
                  ])),
                ])),
            new Container(
              padding: EdgeInsets.only(top: 40),
              child: Column(
                children: <Widget>[
                  new Text("Or login with"),
                ],
              ),
            ),
          ]),
          new Center(
              child: new Row(
            children: <Widget>[
              new IconButton(
                icon: Icon(FontAwesomeIcons.facebookF),
                color: Colors.blue,
              ),
              new IconButton(
                icon: Icon(FontAwesomeIcons.google),
                color: Colors.blue,
              ),
            ],
          )),
        ],
      )),
    );
  }
}


我删除了texts字段,以使代码适合。 我希望你能帮帮我, 谢谢您的帮助!

4 个答案:

答案 0 :(得分:8)

将 IconButton 的 padding 设置为 0,如下所示:

IconButton(
  padding: EdgeInsets.zero,
  ...
)

答案 1 :(得分:1)

一些更改:

  • 为您的shrinkWrap添加ListView

    ListView(
      shrinkWrap: true,
      ...
    
  • mainAxisAlignment MainAxisAlignment.center添加到您的Row

    new Center(
              child: new Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  new IconButton( 
                  ...
    

答案 2 :(得分:1)

基本上Center()小部件仅使行本身居中,而不是行中的小部件。 要对齐行中的子级,请使用mainAxisAlignment: MainAxisAlignment.center进行水平对齐,使用crossAxisAlignment: CrossAxisAlignment.center进行垂直对齐,请查看更多here

因此您的代码应该是:

`  new Center(
          child: new Row(
        mainAxisAlignment: MainAxisAlignment.center
        children: <Widget>[
          new IconButton(
            icon: Icon(FontAwesomeIcons.facebookF),
            color: Colors.blue,
          ),
          new IconButton(
            icon: Icon(FontAwesomeIcons.google),
            color: Colors.blue,
          ),
        ],
      )),`

答案 3 :(得分:0)

所有列出的解决方案均不起作用。对我来说,唯一的解决方案是将IconButton放在SizedBox中。

SizedBox(
    width: double.infinity,
    child: IconButton(
    icon: FaIcon(FontAwesomeIcons.moneyBillWave),
    iconSize: 80,    
    onPressed: () {},
   ),
  ),