SearchableListPrompt<T> class

SearchableListPrompt – composable system for searchable/filterable list prompts.

Extends the SelectableListPrompt pattern with:

  • Real-time search/filter via TextInputBuffer
  • Dynamic item filtering with constraint handling
  • Search/results focus switching with Ctrl+F; / focuses search from results
  • Literal Space and / during search, with query/filter preserved on focus changes

Design principles:

  • Composition over inheritance (uses same components as SelectableListPrompt)
  • Separation of concerns (search is separate from selection/navigation)
  • DRY: Centralizes the searchable list pattern

Usage:

final prompt = SearchableListPrompt<String>(
  title: 'Search and select',
  items: allItems,
  multiSelect: true,
);

final result = prompt.run();

With custom filter:

final result = prompt.run(
  filter: (item, query) => item.name.contains(query),
  itemLabel: (item) => item.name,
);

Constructors

SearchableListPrompt({required String title, required List<T> items, PromptTheme theme = PromptTheme.dark, bool multiSelect = false, int maxVisible = 10, Set<int>? initialSelection, bool searchEnabled = true, int reservedLines = 7})

Properties

bindings KeyBindings
Current key bindings.
no setter
filtered List<T>
Currently filtered items.
no setter
hashCode int
The hash code for this object.
no setterinherited
initialSelection Set<int>?
Initial selection indices.
final
isSearchActive bool
Whether search text currently has focus. Filtering persists without focus.
no setter
items List<T>
All items (before filtering).
final
maxVisible int
Maximum visible items (viewport size).
final
multiSelect bool
Whether multiple items can be selected.
final
Current navigation state.
no setter
queryInput TextInputBuffer
Current search query input.
no setter
reservedLines int
Terminal lines to reserve for chrome.
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
searchEnabled bool
Whether the search text initially has focus.
final
selection SelectionController
Current selection state, using indices in the original items.
no setter
theme PromptTheme
Theme for styling.
final
title String
Title for the frame header.
final
wasCancelled bool
Whether the prompt was cancelled.
no setter

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
run({bool filter(T item, String query)?, String itemLabel(T item)?, void renderItem(FrameContext ctx, T item, int absoluteIndex, bool isFocused, bool isSelected, String query)?, bool highlightMatches = true, KeyBindings? extraBindings}) List<T>
Runs the searchable prompt.
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Methods

multi<T>({required String title, required List<T> items, PromptTheme theme = PromptTheme.dark, int maxVisible = 10, Set<int>? initialSelection, String labelBuilder(T)?, bool searchEnabled = true}) List<T>
Creates a multi-select searchable prompt.
single<T>({required String title, required List<T> items, PromptTheme theme = PromptTheme.dark, int maxVisible = 10, String labelBuilder(T)?, bool searchEnabled = true}) → T?
Creates a single-select searchable prompt.