颤动:垂直居中列
Flutter : Vertically center column
如何在Flutter中让列垂直居中?我用过小部件"new Center"。我使用了小部件 "new Center",但它没有垂直居中我的列?任何想法都会有所帮助....
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Thank you"),
),
body: new Center(
child: new Column(
children: <Widget>[
new Padding(
padding: new EdgeInsets.all(25.0),
child: new AnimatedBuilder(
animation: animationController,
child: new Container(
height: 175.0,
width: 175.0,
child: new Image.asset('assets/angry_face.png'),
),
builder: (BuildContext context, Widget _widget) {
return new Transform.rotate(
angle: animationController.value * 6.3,
child: _widget,
);
},
),
),
new Text('We are glad we could serve you...', style: new TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.w600,
color: Colors.black87),),
new Padding(padding: new EdgeInsets.symmetric(vertical: 5.0, horizontal: 0.0)),
new Text('We appreciate your feedback ! !', style: new TextStyle(
fontSize: 13.0,
fontWeight: FontWeight.w200,
color: Colors.black87),),
],
),
),
);
}
尝试:
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children:children...)
Aziz 提出的解决方案是:
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
//your widgets here...
],
)
由于填充,它不会在准确的中心:
padding: EdgeInsets.all(25.0),
要使列完全居中 - 至少在这种情况下 - 您需要删除填充。
另一个解决方案!
如果你想设置居中垂直形式的小部件,你可以使用ListView。
例如:我使用了三个按钮并将它们添加到 ListView 中,然后是
shrinkWrap: true -> With this ListView only occupies the space which needed.
import 'package:flutter/material.dart';
class List extends StatelessWidget {
@override
Widget build(BuildContext context) {
final button1 =
new RaisedButton(child: new Text("Button1"), onPressed: () {});
final button2 =
new RaisedButton(child: new Text("Button2"), onPressed: () {});
final button3 =
new RaisedButton(child: new Text("Button3"), onPressed: () {});
final body = new Center(
child: ListView(
shrinkWrap: true,
children: <Widget>[button1, button2, button3],
),
);
return new Scaffold(
appBar: new AppBar(
title: Text("Sample"),
),
body: body);
}
}
void main() {
runApp(new MaterialApp(
home: List(),
));
}
输出:
对于列,使用:
mainAxisAlignment: MainAxisAlignment.center
它将其子项与其父项的中心对齐 Space 垂直
您可以使用 mainAxisAlignment 和 crossAxisAlignment 属性控制行或列如何对齐其子项。对于一行,主轴水平运行,横轴垂直运行。对于一列,主轴垂直,横轴水平。
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
试试这个。它垂直和水平居中。
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: children,
),
)
你可以用。
mainAxisAlignment:MainAxisAlignment.center
这将 material 通过列中心。
`crossAxisAlignment:CrossAxisAlignment.center'
这将使项目在行的中心对齐。
Container( alignment:Alignment.center, Child: Column () )
简单使用。
Center ( Child: Column () )
或使用 Padding 小部件说唱。并调整 Padding,使子列位于中心。
对我来说,问题是在我不得不删除的列中有 Expanded,但它起作用了。
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded( // remove this
flex: 2,
child: Text("content here"),
),
],
)
在使用 Column 时,在列小部件中使用它:
mainAxisAlignment: MainAxisAlignment.center
它将其子项与其父项的中心对齐Space是其主轴,即垂直
或者,
用中心小部件包裹列:
Center(
child: Column(
children: <ListOfWidgets>,
),
)
如果它不能解决问题,请用扩展小部件包装父容器..
Expanded(
child:Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: children,
),
),
)
CrossAlignment.center 使用 Width of the 'Child Widget'
居中,因此在页面开头呈现。
当 Column is centered within the page body's 'Center Container'
时,CrossAlignment.center 使用页面主体的 'Center' 作为参考并将小部件呈现在页面的中心
代码
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
title:"DynamicWidgetApp",
home:DynamicWidgetApp(),
));
class DynamicWidgetApp extends StatefulWidget{
@override
DynamicWidgetAppState createState() => DynamicWidgetAppState();
}
class DynamicWidgetAppState extends State<DynamicWidgetApp>{
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
//Removing body:Center will change the reference
// and render the widget at the start of the page
child: Column(
mainAxisAlignment : MainAxisAlignment.center,
crossAxisAlignment : CrossAxisAlignment.center,
children: [
Text("My Centered Widget"),
]
),
),
floatingActionButton: FloatingActionButton(
// onPressed: ,
child : Icon(Icons.add),
),
);
}
}
您还可以通过 Align
包装 Column
小部件。
Align(
alignment: Alignment.center,
child: Column(
children: [
Container(
width: 300,
margin: const EdgeInsets.fromLTRB(0, 70, 0, 0),
child: TextFormField(decoration: const InputDecoration(hintText: "First Name"))
),
...
]
)
)
查看此网站以了解使小部件居中的不同方式:Link
如何在Flutter中让列垂直居中?我用过小部件"new Center"。我使用了小部件 "new Center",但它没有垂直居中我的列?任何想法都会有所帮助....
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Thank you"),
),
body: new Center(
child: new Column(
children: <Widget>[
new Padding(
padding: new EdgeInsets.all(25.0),
child: new AnimatedBuilder(
animation: animationController,
child: new Container(
height: 175.0,
width: 175.0,
child: new Image.asset('assets/angry_face.png'),
),
builder: (BuildContext context, Widget _widget) {
return new Transform.rotate(
angle: animationController.value * 6.3,
child: _widget,
);
},
),
),
new Text('We are glad we could serve you...', style: new TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.w600,
color: Colors.black87),),
new Padding(padding: new EdgeInsets.symmetric(vertical: 5.0, horizontal: 0.0)),
new Text('We appreciate your feedback ! !', style: new TextStyle(
fontSize: 13.0,
fontWeight: FontWeight.w200,
color: Colors.black87),),
],
),
),
);
}
尝试:
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children:children...)
Aziz 提出的解决方案是:
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
//your widgets here...
],
)
由于填充,它不会在准确的中心:
padding: EdgeInsets.all(25.0),
要使列完全居中 - 至少在这种情况下 - 您需要删除填充。
另一个解决方案!
如果你想设置居中垂直形式的小部件,你可以使用ListView。 例如:我使用了三个按钮并将它们添加到 ListView 中,然后是
shrinkWrap: true -> With this ListView only occupies the space which needed.
import 'package:flutter/material.dart';
class List extends StatelessWidget {
@override
Widget build(BuildContext context) {
final button1 =
new RaisedButton(child: new Text("Button1"), onPressed: () {});
final button2 =
new RaisedButton(child: new Text("Button2"), onPressed: () {});
final button3 =
new RaisedButton(child: new Text("Button3"), onPressed: () {});
final body = new Center(
child: ListView(
shrinkWrap: true,
children: <Widget>[button1, button2, button3],
),
);
return new Scaffold(
appBar: new AppBar(
title: Text("Sample"),
),
body: body);
}
}
void main() {
runApp(new MaterialApp(
home: List(),
));
}
输出:
对于列,使用:
mainAxisAlignment: MainAxisAlignment.center
它将其子项与其父项的中心对齐 Space 垂直
您可以使用 mainAxisAlignment 和 crossAxisAlignment 属性控制行或列如何对齐其子项。对于一行,主轴水平运行,横轴垂直运行。对于一列,主轴垂直,横轴水平。
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
试试这个。它垂直和水平居中。
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: children,
),
)
你可以用。
mainAxisAlignment:MainAxisAlignment.center
这将 material 通过列中心。
`crossAxisAlignment:CrossAxisAlignment.center'
这将使项目在行的中心对齐。
Container( alignment:Alignment.center, Child: Column () )
简单使用。
Center ( Child: Column () )
或使用 Padding 小部件说唱。并调整 Padding,使子列位于中心。
对我来说,问题是在我不得不删除的列中有 Expanded,但它起作用了。
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded( // remove this
flex: 2,
child: Text("content here"),
),
],
)
在使用 Column 时,在列小部件中使用它:
mainAxisAlignment: MainAxisAlignment.center
它将其子项与其父项的中心对齐Space是其主轴,即垂直
或者, 用中心小部件包裹列:
Center(
child: Column(
children: <ListOfWidgets>,
),
)
如果它不能解决问题,请用扩展小部件包装父容器..
Expanded(
child:Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: children,
),
),
)
CrossAlignment.center 使用 Width of the 'Child Widget'
居中,因此在页面开头呈现。
当 Column is centered within the page body's 'Center Container'
时,CrossAlignment.center 使用页面主体的 'Center' 作为参考并将小部件呈现在页面的中心
代码
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
title:"DynamicWidgetApp",
home:DynamicWidgetApp(),
));
class DynamicWidgetApp extends StatefulWidget{
@override
DynamicWidgetAppState createState() => DynamicWidgetAppState();
}
class DynamicWidgetAppState extends State<DynamicWidgetApp>{
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
//Removing body:Center will change the reference
// and render the widget at the start of the page
child: Column(
mainAxisAlignment : MainAxisAlignment.center,
crossAxisAlignment : CrossAxisAlignment.center,
children: [
Text("My Centered Widget"),
]
),
),
floatingActionButton: FloatingActionButton(
// onPressed: ,
child : Icon(Icons.add),
),
);
}
}
您还可以通过 Align
包装 Column
小部件。
Align(
alignment: Alignment.center,
child: Column(
children: [
Container(
width: 300,
margin: const EdgeInsets.fromLTRB(0, 70, 0, 0),
child: TextFormField(decoration: const InputDecoration(hintText: "First Name"))
),
...
]
)
)
查看此网站以了解使小部件居中的不同方式:Link