showAdaptiveConfirmationDialog function

Future<void> showAdaptiveConfirmationDialog({
  1. required BuildContext context,
  2. required String title,
  3. required String message,
  4. required Widget icon,
  5. required FutureOr<void> onConfirm(),
  6. bool barrierDismissible = true,
  7. String? confirmText,
  8. String? cancelText,
  9. bool popOnConfirm = true,
  10. VoidCallback? onCancel,
})

Implementation

Future<void> showAdaptiveConfirmationDialog({
  required BuildContext context,
  required String title,
  required String message,
  required Widget icon,
  required FutureOr<void> Function() onConfirm,
  bool barrierDismissible = true,
  final String? confirmText,
  final String? cancelText,
  final bool popOnConfirm = true,
  VoidCallback? onCancel,
}) async {
  if (Platform.isIOS) {
    showDialog(
      context: context,
      barrierDismissible: barrierDismissible,
      builder: (context) => CupertinoAlertDialog(
        title: Text(title),
        content: Text(message),
        actions: [
          JetCupertinoButton(
            text: cancelText ?? context.jetI10n.cancel,
            onTap: () {
              HapticFeedback.lightImpact();
              onCancel?.call();
              if (popOnConfirm && context.mounted) {
                Navigator.pop(context);
              }
            },
          ),
          JetCupertinoButton(
            text: confirmText ?? context.jetI10n.confirm,
            isDefaultAction: true,
            onTap: () async {
              HapticFeedback.lightImpact();
              await onConfirm();
              if (popOnConfirm && context.mounted) {
                Navigator.pop(context);
              }
            },
          ),
        ],
      ),
    );
  } else {
    showDialog(
      context: context,
      barrierDismissible: barrierDismissible,
      builder: (context) => AlertDialog(
        icon: icon,
        title: Text(title),
        content: Text(message),
        actions: [
          JetButton.textButton(
            text: cancelText ?? context.jetI10n.cancel,
            onTap: () {
              HapticFeedback.lightImpact();
              onCancel?.call();
              if (popOnConfirm && context.mounted) {
                Navigator.pop(context);
              }
            },
          ),
          JetButton.filled(
            text: confirmText ?? context.jetI10n.confirm,
            onTap: () async {
              HapticFeedback.lightImpact();
              await onConfirm();
              if (popOnConfirm && context.mounted) {
                Navigator.pop(context);
              }
            },
          ),
        ],
      ),
    );
  }
}