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