listWindow<T> method

void listWindow<T>(
  1. ListWindow<T> window, {
  2. required int selectedIndex,
  3. required void renderItem(
    1. T item,
    2. int absoluteIndex,
    3. bool isFocused
    ),
})

Renders a ListWindow with selection and custom rendering.

This handles overflow indicators automatically and delegates item rendering to the provided callback.

Example:

final window = nav.visibleWindow(items);
ctx.listWindow(
  window,
  selectedIndex: nav.selectedIndex,
  renderItem: (item, index, isFocused) {
    ctx.selectableItem(item.toString(), focused: isFocused);
  },
);

Implementation

void listWindow<T>(
  ListWindow<T> window, {
  required int selectedIndex,
  required void Function(T item, int absoluteIndex, bool isFocused)
      renderItem,
}) {
  if (window.hasOverflowAbove) {
    overflowIndicator();
  }

  for (var i = 0; i < window.items.length; i++) {
    final absoluteIndex = window.start + i;
    final isFocused = absoluteIndex == selectedIndex;
    renderItem(window.items[i], absoluteIndex, isFocused);
  }

  if (window.hasOverflowBelow) {
    overflowIndicator();
  }
}