我有一个列小部件与两个TextField小部件作为孩子,我想在他们之间有一些空间。
我已经尝试过mainAxisAlignment: mainAxisAlignment。但结果不是我想要的。
我有一个列小部件与两个TextField小部件作为孩子,我想在他们之间有一些空间。
我已经尝试过mainAxisAlignment: mainAxisAlignment。但结果不是我想要的。
当前回答
只需要像这样用填充物把它包起来:
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: x.x)。最后一种是最常见的,但这取决于你想如何管理小部件的空间,如果空间确实是小部件的一部分,我喜欢使用填充,例如列表使用sizebox。
其他回答
与上面为了代码可读性而使用sizebox的方式相同,您可以以相同的方式使用Padding小部件,而不必使其成为Column的任何子部件的父小部件
Column(
children: <Widget>[
FirstWidget(),
Padding(padding: EdgeInsets.only(top: 40.0)),
SecondWidget(),
]
)
您可以使用Wrap()小部件代替Column()在子小部件之间添加空格。并使用spacing属性给予子元素之间相等的间距
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')
]
)
如果你不想包装填充与每个小部件或重复大小框。
试试这个:
Column(
children: [
Widget(),
Widget(),
Widget(),
Widget(),
]
.map((e) => Padding(
child: e,
padding: const EdgeInsets.symmetric(vertical: 10),
))
.toList(),
),
这将扭曲所有的小部件与填充没有重复。
如果在列、行、listView等中有太多的子元素,并且必须在应用程序的许多地方执行相同的操作,那么添加多个大小的框将变得乏味。
你可以使用下面的utils来封装添加这些大小的盒子的逻辑:
List<Widget> addHorizontalSpaceBetweenElements(double space, List<Widget> widgets) {
return _addSpaceBetweenElements(widgets, () => SizedBox(width: space));
}
List<Widget> addVerticalSpaceBetweenElements(double space, List<Widget> widgets) {
return _addSpaceBetweenElements(widgets, () => SizedBox(height: space));
}
List<Widget> _addSpaceBetweenElements(List<Widget> widgets, ValueGetter<SizedBox> sizedBoxGetter) {
if (widgets.isEmpty || widgets.length == 1) {
return widgets;
}
List<Widget> spacedWidgets = [widgets.first];
for (var i = 1; i < widgets.length - 1; i++) {
spacedWidgets.add(sizedBoxGetter());
spacedWidgets.add(widgets[i]);
}
spacedWidgets.add(sizedBoxGetter());
spacedWidgets.add(widgets.last);
return spacedWidgets;
}
你可以这样使用它们:
Column(
children: addVerticalSpaceBetweenElements(5, [
Text(),
Text(),
Row(children: addHorizontalSpaceBetweenElements(5, [
Text(),
Text(),
])),
]));
最好使用Wrap小部件,而不是列或行。
包装( 间距:10, runSpacing: 10, 孩子们:[], )