searchableList static method
KeyBindings
searchableList({
- required void onUp(),
- required void onDown(),
- required void onSearchToggle(),
- required TextInputBuffer searchBuffer,
- required bool isSearchEnabled(),
- void onSearchInput()?,
- void onToggle()?,
- bool hasMultiSelect = false,
- KeyActionResult onConfirm()?,
- void onCancel()?,
Search/list focus bindings. isSearchEnabled reports text focus;
onSearchToggle switches focus without clearing the query or filter.
Slash focuses search from results; Ctrl+F switches either direction.
onSearchInput runs only when query text changes.
Implementation
static KeyBindings searchableList({
required void Function() onUp,
required void Function() onDown,
required void Function() onSearchToggle,
required TextInputBuffer searchBuffer,
required bool Function() isSearchEnabled,
void Function()? onSearchInput,
void Function()? onToggle,
bool hasMultiSelect = false,
KeyActionResult Function()? onConfirm,
void Function()? onCancel,
}) {
var bindings = verticalNavigation(onUp: onUp, onDown: onDown) +
KeyBindings([
KeyBinding.single(KeyEventType.slash, (event) {
if (isSearchEnabled()) return KeyActionResult.ignored;
onSearchToggle();
return KeyActionResult.handled;
}, hintLabel: '/', hintDescription: 'focus search'),
KeyBinding.single(KeyEventType.ctrlGeneric, (event) {
if (event.char != 'f') return KeyActionResult.ignored;
onSearchToggle();
return KeyActionResult.handled;
}, hintLabel: 'Ctrl+F', hintDescription: 'search/results focus'),
]) +
textInput(
buffer: () => searchBuffer,
isEnabled: isSearchEnabled,
onTextChanged: onSearchInput,
);
if (hasMultiSelect && onToggle != null) {
bindings = bindings +
conditionalToggle(
isEnabled: () => !isSearchEnabled(),
onToggle: onToggle,
hintDescription: 'select in results',
);
}
return bindings +
confirm(onConfirm: onConfirm) +
cancel(onCancel: onCancel);
}