part of '../async_action_button.dart'; class AsyncActionButton extends StatelessWidget { final AsyncActionCallback? onPressed; final Widget child; final IconData? icon; final ButtonStyle? style; final AsyncActionController? controller; final AsyncErrorBuilder? errorBuilder; final void Function(String message)? onError; final VoidCallback? onSuccess; final bool showInlineError; const AsyncActionButton({ required this.onPressed, required this.child, this.icon, this.style, this.controller, this.errorBuilder, this.onError, this.onSuccess, this.showInlineError = true, super.key, }); @override Widget build(BuildContext context) => _AsyncMixin( onPressed: onPressed, controller: controller, errorBuilder: errorBuilder, onError: onError, onSuccess: onSuccess, builder: (context, busy, handler) { final spinner = AppProgressIndicator.small( color: Theme.of(context).colorScheme.onPrimary, ); final content = busy ? Row( mainAxisSize: MainAxisSize.min, children: [spinner, const SizedBox(width: 8), child], ) : (icon != null ? Row( mainAxisSize: MainAxisSize.min, children: [Icon(icon), const SizedBox(width: 8), child], ) : child); final button = ElevatedButton( onPressed: handler, style: style, child: content, ); if (!showInlineError) return button; return _InlineErrorWrapper(controller: controller, child: button); }, ); }