sheetSkips method

List<int> sheetSkips(
  1. int labels,
  2. List<int> requested
)

Positions skipped on each sheet needed to print labels labels.

requested holds the positions already used at the start of each sheet (sheet 1 first); missing entries count as 0. The result has one entry per sheet that will be printed, so its length is the number of sheets. Only multi-label sheets skip positions: rolls and single-page formats always start from the first position.

Implementation

List<int> sheetSkips(int labels, List<int> requested) {
  if (labels <= 0) return const [];
  final perSheet = cellsPerPage;
  if (!isMultiCellSheet) {
    return List<int>.filled((labels / perSheet).ceil(), 0);
  }
  final skips = <int>[];
  var placed = 0;
  while (placed < labels) {
    final index = skips.length;
    final skip = index < requested.length
        ? requested[index].clamp(0, perSheet - 1)
        : 0;
    skips.add(skip);
    placed += perSheet - skip;
  }
  return skips;
}