我有一排Flutter小部件,我想用Padding分隔,但只有在小部件之间。类似于Lists的join()函数的行为,其中要加入的String仅附加在项之间,而不是在List的末尾。例如。对于这样的事情:
var square = new Container(height: 50.0, width: 50.0; color: Colors.pink,);
return new Row(
children: <Widget>[
square,
square,
square,
],
);
我会得到一排3个粉红色方块,两者之间没有空格。我想要一个更加编程/ Flutter内置的方法来做到这一点:
const _rightPadding = const Padding(padding: const EdgeInsets.only(right: 16.0));
var square = new Container(height: 50.0, width: 50.0; color: Colors.pink,);
return new Row(
children: <Widget>[
square,
rightPadding,
square,
rightPadding,
square,
// note there is no padding after this third square
],
);
我可以在我的padding
小部件中的square
属性中添加一个正确的填充,但是我会在行的末尾添加额外的填充。我可以添加一个if语句,检查我是否是列表中的最后一个Widget而不是为那个添加填充,尽管它是额外的代码,我希望能有更高效的东西。 :)
我注意到Wrap Widget有runSpacing
和spacing
属性 - 这正是我正在寻找的,但对于行和列。
答案 0 :(得分:2)
我搜索了var getReminder = new GetReminder();
var reminderDb = await getReminder.Result<ReminderDb>();
的文档但无法找到您要找的内容(尽管它可能在那里而我却无法看到它)。以编程方式执行此操作的一种方法是仅具有一个函数,该函数接收元素列表并返回该列表,其中填充介于两者之间而不是最后一个元素。也许是这样的事情:
Row
然后,您可以调用此函数并传入行的列表,并将返回值分配给行的List<Widget> createRowChildrenWithPadding(List<Widget> widgets, Padding pading) {
var joined = List<Widget>();
for (var i = 0; i < widgets.length; i++) {
if ( i != widgets.length - 1) {
joined.add(widgets[i]);
joined.add(padding);
} else {
joined.add(widgets[i]);
}
}
return joined;
}
命名参数。如果您有任何问题,请告诉我,希望这有帮助!
答案 1 :(得分:1)
您要查找的属性为MainAxisAlignment
,值MainAxisAlignment.spaceBetween
完全可以完成工作。 Here你找到了一些关于它的文档。
因此,要使用此类属性,您必须修复行的宽度(事先知道您包含的固定大小元素的数量)。像这样:
var square = new Container(height: 50.0, width: 50.0, color: Colors.pink,);
List<Widget> squareChildren = [square, square, square];
double rowWidth = squareChildren.length*50.0 + (squareChildren.length-1)*16.0;
return new Container(
width: rowWidth,
child: new Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: squareChildren,
),
);