我有一个Column
带有两个TextField
小部件的小部件,希望它们之间有一定的空间。
我已经尝试过mainAxisAlignment: MainAxisAlignment.spaceAround
,但是结果不是我想要的。
我有一个Column
带有两个TextField
小部件的小部件,希望它们之间有一定的空间。
我已经尝试过mainAxisAlignment: MainAxisAlignment.spaceAround
,但是结果不是我想要的。
margin: EdgeInsets.only(left: 200.0, top: 300.0))
Answers:
您可以Padding
在这两个小部件之间使用小部件,也可以将这些小部件包装成小Padding
部件。
更新资料
SizedBox窗口小部件可在两个窗口小部件之间使用,以在两个窗口小部件之间添加空间,它使代码比padding窗口小部件更具可读性。
例如:
Column(
children: <Widget>[
Widget1(),
SizedBox(height: 10),
Widget2(),
],
),
column
-class包含该属性。在所有孩子之间进行填充将浪费编码时间。
Padding
小部件位于2个小部件之间。不是这2个小部件成为的子级Padding
。
您可以在小部件之间放置一个SizedBox
特定height
的名称,如下所示:
Column(
children: <Widget>[
FirstWidget(),
SizedBox(height: 100),
SecondWidget(),
],
),
为什么比包装小部件更喜欢Padding
呢?可读性!视觉样板更少,缩进更少,并且代码遵循典型的阅读顺序。
SizedBox
只是一个普通的窗口小部件,其大小在布局期间会尝试达到所需大小,但不会呈现任何内容。所有的叶子小部件(如“文本”或“容器”)也是空的,因此可以。
您可以改用Wrap()
小部件Column()
在子小部件之间添加空间,并使用interval属性在子小部件之间提供相等的间距
Wrap(
spacing: 20, // to apply margin in the main axis of the wrap
runSpacing: 20, // to apply margin in the cross axis of the wrap
children: <Widget>[
Text('child 1'),
Text('child 2')
]
)
runSpacing
代替spacing
垂直间隔的项目之间的间隙
只需使用padding像这样包装它:
Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(8.0),
child: Text('Hello World!'),
),
Padding(
padding: EdgeInsets.all(8.0),
child: Text('Hello World2!'),
)
]);
您也可以使用Container(padding ...)或SizeBox(height:xx)。最后一个是最常见的,但是它会影响您如何管理小部件的空间,如果该空间确实是小部件的一部分,我喜欢使用填充,例如,将sizebox用于列表。
这样做的方法很多,这里列出了一些方法。
使用Container
并给一些高度:
Column(
children: <Widget>[
Widget1(),
Container(height: 10), // set height
Widget2(),
],
)
采用 Spacer
Column(
children: <Widget>[
Widget1(),
Spacer(), // use Spacer
Widget2(),
],
)
采用 Expanded
Column(
children: <Widget>[
Widget1(),
Expanded(child: SizedBox()), // use Expanded
Widget2(),
],
)
采用 mainAxisAlignment
Column(
mainAxisAlignment: MainAxisAlignment.spaceAround, // mainAxisAlignment
children: <Widget>[
Widget1(),
Widget2(),
],
)
采用 Wrap
Wrap(
direction: Axis.vertical, // make sure to set this
spacing: 20, // set your spacing
children: <Widget>[
Widget1(),
Widget2(),
],
)
这里有很多答案,但是我将在这里列出每个人都应该使用的最重要的答案。
1.专栏
Column(
children: <Widget>[
Text('Widget A'), //Can be any widget
SizedBox(height: 20,), //height is space betweeen your top and bottom widget
Text('Widget B'), //Can be any widget
],
),
2.包装
Wrap(
direction: Axis.vertical, // We have to declare Axis.vertical, otherwise by default widget are drawn in horizontal order
spacing: 20, // Add spacing one time which is same for all other widgets in the children list
children: <Widget>[
Text('Widget A'), // Can be any widget
Text('Widget B'), // Can be any widget
]
)
Column(children: <Widget>[
Container(margin: EdgeInsets.only(top:12, child: yourWidget)),
Container(margin: EdgeInsets.only(top:12, child: yourWidget))
]);
您也可以使用辅助函数在每个孩子之后添加间距。
List<Widget> childrenWithSpacing({
@required List<Widget> children,
double spacing = 8,
}) {
final space = Container(width: spacing, height: spacing);
return children.expand((widget) => [widget, space]).toList();
}
因此,返回的列表可以用作列的子代
Column(
children: childrenWithSpacing(
spacing: 14,
children: [
Text('This becomes a text with an adjacent spacing'),
if (true == true) Text('Also, makes it easy to add conditional widgets'),
],
),
);
我不确定是否要通过帮助程序为同一个目标运行子项是否有错或有性能损失?
在手机处于横向模式的情况下,大小框将无济于事。
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Expanded(
child: Container(
margin: EdgeInsets.all(15.0),
decoration: BoxDecoration(
color: Color(0xFF1D1E33),
borderRadius: BorderRadius.circular(10.0),
),
),
),
Expanded(
child: Container(
margin: EdgeInsets.all(15.0),
decoration: BoxDecoration(
color: Color(0xFF1D1E33),
borderRadius: BorderRadius.circular(10.0),
),
),
),
Expanded(
child: Container(
margin: EdgeInsets.all(15.0),
decoration: BoxDecoration(
color: Color(0xFF1D1E33),
borderRadius: BorderRadius.circular(10.0),
),
),
),
],
)