diff --git a/star_lock/ios/Podfile.lock b/star_lock/ios/Podfile.lock index 1d1c9856..e962a17c 100644 --- a/star_lock/ios/Podfile.lock +++ b/star_lock/ios/Podfile.lock @@ -41,14 +41,14 @@ PODS: - ReachabilitySwift - device_info_plus (0.0.1): - Flutter - - DKImagePickerController/Core (4.3.8): + - DKImagePickerController/Core (4.3.7): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.8) - - DKImagePickerController/PhotoGallery (4.3.8): + - DKImagePickerController/ImageDataManager (4.3.7) + - DKImagePickerController/PhotoGallery (4.3.7): - DKImagePickerController/Core - DKPhotoGallery - - DKImagePickerController/Resource (4.3.8) + - DKImagePickerController/Resource (4.3.7) - DKPhotoGallery (0.0.17): - DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Model (= 0.0.17) @@ -306,7 +306,7 @@ SPEC CHECKSUMS: camera_avfoundation: 8b8d780bcfb6a4a02b0fbe2b4bd17b5b71946e68 connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed - DKImagePickerController: a7836546cfdfe014171694f643a7d575bc8ace7f + DKImagePickerController: 0a24ebfe7b48beeb74c27531540aaa2cc1dac6cf DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475 file_picker: ce3938a0df3cc1ef404671531facef740d03f920 @@ -316,7 +316,7 @@ SPEC CHECKSUMS: flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907 flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82 - fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265 + fluttertoast: 9f2f8e81bb5ce18facb9748d7855bf5a756fe3db fluwx: daa284756ce53442b3d0417ceeda66e981906811 google_maps_flutter_ios: d1318b4ff711612cab16862d7a87e31a7403d458 GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4 diff --git a/star_lock/lib/blue/blue_manage.dart b/star_lock/lib/blue/blue_manage.dart index f1ffcfcf..40f196c7 100644 --- a/star_lock/lib/blue/blue_manage.dart +++ b/star_lock/lib/blue/blue_manage.dart @@ -304,9 +304,7 @@ class BlueManage { } /// 调用发送数据 List senderData, - Future bludSendData( - String deviceName, ConnectStateCallBack stateCallBack, - {bool isAddEquipment = false}) async { + Future bludSendData(String deviceName, ConnectStateCallBack stateCallBack, {bool isAddEquipment = false}) async { FlutterBluePlus.isSupported.then((isAvailable) async { if (isAvailable) { if (_adapterState == BluetoothAdapterState.on) { @@ -343,6 +341,7 @@ class BlueManage { element.device.platformName == connectDeviceName || element.advertisementData.advName == connectDeviceName); if (isAddEquipment == false && isExistDevice == false) { + // AppLog.log("需要开启扫描"); // startScan(10, (scanDevices){ startScanSingle(deviceName, 10, (List scanDevices) { // AppLog.log("扫描到的设备:$scanDevices"); @@ -351,6 +350,7 @@ class BlueManage { isAddEquipment: isAddEquipment); }); } else { + // AppLog.log("不需要开启扫描"); _connectDevice(devicesList, deviceName, connectStateCallBack, isAddEquipment: isAddEquipment); } @@ -576,12 +576,26 @@ class BlueManage { List subData = splitList(valueList, _mtuSize!); // AppLog.log('writeCharacteristicWithResponse _mtuSize:$_mtuSize 得到的分割数据:$subData'); for (int i = 0; i < subData.length; i++) { - await characteristic.write(subData[i],withoutResponse: true).then((value) async { - // await Future.delayed(const Duration(milliseconds: 1)).then(( - // value) async { - // AppLog.log('分包发送成功了'); - // }); - }); + if (characteristic.properties.writeWithoutResponse) { + // 使用WRITE_NO_RESPONSE属性写入值 + await characteristic.write(subData[i],withoutResponse: true).then((value) async { + // await Future.delayed(const Duration(milliseconds: 1)).then(( + // value) async { + // AppLog.log('分包发送成功了'); + // }); + }); + } else if (characteristic.properties.write) { + // 使用WRITE属性写入值 + await characteristic.write(subData[i]).then((value) async { + // await Future.delayed(const Duration(milliseconds: 1)).then(( + // value) async { + // AppLog.log('分包发送成功了'); + // }); + }); + } else { + // 特性不支持写入 + throw Exception('This characteristic does not support writing.'); + } } } on Exception catch (e, s) { AppLog.log('APP写入失败: $e'); diff --git a/star_lock/lib/blue/io_protocol/io_openLock.dart b/star_lock/lib/blue/io_protocol/io_openLock.dart index 126b2fe2..0de6846a 100644 --- a/star_lock/lib/blue/io_protocol/io_openLock.dart +++ b/star_lock/lib/blue/io_protocol/io_openLock.dart @@ -61,6 +61,7 @@ class OpenLockCommand extends SenderProtocol { // OpenTime 4 int? d1 = openTime; + // AppLog.log("开门时间是:$d1"); data.add((d1! & 0xff000000) >> 24); data.add((d1 & 0xff0000) >> 16); diff --git a/star_lock/lib/flavors.dart b/star_lock/lib/flavors.dart index ec6cf242..19d54133 100644 --- a/star_lock/lib/flavors.dart +++ b/star_lock/lib/flavors.dart @@ -100,8 +100,8 @@ class F { static String get apiPrefix { switch (appFlavor) { case Flavor.local: - // return 'https://ge.lock.star-lock.cn'; // 葛工 - return 'http://192.168.1.15:8022'; // 谢工 + return 'https://ge.lock.star-lock.cn'; // 葛工 + // return 'http://192.168.1.15:8022'; // 谢工 case Flavor.dev: return 'https://dev.lock.star-lock.cn'; case Flavor.pre: diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart index c4e5ee95..eb2f6030 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart @@ -63,7 +63,7 @@ class DoorLockLogLogic extends BaseGetXController { // } // 根据时间查解析数据 - Future _replyReferEventRecordTime(Reply reply) async { + Future _replyReferEventRecordTime(Reply reply) async { int status = reply.data[2]; switch (status) { case 0x00: @@ -135,9 +135,13 @@ class DoorLockLogLogic extends BaseGetXController { // 查询事件记录(时间查询) Future senderReferEventRecordTime(int time) async { - BlueManage().bludSendData(BlueManage().connectDeviceName, - (BluetoothConnectionState state) async { - if (state == BluetoothConnectionState.connected) { + + showEasyLoading(); + showBlueConnetctToastTimer(action: (){ + dismissEasyLoading(); + }); + BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionStateState) async { + if (connectionStateState == BluetoothConnectionState.connected) { var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); @@ -159,6 +163,12 @@ class DoorLockLogLogic extends BaseGetXController { publicKey: getPublicKeyList, privateKey: getPrivateKeyList, ); + } else if (connectionStateState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + if(state.ifCurrentScreen.value == true){ + showBlueConnetctToast(); + } } }); } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 64d7f612..1a8c4a1e 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; @@ -10,6 +11,7 @@ import 'package:star_lock/tools/noData.dart'; import 'package:timelines/timelines.dart'; import '../../../app_settings/app_colors.dart'; +import '../../../tools/appRouteObserver.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; @@ -20,7 +22,7 @@ class DoorLockLogPage extends StatefulWidget { State createState() => _DoorLockLogPageState(); } -class _DoorLockLogPageState extends State { +class _DoorLockLogPageState extends State with RouteAware { final logic = Get.put(DoorLockLogLogic()); final state = Get.find().state; @@ -212,4 +214,54 @@ class _DoorLockLogPageState extends State { : NoData(), ); } + + @override + void didChangeDependencies() { + // TODO: implement didChangeDependencies + super.didChangeDependencies(); + + /// 路由订阅 + AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!); + } + + @override + void dispose() { + // TODO: implement dispose + /// 取消路由订阅 + AppRouteObserver().routeObserver.unsubscribe(this); + super.dispose(); + } + + /// 从上级界面进入 当前界面即将出现 + @override + void didPush() { + super.didPush(); + state.ifCurrentScreen.value = true; + } + + /// 返回上一个界面 当前界面即将消失 + @override + void didPop() { + super.didPop(); + logic.cancelBlueConnetctToastTimer(); + if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); + state.ifCurrentScreen.value = false; + } + + /// 从下级返回 当前界面即将出现 + @override + void didPopNext() { + super.didPopNext(); + state.ifCurrentScreen.value = true; + } + + /// 进入下级界面 当前界面即将消失 + @override + void didPushNext() { + super.didPushNext(); + logic.cancelBlueConnetctToastTimer(); + if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); + state.ifCurrentScreen.value = false; + } + } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart index 18a62a68..42b50557 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart @@ -17,15 +17,8 @@ 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; @@ -53,6 +46,8 @@ class DoorLockLogState { isCheked: false), ]; + var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + DoorLockLogState() { keyInfos.value = Get.arguments["keyInfo"]; } diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart index d1bb5fac..bf460180 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart @@ -34,18 +34,19 @@ class SendElectronicKeyLogic extends BaseGetXController { switch (typeValue) { case 0: { - if (state.beginTime.value.isEmpty) { + // 限时 + if (state.timeLimitBeginTime.value.isEmpty) { showToast("请选择开始时间".tr); return; } - if (state.beginTime.value.isEmpty) { + if (state.timeLimitEndTime.value.isEmpty) { showToast("请选择结束时间".tr); return; } typeValue = XSConstantMacro.keyTypeTime; - startDate = DateTool().dateToTimestamp(state.beginTime.value, 1).toString(); - endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString(); + startDate = DateTool().dateToTimestamp(state.timeLimitBeginTime.value, 1).toString(); + endDate = DateTool().dateToTimestamp(state.timeLimitEndTime.value, 1).toString(); startTime = "0"; endTime = "0"; @@ -68,12 +69,12 @@ class SendElectronicKeyLogic extends BaseGetXController { break; case 3: typeValue = XSConstantMacro.keyTypeLoop; - if (state.beginTime.value.isEmpty) { + if (state.cycleBeginTime.value.isEmpty) { showToast("请选择有效期".tr); return; } - startDate = DateTool().dateToTimestamp(state.beginTime.value, 1).toString(); - endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString(); + startDate = DateTool().dateToTimestamp(state.cycleBeginTime.value, 1).toString(); + endDate = DateTool().dateToTimestamp(state.cycleEndTime.value, 1).toString(); startTime = DateTool().dateToTimestamp(state.effectiveDateTime.value, 0).toString(); endTime = DateTool().dateToTimestamp(state.failureDateTime.value, 0).toString(); break; @@ -217,13 +218,14 @@ class SendElectronicKeyLogic extends BaseGetXController { void resetData() { state.emailOrPhoneController.text = ""; state.keyNameController.text = ""; - if(state.seletType.value == 0){ - state.beginTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()); //默认为当前时间 - state.endTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString());//默认为当前时间 - }else{ - state.beginTime.value = ""; //默认为当前时间 - state.endTime.value = "";//默认为当前时间 - } + + state.timeLimitBeginTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时开始时间 + state.timeLimitEndTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时结束时间 + state.cycleBeginTime = "".obs;// 循环开始时间 + state.cycleEndTime = "".obs;// 循环结束时间 + state.effectiveDateTime = "".obs;// 生效时间 + state.failureDateTime = "".obs;// 失效时间 + state.weekdaysList = [].obs; } } diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart index a114011f..b0a05134 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart @@ -199,23 +199,23 @@ class _SendElectronicKeyPageState extends State with Sing children: [ Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, - rightTitle: state.beginTime.value, + rightTitle: state.timeLimitBeginTime.value, isHaveLine: true, isHaveDirection: true, action: () { Pickers.showDatePicker(context, mode: DateMode.YMDHM, onConfirm: (p) { - state.beginTime.value = DateTool().getYMDHNDateString(p, 1); + state.timeLimitBeginTime.value = DateTool().getYMDHNDateString(p, 1); }); })), Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, - rightTitle: state.endTime.value, + rightTitle: state.timeLimitEndTime.value, isHaveDirection: true, action: () { Pickers.showDatePicker(context, mode: DateMode.YMDHM, onConfirm: (p) { - state.endTime.value = DateTool().getYMDHNDateString(p, 1); + state.timeLimitEndTime.value = DateTool().getYMDHNDateString(p, 1); }); })), Container(height: 10.h), @@ -250,22 +250,22 @@ class _SendElectronicKeyPageState extends State with Sing children: [ Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr, - rightTitle: "${state.beginTime.value}\n${state.endTime.value}", + rightTitle: "${state.cycleBeginTime.value}\n${state.cycleEndTime.value}", isHaveDirection: true, isHaveLine: true, action: () async { var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': state.weekdaysList.value, - 'starDate': state.beginTime.value, - 'endDate': state.endTime.value, + 'starDate': state.cycleBeginTime.value, + 'endDate': state.cycleEndTime.value, 'starTime': state.effectiveDateTime.value, 'endTime': state.failureDateTime.value }); if(result != null && result.isNotEmpty){ state.weekdaysList.value = result['validityValue']; - state.beginTime.value = result['starDate']; - state.endTime.value = result['endDate']; + state.cycleBeginTime.value = result['starDate']; + state.cycleEndTime.value = result['endDate']; state.effectiveDateTime.value = result['starTime']; state.failureDateTime.value = result['endTime']; } @@ -281,15 +281,15 @@ class _SendElectronicKeyPageState extends State with Sing var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': state.weekdaysList.value, - 'starDate': state.beginTime.value, - 'endDate': state.endTime.value, + 'starDate': state.cycleBeginTime.value, + 'endDate': state.cycleEndTime.value, 'starTime': state.effectiveDateTime.value, 'endTime': state.failureDateTime.value }); if(result != null && result.isNotEmpty){ state.weekdaysList.value = result['validityValue']; - state.beginTime.value = result['starDate']; - state.endTime.value = result['endDate']; + state.cycleBeginTime.value = result['starDate']; + state.cycleEndTime.value = result['endDate']; state.effectiveDateTime.value = result['starTime']; state.failureDateTime.value = result['endTime']; } @@ -305,18 +305,17 @@ class _SendElectronicKeyPageState extends State with Sing var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': state.weekdaysList.value, - 'starDate': state.beginTime.value, - 'endDate': state.endTime.value, + 'starDate': state.cycleBeginTime.value, + 'endDate': state.cycleEndTime.value, 'starTime': state.effectiveDateTime.value, 'endTime': state.failureDateTime.value }); if(result != null && result.isNotEmpty){ state.weekdaysList.value = result['validityValue']; - state.beginTime.value = result['starDate']; - state.endTime.value = result['endDate']; + state.cycleBeginTime.value = result['starDate']; + state.cycleEndTime.value = result['endDate']; state.effectiveDateTime.value = result['starTime']; state.failureDateTime.value = result['endTime']; - Get.back(result: result); } }) )), diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart index 5d8d6d7a..b5dd79e0 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart @@ -18,8 +18,10 @@ class SendElectronicKeyState { final isRemoteUnlock = false.obs; //是否允许远程开锁 final isAuthentication = false.obs; //是否可以实名认证 - var beginTime = "".obs; //默认为当前时间 开始时间 - var endTime = "".obs;//默认为当前时间 结束时间 + var timeLimitBeginTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时开始时间 + var timeLimitEndTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时结束时间 + var cycleBeginTime = "".obs;// 循环开始时间 + var cycleEndTime = "".obs;// 循环结束时间 var effectiveDateTime = "".obs;// 生效时间 var failureDateTime = "".obs;// 失效时间 var weekdaysList = [].obs; diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index 9664ca8b..4f307e2f 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -108,14 +108,13 @@ class LockDetailLogic extends BaseGetXController { keyID: BlueManage().connectDeviceName, userID: await Storage.getUid(), openMode: state.openDoorModel, - openTime: DateTime.now().millisecondsSinceEpoch ~/ 1000, + openTime: state.netTime, onlineToken: state.lockNetToken, token: tokenData, needAuthor: 1, signKey: signKeyDataList, privateKey: getPrivateKeyList, ); - break; case 0x07: //无权限 @@ -330,7 +329,7 @@ class LockDetailLogic extends BaseGetXController { keyID: BlueManage().connectDeviceName, userID: await Storage.getUid(), openMode: state.openDoorModel, - openTime: DateTime.now().millisecondsSinceEpoch ~/ 1000, + openTime: state.netTime, onlineToken: state.lockNetToken, token: getTokenList, needAuthor: 1, @@ -381,6 +380,16 @@ class LockDetailLogic extends BaseGetXController { } + // 从服务器获取锁的时间 开锁时传入 + void getServerDatetime() async{ + var entity = await ApiRepository.to.getServerDatetimeData( + lockId: state.keyInfos.value.lockId.toString(), + ); + if(entity.errorCode!.codeIsSuccessful){ + state.netTime = entity.data!.date!.toString().length > 10 ? entity.data!.date!~/ 1000 : entity.data!.date!; + } + } + // 获取手机联网token,根据锁设置里面获取的开锁时是否联网来判断是否调用这个接口 void getLockNetToken() async { LockNetTokenEntity entity = await ApiRepository.to.getLockNetToken(lockId: state.keyInfos.value.lockId.toString()); @@ -432,6 +441,7 @@ class LockDetailLogic extends BaseGetXController { lockId: state.keyInfos.value.lockId.toString(), records: list); if (entity.errorCode!.codeIsSuccessful) { // mockNetworkDataRequest(); + AppLog.log("state.keyInfos.value.keyType:${state.keyInfos.value.keyType}"); if(state.keyInfos.value.keyType == XSConstantMacro.keyTypeOnce){ // 单次删除 deletKeyData(); @@ -520,6 +530,8 @@ class LockDetailLogic extends BaseGetXController { @override Future onReady() async { super.onReady(); + getServerDatetime(); + await PermissionDialog.request(Permission.location); await PermissionDialog.requestBluetooth(); } diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart index e535dac3..0e1d0613 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -10,6 +10,7 @@ import 'package:star_lock/widget/flavors_img.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; +import '../../../app_settings/app_settings.dart'; import '../../../blue/blue_manage.dart'; import '../../../blue/io_tool/io_tool.dart'; import '../../../common/XSConstantMacro/XSConstantMacro.dart'; @@ -136,7 +137,6 @@ class _LockDetailPageState extends State @override Widget build(BuildContext context) { - state.widgetContext = context; loadData(); return F.sw(defaultCall: () => skWidget(), xhjCall: () => xhjWidget()); } @@ -1213,13 +1213,16 @@ class _LockDetailPageState extends State state.openLockBtnState.value = 1; // state.animationController!.forward(); + AppLog.log("点击开锁"); if (state.isOpenLockNeedOnline.value == 0) { // 不需要联网 state.openDoorModel = 0; + AppLog.log("点击开锁 state.openDoorModel = 0 不需要联网"); logic.openDoorAction(); } else { // 需要联网 state.openDoorModel = 2; + AppLog.log("点击开锁 state.openDoorModel = 2 需要联网"); logic.getLockNetToken(); } } @@ -1233,12 +1236,15 @@ class _LockDetailPageState extends State state.openLockBtnState.value = 1; state.animationController!.forward(); + AppLog.log("长按闭锁"); if (state.isOpenLockNeedOnline.value == 0) { // 不需要联网 + AppLog.log("长按闭锁 state.openDoorModel = 32 不需要联网"); state.openDoorModel = 32; logic.openDoorAction(); } else { // 需要联网 + AppLog.log("长按闭锁 state.openDoorModel = 34 需要联网"); state.openDoorModel = 34; logic.getLockNetToken(); } diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_state.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_state.dart index 2a186430..bb10e0d9 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_state.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_state.dart @@ -14,6 +14,7 @@ class LockDetailState { StreamSubscription? lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent; String lockNetToken = ""; + int netTime = 0; int lockUserNo = 0; var senderUserId = 0; var isOnlyOneData = false; @@ -45,7 +46,6 @@ class LockDetailState { final PageController pageController = PageController(); var currentPage = 0.obs; - late BuildContext widgetContext; // LockDetailState() { // Map map = Get.arguments; diff --git a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart index 05d28aa9..e6513d08 100644 --- a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart +++ b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart @@ -245,7 +245,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { IoSenderManage.senderCustomPasswordsCommand( keyID: "1", userID: await Storage.getUid(), - pwdNo: state.isAdministrator.value == true ? 254 : 1, + pwdNo: state.isAdministrator.value == true ? 254 : 0, pwd:state.pwdController.text, useCountLimit: 0xff, startTime: DateTool().dateToTimestamp(state.beginTime.value, 1)~/1000, @@ -326,7 +326,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { IoSenderManage.senderCustomPasswordsCommand( keyID: "1", userID: await Storage.getUid(), - pwdNo: state.isAdministrator.value == true ? 254 : 1, + pwdNo: state.isAdministrator.value == true ? 254 : 0, pwd: state.pwdController.text, useCountLimit: 0xff, startTime:state.isPermanent.value == false ? startDate ~/ 1000 : 0, diff --git a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart index a4e530d4..efad0ad3 100644 --- a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart +++ b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart @@ -21,6 +21,7 @@ import '../../../../tools/appRouteObserver.dart'; import '../../../../tools/commonItem.dart'; import '../../../../tools/dateTool.dart'; +import '../../../../tools/pickers/time_picker/model/pduration.dart'; import '../../../../tools/submitBtn.dart'; import '../../../../tools/titleAppBar.dart'; import '../../../../translations/trans_lib.dart'; @@ -223,7 +224,12 @@ class _PasswordKeyPerpetualPageState extends State wit isHaveLine: true, isHaveDirection: true, action: () { - Pickers.showDatePicker(context, mode: state.widgetType.value == 3 ? DateMode.YMDHM:DateMode.YMDH, onConfirm: (p) { + Pickers.showDatePicker( + context, + maxDate: PDuration(year: DateTime.now().year + 3, month: DateTime.now().month, day: DateTime.now().day, hour: 24), + // minDate: PDuration.now(), + mode: state.widgetType.value == 3 ? DateMode.YMDHM:DateMode.YMDH, + onConfirm: (p) { if (state.widgetType.value == 3) { // 自定义 state.beginTime.value = DateTool().getYMDHNDateString(p, 1); @@ -238,7 +244,13 @@ class _PasswordKeyPerpetualPageState extends State wit rightTitle: state.endTime.value, isHaveDirection: true, action: () { - Pickers.showDatePicker(context, mode: DateMode.YMDH, onConfirm: (p) { + Pickers.showDatePicker( + context, + // maxDate传入三年以后得今天的时间 + maxDate: PDuration(year: DateTime.now().year + 3, month: DateTime.now().month, day: DateTime.now().day), + minDate: PDuration(year: DateTime.now().year, month: DateTime.now().month, day: DateTime.now().day), + mode: DateMode.YMDH, + onConfirm: (p) { if (state.widgetType.value == 3) { // 自定义 state.endTime.value = DateTool().getYMDHNDateString(p, 1); diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart index 5e4a24fc..eab12c80 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart @@ -139,7 +139,7 @@ class _VideoLogPageState extends State { Get.toNamed(Routers.valueAddedServicesHighFunctionPage); }, child: Container( - height: 150.h, + // height: 150.h, margin: EdgeInsets.all(15.w), padding: EdgeInsets.only(left: 20.w, top: 20.w, bottom: 20.w, right: 10.w), diff --git a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart index d41b2ae9..e64a01fc 100644 --- a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart +++ b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart @@ -23,9 +23,10 @@ class NearbyLockLogic extends BaseGetXController { // 点击连接设备 void connect(String deviceName) { showEasyLoading(); - BlueManage().bludSendData(deviceName, - (BluetoothConnectionState state) async { + BlueManage().bludSendData(deviceName, (BluetoothConnectionState state) async { + AppLog.log("点击要添加的设备了"); if (state == BluetoothConnectionState.connected) { + AppLog.log("开始获取公钥"); IoSenderManage.getPublicKey(lockId: deviceName); } else if (state == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -58,12 +59,14 @@ class NearbyLockLogic extends BaseGetXController { switch (reply.status) { case 0x00: //成功 + AppLog.log("获取公钥成功"); // 储存公钥 var publicKey = reply.data.sublist(3); var saveStrList = changeIntListToStringList(publicKey); Storage.setStringList(saveBluePublicKey, saveStrList); // 获取私钥 + AppLog.log("开始获取私钥"); IoSenderManage.getPrivateKey( lockId: BlueManage().connectDeviceName, keyID: "1", @@ -73,6 +76,7 @@ class NearbyLockLogic extends BaseGetXController { needAuthor: 1); break; default: + AppLog.log("获取公钥失败"); break; } } @@ -80,6 +84,7 @@ class NearbyLockLogic extends BaseGetXController { Future _replyGetPrivateKeyKey(Reply reply) async { switch (reply.status) { case 0x00: + AppLog.log("获取私钥成功"); //成功 reply.data.removeAt(0); @@ -113,66 +118,66 @@ class NearbyLockLogic extends BaseGetXController { switch (status) { case 0x00: //成功 - + AppLog.log("获取锁状态成功"); // 厂商名称 var vendor = reply.data.sublist(3, 23); var vendorStr = utf8String(vendor); state.lockInfo["vendor"] = vendorStr; // state.lockInfo["vendor"] = "XL"; - AppLog.log("vendor:$vendor vendorStr:$vendorStr reply.data:${reply.data}"); + AppLog.log("厂商名称 vendor:$vendor vendorStr:$vendorStr reply.data:${reply.data}"); // 锁设备类型 var product = reply.data[23]; state.lockInfo["product"] = product; - // AppLog.log("product:$product"); + AppLog.log("锁设备类型 product:$product"); // 产品名称 var model = reply.data.sublist(24, 44); var modelStr = utf8String(model); state.lockInfo["model"] = modelStr; // state.lockInfo["model"] = "JL-BLE-01"; - // AppLog.log("model:$model modelStr:$modelStr modelStr:${modelStr.length}"); + AppLog.log("产品名称 mmodelStr:$modelStr"); // 软件版本 var fwVersion = reply.data.sublist(44, 64); var fwVersionStr = utf8String(fwVersion); state.lockInfo["fwVersion"] = fwVersionStr; - // AppLog.log("fwVersion:$fwVersion fwVersionStr:$fwVersionStr fwVersionStr:${fwVersionStr.length}"); + AppLog.log("软件版本 fwVersionStr:$fwVersionStr"); // 硬件版本 var hwVersion = reply.data.sublist(64, 84); var hwVersionStr = utf8String(hwVersion); state.lockInfo["hwVersion"] = hwVersionStr; - // AppLog.log("hwVersion:$hwVersion hwVersionStr:${hwVersionStr.length}"); + AppLog.log("硬件版本 hwVersionStr:$hwVersionStr"); // 厂商序列号 var serialNum0 = reply.data.sublist(84, 100); var serialNum0Str = utf8String(serialNum0); state.lockInfo["serialNum0"] = serialNum0Str; // state.lockInfo["serialNum0"] = "${DateTime.now().millisecondsSinceEpoch ~/ 10}"; + AppLog.log("厂商序列号 serialNum0Str:${serialNum0Str.length}"); // 成品商序列号 var serialNum1 = reply.data.sublist(100, 116); var serialNum1Str = utf8String(serialNum1); state.lockInfo["serialNum1"] = serialNum1Str; - // AppLog.log("serialNum1Str:$serialNum1Str serialNum1Str:${serialNum1Str.length}"); + AppLog.log("成品商序列号 serialNum1Str:$serialNum1Str"); // 蓝牙名称 var btDeviceName = reply.data.sublist(116, 132); var btDeviceNameStr = utf8String(btDeviceName); state.lockInfo["btDeviceName"] = btDeviceNameStr; - // AppLog.log("btDeviceName:$btDeviceName btDeviceNameStr:$btDeviceNameStr btDeviceNameStr:${btDeviceNameStr.length}"); + AppLog.log("蓝牙名称 btDeviceNameStr:$btDeviceNameStr"); // 电池剩余电量 var battRemCap = reply.data[132]; state.lockInfo["electricQuantity"] = battRemCap; - // AppLog.log("battRemCap:$battRemCap"); + AppLog.log("电池剩余电量 battRemCap:$battRemCap"); // 重置次数 var restoreCounter = reply.data.sublist(133, 135); - state.lockInfo["restoreCount"] = - restoreCounter[0] * 256 + restoreCounter[1]; - // AppLog.log("restoreCounter:$restoreCounter"); + state.lockInfo["restoreCount"] = restoreCounter[0] * 256 + restoreCounter[1]; + AppLog.log("重置次数 restoreCounter:${restoreCounter[0] * 256 + restoreCounter[1]}"); // 重置时间 var restoreDate = reply.data.sublist(135, 139); @@ -182,13 +187,13 @@ class NearbyLockLogic extends BaseGetXController { (0xFF & restoreDate[3])); // String restoreDateStr = DateTool().dateToYMDHNSString(restoreDateValue.toString()); state.lockInfo["restoreDate"] = restoreDateValue * 1000; - // AppLog.log("restoreDate:$restoreDate restoreDateValue:$restoreDateValue"); + AppLog.log("重置时间 restoreDateValue:$restoreDateValue"); // 主控芯片型号 var icPartNo = reply.data.sublist(139, 149); var icPartNoStr = utf8String(icPartNo); state.lockInfo["icPartNo"] = icPartNoStr; - // AppLog.log("icPartNo:$icPartNo icPartNoStr:$icPartNoStr"); + AppLog.log("主控芯片型号 icPartNoStr:$icPartNoStr"); // 有效时间 var indate = reply.data.sublist(149, 153); @@ -198,16 +203,19 @@ class NearbyLockLogic extends BaseGetXController { (0xFF & indate[3])); // String indateStr = DateTool().dateToYMDHNSString("$indateValue"); state.lockInfo["indate"] = indateValue * 1000; - // AppLog.log("indate:$indate indateValue:$indateValue"); + AppLog.log("有效时间 indateValue:$indateValue"); // mac地址 var macAddress = reply.data.sublist(153, 173); var macAddressStr = utf8String(macAddress); state.lockInfo["mac"] = macAddressStr; + AppLog.log("mac地址 macAddressStr:$macAddressStr"); var index = 173; // 锁特征值字符串长度 var featureValueLength = reply.data[173]; + AppLog.log("锁特征值字符串长度 featureValueLength:$featureValueLength"); + // 锁特征值说明(本机能支持的功能) // 获取到锁给的字符数组 var featureNetxLength = index + featureValueLength + 1; @@ -222,9 +230,12 @@ class NearbyLockLogic extends BaseGetXController { // List allFeatureValueTwoList = charListChangeIntList(featureValue); // AppLog.log("featureValueLength:$featureValueLength featureValue:$featureValue \n featureValueStr:$featureValueStr"); index = index + featureValueLength + 1; + AppLog.log("锁特征值字符串 featureValueStr:$featureValueStr"); // 使能特征值字符串长度 var featureEnValLength = reply.data[index]; + AppLog.log("使能特征值字符串长度 featureEnValLength:$featureEnValLength"); + // 使能锁特征值说明(本机启用的功能) var featureEnNextLength = index + featureEnValLength + 1; if (reply.data.length < featureEnNextLength) { @@ -238,13 +249,14 @@ class NearbyLockLogic extends BaseGetXController { // List allFeatureEnValTwoList = charListChangeIntList(featureEnVal); // AppLog.log("featureEnValLength:$featureEnValLength featureEnVal:$featureEnVal \n featureEnValStr:$featureEnValStr"); index = index + featureEnValLength + 1; + AppLog.log("使能锁特征值说明 featureEnValStr:$featureEnValStr"); // 支持的带参数特征值的总条目数 // var featureParaTotal = reply.data[index]; var featureParaTotalList = reply.data.sublist(index); state.featureSettingParams = featureParaTotalList; - // AppLog.log("featureParaTotalList:$featureParaTotalList"); + AppLog.log("featureParaTotalList:$featureParaTotalList"); Get.toNamed(Routers.lockAddressGaoDePage, arguments: { "pwdTimestamp": state.timestampValue * 1000, @@ -257,8 +269,6 @@ class NearbyLockLogic extends BaseGetXController { break; case 0x06: //无权限 - AppLog.log("${reply.commandType}需要鉴权"); - var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); // IoSenderManage.senderGetLockStatu( @@ -276,7 +286,6 @@ class NearbyLockLogic extends BaseGetXController { break; default: //失败 - AppLog.log("${reply.commandType}失败"); break; } } @@ -299,10 +308,11 @@ class NearbyLockLogic extends BaseGetXController { // 获取锁状态 Future _getStarLockStatus() async { // 进来之后首先连接 - BlueManage().bludSendData(BlueManage().connectDeviceName, - (BluetoothConnectionState state) async { - if (state == BluetoothConnectionState.connected) { - dismissEasyLoading(); + // BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async { + // if (state == BluetoothConnectionState.connected) { + // dismissEasyLoading(); + + AppLog.log("开始获取锁状态"); var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); // IoSenderManage.senderGetLockStatu( @@ -316,10 +326,10 @@ class NearbyLockLogic extends BaseGetXController { isBeforeAddUser: true, privateKey: getPrivateKeyList, ); - } else if (state == BluetoothConnectionState.disconnected) { - dismissEasyLoading(); - } - }, isAddEquipment: true); + // } else if (state == BluetoothConnectionState.disconnected) { + // dismissEasyLoading(); + // } + // }, isAddEquipment: true); } // late StreamSubscription>_scanListDiscoveredDeviceSubscription; diff --git a/star_lock/lib/mine/addLock/selectLockType/selectLockType_logic.dart b/star_lock/lib/mine/addLock/selectLockType/selectLockType_logic.dart new file mode 100644 index 00000000..6e2e5d1a --- /dev/null +++ b/star_lock/lib/mine/addLock/selectLockType/selectLockType_logic.dart @@ -0,0 +1,29 @@ + +import 'package:star_lock/tools/baseGetXController.dart'; +import 'package:star_lock/tools/commonDataManage.dart'; +import '../../../network/api_repository.dart'; +import 'selectLockType_state.dart'; + +class SelectLockTypeLogic extends BaseGetXController { + SelectLockTypeState state = SelectLockTypeState(); + + void getServerDatetime() async{ + var entity = await ApiRepository.to.getServerDatetimeData( + lockId: CommonDataManage().currentKeyInfo.lockId.toString(), + ); + if(entity.errorCode!.codeIsSuccessful){ + } + } + + @override + void onInit() { + super.onInit(); + + getServerDatetime(); + } + + @override + void onClose() { + super.onClose(); + } +} \ No newline at end of file diff --git a/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart b/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart index bbce8288..eac43537 100644 --- a/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart +++ b/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart @@ -1,18 +1,15 @@ -import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/flavors.dart'; -import 'package:star_lock/tools/appFirstEnterHandle.dart'; -import 'package:star_lock/tools/storage.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; import '../../../baseWidget.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; +import 'selectLockType_logic.dart'; class SelectLockTypePage extends StatefulWidget { const SelectLockTypePage({Key? key}) : super(key: key); @@ -21,8 +18,10 @@ class SelectLockTypePage extends StatefulWidget { State createState() => _SelectLockTypePageState(); } -class _SelectLockTypePageState extends State - with BaseWidget { +class _SelectLockTypePageState extends State with BaseWidget { + final logic = Get.put(SelectLockTypeLogic()); + final state = Get.find().state; + @override Widget build(BuildContext context) { return Scaffold( diff --git a/star_lock/lib/mine/addLock/selectLockType/selectLockType_state.dart b/star_lock/lib/mine/addLock/selectLockType/selectLockType_state.dart new file mode 100644 index 00000000..6efeb4ce --- /dev/null +++ b/star_lock/lib/mine/addLock/selectLockType/selectLockType_state.dart @@ -0,0 +1,6 @@ + + + +class SelectLockTypeState{ + +} \ No newline at end of file diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 1428c012..8b6bf4ed 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -784,7 +784,9 @@ class ApiProvider extends BaseProvider { getServerDatetimeUrl.toUrl, jsonEncode({ 'lockId': lockId, - })); + }), + isUnShowLoading: true + ); // 锁诊断 Future setLockDiagnoseData(