build method
Builds the controlled value/editor row and keyboard actions.
Implementation
@override
Widget build(BuildContext context) {
Widget content = Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(child: editing ? editor : value),
if (editing)
CarpenterIconButton(
icon: GravityIcons.xmark,
semanticLabel: 'Cancel editing',
prominence: ActionProminence.ghost,
size: actionSize,
onPressed: committing ? null : onCancelRequested,
),
CarpenterIconButton(
icon: editing ? GravityIcons.check : GravityIcons.pencil,
semanticLabel: editing ? commitSemanticLabel : editSemanticLabel,
prominence: ActionProminence.ghost,
size: actionSize,
executionPhase: committing
? ActionExecutionPhase.running
: ActionExecutionPhase.idle,
onPressed: !enabled || committing
? null
: editing
? onCommitRequested
: onEditRequested,
),
],
);
if (errorText case final message?) {
content = Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: [
content,
CarpenterText.feedback(
message,
feedbackRole: FeedbackColorRole.danger,
role: TypographyRole.caption,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
],
);
}
if (!editing) return content;
return Actions(
actions: <Type, Action<Intent>>{
_InlineCommitIntent: CallbackAction<_InlineCommitIntent>(
onInvoke: (_) {
if (!committing && enabled) onCommitRequested?.call();
return null;
},
),
_InlineCancelIntent: CallbackAction<_InlineCancelIntent>(
onInvoke: (_) {
if (!committing) onCancelRequested?.call();
return null;
},
),
},
child: Shortcuts(
shortcuts: <ShortcutActivator, Intent>{
if (commitOnEnter)
const SingleActivator(LogicalKeyboardKey.enter):
const _InlineCommitIntent(),
const SingleActivator(LogicalKeyboardKey.escape):
const _InlineCancelIntent(),
},
child: content,
),
);
}