Ответ 1
Теперь вы можете заниматься распространением из 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]
В Javascript я бы использовал оператор распространения:
Теперь у меня та же проблема с Флаттером:
Widget build(BuildContext context) {
return Column(
children: <Widget>[
MyHeader(),
_buildListOfWidgetForBody(), // <- how to spread this <Widget>[] ????
MyCustomFooter(),
],
);
}
Теперь вы можете заниматься распространением из 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]
Есть проблема, чтобы добавить это в будущую версию дротика https://github.com/dart-lang/language/issues/47
но сейчас вы можете использовать sync*
и yield*
Iterable<Widget> _buildChildren sync* {
yield MyHeader();
yield* _buildListOfWidgetForBody();
yield MyCustomFooter();
}
РЕДАКТИРОВАТЬ: Начиная с Dart 2.3 вы можете сделать:
Widget build(BuildContext context) {
return Column(
children: <Widget>[
MyHeader(),
..._buildListOfWidgetForBody(),
MyCustomFooter(),
],
);
}
Вы не, в данный момент. Но вы можете создать List
из него и вставлять/добавлять другие элементы на ходу.
Widget build(BuildContext context) {
final List<Widget> columnWidgets = List.from(_buildListOfWidgetForBody())
..insert(0, MyHeader())
..add(MyCustomFooter());
return Column(
children: columnWidgets
);
}
Теперь вы можете использовать оператор распространения с момента выпуска Dart 2.3.
List<int> a = [0,1,2,3,4];
List<int> b = [6,7,8,9];
List<int> c = [...a,5,...c];