Layout 使用crossaxisalignment时文本未居中

Layout 使用crossaxisalignment时文本未居中,layout,flutter,Layout,Flutter,我使用的是crossAxisAlignment:crossAxisAlignment.center,但不知何故,文本“Logo”没有居中。真的不太确定是什么原因造成的,我在这里遗漏了什么 class LoginPage extends StatefulWidget { @override _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State<Logi

我使用的是crossAxisAlignment:crossAxisAlignment.center,但不知何故,文本“Logo”没有居中。真的不太确定是什么原因造成的,我在这里遗漏了什么

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomPadding: false,
      appBar: AppBar(
        title: Text('Login'),
      ),
      body: GestureDetector(
        child: Container(
          padding: EdgeInsets.only(
              top: 100.0, right: 20.0, left: 20.0, bottom: 20.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Text(
                'Logo',
                style: TextStyle(fontSize: 50.0),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
class LoginPage扩展StatefulWidget{
@凌驾
_LoginPagentate createState()=>_LoginPagentate();
}
类_loginpagentate扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
resizeToAvoidBottomPadding:false,
appBar:appBar(
标题:文本(“登录”),
),
正文:手势检测器(
子:容器(
填充:仅限边缘设置(
顶部:100.0,右侧:20.0,左侧:20.0,底部:20.0),
子:列(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
"标志",,
样式:TextStyle(fontSize:50.0),
),
],
),
),
),
);
}
}

来自关于集装箱的颤振文档:

没有子容器的容器尽量大,除非传入的约束是无界的,在这种情况下,它们尽量小具有子容器的容器根据其子容器的大小调整自身大小。构造函数的宽度、高度和约束参数将覆盖此值

您的
文本('Logo')
不够大,无法使用所有屏幕宽度,因此
容器
无法使用图像中显示的所有屏幕宽度(使用拍摄,这对于调试非常有用)

您可以将更多小部件添加到
列中
,其宽度将随着使用而增加,或者只需将
宽度:MediaQuery.of(context).size.width
添加到
容器中
,以占用父级的所有可用宽度

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomPadding: false,
      appBar: AppBar(
        title: Text('Login'),
      ),
      body: GestureDetector(
        child: Container(
          width: MediaQuery.of(context).size.width,
          padding: EdgeInsets.only(
              top: 100.0, right: 20.0, left: 20.0, bottom: 20.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Text(
                'Logo',
                style: TextStyle(fontSize: 50.0),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
class LoginPage扩展StatefulWidget{
@凌驾
_LoginPagentate createState()=>_LoginPagentate();
}
类_loginpagentate扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
resizeToAvoidBottomPadding:false,
appBar:appBar(
标题:文本(“登录”),
),
正文:手势检测器(
子:容器(
宽度:MediaQuery.of(context).size.width,
填充:仅限边缘设置(
顶部:100.0,右侧:20.0,左侧:20.0,底部:20.0),
子:列(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
"标志",,
样式:TextStyle(fontSize:50.0),
),
],
),
),
),
);
}
}

Hi Henrique,你的回答很中肯,但我只是想指出,你不应该使用double.infinity,而应该使用MediaQuery.of(context.size.width),这将确保你占用父级的所有可用宽度,而不是无限大。@ShubhamBhardwaj确实,这比无限大更有意义,我编辑了我的答案。谢谢你的提示。