chunksWithOverlap<T> function

List<List<T>> chunksWithOverlap<T>(
  1. List<T> list,
  2. int chunkSize,
  3. int overlap
)

Splits list into chunks of chunkSize with overlap between consecutive chunks.

Implementation

List<List<T>> chunksWithOverlap<T>(List<T> list, int chunkSize, int overlap) {
  if (chunkSize < 1 || overlap < 0 || overlap >= chunkSize) return list.isEmpty ? [] : [list];
  final List<List<T>> out = [];
  int start = 0;
  while (start < list.length) {
    final int end = (start + chunkSize).clamp(0, list.length);
    out.add(list.sublist(start, end));
    start += chunkSize - overlap;
    if (start >= list.length) break;
  }
  return out;
}