Skip to content

Input

The canonical text input. Renders in filled style on surface01; hover and focus add a 1px teal accent border. When maxLength is set, the field switches to the tall, counter-bearing layout with 0/N rendered bottom-right.

PromeoInput via Flutter micro-app at /preview. Live state pushed via postMessage.

Anatomy diagram pending. The field box sits filled on surface01 with a placeholder and leading affordance; a label row and a 0/N counter are additive. The Figma input_field board (qSGwqIJWW8r9E4NvLsdRTx, node 1:119) documents three layouts, all the same widget with different props:

  • Text field (plain) — just the field box, placeholder, and leading affordance. No label, no counter.
  • Text field with title — adds a label row above the field.
  • Text field with title and word limit — adds the 0/N counter (driven by maxLength) and the tall layout.

Plain

PromeoInput via Flutter micro-app at /preview. Live state pushed via postMessage.

PromeoInput(
placeholder: 'e.g. Wireless mouse',
onChanged: (v) {},
)

With title

PromeoInput via Flutter micro-app at /preview. Live state pushed via postMessage.

PromeoInput(
label: 'Product name',
placeholder: 'e.g. Wireless mouse',
onChanged: (v) {},
)

With title + word limit

PromeoInput via Flutter micro-app at /preview. Live state pushed via postMessage.

PromeoInput(
label: 'Product name',
placeholder: 'e.g. Wireless mouse',
maxLength: 60,
onChanged: (v) {},
)
PromeoInput(
label: 'Product name',
placeholder: 'e.g. Wireless mouse',
maxLength: 60,
onChanged: (next) => setState(() => value = next),
)
PropTypeDefaultNotes
controllerTextEditingController?nullExternal controller. If null, the widget creates its own and seeds it
with [initialValue].
initialValueString?nullSeed value for the internally-owned controller. Ignored when
[controller] is provided.
onChangedValueChanged<String>?nullNotified on every keystroke.
placeholderString?nullPlaceholder text when value is empty.
labelString?nullTitle label rendered above the field. Maps to Figma `title` axis.
maxLengthint?nullMaximum character count. When non-null, switches to the tall layout
with a `0/N` counter rendered bottom-right. Maps to Figma `number` axis.
enabledbooltrue`false` → disable interaction and render in [PromeoInputStatus.disable]
style.
widthdouble?nullField width. Defaults to 300 (matches Figma frame).
focusNodeFocusNode?nullExternal focus node. If null, the widget creates its own.
  • Filled style only; outlined / underlined variants are not part of the Promeo input system.
  • Hover and focus add the 1px teal accent border automatically — there is no prop for it.
  • enabled: false renders the disabled style and blocks interaction.
  • The 0/N counter appears only when maxLength is set; that variant also bumps the field height, so account for it in tight vertical layouts.