In Javascript I would use a spread operator:
Now I have the same problem with Flutter:
Widget build(BuildContext context) {
return Column(
children: <Widget>[
MyHeader(),
_buildListOfWidgetForBody(), // <- how to spread this <Widget>[] ????
MyCustomFooter(),
],
);
}
You can now do spreading from Dart 2.3
var a = [0,1,2,3,4];
var b = [6,7,8,9];
var c = [...a,5,...b];
print(c); // prints: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
There is an issue to add this to future version of dart https://github.com/dart-lang/language/issues/47
but for now you can use sync*
and yield*
Iterable<Widget> _buildChildren sync* {
yield MyHeader();
yield* _buildListOfWidgetForBody();
yield MyCustomFooter();
}
EDIT: As of Dart 2.3 you can now do:
Widget build(BuildContext context) {
return Column(
children: <Widget>[
MyHeader(),
..._buildListOfWidgetForBody(),
MyCustomFooter(),
],
);
}
You don't, at the moment. But you can build a List
from it and insert/add the other elements on the go.
Widget build(BuildContext context) {
final List<Widget> columnWidgets = List.from(_buildListOfWidgetForBody())
..insert(0, MyHeader())
..add(MyCustomFooter());
return Column(
children: columnWidgets
);
}
Update - 20th April 2019
You can now use the spread operator since Dart 2.3 was released.
List<int> a = [0,1,2,3,4];
List<int> b = [6,7,8,9];
List<int> c = [...a,5,...c];