|
|
@@ -0,0 +1,229 @@
|
|
|
+import 'package:electronic_assistant/popup/talk_popup.dart';
|
|
|
+import 'package:electronic_assistant/utils/expand.dart';
|
|
|
+import 'package:flutter/cupertino.dart';
|
|
|
+import 'package:flutter/material.dart';
|
|
|
+import 'package:flutter/widgets.dart';
|
|
|
+import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
+import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
|
+
|
|
|
+class EAAlertDialog {
|
|
|
+ static void show({
|
|
|
+ String? title,
|
|
|
+ String? contentText,
|
|
|
+ Widget? contentWidget,
|
|
|
+ String? confirmText,
|
|
|
+ String? cancelText,
|
|
|
+ VoidCallback? cancelOnTap,
|
|
|
+ VoidCallback? confirmOnTap,
|
|
|
+ VoidCallback? onDismiss,
|
|
|
+ }) {
|
|
|
+ SmartDialog.show(
|
|
|
+ builder: (_) {
|
|
|
+ return _EAAlertDialog(
|
|
|
+ title: title,
|
|
|
+ content: contentText,
|
|
|
+ contentWidget: contentWidget,
|
|
|
+ confirmText: confirmText,
|
|
|
+ cancelText: cancelText,
|
|
|
+ confirmOnTap: confirmOnTap,
|
|
|
+ cancelOnTap: cancelOnTap);
|
|
|
+ },
|
|
|
+ tag: "EAAlertDialog",
|
|
|
+ onDismiss: onDismiss,
|
|
|
+ clickMaskDismiss: false,
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ static void dismiss() {
|
|
|
+ SmartDialog.dismiss(tag: "EAAlertDialog");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class _EAAlertDialog extends Dialog {
|
|
|
+ // 标题
|
|
|
+ final String? title;
|
|
|
+
|
|
|
+ final Widget? contentWidget;
|
|
|
+
|
|
|
+ // 内容
|
|
|
+ final String? content;
|
|
|
+
|
|
|
+ // 取消按钮文字
|
|
|
+ final String? cancelText;
|
|
|
+
|
|
|
+ // 取消按钮回调
|
|
|
+ final VoidCallback? cancelOnTap;
|
|
|
+
|
|
|
+ // 确认按钮文字
|
|
|
+ final String? confirmText;
|
|
|
+
|
|
|
+ // 确认按钮文字回调
|
|
|
+ final VoidCallback? confirmOnTap;
|
|
|
+
|
|
|
+ const _EAAlertDialog({
|
|
|
+ this.title,
|
|
|
+ this.content,
|
|
|
+ this.contentWidget,
|
|
|
+ required this.cancelText,
|
|
|
+ required this.confirmText,
|
|
|
+ this.cancelOnTap,
|
|
|
+ this.confirmOnTap,
|
|
|
+ });
|
|
|
+
|
|
|
+ @override
|
|
|
+ Widget build(BuildContext context) {
|
|
|
+ return Center(
|
|
|
+ child: Column(
|
|
|
+ children: [
|
|
|
+ const Spacer(),
|
|
|
+
|
|
|
+ Container(
|
|
|
+ alignment: Alignment.center,
|
|
|
+ padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
|
|
|
+ width: ScreenUtil().screenWidth - 80.w,
|
|
|
+ decoration: BoxDecoration(
|
|
|
+ borderRadius: BorderRadius.all(Radius.circular(12.w)),
|
|
|
+ color: "#FFFFFF".toColor(),
|
|
|
+ ),
|
|
|
+ child: Column(
|
|
|
+ mainAxisAlignment: MainAxisAlignment.center,
|
|
|
+ children: [
|
|
|
+ /// 标题
|
|
|
+ if (title != null)
|
|
|
+ Text(
|
|
|
+ title!,
|
|
|
+ style: TextStyle(
|
|
|
+ color: "#25262A".toColor(),
|
|
|
+ fontSize: 15.sp,
|
|
|
+ fontWeight: FontWeight.w500,
|
|
|
+ decoration: TextDecoration.none,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+
|
|
|
+ if (title != null) SizedBox(height: 12.h),
|
|
|
+
|
|
|
+ if (content != null)
|
|
|
+
|
|
|
+ /// 内容
|
|
|
+ Text(
|
|
|
+ content ?? "",
|
|
|
+ textAlign: TextAlign.center,
|
|
|
+ style: TextStyle(
|
|
|
+ color: "#5F5F61".toColor(),
|
|
|
+ fontWeight: FontWeight.w500,
|
|
|
+ fontSize: 14.sp,
|
|
|
+ decoration: TextDecoration.none,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+
|
|
|
+ if (contentWidget != null) contentWidget!,
|
|
|
+
|
|
|
+ SizedBox(height: 34.h),
|
|
|
+
|
|
|
+ ///
|
|
|
+ _buttonWidget(context),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+
|
|
|
+ //
|
|
|
+ const Spacer(),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ Widget _buttonWidget(BuildContext context) {
|
|
|
+ if (cancelText == null) {
|
|
|
+ return Row(
|
|
|
+ children: [
|
|
|
+ const Spacer(),
|
|
|
+
|
|
|
+ ///确认按钮
|
|
|
+ GestureDetector(
|
|
|
+ onTap: () {
|
|
|
+ _clickConfirm();
|
|
|
+ },
|
|
|
+ child: _button(text: confirmText ?? "", color: "#6177F2".toColor()),
|
|
|
+ ),
|
|
|
+
|
|
|
+ //
|
|
|
+ const Spacer(),
|
|
|
+ ],
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ return Row(
|
|
|
+ children: [
|
|
|
+ /// 取消按钮
|
|
|
+ Expanded(
|
|
|
+ child: InkWell(
|
|
|
+ onTap: () {
|
|
|
+ _clickCancel();
|
|
|
+ },
|
|
|
+ child: _button(
|
|
|
+ text: cancelText ?? "",
|
|
|
+ color: "#F0F0F0".toColor(),
|
|
|
+ textColor: "#5F5F61".toColor(),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+
|
|
|
+ ///
|
|
|
+ const SizedBox(width: 8),
|
|
|
+
|
|
|
+ /// 确认按钮
|
|
|
+ Expanded(
|
|
|
+ child: InkWell(
|
|
|
+ onTap: () {
|
|
|
+ _clickConfirm();
|
|
|
+ },
|
|
|
+ child:
|
|
|
+ _button(text: confirmText ?? "", color: "#6177F2".toColor()),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Widget _button({
|
|
|
+ required String text,
|
|
|
+ Color? color,
|
|
|
+ BoxBorder? border,
|
|
|
+ Color? textColor = Colors.white,
|
|
|
+ }) {
|
|
|
+ return Container(
|
|
|
+ height: 36.w,
|
|
|
+ decoration: BoxDecoration(
|
|
|
+ borderRadius: BorderRadius.all(Radius.circular(8.w)),
|
|
|
+ color: color,
|
|
|
+ border: border,
|
|
|
+ ),
|
|
|
+ alignment: Alignment.center,
|
|
|
+ child: Text(
|
|
|
+ text,
|
|
|
+ style: TextStyle(
|
|
|
+ color: textColor,
|
|
|
+ fontSize: 14.sp,
|
|
|
+ fontWeight: FontWeight.w500,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ void _clickConfirm() {
|
|
|
+ EAAlertDialog.dismiss();
|
|
|
+
|
|
|
+ if (confirmOnTap != null) {
|
|
|
+ confirmOnTap!();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void _clickCancel() {
|
|
|
+ EAAlertDialog.dismiss();
|
|
|
+
|
|
|
+ if (cancelOnTap != null) {
|
|
|
+ cancelOnTap!();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|