Dart split iterable into fixed size batches

Dart
Iterable<List<T>> chunked<T>(Iterable<T> items, int size) sync* {
  if (size <= 0) throw ArgumentError.value(size, 'size', 'must be > 0');
  var buffer = <T>[];
  for (final item in items) {
    buffer.add(item);
    if (buffer.length == size) {
      yield buffer;
      buffer = <T>[];
    }
  }
  if (buffer.isNotEmpty) yield buffer;
}

void main() {
  print(chunked([1, 2, 3, 4, 5], 2).toList()); // [[1, 2], [3, 4], [5]]
}