import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:kaer_with_panels/app/widgets/kr_local_image.dart'; import '../../localization/app_translations.dart'; class KRUpdateDialog extends StatelessWidget { final String version; final String updateContent; final VoidCallback? onConfirm; final VoidCallback? onCancel; final bool showCancelButton; final bool isForceUpdate; KRUpdateDialog({ Key? key, required this.version, String? updateContent, this.onConfirm, this.onCancel, this.showCancelButton = true, this.isForceUpdate = false, }) : updateContent = updateContent ?? AppTranslations.kr_update.defaultContent, super(key: key); static Future show({ required String version, String? updateContent, VoidCallback? onConfirm, VoidCallback? onCancel, bool showCancelButton = true, bool isForceUpdate = false, }) { return Get.dialog( KRUpdateDialog( version: version, updateContent: updateContent, onConfirm: onConfirm, onCancel: onCancel, showCancelButton: showCancelButton, isForceUpdate: isForceUpdate, ), barrierDismissible: false, ); } Widget _buildConfirmButton(ThemeData theme) { return Container( width: double.infinity, height: 44.h, decoration: BoxDecoration( borderRadius: BorderRadius.circular(22.r), gradient: const LinearGradient( colors: [Color(0xFF2196F3), Color(0xFF1E88E5)], ), ), child: TextButton( onPressed: () { if (!isForceUpdate) { Get.back(); } onConfirm?.call(); }, style: TextButton.styleFrom( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(22.r), ), padding: EdgeInsets.zero, ), child: Text( AppTranslations.kr_update.updateNow, style: theme.textTheme.titleMedium?.copyWith( color: Colors.white, fontWeight: FontWeight.w500, fontSize: 16.sp, ), ), ), ); } Widget _buildCancelButton(ThemeData theme) { return TextButton( onPressed: () { Get.back(); onCancel?.call(); }, style: TextButton.styleFrom( padding: EdgeInsets.zero, ), child: Text( AppTranslations.kr_update.updateLater, style: theme.textTheme.bodyMedium?.copyWith( color: theme.hintColor, fontSize: 14.sp, ), ), ); } @override Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); 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: [ KrLocalImage( imageName: 'vs_update', width: 190.w, height: 98.w, imageType: ImageType.svg, ), SizedBox(height: 16.h), Text( AppTranslations.kr_update.title, style: theme.textTheme.titleLarge?.copyWith( fontWeight: FontWeight.w600, fontSize: 18.sp, color: theme.brightness == Brightness.light ? const Color(0xFF333333) : theme.textTheme.titleLarge?.color, ), ), SizedBox(height: 4.h), Text( 'V$version', style: theme.textTheme.bodyMedium?.copyWith( color: theme.hintColor, fontSize: 14.sp, ), ), SizedBox(height: 1.h), Container( constraints: BoxConstraints(maxHeight: 120.h), child: SingleChildScrollView( child: Text( updateContent, style: theme.textTheme.bodyMedium?.copyWith( color: theme.hintColor, fontSize: 14.sp, height: 1.5, ), ), ), ), SizedBox(height: 20.h), _buildConfirmButton(theme), if (showCancelButton) ...[ SizedBox(height: 12.h), _buildCancelButton(theme), ], ], ), ), ); } }