diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index 5d481374..97985703 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -522,5 +522,18 @@ class LockDetailLogic extends BaseGetXController { @override void onInit() { super.onInit(); + state.LockSetChangeSetRefreshLockDetailWithTypeSubscription = eventBus + .on() + .listen((LockSetChangeSetRefreshLockDetailWithType event) { + if (event.type == 4) { + final int electricQuantity = + int.tryParse(event.setResult['electricQuantity']) ?? 0; + state.electricQuantity.value = electricQuantity; + state.keyInfos.value.electricQuantity = electricQuantity; + state.keyInfos.value.electricQuantityDate = + event.setResult['uploadElectricQuantityDate'] ?? 0; + state.keyInfos.refresh(); + } + }); } } diff --git a/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/lib/main/lockDetail/lockDetail/lockDetail_page.dart index e06f5eca..099b1b18 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -29,15 +29,14 @@ import '../../lockMian/entity/lockListInfo_entity.dart'; import 'lockDetail_logic.dart'; class LockDetailPage extends StatefulWidget { + const LockDetailPage( + {required this.isOnlyOneData, + required this.lockListInfoItemEntity, + Key? key}) + : super(key: key); final bool isOnlyOneData; final LockListInfoItemEntity lockListInfoItemEntity; - const LockDetailPage( - {Key? key, - required this.isOnlyOneData, - required this.lockListInfoItemEntity}) - : super(key: key); - @override State createState() => _LockDetailPageState(); } @@ -50,7 +49,6 @@ class _LockDetailPageState extends State @override void initState() { - // TODO: implement initState super.initState(); listeningAnimations(); @@ -1438,8 +1436,9 @@ class _LockDetailPageState extends State state.closedUnlockSuccessfulTimer?.cancel(); _lockRefreshLockDetailInfoDataEvent?.cancel(); state.replySubscription.cancel(); - state.lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent! - .cancel(); + state.lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent + ?.cancel(); + state.LockSetChangeSetRefreshLockDetailWithTypeSubscription?.cancel(); if (state.animationController != null) { state.animationController!.dispose(); state.animationController = null; diff --git a/lib/main/lockDetail/lockDetail/lockDetail_state.dart b/lib/main/lockDetail/lockDetail/lockDetail_state.dart index 8318d96d..80245575 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_state.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_state.dart @@ -12,44 +12,45 @@ class LockDetailState { late StreamSubscription replySubscription; StreamSubscription? lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent; + StreamSubscription? LockSetChangeSetRefreshLockDetailWithTypeSubscription; - String lockNetToken = "0"; + String lockNetToken = '0'; int differentialTime = 0; int lockUserNo = 0; - var senderUserId = 0; - var isOnlyOneData = false; + int senderUserId = 0; + bool isOnlyOneData = false; - var isAttendance = 0.obs; // 是否开启考勤 - var isOpenLockNeedOnline = 0.obs; // APP开锁时是否需联网 - var electricQuantity = 0.obs; // 电量 - var electricQuantityStandby = 0.obs; // 备用电池电量 - var isOpenPassageMode = 0.obs; // 是否开启了常开模式 - var lockAlias = "".obs; // 锁名字 + RxInt isAttendance = 0.obs; // 是否开启考勤 + RxInt isOpenLockNeedOnline = 0.obs; // APP开锁时是否需联网 + RxInt electricQuantity = 0.obs; // 电量 + RxInt electricQuantityStandby = 0.obs; // 备用电池电量 + RxInt isOpenPassageMode = 0.obs; // 是否开启了常开模式 + RxString lockAlias = ''.obs; // 锁名字 // var currentDeviceUUid = "".obs; // 当前设备的uuid - var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var iSClosedUnlockSuccessfulPopup = false.obs; // 是否关闭了开锁成功弹窗 - var iSOpenLock = true.obs; // 是开锁还是关锁 + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + RxBool iSClosedUnlockSuccessfulPopup = false.obs; // 是否关闭了开锁成功弹窗 + RxBool iSOpenLock = true.obs; // 是开锁还是关锁 Timer? closedUnlockSuccessfulTimer; - var bottomBtnisEable = true.obs; // 是否不可用 用于限制底部按钮是否可用 - var openDoorBtnisUneable = true.obs; // 当钥匙状态不能使用的情况下开锁按钮禁止使用,默认可用 + RxBool bottomBtnisEable = true.obs; // 是否不可用 用于限制底部按钮是否可用 + RxBool openDoorBtnisUneable = true.obs; // 当钥匙状态不能使用的情况下开锁按钮禁止使用,默认可用 - var openDoorModel = 0;// 离线开门0, 在线开门2 离线关门32 在线关门34 + int openDoorModel = 0;// 离线开门0, 在线开门2 离线关门32 在线关门34 //过渡动画控制器 AnimationController? animationController; // var lockState = 0.obs;// 0未连接普通状态 1连接开锁中(展示动画) 2已连接开锁成功 3检测可用性 4连接失败 5连接失败重连中 - var openLockBtnState = 0.obs; // 0普通状态(未转动) 1连接中(转动状态) + RxInt openLockBtnState = 0.obs; // 0普通状态(未转动) 1连接中(转动状态) // var connectState = 0.obs;// 0未连接 1连接 final PageController pageController = PageController(); - var currentPage = 0.obs; + RxInt currentPage = 0.obs; - var operateDate = 0; // 按日期查询消息记录的时间戳 - var logCountPage = 10; // 蓝牙记录一页多少个 - var nextAuthTime = 0.obs; // 下次认证时间 + int operateDate = 0; // 按日期查询消息记录的时间戳 + int logCountPage = 10; // 蓝牙记录一页多少个 + RxInt nextAuthTime = 0.obs; // 下次认证时间 // LockDetailState() { // Map map = Get.arguments; // lockCount = map["lockCount"]; diff --git a/lib/main/lockDetail/lockSet/basicInformation/basicInformation/basicInformation_logic.dart b/lib/main/lockDetail/lockSet/basicInformation/basicInformation/basicInformation_logic.dart index 27b818b7..0e783b3f 100755 --- a/lib/main/lockDetail/lockSet/basicInformation/basicInformation/basicInformation_logic.dart +++ b/lib/main/lockDetail/lockSet/basicInformation/basicInformation/basicInformation_logic.dart @@ -20,6 +20,7 @@ class BasicInformationLogic extends BaseGetXController { // 下级界面修改成功后传递数据 StreamSubscription? _passCurrentLockInformationEvent; + StreamSubscription? lockSetChangeSetRefreshLockDetailWithTypeSubscription; void initLoadDataAction(BlockSetStateCallback blockSetStateCallback) { // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus @@ -29,6 +30,19 @@ class BasicInformationLogic extends BaseGetXController { state.lockSetInfoData.value = event.lockSetInfoData; blockSetStateCallback(); }); + + lockSetChangeSetRefreshLockDetailWithTypeSubscription = eventBus + .on() + .listen((LockSetChangeSetRefreshLockDetailWithType event) { + if (event.type == 4) { + final int electricQuantity = + int.tryParse(event.setResult['electricQuantity']) ?? 0; + state.lockBasicInfo.value.electricQuantity = electricQuantity; + state.lockBasicInfo.value.electricQuantityDate = + event.setResult['uploadElectricQuantityDate']; + state.lockBasicInfo.refresh(); + } + }); } @override @@ -43,5 +57,6 @@ class BasicInformationLogic extends BaseGetXController { void onClose() { super.onClose(); _passCurrentLockInformationEvent?.cancel(); + lockSetChangeSetRefreshLockDetailWithTypeSubscription?.cancel(); } } diff --git a/lib/main/lockDetail/lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_logic.dart b/lib/main/lockDetail/lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_logic.dart index 9a921cdd..abf06090 100755 --- a/lib/main/lockDetail/lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_logic.dart +++ b/lib/main/lockDetail/lockSet/basicInformation/uploadElectricQuantity/uploadElectricQuantity_logic.dart @@ -23,19 +23,22 @@ class UploadElectricQuantityLogic extends BaseGetXController { final UploadElectricQuantityState state = UploadElectricQuantityState(); //电量更新请求 - Future uploadElectricQuantityRequest(String electricQuantity, String electricQuantityStandby) async { - final KeyOperationRecordEntity entity = await ApiRepository.to.uploadElectricQuantity( - electricQuantity:electricQuantity, - electricQuantityStandby: electricQuantityStandby, - lockId: state.lockSetInfoData.value.lockId.toString(), - isUnShowLoading: false - ); + Future uploadElectricQuantityRequest( + String electricQuantity, String electricQuantityStandby) async { + final KeyOperationRecordEntity entity = await ApiRepository.to + .uploadElectricQuantity( + electricQuantity: electricQuantity, + electricQuantityStandby: electricQuantityStandby, + lockId: state.lockSetInfoData.value.lockId.toString(), + isUnShowLoading: false); if (entity.errorCode!.codeIsSuccessful) { showToast('锁电量更新成功'.tr, something: () { eventBus .fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); - eventBus.fire( - LockSetChangeSetRefreshLockDetailWithType(4, electricQuantity)); + eventBus.fire(LockSetChangeSetRefreshLockDetailWithType(4, { + 'electricQuantity': electricQuantity, + 'uploadElectricQuantityDate': state.uploadElectricQuantityDate.value, + })); eventBus.fire(RefreshLockListInfoDataEvent()); }); } @@ -57,8 +60,10 @@ class UploadElectricQuantityLogic extends BaseGetXController { (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected) { dismissEasyLoading(); - final List? privateKey = await Storage.getStringList(saveBluePrivateKey); - final List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = + await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = + changeStringListToIntList(privateKey!); IoSenderManage.senderGetStarLockStatuInfo( lockID: BlueManage().connectDeviceName, userID: await Storage.getUid(), @@ -67,7 +72,8 @@ class UploadElectricQuantityLogic extends BaseGetXController { isBeforeAddUser: false, privateKey: getPrivateKeyList, ); - } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { + } else if (deviceConnectionState == + BluetoothConnectionState.disconnected) { dismissEasyLoading(); cancelBlueConnetctToastTimer(); state.sureBtnState.value = 0; @@ -80,6 +86,7 @@ class UploadElectricQuantityLogic extends BaseGetXController { // 获取解析后的数据 late StreamSubscription _replySubscription; + void _initReplySubscription() { _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) { @@ -102,20 +109,27 @@ class UploadElectricQuantityLogic extends BaseGetXController { // 电池剩余电量 final int battRemCap = reply.data[132]; - state.lockSetInfoData.value.lockBasicInfo!.electricQuantity = battRemCap; + state.lockSetInfoData.value.lockBasicInfo!.electricQuantity = + battRemCap; // 备用电池剩余电量 final int battRemCapStandby = reply.data[133]; - state.lockSetInfoData.value.lockBasicInfo!.electricQuantityStandby = battRemCapStandby; + state.lockSetInfoData.value.lockBasicInfo!.electricQuantityStandby = + battRemCapStandby; - state.uploadElectricQuantityDate.value = DateTime.now().millisecondsSinceEpoch; - state.lockSetInfoData.value.lockBasicInfo!.electricQuantityDate = DateTime.now().millisecondsSinceEpoch; - uploadElectricQuantityRequest(battRemCap.toString(), battRemCapStandby.toString()); + state.uploadElectricQuantityDate.value = + DateTime.now().millisecondsSinceEpoch; + state.lockSetInfoData.value.lockBasicInfo!.electricQuantityDate = + DateTime.now().millisecondsSinceEpoch; + uploadElectricQuantityRequest( + battRemCap.toString(), battRemCapStandby.toString()); break; case 0x06: //无权限 - final List? privateKey = await Storage.getStringList(saveBluePrivateKey); - final List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = + await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = + changeStringListToIntList(privateKey!); IoSenderManage.senderGetStarLockStatuInfo( lockID: BlueManage().connectDeviceName, userID: await Storage.getUid(), @@ -125,7 +139,6 @@ class UploadElectricQuantityLogic extends BaseGetXController { privateKey: getPrivateKeyList, ); - break; default: //失败 @@ -134,22 +147,27 @@ class UploadElectricQuantityLogic extends BaseGetXController { } // 从服务器获取锁的时间 开锁时传入 - Future getServerDatetime() async{ - final GetServerDatetimeEntity entity = await ApiRepository.to.getServerDatetimeData(); - if(entity.errorCode!.codeIsSuccessful){ - state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000; + Future getServerDatetime() async { + final GetServerDatetimeEntity entity = + await ApiRepository.to.getServerDatetimeData(); + if (entity.errorCode!.codeIsSuccessful) { + state.differentialTime = entity.data!.date! ~/ 1000 - + DateTime.now().millisecondsSinceEpoch ~/ 1000; // AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}"); } } - int getLocalTime(){ - return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime; + int getLocalTime() { + return DateTime.now().millisecondsSinceEpoch ~/ 1000 + + state.differentialTime; } - int getUTCTime(){ - final DateTime utcTime = DateTime.fromMillisecondsSinceEpoch(getLocalTime()*1000, isUtc: true); + int getUTCTime() { + final DateTime utcTime = + DateTime.fromMillisecondsSinceEpoch(getLocalTime() * 1000, isUtc: true); - final String appointmentDate = DateTool().getYMDHNDateStringWithDateTime(utcTime, 1); + final String appointmentDate = + DateTool().getYMDHNDateStringWithDateTime(utcTime, 1); final int utcTimeValue = DateTool().dateToTimestamp(appointmentDate, 1); AppLog.log('appointmentDate: $appointmentDate utcTimeValue:$utcTimeValue'); return utcTimeValue ~/ 1000; diff --git a/lib/main/lockMian/lockMain/lockMain_page.dart b/lib/main/lockMian/lockMain/lockMain_page.dart index 2d52b952..4400e484 100755 --- a/lib/main/lockMian/lockMain/lockMain_page.dart +++ b/lib/main/lockMian/lockMain/lockMain_page.dart @@ -50,9 +50,13 @@ class _StarLockMainPageState extends State with BaseWidget { if (clearScanDevices) { BlueManage().scanDevices.clear(); } - if (mounted) { + + WidgetsBinding.instance.addPostFrameCallback((_) async { setState(() {}); - } + }); + // if (mounted) { + // setState(() {}); + // } } @override diff --git a/lib/tools/eventBusEventManage.dart b/lib/tools/eventBusEventManage.dart index bf19c88b..c72c44ae 100755 --- a/lib/tools/eventBusEventManage.dart +++ b/lib/tools/eventBusEventManage.dart @@ -77,7 +77,7 @@ class LockGroupEditGroupLockRefreshEvent { /// 锁设置里面开启关闭刷新锁详情 class LockSetChangeSetRefreshLockDetailWithType { int type; // 0 考勤 1开锁时是否需联网 2常开模式 3修改了锁名字 4修改了电量 5远程开锁 - String setResult; + dynamic setResult; LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult); }