ListNavigator class
Manages list navigation state (selection + viewport scrolling) for terminal and TUI experiences.
What problems it solves
- Tracks the selected index independently of rendering code
- Keeps a scroll offset so the selection always stays visible
- Provides helper views (ListViewport, ListWindow) for cheap rendering
- Wraps around at the boundaries so keyboard navigation "just works"
Usage
final nav = ListNavigator(itemCount: items.length, maxVisible: 10);
nav.moveBy(-1); // up
nav.moveBy(1); // down
nav.jumpTo(5); // absolute jump
final visible = nav.visibleWindow(items);
for (final (offset, item) in visible.items.indexed) {
final absoluteIndex = visible.start + offset;
final isFocused = nav.isSelected(absoluteIndex);
// render row
}
Power tips
- Pair with SelectionController to support multi-select lists
- Feed
maxVisiblewith your terminal height to keep scroll math accurate - Use ListNavigator.viewport when you want to keep the original
itemslist intact and only need index ranges for rendering
These docs surface every public API so downstream consumers on pub.flutter-io.cn can copy/paste examples without reading the source.
Constructors
- Creates a new list navigation state.
Properties
- hashCode → int
-
The hash code for this object.
no setterinherited
- hasOverflowAbove → bool
-
Whether there are items above the current viewport.
no setter
- hasOverflowBelow → bool
-
Whether there are items below the current viewport.
no setter
- isEmpty → bool
-
Whether the list is empty.
no setter
- isNotEmpty → bool
-
Whether the list is not empty.
no setter
- itemCount ↔ int
-
Total number of items.
getter/setter pair
- maxVisible ↔ int
-
Maximum visible items (viewport size).
getter/setter pair
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- scrollOffset → int
-
Current scroll offset (first visible item index).
no setter
- selectedIndex → int
-
Current selected index.
no setter
- viewport → ListViewport
-
Returns viewport information for rendering.
no setter
Methods
-
isSelected(
int absoluteIndex) → bool - Checks if the given absolute index is currently selected.
-
jumpTo(
int index) → void - Jumps to a specific index (clamped to valid range).
-
jumpToFirst(
) → void - Jumps to the first item.
-
jumpToLast(
) → void - Jumps to the last item.
-
moveBy(
int delta) → void -
Moves selection by
deltapositions with wrapping. -
moveDown(
) → void - Moves selection down by one (with wrapping).
-
moveUp(
) → void - Moves selection up by one (with wrapping).
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
pageDown(
) → void - Moves viewport down by one page.
-
pageUp(
) → void - Moves viewport up by one page.
-
reset(
{int initialIndex = 0}) → void - Resets navigation to initial state (first item, no scroll).
-
toString(
) → String -
A string representation of this object.
inherited
-
visibleWindow<
T> (List< T> items) → ListWindow<T> - Returns a window of items from the given list based on current viewport.
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited