build method

  1. @override
Widget build(
  1. BuildContext context
)
override

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