Начиная с dart 2.3.0 были представлены новые функции, которые прокачивают возможности добавления новых элементов в коллекцию. Об одной из них и пойдёт речь – spread
(распространение).
Как использовать? Поместите ...
перед коллекцией внутри литерала коллекции, и элементы будут в неё добавлены. Предположим, у нас есть две корзины: с фруктами и ягодами. Необходимо всё переложить в нашу корзину:
final fruitBasket = ['?', '?', '?', '?'];
final berriesBasket = ['?', '?'];
final myBasket = [...fruitBasket, '?', ...berriesBasket, ...['?']];
Раньше мы бы написали так:
final myOldBasket = []
..addAll(fruitBasket)
..add('?')
..addAll(berriesBasket)
..addAll(['?']);
Казалось бы, не так страшно. Но, посмотрите, как старый способ будет выглядеть в flutter:
ProductsPage(
child: ListView(
children: [
Text('Products'),
Divider(),
]
..addAll(buildBasketWidget(fruitBasket))
..add(ProductWidget('?'))
..addAll(buildBasketWidget(berriesBasket))
..addAll(buildBasketWidget(['?'])),
),
);
List<Widget> buildBasketWidget(List basket) {...}
И с помощью оператора "распространения":
ProductsPage(
child: ListView(
children: [
Text('Products'),
Divider(),
...buildBasketWidget(fruitBasket),
ProductWidget('?'),
...buildBasketWidget(berriesBasket),
...buildBasketWidget(['?']),
],
),
);
Очевидно, что spread позволяет сделать код более выразительным и декларативным, а также приятным для чтения.