无法居中列小部件

Zub*_*man 3 android flutter flutter-layout

我是不熟悉的新手,我试图将所有窗口小部件集中在列窗口小部件内,但无法正常工作。我尝试将列封装到中心窗口小部件中,但是它仍然相同,并且与屏幕顶部对齐。下面是我的代码,请看一下,让我知道我在做什么错。谢谢 :)

在此处输入图片说明

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

class SignIn extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Material(
      child: Padding(
        padding: EdgeInsets.all(15.0),
        child: Column(
          children: <Widget>[
            Text(
              'SignIn Screen',
              style: TextStyle(fontSize: 26.0),
            ),
            Padding(
              padding: EdgeInsets.only(top: 30.0),
            ),
            TextField(
              maxLength: 25,
              decoration: InputDecoration(
                hintText: 'Enter username',
              ),
            ),
            TextField(
              maxLength: 25,
              decoration: InputDecoration(
                hintText: 'Enter password',
              ),
            ),
            Expanded(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: <Widget>[
                  RaisedButton(
                    child: Text('SignIn'),
                    onPressed: _signIn,
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  Future _signIn() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isLoggedIn', true);
  }
}
Run Code Online (Sandbox Code Playgroud)

Sur*_*gch 12

垂直居中

Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: <Widget>[ ... ],
)
Run Code Online (Sandbox Code Playgroud)

水平居中

Column(
  crossAxisAlignment: CrossAxisAlignment.center,
  children: <Widget>[ ... ],
)
Run Code Online (Sandbox Code Playgroud)

但是,如果该列包含其内容,则只需将其包装在一个 Center 小部件中

Center(
  child: Column(
    children: <Widget>[ ... ],
  ),
)
Run Code Online (Sandbox Code Playgroud)

  • 为什么最后一个代码片段中需要“Center”小部件?当谈到 Flutter 时,我认为自己不仅仅是一个新手,这个非常基本的布局问题仍然让我感到困惑。 (2认同)
  • @jaredbaszler如果列宽已经尽可能窄,因为它拥抱了它的元素,那么尝试将元素在列宽内居中将不会做任何事情。“Center”小部件将其子部件置于“Center”部件的父部件中,假设父部件比“Center”的子部件大。因此,如果 Column 小部件的宽度小于 Center 小部件的父级宽度,则使用 Center 将使 Column 居中,进而使列元素居中。 (2认同)

And*_*sky 5

添加MainAxisAlignment.center和删除Expanded

class SignIn extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Material(
      child: Padding(
        padding: EdgeInsets.all(15.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Text(
              'SignIn Screen',
              style: TextStyle(fontSize: 26.0),
            ),
            Padding(
              padding: EdgeInsets.only(top: 30.0),
            ),
            TextField(
              maxLength: 25,
              decoration: InputDecoration(
                hintText: 'Enter username',
              ),
            ),
            TextField(
              maxLength: 25,
              decoration: InputDecoration(
                hintText: 'Enter password',
              ),
            ),
            RaisedButton(
                    child: Text('SignIn'),
                    onPressed: _signIn,
                  ),
          ],
        ),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)