visibleWindow<T> method
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,
);
}