diff --git a/lib/app.dart b/lib/app.dart index dfffaee3..52b87631 100755 --- a/lib/app.dart +++ b/lib/app.dart @@ -148,7 +148,7 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { // AppLog.log('App--->进入前台'); if (Get.isRegistered()) { //进入前台刷新如果存在锁列表则刷新,顺便判断 token 是否过期 - Get.find().getStarLockInfo(); + Get.find().getStarLockInfo(isUnShowLoading: true); } break; case AppLifecycleState.detached: diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_entity.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_entity.dart index 864ce1c6..e043b762 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_entity.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_entity.dart @@ -1,9 +1,4 @@ class DoorLockLogEntity { - int? errorCode; - String? description; - String? errorMsg; - Data? data; - DoorLockLogEntity( {this.errorCode, this.description, this.errorMsg, this.data}); @@ -13,6 +8,10 @@ class DoorLockLogEntity { errorMsg = json['errorMsg']; data = json['data'] != null ? Data.fromJson(json['data']) : null; } + int? errorCode; + String? description; + String? errorMsg; + Data? data; Map toJson() { final Map data = {}; @@ -27,12 +26,6 @@ class DoorLockLogEntity { } class Data { - List? itemList; - int? pageNo; - int? pageSize; - int? pages; - int? total; - Data({this.itemList, this.pageNo, this.pageSize, this.pages, this.total}); Data.fromJson(Map json) { @@ -47,6 +40,11 @@ class Data { pages = json['pages']; total = json['total']; } + List? itemList; + int? pageNo; + int? pageSize; + int? pages; + int? total; Map toJson() { final Map data = {}; @@ -62,18 +60,6 @@ class Data { } class DoorLockLogDataItem { - int? recordId; - int? lockId; - String? lockAlias; - int? recordType; - String? recordTypeName; - String? username; - int? operateDate; - String? imagesUrl; - String? videoUrl; - String? headUrl; - String? userid; - DoorLockLogDataItem( {this.recordId, this.lockId, @@ -85,7 +71,8 @@ class DoorLockLogDataItem { this.imagesUrl, this.videoUrl, this.headUrl, - this.userid}); + this.userid, + this.keyboardPwd}); DoorLockLogDataItem.fromJson(Map json) { recordId = json['recordId']; @@ -99,7 +86,20 @@ class DoorLockLogDataItem { videoUrl = json['videoUrl']; headUrl = json['headUrl']; userid = json['userid']; + keyboardPwd = json['keyboardPwd']; } + int? recordId; + int? lockId; + String? lockAlias; + int? recordType; + String? recordTypeName; + String? username; + int? operateDate; + String? imagesUrl; + String? videoUrl; + String? headUrl; + String? userid; + String? keyboardPwd; Map toJson() { final Map data = {}; @@ -114,6 +114,7 @@ class DoorLockLogDataItem { data['videoUrl'] = videoUrl; data['headUrl'] = headUrl; data['userid'] = userid; + data['keyboardPwd'] = keyboardPwd; return data; } } diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart index 4e03962b..b024ee68 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart @@ -37,11 +37,11 @@ class DoorLockLogLogic extends BaseGetXController { // 根据时间查解析数据 Future _replyReferEventRecordTime(Reply reply) async { cancelBlueConnetctToastTimer(); - int status = reply.data[2]; + final int status = reply.data[2]; switch (status) { case 0x00: //成功 - int dataLength = (reply.data[5] << 8) + reply.data[6]; + final int dataLength = (reply.data[5] << 8) + reply.data[6]; // AppLog.log("dataLength:$dataLength"); // var dataLength = reply.data[5]; if (dataLength > 0) { @@ -50,27 +50,27 @@ class DoorLockLogLogic extends BaseGetXController { if (reply.data.length < 17) { return; } - var getList = splitList(reply.data, 17); + final getList = splitList(reply.data, 17); // AppLog.log("getList:$getList"); - var uploadList = []; + final uploadList = []; for (int i = 0; i < getList.length; i++) { - var indexList = getList[i]; + final indexList = getList[i]; // AppLog.log("indexList:$indexList"); - var indexMap = {}; + final indexMap = {}; indexMap['type'] = indexList[0].toString(); - int operateDate = 0; + final int operateDate = 0; if (indexList[0] == 2) { - var passwordData = indexList.sublist(7, 17); - var password = utf8String(passwordData); + final passwordData = indexList.sublist(7, 17); + final password = utf8String(passwordData); indexMap['user'] = password.toString(); } else { - int userNo = (indexList[1] * 256) + indexList[2]; + final int userNo = (indexList[1] * 256) + indexList[2]; indexMap['user'] = userNo.toString(); } indexMap['success'] = '1'; - int time = ((0xff & indexList[(3)]) << 24 | + final int time = ((0xff & indexList[(3)]) << 24 | (0xff & indexList[4]) << 16 | (0xff & indexList[5]) << 8 | (0xFF & indexList[6])); @@ -108,14 +108,16 @@ class DoorLockLogLogic extends BaseGetXController { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionStateState) async { if (connectionStateState == BluetoothConnectionState.connected) { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = + changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); - var publicKey = await Storage.getStringList(saveBluePublicKey); - List getPublicKeyList = changeStringListToIntList(publicKey!); + final publicKey = await Storage.getStringList(saveBluePublicKey); + final List getPublicKeyList = + changeStringListToIntList(publicKey!); IoSenderManage.senderReferEventRecordTimeCommand( keyID: BlueManage().connectDeviceName, @@ -156,6 +158,7 @@ class DoorLockLogLogic extends BaseGetXController { if (entity.errorCode!.codeIsSuccessful) { // 更新数据列表 state.lockLogItemList.addAll(entity.data!.itemList!); + state.lockLogItemList.refresh(); // 更新页码 pageNo++; } @@ -231,7 +234,7 @@ class DoorLockLogLogic extends BaseGetXController { super.onReady(); // 获取是否是演示模式 演示模式不获取接口 - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { // _initReplySubscription(); @@ -245,22 +248,20 @@ class DoorLockLogLogic extends BaseGetXController { super.onInit(); // 获取是否是演示模式 演示模式不获取接口 - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { getLockRecordLastUploadDataTime(); - // senderReferEventRecordTime(); - // senderReferEventRecordNumber(); _initReplySubscription(); + mockNetworkDataRequest(isRefresh: true); } } @override Future onClose() async { - // TODO: implement onClose super.onClose(); //获取是否是演示模式 演示模式不获取接口 - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { _replySubscription.cancel(); _getDoorLockLogListRefreshUIEvent?.cancel(); diff --git a/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/lib/main/lockDetail/lockDetail/lockDetail_page.dart index a4f4ec1d..b49677af 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -10,6 +10,7 @@ import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_list_page.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_state.dart'; +import 'package:star_lock/main/lockMian/lockMain/lockMain_logic.dart'; import 'package:star_lock/tools/aliyunRealNameAuth/aliyunRealNameAuthHandle.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/showTipView.dart'; @@ -93,6 +94,18 @@ class _LockDetailPageState extends State //鑫泓佳布局 Widget xhjWidget() { + final bool isShowTip = (state.keyInfos.value.keyType == + XSConstantMacro.keyTypeTime || + state.keyInfos.value.keyType == + XSConstantMacro.keyTypeLoop) && // 限时、循环 + (DateTool().compareTimeGetDaysFromNow(state.keyInfos.value.endDate!) <= + 15 && + DateTool() + .compareTimeGetDaysFromNow(state.keyInfos.value.endDate!) >= + 0) && // 0到30天 + (state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusNormalUse || + state.keyInfos.value.keyStatus == + XSConstantMacro.keyStatusWaitReceive); return Scaffold( backgroundColor: Colors.white, body: Obx(() { @@ -103,7 +116,7 @@ class _LockDetailPageState extends State child: Column( children: [ SizedBox( - height: 10.h, + height: isShowTip ? 70.h : 10.h, ), Padding( padding: EdgeInsets.symmetric(horizontal: 24.w), @@ -144,6 +157,23 @@ class _LockDetailPageState extends State ], ), ), + Visibility( + visible: isShowTip, + child: Container( + // height: 30.h, + color: const Color(0xFFFBEFD4), + padding: EdgeInsets.only(top: 8.h, bottom: 8.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "${"钥匙将在".tr}${DateTool().compareTimeGetDaysFromNow(state.keyInfos.value.endDate!)}${"天后失效".tr}", + style: TextStyle( + color: const Color(0xffCBA74B), fontSize: 24.sp)) + ], + ), + ), + ), Visibility( visible: state.iSClosedUnlockSuccessfulPopup.value, child: Container( @@ -1404,11 +1434,16 @@ class _LockDetailPageState extends State if (state.openLockBtnState.value == 1) { return; } + final bool isNetWork = LockMainLogic.to()?.judgeTheNetwork() ?? false; + final bool isOpenLockNeedOnline = state.isOpenLockNeedOnline.value == 0; + if (!isOpenLockNeedOnline && !isNetWork) { + return; + } state.iSOpenLock.value = true; state.openLockBtnState.value = 1; state.animationController!.forward(); AppLog.log('点击开锁'); - if (state.isOpenLockNeedOnline.value == 0) { + if (isOpenLockNeedOnline) { // 不需要联网 state.openDoorModel = 0; AppLog.log('点击开锁 state.openDoorModel = 0 不需要联网'); diff --git a/lib/main/lockMian/lockList/lockList_logic.dart b/lib/main/lockMian/lockList/lockList_logic.dart index b06b7f1f..57247151 100755 --- a/lib/main/lockMian/lockList/lockList_logic.dart +++ b/lib/main/lockMian/lockList/lockList_logic.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:common_utils/common_utils.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; @@ -30,7 +31,8 @@ class LockListLogic extends BaseGetXController { LockListInfoGroupEntity? entity; List get groupDataList { - final List list = _groupDataList.map((e)=>e.copy()).toList(); + final List list = + _groupDataList.map((GroupList e) => e.copy()).toList(); if (state.searchStr.value != '' && state.showSearch.value) { list.forEach((GroupList element) { element.lockList?.removeWhere((LockListInfoItemEntity element) => @@ -141,6 +143,28 @@ class LockListLogic extends BaseGetXController { return ''; } + //判断是否要显示提示 + bool getShowType(LockListInfoItemEntity keyInfo) { + final List keyTypes = [ + XSConstantMacro.keyTypeTime, + XSConstantMacro.keyTypeLoop + ]; + final List keyStatus = [ + XSConstantMacro.keyStatusWaitIneffective, + XSConstantMacro.keyStatusFrozen, + XSConstantMacro.keyStatusExpired, + ]; + final DateTime endDate = + DateTime.fromMillisecondsSinceEpoch(keyInfo.endDate ?? 0); + final DateTime now = DateTime.now(); + final bool isKeyType = keyTypes.contains(keyInfo.keyType); + final bool isKeyStatus = keyStatus.contains(keyInfo.keyStatus); + final Duration difference = endDate.difference(now); + final bool isExpirationSoon = isKeyType && difference.inDays <= 15; + final bool isShow = isKeyType && isKeyStatus || isExpirationSoon; + return isShow; + } + /// 以下为删除逻辑 void deleyLockLogicOfRoles() { if (state.lockListInfoItemEntity.isLockOwner == 1) { diff --git a/lib/main/lockMian/lockList/lockList_page.dart b/lib/main/lockMian/lockList/lockList_page.dart index ccfc714d..d97b3c0c 100755 --- a/lib/main/lockMian/lockList/lockList_page.dart +++ b/lib/main/lockMian/lockList/lockList_page.dart @@ -14,7 +14,6 @@ import 'lockListGroup_view.dart'; import 'lockList_logic.dart'; class LockListPage extends StatefulWidget { - const LockListPage({required this.lockListInfoGroupEntity, Key? key}) : super(key: key); final LockListInfoGroupEntity lockListInfoGroupEntity; @@ -229,13 +228,7 @@ class _LockListPageState extends State with RouteAware { )), SizedBox(height: 20.h), Visibility( - visible: (keyInfo.keyType == XSConstantMacro.keyTypeTime || - keyInfo.keyType == XSConstantMacro.keyTypeLoop) && - (keyInfo.keyStatus == - XSConstantMacro.keyStatusWaitIneffective || - keyInfo.keyStatus == XSConstantMacro.keyStatusFrozen || - keyInfo.keyStatus == XSConstantMacro.keyStatusExpired), - // visible: true, + visible: logic.getShowType(keyInfo), child: Row( children: [ SizedBox(width: 30.w), diff --git a/lib/main/lockMian/lockList/lockList_xhj_page.dart b/lib/main/lockMian/lockList/lockList_xhj_page.dart index c86fdaaa..47d6fce9 100755 --- a/lib/main/lockMian/lockList/lockList_xhj_page.dart +++ b/lib/main/lockMian/lockList/lockList_xhj_page.dart @@ -360,14 +360,7 @@ class _LockListXHJPageState extends State with RouteAware { ], ), Visibility( - visible: (keyInfo.keyType == XSConstantMacro.keyTypeTime || - keyInfo.keyType == XSConstantMacro.keyTypeLoop) && - (keyInfo.keyStatus == - XSConstantMacro.keyStatusWaitIneffective || - keyInfo.keyStatus == - XSConstantMacro.keyStatusFrozen || - keyInfo.keyStatus == - XSConstantMacro.keyStatusExpired), + visible: logic.getShowType(keyInfo), child: Padding( padding: EdgeInsets.only(top: 5.h), child: Row( diff --git a/lib/main/lockMian/lockMain/lockMain_logic.dart b/lib/main/lockMian/lockMain/lockMain_logic.dart index b4d2ba83..6bd0b1ee 100755 --- a/lib/main/lockMian/lockMain/lockMain_logic.dart +++ b/lib/main/lockMian/lockMain/lockMain_logic.dart @@ -179,7 +179,7 @@ class LockMainLogic extends BaseGetXController { list.lockList ??= []; final int keyIndex = lockList.indexWhere( - (LockListInfoItemEntity lock) => lock.keyId == keyId) ?? + (LockListInfoItemEntity lock) => lock.lockId == lockId) ?? -1; if (keyIndex != -1) { //已存在 diff --git a/lib/mine/mineSet/appUnlockNeedMobileNetworkingLock/appUnlockNeedMobileNetworkingLock_logic.dart b/lib/mine/mineSet/appUnlockNeedMobileNetworkingLock/appUnlockNeedMobileNetworkingLock_logic.dart index 9d098934..cc40ce7f 100755 --- a/lib/mine/mineSet/appUnlockNeedMobileNetworkingLock/appUnlockNeedMobileNetworkingLock_logic.dart +++ b/lib/mine/mineSet/appUnlockNeedMobileNetworkingLock/appUnlockNeedMobileNetworkingLock_logic.dart @@ -38,7 +38,7 @@ class AppUnlockNeedMobileNetworkingLockLogic extends BaseGetXController { //刷新锁列表,更新锁详情--手机需联网标识 if (Get.isRegistered()) { - Get.find().getStarLockInfo(); + Get.find().getStarLockInfo(isUnShowLoading: true); } } } diff --git a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_logic.dart b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_logic.dart index 361f0afe..c94cc34c 100644 --- a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_logic.dart +++ b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_logic.dart @@ -1,5 +1,7 @@ import 'dart:async'; +import 'package:get/get.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart'; +import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_state.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../network/api_repository.dart'; @@ -10,7 +12,8 @@ class ValueAddedServicesNoteAndEmailDetailLogic extends BaseGetXController { //获取增值服务用户余量包 Future getServiceUserPackage() async { - var entity = await ApiRepository.to.getServiceUserPackage(); + final ValueAddedServicesHighFunctionEntity entity = + await ApiRepository.to.getServiceUserPackage(); if (entity.errorCode!.codeIsSuccessful) { if (state.selectType.value == 1) { state.remainCount.value = entity.data!.smsCount!; @@ -19,6 +22,7 @@ class ValueAddedServicesNoteAndEmailDetailLogic extends BaseGetXController { } state.remainCount.refresh(); } + getServicePackageBuyUrl(); } //增值服务套餐购包链接 @@ -36,9 +40,19 @@ class ValueAddedServicesNoteAndEmailDetailLogic extends BaseGetXController { } @override - void onInit() { - super.onInit(); + void onReady() { + super.onReady(); - getServiceUserPackage(); + // 监听 selectType 的变化 + ever(state.selectType, (_) { + getServiceUserPackage(); + }); + + if (Get.arguments != null && Get.arguments['type'] != null) { + state.selectType.value = Get.arguments['type']; + state.selectType.refresh(); + } else { + getServiceUserPackage(); + } } } diff --git a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart index 13301dc9..77a59cc9 100755 --- a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart +++ b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_page.dart @@ -8,7 +8,6 @@ import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_r import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; -import '../../../tools/commonItem.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; @@ -30,7 +29,8 @@ class _ValueAddedServicesNoteAndEmailDetailPageState @override void initState() { super.initState(); - logic.getServicePackageBuyUrl(); + // logic.getServicePackageBuyUrl(); + logic.getServiceUserPackage(); } @override @@ -84,11 +84,12 @@ class _ValueAddedServicesNoteAndEmailDetailPageState ))), GestureDetector( onTap: () { - Get.toNamed(Routers.advancedFeaturesWebPage, arguments: { - 'webBuyType': state.selectType.value == 1 - ? XSConstantMacro.webBuyTypeSMS - : XSConstantMacro.webBuyTypeEmail, - }); + Get.toNamed(Routers.advancedFeaturesWebPage, + arguments: { + 'webBuyType': state.selectType.value == 1 + ? XSConstantMacro.webBuyTypeSMS + : XSConstantMacro.webBuyTypeEmail, + }); }, child: Container( width: 50, diff --git a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_state.dart b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_state.dart index eb1b88c4..6afe23e0 100644 --- a/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_state.dart +++ b/lib/mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedServicesNoteAndEmailDetail_state.dart @@ -5,6 +5,7 @@ class ValueAddedServicesNoteAndEmailDetailState { if (Get.arguments is Map && Get.arguments.isNotEmpty) { if (Get.arguments['type'] != null) { selectType.value = Get.arguments['type']; + selectType.refresh(); } } } diff --git a/lib/tools/push/message_management.dart b/lib/tools/push/message_management.dart index 429dcc36..c274d858 100644 --- a/lib/tools/push/message_management.dart +++ b/lib/tools/push/message_management.dart @@ -24,6 +24,7 @@ class MessageManagement { if (extra.isEmpty) { return; } + AppLog.log(message.toString()); _shuntingBus(extra); } diff --git a/pubspec.yaml b/pubspec.yaml index 2c7b9020..068ea3ea 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -76,7 +76,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # 1.0.66+2024061802:xhj 线上环境,提交测试:回归 bug # 1.0.67+2024062501:xhj 线上环境,提交测试:回归 测试部门bug -version: 1.0.67+2024062501 +version: 1.0.68+2024062601 environment: sdk: '>=2.12.0 <3.0.0'