Flutter 如何在颤振中使容器垂直居中?

Flutter 如何在颤振中使容器垂直居中?,flutter,Flutter,我正在开发一个颤振项目。我有一个如下的界面 现在它水平居中。现在我想把它垂直居中。我尝试使用mainAxisAlignment:mainAxisAlignment.center和crossAxisAlignment:crossAxisAlignment.center,但在UI中没有任何更改(仍显示为上图)。下面是我的实现。有人能告诉我这里需要做什么改变吗 import 'package:flutter/cupertino.dart'; import 'package:flutter/mater

我正在开发一个颤振项目。我有一个如下的界面

现在它水平居中。现在我想把它垂直居中。我尝试使用mainAxisAlignment:mainAxisAlignment.center和crossAxisAlignment:crossAxisAlignment.center,但在UI中没有任何更改(仍显示为上图)。下面是我的实现。有人能告诉我这里需要做什么改变吗

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:pan_asia_bank_app/widgets/NavDrawer.dart';

class ChangePassword extends StatelessWidget{

   Widget _inputField(String title, Color border) {
    return TextField(
      decoration: InputDecoration(
        hintText: title,
        enabledBorder: UnderlineInputBorder(
          borderSide: BorderSide(color: border),
        ),
        focusedBorder: UnderlineInputBorder(
          borderSide: BorderSide(color: border),
        ),
        border: UnderlineInputBorder(
          borderSide: BorderSide(color: border),
        ),
      ),
    );
  }

