Skip to content

FlowThinkingIndicator is the turning, breathing asterisk shown while a reply is pending, its host-supplied label shimmering beside it. You mostly get it for free: a message with FlowMessageStatus.pending renders it automatically — pass thinkingLabel: to FlowMessage or FlowThread and the library does the rest. It is also available standalone for custom waiting states.

Pending
FlowThinkingIndicator(label: 'Thinking…')

active: false is the settled state — the same line, holding still. Keep it on screen after thinking ends and swap the label you already own; the line becomes a quiet record of the work:

The same line, settled
// active: false holds the line still — keep it on screen after
// thinking ends and swap the label you already own.
FlowThinkingIndicator(
active: false,
label: 'Thought about it',
)

Without a label it is just the spinning mark, sized and colored to taste. semanticLabel keeps it announced to screen readers — the package ships no strings of its own:

Just the mark
// No label: just the spinning mark. semanticLabel keeps it
// announced; the package ships no strings.
FlowThinkingIndicator(
size: 24,
color: context.flowColors.primary,
semanticLabel: 'Thinking',
)
  • label — shimmer-treated while active, static once settled.
  • activefalse freezes the asterisk and the label in place; the platform’s reduced-motion setting renders static too.
  • size (14) and color (onSurfaceMuted) — the glyph in any form; the label always draws in the muted ink, a step below the glyph.
  • duration — one turn-and-breathe cycle (2400ms).
  • semanticLabel — keeps the glyph-only form announced to screen readers.
  • In a thread: set message status to pending and pass thinkingLabel: — no manual wiring.