siblingRange property

(int, int) get siblingRange

The start and end pages to display around the current page.

Implementation

(int, int) get siblingRange {
  final int rangeStart;
  final int rangeEnd;
  if (pages.isFinite) {
    final last = pages - 1;
    if (pages <= minPagesDisplayedAtEdges) {
      return (0, last);
    }
    rangeStart = switch (_page) {
      _ when _page - siblings < 0 => 0,
      _ when _page > (last - minPagesDisplayedAtEdges) => (last - minPagesDisplayedAtEdges) - siblings,
      _ when _page <= minPagesDisplayedAtEdges => 0,
      _ => _page - siblings,
    };

    rangeEnd = switch (_page) {
      _ when _page + siblings > last => last,
      _ when _page < minPagesDisplayedAtEdges + 1 => minPagesDisplayedAtEdges + siblings,
      _ when _page >= (last - minPagesDisplayedAtEdges) => last,
      _ => _page + siblings,
    };
  } else {
    rangeStart = switch (_page) {
      _ when _page - siblings < 0 => 0,
      _ when _page <= minPagesDisplayedAtEdges => 0,
      _ => _page - siblings,
    };

    rangeEnd = switch (_page) {
      _ when _page < minPagesDisplayedAtEdges + 1 => minPagesDisplayedAtEdges,
      _ => _page + siblings,
    };
  }
  return (rangeStart, rangeEnd);
}