ensureSearchBar method
void
ensureSearchBar({})
Inserts a named search field before an existing anchor and wires it to page-local string state.
If a field with name already exists, the helper treats the edit as a
rerun and reuses that field rather than inserting a duplicate.
Implementation
void ensureSearchBar({
required String page,
required BrownfieldPatternTarget before,
required String stateField,
required String name,
String hint = 'Search...',
List<DslAction> onSubmit = const <DslAction>[],
}) {
raw((project) {
final editor = _pagePatternEditor(page);
final pageSnapshot = _requirePagePatternSnapshot(project, page);
_validateStateFieldType(
project,
widgetClassName: page,
fieldName: stateField,
expectedScalarType: FFBaseDataType.String,
operation: 'ensureSearchBar',
);
final stateEditor = BrownfieldStateEditor._(widgetClassName: page);
stateEditor.ensureField(stateField, string.withDefault(''));
_applyBrownfieldStateEdit(project, stateEditor);
final searchField = TextField(
name: name,
hint: hint,
onChanged: [SetState(stateField, TextValue())],
onSubmitted: onSubmit.isEmpty ? null : onSubmit,
);
final existingSearchField = _findUniqueNamedWidget(pageSnapshot, name);
final beforeRef =
existingSearchField == null
? _resolvePatternTarget(
pageSnapshot,
editor,
before,
operation: 'ensureSearchBar(before: ...)',
)
: _nextSiblingWidgetRef(
pageSnapshot.root,
existingSearchField.key,
) ??
_resolvePatternTarget(
pageSnapshot,
editor,
before,
operation: 'ensureSearchBar(before: ...)',
);
editor.ensureInsertedBefore(
_selectionForResolvedTarget(editor, beforeRef),
searchField,
);
_applyBrownfieldWidgetClassEdit(project, editor);
});
}