ensureEmptyState method
void
ensureEmptyState({
- required String page,
- required BrownfieldPatternTarget content,
- required Object? visibleWhen,
- required DslWidget emptyState,
- 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);
});
}