ensureEmptyState method

void ensureEmptyState({
  1. required String page,
  2. required BrownfieldPatternTarget content,
  3. required Object? visibleWhen,
  4. required DslWidget emptyState,
  5. BrownfieldPatternTarget? insertBefore,
})

Inserts and wires an empty state beside existing content.

The content target remains visible when visibleWhen is true; the new emptyState is shown for the inverse condition.

Implementation

void ensureEmptyState({
  required String page,
  required BrownfieldPatternTarget content,
  required Object? visibleWhen,
  required DslWidget emptyState,
  BrownfieldPatternTarget? insertBefore,
}) {
  raw((project) {
    final editor = _pagePatternEditor(page);
    final pageSnapshot = _requirePagePatternSnapshot(project, page);
    editor._validateNamedWidget(emptyState, operation: 'ensureEmptyState');
    final existingEmptyState = _findUniqueNamedWidget(
      pageSnapshot,
      emptyState.name!,
    );
    final contentRef =
        existingEmptyState == null
            ? _resolvePatternTarget(
              pageSnapshot,
              editor,
              content,
              operation: 'ensureEmptyState(content: ...)',
            )
            : _nextSiblingWidgetRef(
                  pageSnapshot.root,
                  existingEmptyState.key,
                ) ??
                _resolvePatternTargetExcluding(
                  pageSnapshot,
                  editor,
                  content,
                  excludedKey: existingEmptyState.key,
                  operation: 'ensureEmptyState(content: ...)',
                );
    compileDslBoolValueForExistingWidgetClass(
      project,
      widgetClassName: page,
      targetNodeKey: contentRef.key,
      expression: normalizeExpression(visibleWhen),
    );

    final emptyStateSelection =
        existingEmptyState == null
            ? editor.findByName(emptyState.name!)
            : _selectionForResolvedTarget(editor, existingEmptyState);
    if (existingEmptyState == null) {
      final insertTarget = insertBefore ?? content;
      final insertTargetRef = _resolvePatternTarget(
        pageSnapshot,
        editor,
        insertTarget,
        operation: 'ensureEmptyState(insertBefore: ...)',
      );
      editor.ensureInsertedBefore(
        _selectionForResolvedTarget(editor, insertTargetRef),
        emptyState,
      );
    } else {
      editor.ensureInsertedBefore(
        _selectionForResolvedTarget(editor, contentRef),
        emptyState,
      );
    }
    editor.bindVisible(emptyStateSelection, visibleWhen);
    editor.bindVisible(
      _selectionForResolvedTarget(editor, contentRef),
      Not(visibleWhen),
    );
    _applyBrownfieldWidgetClassEdit(project, editor);
  });
}