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.