visibleWindow<T> method

ListWindow<T> visibleWindow<T>(
  1. List<T> items
)

Returns a window of items from the given list based on current viewport.

This is a convenience method that slices the list for you:

final window = nav.visibleWindow(items);
for (final (index, item) in window.items.indexed) {
  final absoluteIndex = window.start + index;
  final isSelected = absoluteIndex == nav.selectedIndex;
  // render item
}

Implementation

ListWindow<T> visibleWindow<T>(List<T> items) {
  if (items.isEmpty) {
    return ListWindow<T>(
      items: const [],
      start: 0,
      end: 0,
      hasOverflowAbove: false,
      hasOverflowBelow: false,
    );
  }

  final start = _scrollOffset.clamp(0, items.length);
  final end = min(_scrollOffset + _maxVisible, items.length);

  return ListWindow<T>(
    items: items.sublist(start, end),
    start: start,
    end: end,
    hasOverflowAbove: start > 0,
    hasOverflowBelow: end < items.length,
  );
}