chunked method
Splits the elements into lists of the specified size.
You can specify an optional fill function that produces values
that fill up the last chunk to match the chunk size.
Example:
[1, 2, 3, 4, 5, 6].chunked(2); // [[1, 2], [3, 4], [5, 6]]
[1, 2, 3].chunked(2); // [[1, 2], [3]]
[1, 2, 3].chunked(2, fill: () => 99); // [[1, 2], [3, 99]]
Implementation
Iterable<List<T>> chunked(int size, {T Function()? fill}) {
ArgumentError.checkNotNull(size, 'chunkSize');
if (size <= 0) {
throw ArgumentError('chunkSize must be positive integer greater than 0.');
}
if (isEmpty) {
return const Iterable.empty();
}
final countOfChunks = (length / size.toDouble()).ceil();
return Iterable.generate(countOfChunks, (int index) {
final chunk = skip(index * size).take(size).toList();
if (fill != null) {
while (chunk.length < size) {
chunk.add(fill());
}
}
return chunk;
});
}