ensureSearchBar method

void ensureSearchBar({
  1. required String page,
  2. required BrownfieldPatternTarget before,
  3. required String stateField,
  4. required String name,
  5. String hint = 'Search...',
  6. List<DslAction> onSubmit = const <DslAction>[],
})

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);
  });
}