ensureButtonBindings method
void
ensureButtonBindings({
- required String page,
- required BrownfieldPatternTarget button,
- Object? text,
- Object? visibleWhen,
Binds an existing button's text and/or visibility to expressions.
Use this when you want a small rerunnable update on one existing button instead of rebuilding the surrounding layout.
Example:
app.ensureButtonBindings(
page: 'TaskListPage',
button: BrownfieldPatternTarget.singleExistingButton(),
text: State('ctaLabel'),
visibleWhen: State('showCta'),
);
Implementation
void ensureButtonBindings({
required String page,
required BrownfieldPatternTarget button,
Object? text,
Object? visibleWhen,
}) {
if (text == null && visibleWhen == null) {
throw ArgumentError(
'ensureButtonBindings(...) requires at least one of text or visibleWhen.',
);
}
recordExistingReference(
name: page,
kind: 'page',
referenceApi: 'ensureButtonBindings',
removeApi: 'removePage',
);
raw((project) {
final editor = _pagePatternEditor(page);
final pageSnapshot = _requirePagePatternSnapshot(project, page);
final buttonRef = _resolveTypedPatternTarget(
pageSnapshot,
editor,
button,
operation: 'ensureButtonBindings(button: ...)',
allowedTypes: {FFWidgetType.Button.name, FFWidgetType.IconButton.name},
);
final selection = _selectionForResolvedTarget(editor, buttonRef);
if (text != null) {
if (buttonRef.type != FFWidgetType.Button.name) {
throw StateError(
'ensureButtonBindings(text: ...) requires a Button target, but '
'matched ${buttonRef.type} at ${buttonRef.path}.',
);
}
editor.bindText(selection, text);
}
if (visibleWhen != null) {
editor.bindVisible(selection, visibleWhen);
}
_applyBrownfieldWidgetClassEdit(project, editor);
});
}