import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:kaer_with_panels/app/localization/app_translations.dart'; class KRDialog extends StatelessWidget { final String? title; final String? message; final String? confirmText; final String? cancelText; final VoidCallback? onConfirm; final VoidCallback? onCancel; final Widget? icon; final Widget? customMessageWidget; const KRDialog({ Key? key, this.title, this.message, this.confirmText, this.cancelText, this.onConfirm, this.onCancel, this.icon, this.customMessageWidget, }) : super(key: key); static Future show({ String? title, String? message, String? confirmText, String? cancelText, VoidCallback? onConfirm, VoidCallback? onCancel, Widget? icon, Widget? customMessageWidget, }) { return Get.dialog( KRDialog( title: title, message: message, confirmText: confirmText, cancelText: cancelText, onConfirm: onConfirm, onCancel: onCancel, icon: icon, customMessageWidget: customMessageWidget, ), barrierDismissible: false, ); } Widget _buildConfirmButton() { return Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(23.r), boxShadow: [ BoxShadow( color: const Color(0xFF1797FF).withOpacity(0.25), blurRadius: 8.r, offset: Offset(0, 2.w), ), ], ), child: TextButton( onPressed: () { Get.back(); onConfirm?.call(); }, style: TextButton.styleFrom( backgroundColor: const Color(0xFF1797FF), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(23.r), ), padding: EdgeInsets.zero, minimumSize: Size.fromHeight(46.w), tapTargetSize: MaterialTapTargetSize.shrinkWrap, ), child: Text( confirmText ?? AppTranslations.kr_dialog.kr_confirm, style: TextStyle( fontSize: 15.sp, fontWeight: FontWeight.w500, color: Colors.white, fontFamily: 'AlibabaPuHuiTi-Medium', ), ), ), ); } @override Widget build(BuildContext context) { final theme = Theme.of(context); final isDark = theme.brightness == Brightness.dark; return Dialog( backgroundColor: theme.cardColor, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.r), ), child: Container( width: 280.w, padding: EdgeInsets.all(24.w), child: Column( mainAxisSize: MainAxisSize.min, children: [ if (icon != null) ...[ icon!, SizedBox(height: 20.w), ], if (title != null) ...[ Text( title!, style: TextStyle( fontSize: 17.sp, fontWeight: FontWeight.w600, color: isDark ? Colors.white : const Color(0xFF333333), fontFamily: 'AlibabaPuHuiTi-Medium', height: 1.3, ), textAlign: TextAlign.center, ), SizedBox(height: 12.w), ], if (message != null || customMessageWidget != null) ...[ Container( constraints: BoxConstraints(maxHeight: 200.h), child: SingleChildScrollView( child: customMessageWidget ?? Text( message!, textAlign: TextAlign.center, style: TextStyle( fontSize: 14.sp, color: isDark ? const Color(0xFFCCCCCC) : const Color(0xFF666666), fontFamily: 'AlibabaPuHuiTi-Regular', height: 1.4, ), ), ), ), SizedBox(height: 28.w), ], if (cancelText != null) ...[ Row( children: [ Expanded( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(23.r), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.03), blurRadius: 4.r, offset: Offset(0, 2.w), ), ], ), child: TextButton( onPressed: () { Get.back(); onCancel?.call(); }, style: TextButton.styleFrom( backgroundColor: isDark ? const Color(0xFF222222) : const Color(0xFFEEEEEE), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(23.r), ), padding: EdgeInsets.zero, minimumSize: Size.fromHeight(46.w), tapTargetSize: MaterialTapTargetSize.shrinkWrap, ), child: Text( cancelText ?? AppTranslations.kr_dialog.kr_cancel, style: TextStyle( fontSize: 15.sp, fontWeight: FontWeight.w500, color: isDark ? const Color(0xFFBBBBBB) : const Color(0xFF666666), fontFamily: 'AlibabaPuHuiTi-Medium', ), ), ), ), ), SizedBox(width: 12.w), Expanded(child: _buildConfirmButton()), ], ), ] else ...[ _buildConfirmButton(), ], ], ), ), ); } }