hi-client/lib/app/widgets/dialogs/kr_dialog.dart
Rust b7a78aa76a 修复:大量的ScreenUtil误用,导致界面可能出现问题
(cherry picked from commit 2829da5267a14a9e0f43ff56060a68f1f8b2ca6a)
2025-11-01 23:25:23 -07:00

197 lines
6.1 KiB
Dart
Executable File

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<void> 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.h),
],
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.h),
],
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.h),
],
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(),
],
],
),
),
);
}
}