DynamicListPrompt<T> class

DynamicListPrompt – composable system for lists with dynamic items.

Handles patterns where items change based on state:

  • Tree navigation (expand/collapse)
  • File system navigation
  • Any hierarchical or mutable list

Design principles:

  • Composition over inheritance
  • Separation of concerns (item generation is separate from navigation)
  • DRY: Centralizes the dynamic list pattern

Usage:

final prompt = DynamicListPrompt<TreeEntry>(
  title: 'Explorer',
  buildItems: () => flattenTree(root, expandedNodes),
);

final result = prompt.run(
  onAction: (item, action) {
    if (action == ItemAction.expand) expandedNodes.add(item);
    if (action == ItemAction.collapse) expandedNodes.remove(item);
  },
);

Constructors

DynamicListPrompt({required String title, PromptTheme theme = PromptTheme.dark, int maxVisible = 18})

Properties

bindings → KeyBindings
Current key bindings.
no setter
hashCode → int
The hash code for this object.
no setterinherited
items → List<T>
Current items.
no setter
maxVisible → int
Maximum visible items (viewport size).
final
Current navigation state.
no setter
result → T?
The result item (if confirmed).
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
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({required List<T> buildItems(), DynamicAction onPrimary(T item, int index)?, DynamicAction onSecondary(T item, int index)?, DynamicAction onToggle(T item, int index)?, required void renderItem(FrameContext ctx, T item, int absoluteIndex, bool isFocused), void beforeItems(FrameContext ctx)?, KeyBindings? extraBindings, KeyBindings? customBindings}) → T?
Runs the dynamic list prompt.
toString() → String
A string representation of this object.
inherited

Operators

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