Начиная с 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 позволяет сделать код более выразительным и декларативным, а также приятным для чтения.
