无法在容器中居中列
Can't center a column in a container
我已经尝试这样做一段时间了,但就是行不通。我试过使用 Center()
并且即使没有错误也无法正常工作。我也试过使用
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
也为专栏,它仍然没有工作。我以前做过类似的事情,但现在我不确定是不是因为它在 FractionallySizedBox()
中,我确实需要它在里面。
这是完整的代码:
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Home(),
));
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Demo Login',
style: TextStyle(
color: Colors.black54,
),
),
centerTitle: true,
backgroundColor: Colors.blueGrey,
),
body: Align(
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints contraints) {
return AspectRatio(
aspectRatio: 1,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
new FractionallySizedBox(
widthFactor: 0.7,
child: new Stack(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.black87,
width: 2,
)),
child: Image.asset(
'Assets/6.jpg',
color: Color.fromRGBO(255, 255, 255, 0.5),
colorBlendMode: BlendMode.modulate,
),
),
),
FractionallySizedBox(
widthFactor: 0.85,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 50,
),
TextField(
autofocus: false,
textAlign: TextAlign.center,
keyboardType: TextInputType.text,
decoration: InputDecoration(
prefixIcon: Icon(Icons.face),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Username",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Username",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 12,
),
TextField(
keyboardType: TextInputType.visiblePassword,
autocorrect: false,
obscureText: true,
textAlign: TextAlign.center,
decoration: InputDecoration(
prefixIcon: Icon(Icons.security),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Password",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Password",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 20,
),
FlatButton(
onPressed: () {},
color: Colors.blueGrey,
height: 40,
minWidth: 150,
child: Text("Login"),
),
],
),
),
),
],
),
),
],
),
);
},
),
),
backgroundColor: Colors.grey[800],
);
}
}
以及在 Linux 设备上生成的输出:
非常感谢!
在您的代码中删除 widthFactor: 0.85
,然后它将居中对齐。
我已经稍微清理了你的代码,我已经在 Android table 上试过了,它有效
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Home(),
));
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Demo Login',
style: TextStyle(
color: Colors.black54,
),
),
centerTitle: true,
backgroundColor: Colors.blueGrey,
),
body: Center(
child: Stack(
children: [
Center(
child: FractionallySizedBox(
widthFactor: 0.7,
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.black87,
width: 2,
)),
child: Image.asset(
'Assets/6.jpg',
color: Color.fromRGBO(255, 255, 255, 0.5),
colorBlendMode: BlendMode.modulate,
),
),
),
),
),
Center(
child: FractionallySizedBox(
widthFactor: 0.6,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
height: 50,
),
TextField(
autofocus: false,
textAlign: TextAlign.center,
keyboardType: TextInputType.text,
decoration: InputDecoration(
prefixIcon: Icon(Icons.face),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Username",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Username",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 12,
),
TextField(
keyboardType: TextInputType.visiblePassword,
autocorrect: false,
obscureText: true,
textAlign: TextAlign.center,
decoration: InputDecoration(
prefixIcon: Icon(Icons.security),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Password",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Password",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 20,
),
FlatButton(
onPressed: () {},
color: Colors.blueGrey,
height: 40,
minWidth: 150,
child: Text("Login"),
),
],
),
),
),
],
),
),
backgroundColor: Colors.grey[800],
);
}
}
我已经尝试这样做一段时间了,但就是行不通。我试过使用 Center()
并且即使没有错误也无法正常工作。我也试过使用
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
也为专栏,它仍然没有工作。我以前做过类似的事情,但现在我不确定是不是因为它在 FractionallySizedBox()
中,我确实需要它在里面。
这是完整的代码:
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Home(),
));
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Demo Login',
style: TextStyle(
color: Colors.black54,
),
),
centerTitle: true,
backgroundColor: Colors.blueGrey,
),
body: Align(
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints contraints) {
return AspectRatio(
aspectRatio: 1,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
new FractionallySizedBox(
widthFactor: 0.7,
child: new Stack(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.black87,
width: 2,
)),
child: Image.asset(
'Assets/6.jpg',
color: Color.fromRGBO(255, 255, 255, 0.5),
colorBlendMode: BlendMode.modulate,
),
),
),
FractionallySizedBox(
widthFactor: 0.85,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 50,
),
TextField(
autofocus: false,
textAlign: TextAlign.center,
keyboardType: TextInputType.text,
decoration: InputDecoration(
prefixIcon: Icon(Icons.face),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Username",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Username",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 12,
),
TextField(
keyboardType: TextInputType.visiblePassword,
autocorrect: false,
obscureText: true,
textAlign: TextAlign.center,
decoration: InputDecoration(
prefixIcon: Icon(Icons.security),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Password",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Password",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 20,
),
FlatButton(
onPressed: () {},
color: Colors.blueGrey,
height: 40,
minWidth: 150,
child: Text("Login"),
),
],
),
),
),
],
),
),
],
),
);
},
),
),
backgroundColor: Colors.grey[800],
);
}
}
以及在 Linux 设备上生成的输出:
非常感谢!
在您的代码中删除 widthFactor: 0.85
,然后它将居中对齐。
我已经稍微清理了你的代码,我已经在 Android table 上试过了,它有效
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Home(),
));
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Demo Login',
style: TextStyle(
color: Colors.black54,
),
),
centerTitle: true,
backgroundColor: Colors.blueGrey,
),
body: Center(
child: Stack(
children: [
Center(
child: FractionallySizedBox(
widthFactor: 0.7,
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.black87,
width: 2,
)),
child: Image.asset(
'Assets/6.jpg',
color: Color.fromRGBO(255, 255, 255, 0.5),
colorBlendMode: BlendMode.modulate,
),
),
),
),
),
Center(
child: FractionallySizedBox(
widthFactor: 0.6,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
height: 50,
),
TextField(
autofocus: false,
textAlign: TextAlign.center,
keyboardType: TextInputType.text,
decoration: InputDecoration(
prefixIcon: Icon(Icons.face),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Username",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Username",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 12,
),
TextField(
keyboardType: TextInputType.visiblePassword,
autocorrect: false,
obscureText: true,
textAlign: TextAlign.center,
decoration: InputDecoration(
prefixIcon: Icon(Icons.security),
fillColor: Colors.black87,
filled: true,
hintText: "Enter Your Password",
hintStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
),
labelText: "Password",
labelStyle: TextStyle(
color: Colors.grey,
fontSize: 15,
)),
),
SizedBox(
height: 20,
),
FlatButton(
onPressed: () {},
color: Colors.blueGrey,
height: 40,
minWidth: 150,
child: Text("Login"),
),
],
),
),
),
],
),
),
backgroundColor: Colors.grey[800],
);
}
}