Some checks failed
Build Android APK / 编译 libcore.aar (push) Has been cancelled
Build Android APK / 编译 Android APK (release) (push) Has been cancelled
Build Android APK / 创建 GitHub Release (push) Has been cancelled
Build Multi-Platform / 编译 libcore (iOS/tvOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Android) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Windows) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (macOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Linux) (push) Has been cancelled
Build Multi-Platform / 构建 Android APK (push) Has been cancelled
Build Multi-Platform / 构建 Windows (push) Has been cancelled
Build Multi-Platform / 构建 macOS (push) Has been cancelled
Build Multi-Platform / 构建 Linux (push) Has been cancelled
Build Multi-Platform / 构建 iOS (push) Has been cancelled
Build Multi-Platform / 创建 Release (push) Has been cancelled
Build Windows / 编译 libcore (Windows) (push) Has been cancelled
Build Windows / build (push) Has been cancelled
(cherry picked from commit 010405edda74bdb0251dcff2e32482edae2c9976)
198 lines
6.3 KiB
Dart
Executable File
198 lines
6.3 KiB
Dart
Executable File
import 'package:flutter/material.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() {
|
||
// 🔧 Android 15 关键修复:完全移除 ScreenUtil,使用固定像素值
|
||
return Container(
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(23),
|
||
boxShadow: [
|
||
BoxShadow(
|
||
color: const Color(0xFF1797FF).withOpacity(0.25),
|
||
blurRadius: 8,
|
||
offset: const Offset(0, 2),
|
||
),
|
||
],
|
||
),
|
||
child: TextButton(
|
||
onPressed: () {
|
||
Get.back();
|
||
onConfirm?.call();
|
||
},
|
||
style: TextButton.styleFrom(
|
||
backgroundColor: const Color(0xFF1797FF),
|
||
shape: RoundedRectangleBorder(
|
||
borderRadius: BorderRadius.circular(23),
|
||
),
|
||
padding: EdgeInsets.zero,
|
||
minimumSize: const Size.fromHeight(46),
|
||
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||
),
|
||
child: Text(
|
||
confirmText ?? AppTranslations.kr_dialog.kr_confirm,
|
||
style: const TextStyle(
|
||
fontSize: 15,
|
||
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;
|
||
|
||
// 🔧 Android 15 关键修复:完全移除 ScreenUtil,使用固定像素值
|
||
return Dialog(
|
||
backgroundColor: theme.cardColor,
|
||
shape: RoundedRectangleBorder(
|
||
borderRadius: BorderRadius.circular(12),
|
||
),
|
||
child: Container(
|
||
width: 280,
|
||
padding: const EdgeInsets.all(24),
|
||
child: Column(
|
||
mainAxisSize: MainAxisSize.min,
|
||
children: [
|
||
if (icon != null) ...[
|
||
icon!,
|
||
const SizedBox(height: 20),
|
||
],
|
||
if (title != null) ...[
|
||
Text(
|
||
title!,
|
||
style: TextStyle(
|
||
fontSize: 17,
|
||
fontWeight: FontWeight.w600,
|
||
color: isDark ? Colors.white : const Color(0xFF333333),
|
||
fontFamily: 'AlibabaPuHuiTi-Medium',
|
||
height: 1.3,
|
||
),
|
||
textAlign: TextAlign.center,
|
||
),
|
||
const SizedBox(height: 12),
|
||
],
|
||
if (message != null || customMessageWidget != null) ...[
|
||
Container(
|
||
constraints: const BoxConstraints(maxHeight: 200),
|
||
child: SingleChildScrollView(
|
||
child: customMessageWidget ?? Text(
|
||
message!,
|
||
textAlign: TextAlign.center,
|
||
style: TextStyle(
|
||
fontSize: 14,
|
||
color: isDark ? const Color(0xFFCCCCCC) : const Color(0xFF666666),
|
||
fontFamily: 'AlibabaPuHuiTi-Regular',
|
||
height: 1.4,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
const SizedBox(height: 28),
|
||
],
|
||
if (cancelText != null) ...[
|
||
Row(
|
||
children: [
|
||
Expanded(
|
||
child: Container(
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(23),
|
||
boxShadow: [
|
||
BoxShadow(
|
||
color: Colors.black.withOpacity(0.03),
|
||
blurRadius: 4,
|
||
offset: const Offset(0, 2),
|
||
),
|
||
],
|
||
),
|
||
child: TextButton(
|
||
onPressed: () {
|
||
Get.back();
|
||
onCancel?.call();
|
||
},
|
||
style: TextButton.styleFrom(
|
||
backgroundColor: isDark ? const Color(0xFF222222) : const Color(0xFFEEEEEE),
|
||
shape: RoundedRectangleBorder(
|
||
borderRadius: BorderRadius.circular(23),
|
||
),
|
||
padding: EdgeInsets.zero,
|
||
minimumSize: const Size.fromHeight(46),
|
||
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||
),
|
||
child: Text(
|
||
cancelText ?? AppTranslations.kr_dialog.kr_cancel,
|
||
style: TextStyle(
|
||
fontSize: 15,
|
||
fontWeight: FontWeight.w500,
|
||
color: isDark ? const Color(0xFFBBBBBB) : const Color(0xFF666666),
|
||
fontFamily: 'AlibabaPuHuiTi-Medium',
|
||
),
|
||
),
|
||
),
|
||
),
|
||
),
|
||
const SizedBox(width: 12),
|
||
Expanded(child: _buildConfirmButton()),
|
||
],
|
||
),
|
||
] else ...[
|
||
_buildConfirmButton(),
|
||
],
|
||
],
|
||
),
|
||
),
|
||
);
|
||
}
|
||
} |