showFailedAnimation function

Future<void> showFailedAnimation({
  1. required BuildContext context,
  2. VoidCallback? onComplete,
  3. Duration duration = const Duration(milliseconds: 2000),
})

Shows a failed animation dialog.

This displays a brief failed animation overlay that auto-dismisses after completion.

Parameters:

  • context: The build context for showing the dialog
  • onComplete: Callback when the animation completes
  • duration: Duration of the animation (default: 2 seconds)

Implementation

Future<void> showFailedAnimation({
  required BuildContext context,
  VoidCallback? onComplete,
  Duration duration = const Duration(milliseconds: 2000),
}) async {
  await showDialog(
    context: context,
    barrierDismissible: false,
    barrierColor: Colors.black54,
    builder: (dialogContext) {
      // Auto-dismiss after duration
      Future.delayed(duration, () {
        if (dialogContext.mounted) {
          Navigator.of(dialogContext).pop();
          onComplete?.call();
        }
      });

      return Center(
        child: Container(
          width: 300,
          height: 300,
          padding: const EdgeInsets.all(16),
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.circular(16),
            boxShadow: [
              BoxShadow(
                color: Colors.black.withValues(alpha: 0.1),
                blurRadius: 10,
                offset: const Offset(0, 4),
              ),
            ],
          ),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Lottie.asset(
                repeat: false,
                AppAssets.failedLottie,
                package: 'amwal_pay_sdk',
                width: 60,
                height: 60,
                fit: BoxFit.contain,
              ),
              const SizedBox(height: 24),
              Text(
                'Payment Failed',
                style: const TextStyle(
                  fontSize: 14,
                  fontWeight: FontWeight.w500,
                  color: Colors.black87,
                  decoration: TextDecoration.none,
                ),
              ),
            ],
          ),
        ),
      );
    },
  );
}