  Widget _buttons(name, BuildContext context){
    return Center(
        child: ButtonBar(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            ButtonTheme(
                minWidth: 200,
                child:RaisedButton(
                  child: new Text(name),
                  shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(100),
                      side: BorderSide(color: Colors.red)
                  ),
                  color: Colors.red,
                  textColor: Colors.white,
                  onPressed: (){},
                )
            ),
          ],
        )
    );
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
        drawer: NavDrawer(),
        appBar: AppBar(
          // Here we take the value from the MyHomePage object that was created by
          // the App.build method, and use it to set our appbar title.
          title: Image.asset("assets/logo.png", fit: BoxFit.cover),
        ),
        body: Column(
          children: [
            Container(
                margin: const EdgeInsets.only(top: 10),
                padding: EdgeInsets.symmetric(horizontal: 20),
                child: SingleChildScrollView(
                  child: Column(
                    children: <Widget>[
                      Container(
                        alignment: Alignment.topLeft,
                        margin: const EdgeInsets.only(left: 15, top: 20, bottom: 20),
                        child: HtmlWidget("""<h2 style='color:red;'>Change Password</h2>"""),
                      ),
                      Container(

                        child:
                          Column(
                            //mainAxisAlignment: MainAxisAlignment.center,  <------ did not worked for me
                            //crossAxisAlignment: CrossAxisAlignment.center,
                            children: [
                              Container(
                                alignment: Alignment.center,
                                child: _inputField('Current Password', Colors.grey),
                              ),
                              Container(
                                alignment: Alignment.center,
                                child: _inputField('New Password', Colors.grey),
                              ),
                              Container(
                                alignment: Alignment.center,
                                child: _inputField('Re - New Password', Colors.grey),
                              ),
                              Container(
                                  child: _buttons('Change Password', context)
                              ),
                            ],
                          )
                      )



                    ],
                  ),
                )
            )
          ],
        )
    );
  }

}
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“package:flatter_widget_from_html/flatter_widget_from_html.dart”;
导入“package:pan_asia_bank_app/widgets/NavDrawer.dart”;
类ChangePassword扩展了无状态小部件{
小部件输入字段(字符串标题、颜色边框){
返回文本字段(
装饰:输入装饰(
hintText:标题,
enabledBorder:UnderlineInputBorder(
borderSide:borderSide(颜色:边框),
),
FocusedOrder:下划线输入边框(
borderSide:borderSide(颜色:边框),
),
边框:下划线输入边框(
borderSide:borderSide(颜色:边框),
),
),
);
}
小部件按钮(名称、构建上下文){
返回中心(
孩子:巴顿巴(
mainAxisSize:mainAxisSize.min,
儿童:[
钮扣(
最小宽度:200,
孩子:升起按钮(
子项:新文本(名称),
形状:圆形矩形边框(
边界半径:边界半径。圆形(100),
边:边框边(颜色:Colors.red)
),
颜色:颜色,红色,
textColor:Colors.white,
按下:(){},
)
),
],
)
);
}
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
抽屉:NavDrawer(),
appBar:appBar(
//在这里,我们从MyHomePage对象中获取由创建的值
//使用App.build方法,并使用它设置appbar标题。
标题:Image.asset(“assets/logo.png”,fit:BoxFit.cover),
),
正文:专栏(
儿童:[
容器(
边距:仅限常量边集(顶部:10),
填充:边缘组。对称(水平:20),
子:SingleChildScrollView(
子:列(
儿童:[
容器(
对齐:alignment.topLeft,
边距:仅限常量边集(左:15,上:20,下:20),
子项:HtmlWidget(““更改密码”),
),
容器(
儿童:
纵队(

//mainAxisAlignment:mainAxisAlignment.center,在顶部添加
ListView
,并使用
shrinkWrap:true

body: Center(
          child: ListView(
            shrinkWrap: true,
            // Rest code....
输出:


在顶部添加
列表视图
,并使用
包覆面提取:true

body: Center(
          child: ListView(
            shrinkWrap: true,
            // Rest code....
输出:


我可以给你一个主意

尝试为父容器设置约束,以便确定如何对齐

 Container(
           width: MediaQuery.of(context).size.width, // Full Width of Screen
           height: 800.0, // Desired Height
           child:
              Column( mainAxisAlignment: MainAxisAlignment.center, children: [])
    )   

我可以给你一个主意

尝试为父容器设置约束,以便确定如何对齐

 Container(
           width: MediaQuery.of(context).size.width, // Full Width of Screen
           height: 800.0, // Desired Height
           child:
              Column( mainAxisAlignment: MainAxisAlignment.center, children: [])
    )   
您添加了太多的列。下面是解决方案的完整代码


    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
    import 'package:pan_asia_bank_app/widgets/NavDrawer.dart';
    
    class ChangePassword extends StatelessWidget {
      Widget _inputField(String title, Color border) {
        return TextField(
          decoration: InputDecoration(
            hintText: title,
            enabledBorder: UnderlineInputBorder(
              borderSide: BorderSide(color: border),
            ),
            focusedBorder: UnderlineInputBorder(
              borderSide: BorderSide(color: border),
            ),
            border: UnderlineInputBorder(
              borderSide: BorderSide(color: border),
            ),
          ),
        );
      }
    
      Widget _buttons(name, BuildContext context) {
        return Center(
            child: ButtonBar(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            ButtonTheme(
                minWidth: 200,
                child: RaisedButton(
                  child: new Text(name),
                  shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(100),
                      side: BorderSide(color: Colors.red)),
                  color: Colors.red,
                  textColor: Colors.white,
                  onPressed: () {},
                )),
          ],
        ));
      }
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Scaffold(
            drawer: NavDrawer(),
            appBar: AppBar(
              title: Image.asset("assets/logo.png", fit: BoxFit.cover),
            ),
            body: Column(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Container(
                  margin: const EdgeInsets.only(left: 15, top: 20, bottom: 20),
                  child:
                      HtmlWidget("""<h2 style='color:red;'>Change Password</h2>"""),
                ),
                Container(
                    margin: const EdgeInsets.only(top: 10),
                    padding: EdgeInsets.symmetric(horizontal: 20),
                    child: SingleChildScrollView(
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: <Widget>[
                          Container(
                              child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            crossAxisAlignment: CrossAxisAlignment.center,
                            children: [
                              Container(
                                alignment: Alignment.center,
                                child: _inputField('Current Password', Colors.grey),
                              ),
                              Container(
                                alignment: Alignment.center,
                                child: _inputField('New Password', Colors.grey),
                              ),
                              Container(
                                alignment: Alignment.center,
                                child:
                                    _inputField('Re - New Password', Colors.grey),
                              ),
                              Container(
                                  child: _buttons('Change Password', context)),
                            ],
                          ))
                        ],
                      ),
                    )),
                SizedBox(
                  height: 10,
                )
              ],
            ));
      }
    }
    

进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“package:flatter_widget_from_html/flatter_widget_from_html.dart”;
导入“package:pan_asia_bank_app/widgets/NavDrawer.dart”;
类ChangePassword扩展了无状态小部件{
小部件输入字段(字符串标题、颜色边框){
返回文本字段(
装饰:输入装饰(
hintText:标题,
enabledBorder:UnderlineInputBorder(
borderSide:borderSide(颜色:边框),
),
FocusedOrder:下划线输入边框(
borderSide:borderSide(颜色:边框),
),
边框:下划线输入边框(
borderSide:borderSide(颜色:边框),
),
),
);
}
小部件按钮(名称、构建上下文){
返回中心(
孩子:巴顿巴(
mainAxisSize:mainAxisSize.min,
儿童:[
钮扣(
最小宽度:200,
孩子:升起按钮(
子项:新文本(名称),
形状:圆形矩形边框(
边界半径:边界半径。圆形(100),
边:边框边(颜色:Colors.red)),
颜色:颜色,红色,
textColor:Colors.white,
按下:(){},
)),
],
));
}
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
抽屉:NavDrawer(),
appBar:appBar(
标题:Image.asset(“assets/logo.png”,fit:BoxFit.cover),
),
正文:专栏(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
容器(
边距:仅限常量边集(左:15,上:20,下:20),
儿童:
HtmlWidget(“更改密码”),
),
容器(
边距:仅限常量边集(顶部:10),
填充:边缘组。对称(水平:20),
子:SingleChildScrollView(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
小孩