One exciting language feature that was added to Dart in version 2.3 is the ability to put control flows inside collections. This will be of particular importance when we start digging into Flutter build methods.
These operators work mostly like their normal control flow counterparts, except you do not add brackets and you only get a single line to yield a new value in the collection:
final duplicated = [
for (int number in randomNumbers) number * 2,
];
In this example, we are iterating through the randomNumbers list and yielding double the value. Notice that there is no return statement; the value is immediately added to the list.
However, the single line requirement can be very restrictive. To remedy this, Dart has also borrowed the spread operator from JavaScript:
final randomNumbers = [
34,
232,
54,
32,
if (addMore) ...[
534343,
4423,
3432432,
],
];
By putting the three dots before the sublist, Dart will unbox the second list and flatten all these numbers into a single list. You can use this technique to add more than one value inside a collection-if or collection-for statement. Spread operators can also be used anywhere you wish to merge lists; they are not limited to collection-if and collection-for.