有没有办法加入"带填充的颤动小部件?

时间:2018-01-02 22:07:15

标签: padding flutter

我有一排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 WidgetrunSpacingspacing属性 - 这正是我正在寻找的,但对于行和列。

2 个答案:

答案 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,
  ),
);