ConversationNavigator
A searchable list of conversations or sessions. Each row shows a title, status, and latest message (plus an unread count or pinned mark when they apply), and typing in the query field filters the rows.
Import: package:fleury/fleury.dart, or package:fleury/fleury_core.dart in browser code.
const ConversationNavigator( conversations: <ConversationEntry>[ ConversationEntry( id: 'c1', title: 'Benchmark scoreboard', subtitle: 'Perf follow-up', status: ConversationStatus.active, latestMessage: 'All peers green', unreadCount: 2, ), ConversationEntry( id: 'c2', title: 'Docs site', status: ConversationStatus.idle, latestMessage: 'Examples shipped', ), ],)Details
Section titled “Details”By default a query keeps conversations that match it exactly, by prefix,
as a substring, or as a fuzzy subsequence, listed in that order; pass
matcher to decide matches yourself. Up and Down move the selected
conversation from the query field or the list; in the list, PageUp,
PageDown, Home, and End also jump. Enter or a click activates an enabled
conversation and calls onSelect. Ctrl+C copies the selected
conversation (in the query field, selected query text is copied instead).
Constructors
Section titled “Constructors”ConversationNavigator()
Section titled “ConversationNavigator()”| Parameter | Type | Default | Description |
|---|---|---|---|
conversations: | List<ConversationEntry> | required | Source conversations to search, display, activate, and copy. |
queryController: | TextEditingController? | — | External controller for the query input. |
controller: | ConversationNavigatorController? | — | External controller for list selection and visible range. |
matcher: | ConversationMatcher? | — | Optional app-owned matcher used instead of default ranked search. |
semanticLabel: | String | 'Conversations' | Semantic label (the accessibility name; not rendered) for the navigator. |
placeholder: | String | 'Search conversations...' | Placeholder shown in the query input. |
width: | int | 60 | Width, in terminal cells, reserved for query and rows. |
maxVisible: | int | 6 | Maximum visible rows before the list scrolls. |
showTimestamp: | bool | false | Prefix each row with the conversation’s ConversationEntry.timestamp as a local HH:mm:ss clock, when one is set. Off by default. |
queryFocusNode: | FocusNode? | — | Focus node used by the query input. |
listFocusNode: | FocusNode? | — | Focus node used by the conversation list. |
autofocus: | bool | false | Whether the query input should request focus when mounted. |
copySelection: | bool | true | Whether Ctrl+C (and the semantic copy action) copies the selected conversation. |
copyOptions: | ConversationNavigatorCopyOptions | const ConversationNavigatorCopyOptions() | Clipboard/export options for selected-row copy. |
onSelect: | void Function(ConversationNavigatorSelectResult result)? | — | Called when the user activates an enabled conversation: Enter in the query field or the list, or a click on its row. |
onCopy: | void Function(ConversationNavigatorCopyResult result)? | — | Called after a copy attempt completes. |
Source
Section titled “Source”ConversationNavigator is defined in packages/fleury/lib/src/catalog/conversation_navigator.dart.
Category: Agent surfaces · All widgets