From a78c9135df38c9568a4bd46aa60e22603a30415d Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Wed, 15 May 2024 17:17:30 +0800 Subject: [PATCH 1/7] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=20ios=20=E8=93=9D?= =?UTF-8?q?=E7=89=99=E6=9D=83=E9=99=90=E4=B8=8D=E6=8F=90=E7=A4=BA=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget/permission/permission_dialog.dart | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/star_lock/lib/widget/permission/permission_dialog.dart b/star_lock/lib/widget/permission/permission_dialog.dart index dabaa3df..acaf315b 100644 --- a/star_lock/lib/widget/permission/permission_dialog.dart +++ b/star_lock/lib/widget/permission/permission_dialog.dart @@ -32,14 +32,30 @@ class PermissionDialog { return false; } bool application = true; - Map statuses = await [ + List permissions = [ + Permission.bluetooth, Permission.bluetoothScan, Permission.bluetoothConnect, - ].request(); + ]; + Future getPermissionStatus(List permissions) async { + bool isGranted = true; + List permissionStatus = []; + for (Permission per in permissions) { + permissionStatus.add(await per.status); + } + for (PermissionStatus per in permissionStatus) { + isGranted = isGranted && per.isGranted; + } + if (GetPlatform.isIOS) { + isGranted = permissionStatus[0].isGranted; + } + return isGranted; + } + Permission permission = Permission.bluetoothScan; dynamic cache = await Storage.getString(titles[permission]); - bool isGranted = statuses.values.every((element) => element.isGranted); - if (AppPlatform.isAndroid && !isGranted && cache is! String) { + bool isGranted = await getPermissionStatus(permissions); + if (GetPlatform.isAndroid && !isGranted && cache is! String) { application = await showCupertinoDialog( context: Get.context!, builder: (context) { @@ -69,16 +85,19 @@ class PermissionDialog { if (application) { await Storage.setString(titles[permission], titles[permission]); } - } else if (cache is String) { - bool isDenied = statuses.values.every((element) => element.isDenied); - if (isDenied) { + } else if (cache is! String) { + await Storage.setString(titles[permission], titles[permission]); + } else { + bool isGranted = await getPermissionStatus(permissions); + if (!isGranted) { showSet(permission); return false; } } if (application) { - PermissionStatus status = await permission.request(); - return status.isGranted; + await permissions.request(); + bool isGranted = await getPermissionStatus(permissions); + return isGranted; } return false; } From 719f39c6d1f97037a3a41efeb65182197ead4b33 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Wed, 15 May 2024 18:19:33 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E9=92=A5=E5=8C=99?= =?UTF-8?q?=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81=E7=9A=84=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/ios/Podfile.lock | 2 +- .../lib/blue/sender_beforeDataManage.dart | 2 +- .../electronicKeyDetail_logic.dart | 55 ++++++++++++++----- 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/star_lock/ios/Podfile.lock b/star_lock/ios/Podfile.lock index fb460349..1f76cd62 100644 --- a/star_lock/ios/Podfile.lock +++ b/star_lock/ios/Podfile.lock @@ -351,4 +351,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 317f9473a5705c6fe4d79d95e81676f248048fdc -COCOAPODS: 1.15.2 +COCOAPODS: 1.14.3 diff --git a/star_lock/lib/blue/sender_beforeDataManage.dart b/star_lock/lib/blue/sender_beforeDataManage.dart index 73dc0092..441f445d 100644 --- a/star_lock/lib/blue/sender_beforeDataManage.dart +++ b/star_lock/lib/blue/sender_beforeDataManage.dart @@ -180,7 +180,7 @@ class SenderBeforeDataManage { useCountLimit = 1; } - AppLog.log("startTime.hour:${startTime!.hour} startTime.minute:${startTime!.minute} endTime.hour:${endTime!.hour} endTime.minute:${endTime!.minute}}"); + AppLog.log("startTime.hour:${startTime?.hour} startTime.minute:${startTime?.minute} endTime.hour:${endTime?.hour} endTime.minute:${endTime?.minute}}"); var addUserData = AddUserCommand( lockID: BlueManage().connectDeviceName, authUserID: currentKeyInfo.senderUserId!.toString(), diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart index 5a67ca86..b6d3eddc 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; @@ -135,16 +137,32 @@ class ElectronicKeyDetailLogic extends BaseGetXController { Future checkRealNameStatus(int realNameAuthStatus) async { //打开实名认证 必须输入身份证号和真实姓名 if (realNameAuthStatus == 1) { - if (state.getRealName.value.isEmpty || - state.getIDCardNumber.value.isEmpty) { - ShowCupertinoAlertView() - .showOpenAuthWithIDCardInfoAlert((idCard, realName) { - state.getIDCardNumber.value = idCard ?? ''; - state.getRealName.value = realName ?? ''; + AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace( + lockId: CommonDataManage().currentKeyInfo.lockId ?? 0, + ); + if (entity.errorCode!.codeIsSuccessful) { + if (state.getRealName.value.isEmpty || + state.getIDCardNumber.value.isEmpty) { + ShowCupertinoAlertView() + .showOpenAuthWithIDCardInfoAlert((idCard, realName) { + state.getIDCardNumber.value = idCard ?? ''; + state.getRealName.value = realName ?? ''; + updateRealNameInfoWithAuthStatus(realNameAuthStatus); + }); + } else { updateRealNameInfoWithAuthStatus(realNameAuthStatus); - }); - } else { - updateRealNameInfoWithAuthStatus(realNameAuthStatus); + } + } else if (entity.errorCode == 432) { + //432--余量不足,需购买 + ShowCupertinoAlertView().showBuyTipWithContentAlert( + titleStr: '实名认证为付费功能,请购买后再使用'.tr, + sureClick: () { + Get.toNamed(Routers.advancedFeaturesWebPage, + arguments: {'isShop': false}); + }); + } else if (entity.errorCode == 433) { + //需联系管理员购买 + ShowCupertinoAlertView().showContactAdministratorBuyAlert(); } } else { updateRealNameInfoWithAuthStatus(realNameAuthStatus); @@ -231,17 +249,23 @@ class ElectronicKeyDetailLogic extends BaseGetXController { var textList = []; if (CommonDataManage().currentKeyInfo.keyRight == 1) { textList = [ - state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr + state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen + ? '取消冻结'.tr + : "冻结".tr ]; } else if (CommonDataManage().currentKeyInfo.isLockOwner == 1) { if (state.keyType.value == 1 || state.keyType.value == 2) { textList = [ - state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr, + state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen + ? '取消冻结'.tr + : "冻结".tr, state.itemData.value.keyRight == 1 ? '取消授权'.tr : '授权'.tr ]; } else if (state.keyType.value == 4) { textList = [ - state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr + state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen + ? '取消冻结'.tr + : "冻结".tr ]; } } @@ -256,7 +280,8 @@ class ElectronicKeyDetailLogic extends BaseGetXController { chooseCallback: (value) { int index = value; if (index == 0) { - if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) { + if (state.itemData.value.keyStatus == + XSConstantMacro.keyStatusFrozen) { // 取消冻结 if (state.itemData.value.keyRight == 1) { // 管理员 @@ -336,8 +361,8 @@ class ElectronicKeyDetailLogic extends BaseGetXController { return currentController; } - noModificationAllowedDuringFreeze(){ - if(state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen){ + noModificationAllowedDuringFreeze() { + if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) { showToast("冻结状态下不允许修改钥匙权限".tr); return; } From 8dcc1c7be38613c40b6577b84e1275c87bb2e643 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 16 May 2024 09:24:12 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E8=93=9D=E7=89=99?= =?UTF-8?q?=E9=95=BF=E6=97=B6=E9=97=B4=E5=8D=A0=E7=94=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/blue/blue_manage.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/star_lock/lib/blue/blue_manage.dart b/star_lock/lib/blue/blue_manage.dart index b5027d9b..f77c35a4 100644 --- a/star_lock/lib/blue/blue_manage.dart +++ b/star_lock/lib/blue/blue_manage.dart @@ -696,7 +696,8 @@ class BlueManage { // if(bluetoothConnectDevice != null && bluetoothConnectDevice!.connectionState == BluetoothConnectionState.connected){ connectDeviceMacAddress = ""; if (bluetoothConnectionState == BluetoothConnectionState.connected) { - await bluetoothConnectDevice!.disconnect(); + //加快蓝牙断连 + await bluetoothConnectDevice!.disconnect(timeout: 1); AppLog.log("断开连接成功"); } // } From 327a78e8294217ef8968647631585d6b1ee8e496 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Thu, 16 May 2024 10:19:01 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E8=AE=B0=E5=BD=95bug--=E6=B2=A1=E6=9C=89=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doorLockLog/doorLockLog_logic.dart | 65 +++++++++++-------- .../doorLockLog/doorLockLog_page.dart | 54 +++++++++++---- .../doorLockLog/doorLockLog_state.dart | 12 +++- .../tools/advancedCalendar/src/header.dart | 3 +- .../tools/advancedCalendar/src/widget.dart | 2 + 5 files changed, 92 insertions(+), 44 deletions(-) diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart index d70d0b97..d58f7011 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart @@ -1,7 +1,7 @@ - import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +import 'package:get_storage/get_storage.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart'; @@ -26,16 +26,17 @@ class DoorLockLogLogic extends BaseGetXController { // 获取解析后的数据 late StreamSubscription _replySubscription; void _initReplySubscription() { - _replySubscription = EventBusManager().eventBus!.on().listen((reply) { - - if (reply is SenderReferEventRecordTimeReply && state.ifCurrentScreen.value == true) { + _replySubscription = + EventBusManager().eventBus!.on().listen((reply) { + if (reply is SenderReferEventRecordTimeReply && + state.ifCurrentScreen.value == true) { _replyReferEventRecordTime(reply); } }); } // 根据时间查解析数据 - Future _replyReferEventRecordTime(Reply reply) async { + Future _replyReferEventRecordTime(Reply reply) async { cancelBlueConnetctToastTimer(); int status = reply.data[2]; switch (status) { @@ -47,7 +48,7 @@ class DoorLockLogLogic extends BaseGetXController { if (dataLength > 0) { reply.data.removeRange(0, 7); // 把得到的数据按8位分割成数组 然后塞进一个新的数组里面 - if(reply.data.length < 17){ + if (reply.data.length < 17) { return; } var getList = splitList(reply.data, 17); @@ -59,27 +60,27 @@ class DoorLockLogLogic extends BaseGetXController { var indexMap = {}; indexMap["type"] = indexList[0].toString(); - if(indexList[0] == 2){ + if (indexList[0] == 2) { var passwordData = indexList.sublist(7, 17); var password = utf8String(passwordData); indexMap["user"] = password.toString(); - }else{ - int userNo = (indexList[1]*255) + indexList[2]; + } else { + int userNo = (indexList[1] * 255) + indexList[2]; indexMap["user"] = userNo.toString(); } indexMap["success"] = "1"; int time = ((0xff & indexList[(3)]) << 24 | - (0xff & indexList[4]) << 16 | - (0xff & indexList[5]) << 8 | - (0xFF & indexList[6])); + (0xff & indexList[4]) << 16 | + (0xff & indexList[5]) << 8 | + (0xFF & indexList[6])); indexMap["date"] = "${time * 1000}"; uploadList.add(indexMap); } lockRecordUploadData(uploadList); - if(dataLength == state.logCountPage){ + if (dataLength == state.logCountPage) { state.ifHaveNext = true; } } @@ -97,10 +98,11 @@ class DoorLockLogLogic extends BaseGetXController { // 查询事件记录(时间查询) Future senderReferEventRecordTime() async { showEasyLoading(); - showBlueConnetctToastTimer(action: (){ + showBlueConnetctToastTimer(action: () { dismissEasyLoading(); }); - BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionStateState) async { + BlueManage().bludSendData(BlueManage().connectDeviceName, + (BluetoothConnectionState connectionStateState) async { if (connectionStateState == BluetoothConnectionState.connected) { var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); @@ -122,10 +124,11 @@ class DoorLockLogLogic extends BaseGetXController { publicKey: getPublicKeyList, privateKey: getPrivateKeyList, ); - } else if (connectionStateState == BluetoothConnectionState.disconnected) { + } else if (connectionStateState == + BluetoothConnectionState.disconnected) { dismissEasyLoading(); cancelBlueConnetctToastTimer(); - if(state.ifCurrentScreen.value == true){ + if (state.ifCurrentScreen.value == true) { showBlueConnetctToast(); } } @@ -141,9 +144,16 @@ class DoorLockLogLogic extends BaseGetXController { pageSize: int.parse(pageSize), startDate: state.startDate.value, endDate: state.endDate.value); - if (entity.errorCode!.codeIsSuccessful) { - state.lockLogItemList.value = entity.data!.itemList!; + if (pageNo == 1) { + state.lockLogItemList.value = entity.data!.itemList!; + pageNo++; + } else { + if (entity.data!.itemList!.isNotEmpty) { + state.lockLogItemList.addAll(entity.data!.itemList!); + pageNo++; + } + } } } @@ -152,15 +162,18 @@ class DoorLockLogLogic extends BaseGetXController { void _getDoorLockLogListRefreshUIAction() { _getDoorLockLogListRefreshUIEvent = eventBus.on().listen((event) { + state.currentSelectDate.value = event.getDoorLockLogTime; // 设置startDate为当天的0点 - state.startDate.value = DateTime(event.getDoorLockLogTime.year, - event.getDoorLockLogTime.month, event.getDoorLockLogTime.day) + state.startDate.value = DateTime( + state.currentSelectDate.value.year, + state.currentSelectDate.value.month, + state.currentSelectDate.value.day) .millisecondsSinceEpoch; // 设置endDate为下一天的0点,然后减去1毫秒 state.endDate.value = (DateTime( - event.getDoorLockLogTime.year, - event.getDoorLockLogTime.month, - event.getDoorLockLogTime.day + 1) + state.currentSelectDate.value.year, + state.currentSelectDate.value.month, + state.currentSelectDate.value.day + 1) .subtract(const Duration(milliseconds: 1))) .millisecondsSinceEpoch; @@ -186,9 +199,9 @@ class DoorLockLogLogic extends BaseGetXController { .lockRecordUploadData( lockId: state.keyInfos.value.lockId.toString(), records: list); if (entity.errorCode!.codeIsSuccessful) { - if(state.ifHaveNext == true){ + if (state.ifHaveNext == true) { getLockRecordLastUploadDataTime(); - }else{ + } else { pageNo = 1; mockNetworkDataRequest(); } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 37dc796e..7350085e 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -5,6 +5,7 @@ import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart'; +import 'package:star_lock/tools/EasyRefreshTool.dart'; import 'package:star_lock/tools/advancedCalendar/src/widget.dart'; import 'package:star_lock/tools/menuItem/xsDropDownWidget.dart'; import 'package:star_lock/tools/noData.dart'; @@ -52,7 +53,17 @@ class _DoorLockLogPageState extends State with RouteAware { endIndent: 30.w, ), eventDropDownWidget(), - Expanded(child: Obx(() => timeLineView(state.lockLogItemList))) + Expanded( + child: EasyRefreshTool( + onRefresh: () { + logic.pageNo = 1; + logic.mockNetworkDataRequest(); + }, + onLoad: () { + logic.mockNetworkDataRequest(); + }, + child: Obx(() => timeLineView(state.lockLogItemList)), + )) ], ), ); @@ -81,19 +92,34 @@ class _DoorLockLogPageState extends State with RouteAware { highlightColor: Colors.yellow, disabledColor: Colors.grey, ), - child: AdvancedCalendar( - controller: state.calendarControllerCustom, - events: state.events, - weekLineHeight: 48.0, - startWeekDay: 1, - innerDot: true, - keepLineSize: true, - calendarTextStyle: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w400, - height: 1.3125, - letterSpacing: 0, - ), + child: Stack( + children: [ + AdvancedCalendar( + controller: state.calendarControllerCustom, + events: state.events, + weekLineHeight: 48.0, + startWeekDay: 1, + innerDot: true, + keepLineSize: true, + calendarTextStyle: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + height: 1.3125, + letterSpacing: 0, + ), + ), + Positioned( + top: 8.0, + right: 8.0, + child: Obx(() => Text( + '${state.currentSelectDate.value.year}年${state.currentSelectDate.value.month}月', + style: theme.textTheme.titleMedium!.copyWith( + fontSize: 16, + color: theme.colorScheme.secondary, + ), + )), + ), + ], ), ); } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart index 5edae651..0fd6d1a7 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart @@ -17,8 +17,15 @@ class DoorLockLogState { DateTime(2024, 10, 10), ]; - final startDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day).millisecondsSinceEpoch.obs; - final endDate = (DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day + 1).subtract(const Duration(milliseconds: 1))).millisecondsSinceEpoch.obs; + final startDate = + DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day) + .millisecondsSinceEpoch + .obs; + final endDate = (DateTime( + DateTime.now().year, DateTime.now().month, DateTime.now().day + 1) + .subtract(const Duration(milliseconds: 1))) + .millisecondsSinceEpoch + .obs; var dropdownTitle = '全部事件'.obs; var dropdownValue = XSConstantMacro.lockEventTypeAll.obs; @@ -50,6 +57,7 @@ class DoorLockLogState { var operateDate = 0; // 按日期查询消息记录的时间戳 var ifHaveNext = false; // 页码 var logCountPage = 10; // 蓝牙记录一页多少个 + var currentSelectDate = DateTime.now().obs; // 当前选择的日期 DoorLockLogState() { keyInfos.value = Get.arguments["keyInfo"]; diff --git a/star_lock/lib/tools/advancedCalendar/src/header.dart b/star_lock/lib/tools/advancedCalendar/src/header.dart index 1a09140e..026da55b 100644 --- a/star_lock/lib/tools/advancedCalendar/src/header.dart +++ b/star_lock/lib/tools/advancedCalendar/src/header.dart @@ -15,8 +15,7 @@ class Header extends StatelessWidget { this.todayStyle, }) : super(key: key); - static final _dateFormatter = DateFormat().add_yMMMM(); - // static final _dateFormatter = DateFormat('MM月dd日', 'zh_CN'); + static final _dateFormatter = DateFormat.yM('zh_CN'); final DateTime monthDate; final EdgeInsetsGeometry margin; final VoidCallback? onPressed; diff --git a/star_lock/lib/tools/advancedCalendar/src/widget.dart b/star_lock/lib/tools/advancedCalendar/src/widget.dart index 001840af..04ab9c31 100644 --- a/star_lock/lib/tools/advancedCalendar/src/widget.dart +++ b/star_lock/lib/tools/advancedCalendar/src/widget.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:intl/date_symbol_data_local.dart'; From c7ae285bc11885a28a3a3277e7a83c6ae22eebe2 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Thu, 16 May 2024 10:19:51 +0800 Subject: [PATCH 5/7] =?UTF-8?q?1=EF=BC=8C=E7=94=B5=E5=AD=90=E9=92=A5?= =?UTF-8?q?=E5=8C=99=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E6=98=AF=E5=90=A6=E5=8F=AF=E4=BB=A5=E6=89=93?= =?UTF-8?q?=E5=BC=80=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../electronicKeyDetail_logic.dart | 44 ++++++++++++++++--- .../electronicKeyDetail_state.dart | 1 + 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart index 5a67ca86..682865d4 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; @@ -231,17 +233,23 @@ class ElectronicKeyDetailLogic extends BaseGetXController { var textList = []; if (CommonDataManage().currentKeyInfo.keyRight == 1) { textList = [ - state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr + state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen + ? '取消冻结'.tr + : "冻结".tr ]; } else if (CommonDataManage().currentKeyInfo.isLockOwner == 1) { if (state.keyType.value == 1 || state.keyType.value == 2) { textList = [ - state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr, + state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen + ? '取消冻结'.tr + : "冻结".tr, state.itemData.value.keyRight == 1 ? '取消授权'.tr : '授权'.tr ]; } else if (state.keyType.value == 4) { textList = [ - state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr + state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen + ? '取消冻结'.tr + : "冻结".tr ]; } } @@ -256,7 +264,8 @@ class ElectronicKeyDetailLogic extends BaseGetXController { chooseCallback: (value) { int index = value; if (index == 0) { - if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) { + if (state.itemData.value.keyStatus == + XSConstantMacro.keyStatusFrozen) { // 取消冻结 if (state.itemData.value.keyRight == 1) { // 管理员 @@ -336,13 +345,36 @@ class ElectronicKeyDetailLogic extends BaseGetXController { return currentController; } - noModificationAllowedDuringFreeze(){ - if(state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen){ + noModificationAllowedDuringFreeze() { + if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) { showToast("冻结状态下不允许修改钥匙权限".tr); return; } } + //检测实名认证是否支持开启 + Future keyCheckFace() async { + AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace( + lockId: CommonDataManage().currentKeyInfo.lockId ?? 0, + ); + if (entity.errorCode!.codeIsSuccessful) { + //打开实名认证,需要弹出输入身份证信息框 + state.isRequireAuth.value = true; + state.isRealNameAuth.value = true; + } else if (entity.errorCode == 432) { + //432--余量不足,需购买 + ShowCupertinoAlertView().showBuyTipWithContentAlert( + titleStr: '实名认证为付费功能,请购买后再使用'.tr, + sureClick: () { + Get.toNamed(Routers.advancedFeaturesWebPage, + arguments: {'isShop': false}); + }); + } else if (entity.errorCode == 433) { + //需联系管理员购买 + ShowCupertinoAlertView().showContactAdministratorBuyAlert(); + } + } + @override void onReady() { // TODO: implement onReady diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart index 9337f8bd..63ae8a72 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart @@ -24,6 +24,7 @@ class ElectronicKeyDetailState { var isRealNameAuth = false.obs; //是否实名认证 0:不需要 1:需要 var getRealName = ''.obs; //真实姓名 var getIDCardNumber = ''.obs; //身份证号 + var isRequireAuth = false.obs; //是否必须输入身份信息 ElectronicKeyDetailState() { Map map = Get.arguments; From abc2788e0c8a855d146841b1529b4557961f8d2a Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Thu, 16 May 2024 11:41:28 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dota=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E8=AF=BB=E5=86=99=E6=9D=83=E9=99=90=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/blue/blue_manage.dart | 2 +- .../lockEscalation/lockEscalation_logic.dart | 6 +- .../addLock/nearbyLock/nearbyLock_logic.dart | 3 +- .../widget/permission/permission_dialog.dart | 92 +++++++++++++++++++ 4 files changed, 96 insertions(+), 7 deletions(-) diff --git a/star_lock/lib/blue/blue_manage.dart b/star_lock/lib/blue/blue_manage.dart index f77c35a4..639ff321 100644 --- a/star_lock/lib/blue/blue_manage.dart +++ b/star_lock/lib/blue/blue_manage.dart @@ -697,7 +697,7 @@ class BlueManage { connectDeviceMacAddress = ""; if (bluetoothConnectionState == BluetoothConnectionState.connected) { //加快蓝牙断连 - await bluetoothConnectDevice!.disconnect(timeout: 1); + await bluetoothConnectDevice!.disconnect(timeout: 2); AppLog.log("断开连接成功"); } // } diff --git a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart index dbe2e746..62f4c274 100644 --- a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart +++ b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart @@ -48,8 +48,7 @@ class LockEscalationLogic extends BaseGetXController { //手动升级 Future otaUpdate() async { - var status = await PermissionDialog.request( - Permission.storage, '需要访问读写权限才能使用手动升级固件'.tr); + var status = await PermissionDialog.requestStorage(); if (status != true) { return; } @@ -69,8 +68,7 @@ class LockEscalationLogic extends BaseGetXController { } String md5Str = md5.convert(otaBin!).toString(); headJson!['fwMd5'] = md5Str; - ShowTipView().showIosTipWithContentDialog("未避免异常情况,请在门打开时升级".tr, - () async { + ShowTipView().showIosTipWithContentDialog("未避免异常情况,请在门打开时升级".tr, () async { blueOTAUpgrade(headJson!, [0, 0, 0, 0]); EasyLoading.show( status: '设备连接中...'.tr, maskType: EasyLoadingMaskType.black); diff --git a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart index b6e1132d..2f5533fa 100644 --- a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart +++ b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart @@ -431,8 +431,7 @@ class NearbyLockLogic extends BaseGetXController { //手动升级 Future otaUpdate() async { - var status = await PermissionDialog.request( - Permission.storage, '需要访问读写权限才能使用手动升级固件'.tr); + var status = await PermissionDialog.requestStorage(); if (status != true) { return; } diff --git a/star_lock/lib/widget/permission/permission_dialog.dart b/star_lock/lib/widget/permission/permission_dialog.dart index acaf315b..b2f413c0 100644 --- a/star_lock/lib/widget/permission/permission_dialog.dart +++ b/star_lock/lib/widget/permission/permission_dialog.dart @@ -190,6 +190,98 @@ class PermissionDialog { return false; } + //读写 + static Future requestStorage() async { + if (Get.context == null) { + return false; + } + bool isAndroid33 = + AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33; + + //通用的局部函数 + List requestPermission() { + List permissions; + if (isAndroid33) { + permissions = [ + Permission.mediaLibrary, + Permission.photos, + // Permission.audio, + Permission.videos, + Permission.manageExternalStorage, + ]; + } else { + permissions = [ + Permission.storage, + ]; + } + return permissions; + } + + Future permissionStatus(List permissions) async { + bool isGranted = true; + for (Permission permission in permissions) { + isGranted = + isGranted && (await permission.status) == PermissionStatus.granted; + } + if (isAndroid33) { + // android 33以上需要申请媒体库权限 + isGranted = (await Permission.mediaLibrary.status) == + PermissionStatus.granted || + (await Permission.manageExternalStorage.status) == + PermissionStatus.granted; + } + return isGranted; + } + + bool application = true; + Permission permission = Permission.photos; + List permissions = requestPermission(); + dynamic cache = await Storage.getString(titles[permission]); + bool isGranted = await permissionStatus(permissions); + if (AppPlatform.isAndroid && !isGranted && cache is! String) { + application = await showCupertinoDialog( + context: Get.context!, + builder: (context) { + return PopScope( + canPop: false, + child: CupertinoAlertDialog( + title: Text('${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}'), + content: Text('需要访问读写权限才能使用手动升级固件'.tr), + actions: [ + CupertinoDialogAction( + child: Text('不允许'.tr), + onPressed: () { + Get.back(result: false); + }, + ), + CupertinoDialogAction( + child: Text('允许'.tr), + onPressed: () { + Get.back(result: true); + }, + ), + ], + )); + }, + ); + if (application) { + await Storage.setString(titles[permission], titles[permission]); + } + } else if (cache is String) { + bool isDenied = !(await permissionStatus(permissions)); + if (isDenied) { + showSet(permission); + return false; + } + } + if (application) { + Map statuses = await permissions.request(); + bool isGranted = await permissionStatus(statuses.keys.toList()); + return isGranted; + } + return false; + } + //显示权限判断申请框 static Future request(Permission permission, [String? content]) async { if (Get.context == null) { From d4bb24e516d5bbf1b25fa5504ecff262b7455ec5 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Thu, 16 May 2024 11:59:37 +0800 Subject: [PATCH 7/7] =?UTF-8?q?1=EF=BC=8C=E9=94=81=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=96=B0=E5=A2=9E=E6=B8=85=E7=A9=BA=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=8E=A5=E5=8F=A3=E5=AF=B9=E6=8E=A5=E5=8F=8A=E7=9B=B8?= =?UTF-8?q?=E5=BA=94=E9=80=BB=E8=BE=91=202=EF=BC=8C=E4=BF=AE=E5=A4=8Dbug?= =?UTF-8?q?=EF=BC=9AID1002068=203=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E8=AE=B0=E5=BD=95=E6=9B=B4=E6=8D=A2=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 13 +- star_lock/images/lan/lan_keys.json | 12 +- star_lock/images/lan/lan_zh.json | 12 +- .../doorLockLog/doorLockLog_logic.dart | 14 +- .../doorLockLog/doorLockLog_page.dart | 165 +++++++++--------- .../doorLockLog/doorLockLog_state.dart | 12 +- .../openDoorNotify/openDoorNotify_page.dart | 2 +- .../lib/tools/showCupertinoAlertView.dart | 32 ++++ 8 files changed, 163 insertions(+), 99 deletions(-) diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index 36e779a9..b4a2320f 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -712,7 +712,7 @@ "请输入手机号": "Please enter mobile phone number", "家人到家": "Family gets home", "添加家人": "Add family", - "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择": "If the lock is not connected to the Internet, in addition to the electronic key, the password, card, fingerprint and other door reminders can not be sent in time, please choose according to your actual situation", + "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。": "If the lock is not connected to the Internet, in addition to the electronic key, the password, card, fingerprint and other door reminders can not be sent in time, please choose according to your actual situation", "消息提醒": "Message reminder", "开门通知": "Opening notice", "N天未开门": "N days without opening the door", @@ -844,5 +844,14 @@ "钥匙无效": "The key is invalid", "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "The operation failed. Please confirm whether the lock is nearby, or restart your phone's Bluetooth and try again.", "如果是全自动锁,请使屏幕变亮": "If it is a fully automatic lock, please make the screen brighter", - "正在尝试闭锁……": "Attempting to lock..." + "正在尝试闭锁……": "Attempting to lock...", + "清空记录":"Clear record", + "是否要删除操作记录?":"Do you want to delete the operation record?", + "被删除的记录不能恢复":"The deleted record cannot be restored", + "全部事件":"All events", + "开锁事件":"Unlock event", + "异常事件":"Abnormal event", + "门铃事件":"Doorbell event", + "视频事件":"Video event" + } diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 4236badc..348e09a2 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -740,7 +740,7 @@ "请输入手机号":"请输入手机号", "家人到家":"家人到家", "添加家人":"添加家人", - "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择":"若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择", + "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。":"若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。", "消息提醒":"消息提醒", "开门通知":"开门通知", "N天未开门":"N天未开门", @@ -872,5 +872,13 @@ "钥匙无效": "钥匙无效", "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。", "如果是全自动锁,请使屏幕变亮": "如果是全自动锁,请使屏幕变亮", - "正在尝试闭锁……": "正在尝试闭锁……" + "正在尝试闭锁……": "正在尝试闭锁……", + "清空记录":"清空记录", + "是否要删除操作记录?":"是否要删除操作记录?", + "被删除的记录不能恢复":"被删除的记录不能恢复", + "全部事件":"全部事件", + "开锁事件":"开锁事件", + "异常事件":"异常事件", + "门铃事件":"门铃事件", + "视频事件":"视频事件" } diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index f0ce5803..d741f82b 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -712,7 +712,7 @@ "请输入手机号": "请输入手机号", "家人到家": "家人到家", "添加家人": "添加家人", - "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择": "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择", + "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。": "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。", "消息提醒": "消息提醒", "开门通知": "开门通知", "N天未开门": "N天未开门", @@ -842,5 +842,13 @@ "钥匙无效": "钥匙无效", "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。", "如果是全自动锁,请使屏幕变亮": "如果是全自动锁,请使屏幕变亮", - "正在尝试闭锁……": "正在尝试闭锁……" + "正在尝试闭锁……": "正在尝试闭锁……", + "清空记录":"清空记录", + "是否要删除操作记录?":"是否要删除操作记录?", + "被删除的记录不能恢复":"被删除的记录不能恢复", + "全部事件":"全部事件", + "开锁事件":"开锁事件", + "异常事件":"异常事件", + "门铃事件":"门铃事件", + "视频事件":"视频事件" } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart index d58f7011..cfa7ba5c 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart @@ -1,14 +1,13 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; -import 'package:get_storage/get_storage.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart'; import 'package:star_lock/main/lockDetail/lockOperatingRecord/lockOperatingRecordGetLastRecordTime_entity.dart'; +import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/eventBusEventManage.dart'; -import '../../../app_settings/app_settings.dart'; import '../../../blue/blue_manage.dart'; import '../../../blue/io_protocol/io_referEventRecordTime.dart'; import '../../../blue/io_reply.dart'; @@ -137,6 +136,7 @@ class DoorLockLogLogic extends BaseGetXController { //请求操作记录列表(门锁日志) void mockNetworkDataRequest() async { + state.lockLogItemList.clear(); DoorLockLogEntity entity = await ApiRepository.to.lockEventList( lockId: state.keyInfos.value.lockId!, lockEventType: state.dropdownValue.value, @@ -210,10 +210,14 @@ class DoorLockLogLogic extends BaseGetXController { //清空操作记录 void clearOperationRecordRequest() async { - KeyOperationRecordEntity entity = - await ApiRepository.to.clearOperationRecord('28'); + KeyOperationRecordEntity entity = await ApiRepository.to + .clearOperationRecord( + CommonDataManage().currentKeyInfo.lockId.toString()); if (entity.errorCode!.codeIsSuccessful) { - showToast("清除数据成功"); + showToast("清除数据成功", something: () { + pageNo = 1; + mockNetworkDataRequest(); + }); } } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 7350085e..220d60b6 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -9,6 +9,7 @@ import 'package:star_lock/tools/EasyRefreshTool.dart'; import 'package:star_lock/tools/advancedCalendar/src/widget.dart'; import 'package:star_lock/tools/menuItem/xsDropDownWidget.dart'; import 'package:star_lock/tools/noData.dart'; +import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:timelines/timelines.dart'; import '../../../app_settings/app_colors.dart'; @@ -27,11 +28,6 @@ class _DoorLockLogPageState extends State with RouteAware { final logic = Get.put(DoorLockLogLogic()); final state = Get.find().state; - @override - void initState() { - super.initState(); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -40,6 +36,19 @@ class _DoorLockLogPageState extends State with RouteAware { barTitle: TranslationLoader.lanKeys!.operatingRecord!.tr, haveBack: true, backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + onPressed: () { + ShowCupertinoAlertView().showClearOperationRecordAlert( + clearClick: () { + logic.clearOperationRecordRequest(); + }); + }, + child: Text( + '清空记录'.tr, + style: TextStyle(color: Colors.white, fontSize: 24.sp), + )), + ], ), body: Column( mainAxisSize: MainAxisSize.max, @@ -53,17 +62,7 @@ class _DoorLockLogPageState extends State with RouteAware { endIndent: 30.w, ), eventDropDownWidget(), - Expanded( - child: EasyRefreshTool( - onRefresh: () { - logic.pageNo = 1; - logic.mockNetworkDataRequest(); - }, - onLoad: () { - logic.mockNetworkDataRequest(); - }, - child: Obx(() => timeLineView(state.lockLogItemList)), - )) + Expanded(child: timeLineView()) ], ), ); @@ -144,77 +143,16 @@ class _DoorLockLogPageState extends State with RouteAware { } //时间轴组件 - Widget timeLineView(List timelineDataList) { + Widget timeLineView() { return Container( margin: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 20.h, top: 20.h), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16.w), ), - child: timelineDataList.isNotEmpty + child: Obx(() => state.lockLogItemList.isNotEmpty ? Timeline.tileBuilder( - builder: TimelineTileBuilder.fromStyle( - contentsAlign: ContentsAlign.basic, - itemCount: timelineDataList.length, - contentsBuilder: (context, index) { - DoorLockLogDataItem timelineData = timelineDataList[index]; - DateTime dateTime = DateTime.fromMillisecondsSinceEpoch( - timelineData.operateDate!); - String formattedTime = - '${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}'; - - return Padding( - padding: EdgeInsets.only(left: 20.w, top: 20.h), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - '$formattedTime ${timelineData.recordTypeName}', - textAlign: TextAlign.left, - style: TextStyle( - color: Colors.black, - fontSize: 24.sp, - fontWeight: FontWeight.w600, - ), - ), - SizedBox( - height: 10.h, - ), - GestureDetector( - onTap: () { - Get.toNamed(Routers.videoLogDetailPage); - }, - child: Stack( - children: [ - timelineData.imagesUrl!.isNotEmpty - ? Image.network( - timelineData.imagesUrl!, - width: 260.w, - height: 260.h, - ) - : Container(), - Positioned( - top: 150.h, - left: 10.w, - child: Image( - image: const AssetImage( - 'images/main/icon_lockLog_play.png'), - width: 24.w, - height: 20.w, - ), - ), - ], - ), - ), - SizedBox( - height: 20.h, - ), - ], - ), - ); - }, - ), + builder: _timelineBuilderWidget(), theme: TimelineThemeData( nodePosition: 0.04, //居左侧距离 connectorTheme: const ConnectorThemeData( @@ -229,7 +167,72 @@ class _DoorLockLogPageState extends State with RouteAware { ), ), ) - : NoData(), + : NoData()), + ); + } + + TimelineTileBuilder _timelineBuilderWidget() { + return TimelineTileBuilder.fromStyle( + contentsAlign: ContentsAlign.basic, + itemCount: state.lockLogItemList.length, + contentsBuilder: (context, index) { + DoorLockLogDataItem timelineData = state.lockLogItemList[index]; + DateTime dateTime = + DateTime.fromMillisecondsSinceEpoch(timelineData.operateDate!); + String formattedTime = + '${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}'; + + return Padding( + padding: EdgeInsets.only(left: 20.w, top: 20.h), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '$formattedTime ${timelineData.username!.isNotEmpty ? "${timelineData.username}用" : ""}${timelineData.recordTypeName}', + textAlign: TextAlign.left, + style: TextStyle( + color: Colors.black, + fontSize: 24.sp, + fontWeight: FontWeight.w600, + ), + ), + SizedBox( + height: 10.h, + ), + GestureDetector( + onTap: () { + Get.toNamed(Routers.videoLogDetailPage); + }, + child: Stack( + children: [ + timelineData.imagesUrl!.isNotEmpty + ? Image.network( + timelineData.imagesUrl!, + width: 260.w, + height: 260.h, + ) + : Container(), + Positioned( + top: 150.h, + left: 10.w, + child: Image( + image: const AssetImage( + 'images/main/icon_lockLog_play.png'), + width: 24.w, + height: 20.w, + ), + ), + ], + ), + ), + SizedBox( + height: 20.h, + ), + ], + ), + ); + }, ); } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart index 0fd6d1a7..5cfeda59 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart @@ -27,28 +27,28 @@ class DoorLockLogState { .millisecondsSinceEpoch .obs; - var dropdownTitle = '全部事件'.obs; + var dropdownTitle = '全部事件'.tr.obs; var dropdownValue = XSConstantMacro.lockEventTypeAll.obs; List getDropDownItemList = [ DropDownItem( - itemTitle: "全部事件", + itemTitle: "全部事件".tr, itemValue: XSConstantMacro.lockEventTypeAll.toString(), isCheked: false), DropDownItem( - itemTitle: "开锁事件", + itemTitle: "开锁事件".tr, itemValue: XSConstantMacro.lockEventTypeOpenDoor.toString(), isCheked: false), DropDownItem( - itemTitle: "异常事件", + itemTitle: "异常事件".tr, itemValue: XSConstantMacro.lockEventTypeAbnormal.toString(), isCheked: false), DropDownItem( - itemTitle: "门铃事件", + itemTitle: "门铃事件".tr, itemValue: XSConstantMacro.lockEventTypeDoorbell.toString(), isCheked: false), DropDownItem( - itemTitle: "视频事件", + itemTitle: "视频事件".tr, itemValue: XSConstantMacro.lockEventTypeVideo.toString(), isCheked: false), ]; diff --git a/star_lock/lib/main/lockDetail/messageWarn/msgNotification/openDoorNotify/openDoorNotify_page.dart b/star_lock/lib/main/lockDetail/messageWarn/msgNotification/openDoorNotify/openDoorNotify_page.dart index a05f19b8..009619ad 100644 --- a/star_lock/lib/main/lockDetail/messageWarn/msgNotification/openDoorNotify/openDoorNotify_page.dart +++ b/star_lock/lib/main/lockDetail/messageWarn/msgNotification/openDoorNotify/openDoorNotify_page.dart @@ -72,7 +72,7 @@ class _OpenDoorNotifyPageState extends State { alignment: Alignment.centerLeft, margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), child: Text( - '若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择'.tr, + '若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。'.tr, style: TextStyle(color: AppColors.darkGrayTextColor, fontSize: 20.sp), )); } diff --git a/star_lock/lib/tools/showCupertinoAlertView.dart b/star_lock/lib/tools/showCupertinoAlertView.dart index dd9f7336..09ee39a7 100644 --- a/star_lock/lib/tools/showCupertinoAlertView.dart +++ b/star_lock/lib/tools/showCupertinoAlertView.dart @@ -364,4 +364,36 @@ class ShowCupertinoAlertView { }, ); } + + //清空操作记录弹窗 + 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(); + }, + ), + ], + ); + }, + ); + } }