app-starlock/lib/tools/showCupertinoAlertView.dart

624 lines
21 KiB
Dart
Executable File

import 'dart:typed_data';
import 'dart:ui';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/tools/submitBtn.dart';
typedef AuthInfoCallback = void Function(String? idCard, String? name);
class ShowCupertinoAlertView {
bool isSystemEmailSelected = true; // 默认选中系统邮件
final GlobalKey _repaintBoundaryKey = GlobalKey();
//微信公众号二维码弹窗
void showQRImageAlert(
BuildContext widgetContext, String qrCodeUrl, String qrCodeText) {
showCupertinoModalPopup(
context: widgetContext,
builder: (BuildContext context) {
return CupertinoActionSheet(
actions: <Widget>[
Container(
color: Colors.white, // 设置底色为白色
child: CupertinoActionSheetAction(
child: Container(
margin: const EdgeInsets.all(0),
child: Column(
children: <Widget>[
SizedBox(
height: 60.h,
),
if (qrCodeUrl.isNotEmpty)
Image.network(
qrCodeUrl,
width: 400.w,
height: 400.w,
)
else
Container(),
SizedBox(
height: 20.h,
),
Padding(
padding: EdgeInsets.only(left: 60.w, right: 60.w),
child: Text(
'${"开启微信接收报警消息需要先关注".tr}$qrCodeText${"微信公众号,请保存二维码并使用微信扫一扫设置".tr}',
style:
TextStyle(fontSize: 24.sp, color: Colors.black),
)),
SizedBox(
height: 60.h,
)
],
),
),
onPressed: () {
Navigator.of(context).pop();
},
),
),
],
);
},
);
}
//高级功能弹窗
void advancedFeatureAlert() {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: Container(
margin: EdgeInsets.only(bottom: 20.h),
child: Image.asset(
'images/icon_gift.png',
width: 50.w,
height: 50.w,
),
),
content: Text('该功能是高级功能,请开通后再使用'.tr),
actions: [
CupertinoDialogAction(
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: Get.back,
),
CupertinoDialogAction(
child: Text(
'去开通'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: () async {
Get.toNamed(Routers.advancedFeaturesWebPage, arguments: {
'webBuyType': XSConstantMacro.webBuyTypeVip,
});
},
),
],
);
});
}
//高级功能顶部提示框
Widget topTipsAdvancedFeatures(String tipsText) {
return Container(
color: AppColors.vipFeatureBgColor,
padding: EdgeInsets.only(left: 20.w),
height: 80.h,
width: 1.sw,
child: Row(
children: [
Flexible(
child: Text(tipsText,
style: TextStyle(
color: AppColors.vipFeatureBtnTextColor, fontSize: 22.sp)),
),
SizedBox(
width: 10.w,
),
SizedBox(
width: 146.w,
height: 46.h,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.vipFeatureBtnBgColor,
),
onPressed: () {
Get.toNamed(Routers.advancedFeaturesWebPage, arguments: {
'webBuyType': XSConstantMacro.webBuyTypeVip,
});
},
child: Text(
'去开通'.tr,
style: TextStyle(color: Colors.white, fontSize: 22.sp),
)),
),
SizedBox(width: 2.w)
// Expanded(
// child: SizedBox(
// width: 2.w,
// ))
],
),
);
}
//发送需要实名认证的电子钥匙时身份信息确认框
void realNameIDCardInfoComfirmAlert(
{required String getNameStr,
required String getIDCardStr,
required VoidCallback onConfirm}) {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: Text('请确认姓名全名和身份证号码是否正确'.tr),
content: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 10.h,
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
'姓名 ',
style: TextStyle(fontSize: 22.sp, color: Colors.black),
),
Text(
'身份证',
style: TextStyle(fontSize: 22.sp, color: Colors.black),
)
],
),
SizedBox(
width: 10.w,
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
getNameStr,
style: TextStyle(fontSize: 22.sp, color: Colors.black),
),
Text(
getIDCardStr,
style: TextStyle(fontSize: 22.sp, color: Colors.black),
)
],
)
],
),
actions: [
CupertinoDialogAction(
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: Get.back,
),
CupertinoDialogAction(
child: Text(
'确定'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: () async {
// 执行回调函数
onConfirm();
Get.back();
},
),
],
);
});
}
//打开实名认证弹出输入身份证信息框
void showOpenAuthWithIDCardInfoAlert(AuthInfoCallback callback) {
showCupertinoDialog(
context: Get.context!,
builder: (BuildContext context) {
String idCard = '';
String name = '';
return CupertinoAlertDialog(
title: Text('请输入身份证号和真实姓名'.tr),
content: Column(
children: <Widget>[
SizedBox(
height: 10.h,
),
CupertinoTextField(
placeholder: '请输入身份证号'.tr,
onChanged: (value) {
idCard = value;
},
),
SizedBox(
height: 10.h,
),
CupertinoTextField(
placeholder: '请输入真实姓名'.tr,
onChanged: (value) {
name = value;
},
),
],
),
actions: <Widget>[
CupertinoDialogAction(
onPressed: Get.back,
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
),
CupertinoDialogAction(
onPressed: () {
// 在这里处理确认按钮的逻辑
if (idCard.isEmpty || name.isEmpty) {
EasyLoading.showToast('请输入身份证号和真实姓名'.tr);
return;
}
callback(idCard, name);
Get.back();
},
child: Text(
'确定'.tr,
style: TextStyle(color: AppColors.mainColor),
),
),
],
);
},
);
}
//是否要远程开锁弹窗
void isToRemoteUnLockAlert({required Function remoteUnlockAction}) {
showCupertinoDialog(
context: Get.context!,
builder: (BuildContext context) {
return CupertinoAlertDialog(
title: Container(),
content: Text('是否要远程开锁'.tr),
actions: <Widget>[
CupertinoDialogAction(
onPressed: Get.back,
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
),
CupertinoDialogAction(
onPressed: () {
// 在这里处理确认按钮的逻辑
remoteUnlockAction();
Get.back();
},
child: Text(
'远程开锁'.tr,
style: TextStyle(color: AppColors.mainColor),
),
),
],
);
},
);
}
// 购买按钮
void showBuyTipWithContentAlert(
{required String titleStr, required Function sureClick}) {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: Text(titleStr),
actions: [
CupertinoDialogAction(
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: Get.back,
),
CupertinoDialogAction(
child:
Text('购买'.tr, style: TextStyle(color: AppColors.mainColor)),
onPressed: () {
Get.back();
sureClick();
},
),
],
);
},
);
}
// 联系管理员购买
void showContactAdministratorBuyAlert() {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: Text('实名认证为付费功能,请联系锁的管理员购买后再使用'.tr),
actions: [
CupertinoDialogAction(
child: Text(
'确定'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: Get.back,
),
],
);
},
);
}
//清空操作记录弹窗
void showClearOperationRecordAlert({required Function clearClick}) {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return CupertinoAlertDialog(
title: Text('是否要删除操作记录?'.tr),
content: Text('被删除的记录不能恢复'.tr),
actions: [
CupertinoDialogAction(
child: Text(
'取消'.tr,
style: TextStyle(color: AppColors.mainColor),
),
onPressed: Get.back,
),
CupertinoDialogAction(
child:
Text('删除'.tr, style: TextStyle(color: AppColors.mainColor)),
onPressed: () {
Get.back();
clearClick();
},
),
],
);
},
);
}
//可视门铃二维码弹窗
void showVisualDoorbellCodeAlert(
{required BuildContext widgetContext,
required String qrCodeUrl,
required String qrCodeText}) {
showCupertinoModalPopup(
context: widgetContext,
builder: (BuildContext context) {
return CupertinoActionSheet(
actions: <Widget>[
Container(
color: Colors.white, // 设置底色为白色
child: CupertinoActionSheetAction(
child: Container(
margin: const EdgeInsets.all(0),
child: Column(
children: <Widget>[
SizedBox(
height: 60.h,
),
if (qrCodeUrl.isNotEmpty)
RepaintBoundary(
key: _repaintBoundaryKey,
child: SizedBox(
width: 200,
height: 200,
child: QrImageView(
data: qrCodeUrl,
version: QrVersions.auto,
size: 200.0,
),
),
)
else
Container(),
SizedBox(
height: 20.h,
),
Padding(
padding: EdgeInsets.only(
left: 60.w, right: 60.w, bottom: 30),
child: Text(
qrCodeText,
style:
TextStyle(fontSize: 24.sp, color: Colors.black),
)),
Container(
margin: EdgeInsets.only(left: 60.w, right: 60.w),
child: OutLineBtn(
btnName: '保存到相册'.tr,
onClick: () async {
// 截图并保存到相册
try {
final Color qrcodeStyleColor =
defaultTargetPlatform == TargetPlatform.iOS
? const Color(0xFF000000)
: Colors.white;
final QrPainter painter = QrPainter(
data: qrCodeUrl,
version: QrVersions.auto,
gapless: false,
errorCorrectionLevel: QrErrorCorrectLevel.L,
eyeStyle: QrEyeStyle(
eyeShape: QrEyeShape.square,
color: qrcodeStyleColor,
),
dataModuleStyle: QrDataModuleStyle(
dataModuleShape: QrDataModuleShape.square,
color: qrcodeStyleColor,
));
final ByteData? byteData =
await painter.toImageData(600.0,
format: ImageByteFormat.png);
final Uint8List pngBytes =
byteData!.buffer.asUint8List();
final result =
await ImageGallerySaver.saveImage(
Uint8List.fromList(pngBytes),
quality: 100,
name: 'qr_code');
if (result['isSuccess']) {
EasyLoading.showToast('保存成功'.tr);
} else {
EasyLoading.showToast('保存失败'.tr);
}
} catch (e) {
EasyLoading.showToast('保存失败'.tr);
}
}),
),
SizedBox(
height: 40.h,
)
],
),
),
onPressed: () {
Navigator.of(context).pop();
},
),
),
],
);
},
);
}
// //邮件通知类型选择弹窗
// void emailNotifyTypeSlectAlert() {
// showCupertinoDialog(
// context: Get.context!,
// builder: (BuildContext context) {
// return CupertinoAlertDialog(
// title: const Text('类型选择'),
// content: Column(
// children: <Widget>[
// Padding(
// padding: EdgeInsets.only(
// left: 10.w, top: 8.h, bottom: 16.h, right: 10.w),
// child: Align(
// alignment: Alignment.centerLeft,
// child: Text('请选择要使用哪种类型', style: TextStyle(fontSize: 20.sp)),
// ),
// ),
// GestureDetector(
// onTap: () {
// setState(() {
// isSystemEmailSelected = true;
// });
// },
// child: Row(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: <Widget>[
// Image.asset(
// isSystemEmailSelected
// ? 'images/icon_round_select.png'
// : 'images/icon_round_unSelect.png',
// width: 30.w,
// height: 30.w,
// ),
// Padding(
// padding: EdgeInsets.only(left: 10.w),
// child: Text(
// '系统邮件(推荐)',
// style: TextStyle(
// fontSize: 22.sp, fontWeight: FontWeight.bold),
// ),
// ),
// ],
// ),
// ),
// Padding(
// padding: EdgeInsets.only(top: 6.h, left: 10.w, bottom: 10.h),
// child: Align(
// alignment: Alignment.centerLeft,
// child: Text(
// '邮件将从软件平台直接发给用户,请根据需要在软件那里购买邮件数量',
// style: TextStyle(fontSize: 18.sp),
// textAlign: TextAlign.left,
// ),
// ),
// ),
// GestureDetector(
// onTap: () {
// setState(() {
// isSystemEmailSelected = false;
// });
// },
// child: Row(
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: <Widget>[
// Image.asset(
// !isSystemEmailSelected
// ? 'images/icon_round_select.png'
// : 'images/icon_round_unSelect.png',
// width: 30.w,
// height: 30.w,
// ),
// Padding(
// padding: EdgeInsets.only(left: 10.w),
// child: Text(
// '个人邮件',
// style: TextStyle(
// fontSize: 22.sp, fontWeight: FontWeight.bold),
// ),
// ),
// ],
// ),
// ),
// Padding(
// padding: EdgeInsets.only(top: 6.h, left: 10.w),
// child: Align(
// alignment: Alignment.centerLeft,
// child: Text(
// '邮件将从你的个人邮箱发给用户',
// style: TextStyle(fontSize: 18.sp),
// ),
// ),
// ),
// ],
// ),
// actions: <Widget>[
// CupertinoDialogAction(
// onPressed: Get.back,
// child: Text(
// '确定'.tr,
// style: TextStyle(color: AppColors.mainColor),
// ),
// ),
// ],
// );
// },
// );
// }
}