diff --git a/images/lan/lan_en.json b/images/lan/lan_en.json index 1438df9e..f902422b 100755 --- a/images/lan/lan_en.json +++ b/images/lan/lan_en.json @@ -883,4 +883,7 @@ "账号格式错误": "The account format is incorrect", "接收者信息为空": "The recipient information is empty", "请输入时间(秒)": "Please enter the time (seconds)", + "加载数据失败": "Failed to load data", + "重试": "Retry", + "升级中,是否退出": "During the upgrade, whether to exit" } diff --git a/images/lan/lan_keys.json b/images/lan/lan_keys.json index 3b8af6e6..8f5845a0 100755 --- a/images/lan/lan_keys.json +++ b/images/lan/lan_keys.json @@ -914,5 +914,8 @@ "新增": "新增", "账号格式错误": "账号格式错误", "接收者信息为空": "接收者信息为空", - "请输入时间(秒)": "请输入时间(秒)" + "请输入时间(秒)": "请输入时间(秒)", + "加载数据失败": "加载数据失败", + "重试": "重试", + "升级中,是否退出": "升级中,是否退出" } diff --git a/images/lan/lan_zh.json b/images/lan/lan_zh.json index 827c2850..12c79ae2 100755 --- a/images/lan/lan_zh.json +++ b/images/lan/lan_zh.json @@ -862,14 +862,12 @@ "五": "五", "六": "六", "日": "日", - "无考勤记录": "无考勤记录", "大家干劲十足": "大家干劲十足", "工作时长未出炉": "工作时长未出炉", "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续", "确认国家或地区": "确认国家或地区", "我知道了": "我知道了", - "新建短信模版": "新建短信模版", "新建邮件模版": "新建邮件模版", "自定义短信模版": "自定义短信模版", @@ -877,10 +875,13 @@ "名称": "名称", "星星锁": "星星锁", "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。", - "开启后,可通过长按锁上的设置键重新上电,用APP重新添加":"开启后,可通过长按锁上的设置键重新上电,用APP重新添加", + "开启后,可通过长按锁上的设置键重新上电,用APP重新添加": "开启后,可通过长按锁上的设置键重新上电,用APP重新添加", "已有": "已有", "新增": "新增", "账号格式错误": "账号格式错误", "接收者信息为空": "接收者信息为空", - "请输入时间(秒)": "请输入时间(秒)" + "请输入时间(秒)": "请输入时间(秒)", + "加载数据失败": "加载数据失败", + "重试": "重试", + "升级中,是否退出": "升级中,是否退出" } diff --git a/lib/blue/io_protocol/io_getStarLockStatusInfo.dart b/lib/blue/io_protocol/io_getStarLockStatusInfo.dart index acdc977b..e527836f 100755 --- a/lib/blue/io_protocol/io_getStarLockStatusInfo.dart +++ b/lib/blue/io_protocol/io_getStarLockStatusInfo.dart @@ -9,12 +9,6 @@ import '../io_type.dart'; import '../sm4Encipher/sm4.dart'; class GetStarLockStatuInfoCommand extends SenderProtocol { - - String? lockID; - String? userID; - int? utcTimeStamp; - int? unixTimeStamp; - List? privateKey; GetStarLockStatuInfoCommand({ this.lockID, this.userID, @@ -23,6 +17,12 @@ class GetStarLockStatuInfoCommand extends SenderProtocol { this.privateKey }) : super(CommandType.readStarLockStatusInfo); + String? lockID; + String? userID; + int? utcTimeStamp; + int? unixTimeStamp; + List? privateKey; + @override String toString() { return 'GetStarLockStatuInfoCommand{lockID: $lockID, ' @@ -32,24 +32,24 @@ class GetStarLockStatuInfoCommand extends SenderProtocol { @override List messageDetail() { - List data = []; - List ebcData = []; + List data = []; + List ebcData = []; // 指令类型 - int type = commandType!.typeValue; - double typeDouble = type / 256; - int type1 = typeDouble.toInt(); - int type2 = type % 256; + final int type = commandType!.typeValue; + final double typeDouble = type / 256; + final int type1 = typeDouble.toInt(); + final int type2 = type % 256; data.add(type1); data.add(type2); // 锁id 40 - int lockIDLength = utf8.encode(lockID!).length; + final int lockIDLength = utf8.encode(lockID!).length; data.addAll(utf8.encode(lockID!)); data = getFixedLengthList(data, 40 - lockIDLength); //userID 要接受钥匙的用户的useid 20 - int userIDLength = utf8.encode(userID!).length; + final int userIDLength = utf8.encode(userID!).length; data.addAll(utf8.encode(userID!)); data = getFixedLengthList(data, 20 - userIDLength); @@ -57,16 +57,16 @@ class GetStarLockStatuInfoCommand extends SenderProtocol { data.add((utcTimeStamp! & 0xff000000) >> 24); data.add((utcTimeStamp! & 0xff0000) >> 16); data.add((utcTimeStamp! & 0xff00) >> 8); - data.add((utcTimeStamp! & 0xff)); + data.add(utcTimeStamp! & 0xff); // endDate 4 data.add((unixTimeStamp! & 0xff000000) >> 24); data.add((unixTimeStamp! & 0xff0000) >> 16); data.add((unixTimeStamp! & 0xff00) >> 8); - data.add((unixTimeStamp! & 0xff)); + data.add(unixTimeStamp! & 0xff); if ((data.length % 16) != 0) { - int add = (16 - data.length % 16); + final int add = 16 - data.length % 16; for (int i = 0; i < add; i++) { data.add(0); } @@ -84,7 +84,7 @@ class GetStarLockStatuInfoReply extends Reply { : super.parseData(commandType, dataDetail) { data = dataDetail; - int status = data[2]; + final int status = data[2]; errorWithStstus(status); } } \ No newline at end of file diff --git a/lib/blue/io_tool/io_tool.dart b/lib/blue/io_tool/io_tool.dart index f8dcc00a..698e33d3 100755 --- a/lib/blue/io_tool/io_tool.dart +++ b/lib/blue/io_tool/io_tool.dart @@ -5,22 +5,22 @@ import 'package:crypto/crypto.dart'; import 'package:flutter/services.dart'; int listChangInt(List list){ - int dataLen = (list[0] << 8) + list[1]; + final int dataLen = (list[0] << 8) + list[1]; return dataLen; } List intChangList(int count){ - List intList = []; - double typeDouble = count / 256; - int type1 = typeDouble.toInt(); - int type2 = count % 256; + final List intList = []; + final double typeDouble = count / 256; + final int type1 = typeDouble.toInt(); + final int type2 = count % 256; intList.add(type1); intList.add(type2); return intList; } List changeIntListToStringList(List list){ - List strList = []; + final List strList = []; for(int i = 0; i changeIntListToStringList(List list){ } List changeStringListToIntList(List list){ - List intList = []; + final List intList = []; for(int i = 0; i changeStringListToIntList(List list){ int _hexToInt(String hex) { int val = 0; - int len = hex.length; + final int len = hex.length; for (int i = 0; i < len; i++) { - int hexDigit = hex.codeUnitAt(i); + final int hexDigit = hex.codeUnitAt(i); if (hexDigit >= 48 && hexDigit <= 57) { val += (hexDigit - 48) * (1 << (4 * (len - 1 - i))); } else if (hexDigit >= 65 && hexDigit <= 70) { @@ -58,8 +58,8 @@ int _hexToInt(String hex) { } String md5Crypto(List data) { - final dig = md5.convert(data); - var keyStr = dig.toString(); + final Digest dig = md5.convert(data); + final String keyStr = dig.toString(); return keyStr.substring(0, 16).toLowerCase(); } @@ -73,8 +73,8 @@ List getFixedLengthList(List data, int length) { //int ---> 指定长度的hex (如指定长度为6的情况,0x000001 0x001234, 0xefab23) String intToFormatHex(int num, int length) { - String hexString = num.toRadixString(16); - String formatString = hexString.padLeft(length, "0"); + final String hexString = num.toRadixString(16); + final String formatString = hexString.padLeft(length, "0"); return formatString; } @@ -82,8 +82,8 @@ String uint8ToHex(Uint8List byteArr) { if (byteArr.isEmpty) { return ""; } - Uint8List result = Uint8List(byteArr.length << 1); - var hexTable = [ + final Uint8List result = Uint8List(byteArr.length << 1); + final List hexTable = [ '0', '1', '2', @@ -101,10 +101,10 @@ String uint8ToHex(Uint8List byteArr) { 'E', 'F' ]; //16进制字符表 - for (var i = 0; i < byteArr.length; i++) { - var bit = byteArr[i]; //取传入的byteArr的每一位 - var index = bit >> 4 & 15; //右移4位,取剩下四位 - var i2 = i << 1; //byteArr的每一位对应结果的两位,所以对于结果的操作位数要乘2 + for (int i = 0; i < byteArr.length; i++) { + final int bit = byteArr[i]; //取传入的byteArr的每一位 + int index = bit >> 4 & 15; //右移4位,取剩下四位 + final int i2 = i << 1; //byteArr的每一位对应结果的两位,所以对于结果的操作位数要乘2 result[i2] = hexTable[index].codeUnitAt(0); //左边的值取字符表,转为Unicode放进resut数组 index = bit & 15; //取右边四位 result[i2 + 1] = @@ -117,8 +117,8 @@ String uint8ToHex(Uint8List byteArr) { int byteInt8(List dataDetail, int index) => _toInt8(dataDetail[index]); int _toInt8(int value) { - var buffer = Int8List(4).buffer; - var bData = ByteData.view(buffer); + final ByteBuffer buffer = Int8List(4).buffer; + final ByteData bData = ByteData.view(buffer); bData.setInt8(0, value); return bData.getInt8(0); } @@ -129,15 +129,15 @@ int _byteInt16(List dataDetail, int index) { return 0; } - int value = (dataDetail[index + 1] & 0xff) << 8 | (dataDetail[index] & 0xff); + final int value = (dataDetail[index + 1] & 0xff) << 8 | (dataDetail[index] & 0xff); return _toInt16(value); } int _toInt16(int value) { - var buffer = Int16List(1).buffer; - var bData = ByteData.view(buffer); + final ByteBuffer buffer = Int16List(1).buffer; + final ByteData bData = ByteData.view(buffer); bData.setInt16(0, value); - int outputValue = bData.getInt16(0); + final int outputValue = bData.getInt16(0); return outputValue; } @@ -146,50 +146,50 @@ int _byteInt32(List dataDetail, int index) { if (checkListIndex(dataDetail, index, 4)) { return 0; } - int value = ((0xFF & dataDetail[(index + 3)]) << 24 | + final int value = (0xFF & dataDetail[(index + 3)]) << 24 | (0xFF & dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | - 0xFF & dataDetail[index]); + 0xFF & dataDetail[index]; return _toInt32(value); } int _toInt32(int value) { - var buffer = Int32List(2).buffer; - var bData = ByteData.view(buffer); + final ByteBuffer buffer = Int32List(2).buffer; + final ByteData bData = ByteData.view(buffer); bData.setInt32(0, value); - int outputValue = bData.getInt32(0); + final int outputValue = bData.getInt32(0); return outputValue; } -List intToInt8List(int value) => [value]; +List intToInt8List(int value) => [value]; -List intToByte2ListHigh(int value) => [value, value >> 8]; +List intToByte2ListHigh(int value) => [value, value >> 8]; //TODO:int->4个字节List 低字节在前,高字节在后(大端存储) 1byte = 8bit List intToByte4ListHigh(int value) => - [value, value >> 8, value >> 16, value >> 24]; + [value, value >> 8, value >> 16, value >> 24]; int byteUInt8(List dataDetail, int index) => _toUInt8(dataDetail[index]); int _toUInt8(int value) { - var buffer = Int8List(1).buffer; - var bData = ByteData.view(buffer); + final ByteBuffer buffer = Int8List(1).buffer; + final ByteData bData = ByteData.view(buffer); bData.setInt8(0, value); return bData.getUint8(0); } int byteUInt16(List dataDetail, int index) => _byteUInt16(dataDetail, index); -_byteUInt16(List dataDetail, int index) { +int _byteUInt16(List dataDetail, int index) { if (checkListIndex(dataDetail, index, 2)) { return 0; } - int value = (dataDetail[index + 1]) << 8 | dataDetail[index]; + final int value = (dataDetail[index + 1]) << 8 | dataDetail[index]; return _toUInt16(value); } int _toUInt16(int value) { - var buffer = Uint16List(2).buffer; - var bData = ByteData.view(buffer); + final ByteBuffer buffer = Uint16List(2).buffer; + final ByteData bData = ByteData.view(buffer); bData.setInt16(0, value); return bData.getUint16(0); } @@ -201,18 +201,18 @@ int _byteUInt32(List dataDetail, int index) { if (checkListIndex(dataDetail, index, 4)) { return 0; } - int value = ((0xFF & dataDetail[(index + 3)]) << 24 | + final int value = (0xFF & dataDetail[(index + 3)]) << 24 | (0xFF & dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | - 0xFF & dataDetail[index]); + 0xFF & dataDetail[index]; return _toUInt32(value); } int _toUInt32(int value) { - var buffer = Int32List(2).buffer; - var bData = ByteData.view(buffer); + final ByteBuffer buffer = Int32List(2).buffer; + final ByteData bData = ByteData.view(buffer); bData.setInt32(0, value); - int outputValue = bData.getUint32(0); + final int outputValue = bData.getUint32(0); return outputValue; } @@ -220,42 +220,42 @@ bool checkListIndex(List dataDetail, int index, int offsetLength) { if (dataDetail == null) { return true; } - var len = dataDetail.length; - bool result = index + offsetLength > len; + final int len = dataDetail.length; + final bool result = index + offsetLength > len; if (result) {} return result; } int checkSum(List data) { int sum = 0; - for (int v in data) { + for (final int v in data) { sum ^= v; } return sum; } Future> loadAssetsFile(String assetsPath) async { - var byteData = await rootBundle.load(assetsPath); + final ByteData byteData = await rootBundle.load(assetsPath); return byteData.buffer.asUint8List().toList(); } //获取截取后的数组 List> splitList(List list, int len) { if (len <= 1) { - return [list]; + return >[list]; } - List> result = []; + final List> result = >[]; int index = 1; while (true) { if (index * len < list.length) { - List temp = list.skip((index - 1) * len).take(len).toList(); + final List temp = list.skip((index - 1) * len).take(len).toList(); result.add(temp); index++; continue; } - List temp = list.skip((index - 1) * len).toList(); + final List temp = list.skip((index - 1) * len).toList(); result.add(temp); break; } @@ -263,11 +263,11 @@ List> splitList(List list, int len) { } //TODO:int->两个字节 List 高字节在前,低字节在后(小端存储) 本工程只有配置 WiFi用到的!!!! -List intToByte2ListLow(int value) => [value >> 8, value]; +List intToByte2ListLow(int value) => [value >> 8, value]; String radixHex16String(List codeUnits) { String result = ''; - for (var value in codeUnits) { + for (final int value in codeUnits) { result += value.toRadixString(16).padLeft(2, '0'); } return result; @@ -275,7 +275,7 @@ String radixHex16String(List codeUnits) { String radixHex16StringTo2String(List codeUnits) { String result = ''; - codeUnits.forEach((value) { + codeUnits.forEach((int value) { result += int.parse(value.toRadixString(16).padLeft(2, '0'),radix: 16).toRadixString(2); }); return result; @@ -283,7 +283,7 @@ String radixHex16StringTo2String(List codeUnits) { String asciiString(List codeUnits) { String result = ''; - for (var value in codeUnits) { + for (final int value in codeUnits) { result += String.fromCharCode(value); } return result; @@ -291,7 +291,7 @@ String asciiString(List codeUnits) { String utf8String(List codeUnits) { codeUnits.reversed; - List uniqueList = []; + final List uniqueList = []; for (int i = 0; i < codeUnits.length; i++) { if (codeUnits[i] != 0) { uniqueList.add(codeUnits[i]); @@ -302,11 +302,13 @@ String utf8String(List codeUnits) { } bool compareTwoList({List? list1, List? list2}) { - if (list1!.length != list2!.length) return false; - int ctn = list1.length; + if (list1!.length != list2!.length) { + return false; + } + final int ctn = list1.length; for (int i = 0; i < ctn; i++) { - int v1 = list1[i]; - int v2 = list2[i]; + final int v1 = list1[i]; + final int v2 = list2[i]; if (v1 != v2) { return false; } diff --git a/lib/main/lockDetail/electronicKey/sendEmailNotification/sendEmailNotification_page.dart b/lib/main/lockDetail/electronicKey/sendEmailNotification/sendEmailNotification_page.dart index c52597a3..c11e0960 100755 --- a/lib/main/lockDetail/electronicKey/sendEmailNotification/sendEmailNotification_page.dart +++ b/lib/main/lockDetail/electronicKey/sendEmailNotification/sendEmailNotification_page.dart @@ -142,8 +142,7 @@ class _SendEmailNotificationPageState extends State { ], ), ), - ); - } + ); } Widget _buildReceiverItemWidget() { return Container( diff --git a/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart b/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart index 4a34e67a..563c9d9e 100755 --- a/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart +++ b/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart @@ -10,11 +10,14 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; import 'package:star_lock/blue/blue_manage.dart'; +import 'package:star_lock/blue/io_protocol/io_getStarLockStatusInfo.dart'; import 'package:star_lock/blue/io_protocol/io_otaUpgrade.dart'; import 'package:star_lock/blue/io_protocol/io_processOtaUpgrade.dart'; import 'package:star_lock/blue/io_reply.dart'; import 'package:star_lock/blue/io_tool/io_tool.dart'; import 'package:star_lock/blue/io_tool/manager_event_bus.dart'; +import 'package:star_lock/blue/sender_manage.dart'; +import 'package:star_lock/main/lockDetail/lockSet/lockEscalation/updateLockInfo_entity.dart'; import 'package:star_lock/main/lockDetail/lockSet/lockEscalation/version_entity.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; @@ -36,6 +39,8 @@ class LockEscalationLogic extends BaseGetXController { int startSecond = 0; Map? headJson; FwVersionEntity? entity; + String model = ''; + String currentVersion = ''; //手动升级 Future otaUpdate() async { @@ -157,7 +162,10 @@ class LockEscalationLogic extends BaseGetXController { // 拦截返回事件 void getBack() { if (state.otaUpdateIng.value) { - closeOTADAta(); + ShowTipView().showIosTipWithContentDialog('升级中,是否退出'.tr, () { + closeOTADAta(); + Get.back(); + }); } else { Get.back(); } @@ -236,20 +244,11 @@ class LockEscalationLogic extends BaseGetXController { //检查最新版本 Future checkUpData() async { - final String model = CommonDataManage().currentKeyInfo.model ?? ''; - String currentVersion = CommonDataManage().currentKeyInfo.fwVersion ?? ''; - if (currentVersion.split('.').length >= 3) { - currentVersion = currentVersion.split('.')[0] + - '.' + - currentVersion.split('.')[1] + - '.' + - currentVersion.split('.')[2]; - } state.showVersion.value = currentVersion; entity = await ApiRepository.to .getFwVersion(model: model, currentVersion: currentVersion); state.isShowUpDataBtn.value = entity?.data?.isUpdate == 1; - state.showNewVersion.value = entity?.data?.version??''; + state.showNewVersion.value = entity?.data?.version ?? ''; } //下载升级 @@ -264,10 +263,75 @@ class LockEscalationLogic extends BaseGetXController { } } + // 获取锁状态 + Future getStarLockStatus() async { + state.loading.value = true; + showBlueConnetctToastTimer(action: () { + state.loading.value = false; + }); + BlueManage().blueSendData(BlueManage().connectDeviceName, + (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected) { + final List? privateKey = + await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = + changeStringListToIntList(privateKey!); + IoSenderManage.senderGetStarLockStatuInfo( + lockID: BlueManage().connectDeviceName, + userID: await Storage.getUid(), + utcTimeStamp: 0, + unixTimeStamp: 0, + isBeforeAddUser: false, + privateKey: getPrivateKeyList); + } else if (deviceConnectionState == + BluetoothConnectionState.disconnected) { + cancelBlueConnetctToastTimer(); + state.loading.value = false; + } + }); + } + + // 获取星锁状态 + Future _replyGetStarLockStatusInfo(Reply reply) async { + final int status = reply.data[2]; + state.loading.value = false; + switch (status) { + case 0x00: + //成功 + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + // 设备型号 + final List modelList = reply.data.sublist(24, 43); + // 设备型号 + final List fwVersion = reply.data.sublist(44, 63); + model = utf8String(modelList); + currentVersion = utf8String(fwVersion); + checkUpData(); + break; + case 0x06: + //无权限 + final List? privateKey = + await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = + changeStringListToIntList(privateKey!); + IoSenderManage.senderGetStarLockStatuInfo( + lockID: BlueManage().connectDeviceName, + userID: await Storage.getUid(), + utcTimeStamp: 0, + unixTimeStamp: 0, + isBeforeAddUser: false, + privateKey: getPrivateKeyList, + ); + break; + default: + //失败 + break; + } + } + @override void onReady() { super.onReady(); - checkUpData(); } @override @@ -288,9 +352,15 @@ class LockEscalationLogic extends BaseGetXController { processOtaUpgrade(); } else if (reply is ConfirmationOTAUpgradeReply && reply.status == 0x00) { closeOTADAta(); + ApiRepository.to.getLockUpdateLockInfo( + lockId: CommonDataManage().currentKeyInfo.lockId ?? 0, + fwVersion: state.showNewVersion.value); showToast('固件升级完成'.tr); + } else if (reply is GetStarLockStatuInfoReply) { + _replyGetStarLockStatusInfo(reply); } }); + getStarLockStatus(); } @override diff --git a/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart b/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart index 949a7e3d..cb8ffcb9 100755 --- a/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart +++ b/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart @@ -40,22 +40,65 @@ class _LockEscalationPageState extends State { } Widget updateView(LockEscalationLogic logic) { + if (logic.state.loading.value) { + return Padding( + padding: EdgeInsets.only(top: 60.h), + child: Align( + alignment: Alignment.topCenter, + child: Column( + children: [ + Text( + '加载数据中'.tr, + style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), + ), + SizedBox( + height: 40.h, + ), + CircularProgressIndicator( + color: AppColors.mainColor, + ), + ], + ), + ), + ); + } if (logic.state.otaUpdateIng.value) { return otaUpdate(logic); } + if (logic.model == '') { + return Padding( + padding: EdgeInsets.only(top: 60.h), + child: Column( + children: [ + Text( + '加载数据失败'.tr, + style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), + ), + SizedBox( + height: 40.h, + ), + SubmitBtn( + btnName: '重试'.tr, + onClick: () { + logic.getStarLockStatus(); + }), + ], + ), + ); + } return defaultUpdate(logic); } //升级 Widget defaultUpdate(LockEscalationLogic logic) { return Column( - children: [ + children: [ SizedBox( height: 60.h, ), Row( mainAxisAlignment: MainAxisAlignment.center, - children: [ + children: [ Image.asset( 'images/main/icon_main_lockSet_lockEscalation.png', width: 36.w, @@ -67,7 +110,8 @@ class _LockEscalationPageState extends State { Obx(() { if (logic.state.isShowUpDataBtn.value) { return Text( - TranslationLoader.lanKeys!.haveNewVersion!.tr + logic.state.showNewVersion.value, + TranslationLoader.lanKeys!.haveNewVersion!.tr + + logic.state.showNewVersion.value, style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), ); @@ -133,7 +177,7 @@ class _LockEscalationPageState extends State { //ota升级 Widget otaUpdate(LockEscalationLogic logic) { return Column( - children: [ + children: [ SizedBox( height: 20.h, ), @@ -178,7 +222,7 @@ class _LockEscalationPageState extends State { padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.h), child: Row( mainAxisSize: MainAxisSize.min, - children: [ + children: [ Text( '固件传输中', style: TextStyle( diff --git a/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_state.dart b/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_state.dart index a182c23a..0bda3bce 100755 --- a/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_state.dart +++ b/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_state.dart @@ -4,6 +4,7 @@ class LockEscalationState { RxBool otaUpdateIng = false.obs; RxDouble otaProgress = 0.00.obs; RxBool isShowUpDataBtn = false.obs; - RxString showVersion = '1.0.0'.obs; - RxString showNewVersion = '1.0.0'.obs; + RxString showVersion = ''.obs; + RxString showNewVersion = ''.obs; + RxBool loading = true.obs; } diff --git a/lib/main/lockDetail/lockSet/lockEscalation/updateLockInfo_entity.dart b/lib/main/lockDetail/lockSet/lockEscalation/updateLockInfo_entity.dart new file mode 100644 index 00000000..6809967d --- /dev/null +++ b/lib/main/lockDetail/lockSet/lockEscalation/updateLockInfo_entity.dart @@ -0,0 +1,25 @@ +class UpdateLockInfoEntity { + UpdateLockInfoEntity( + {this.errorCode, this.description, this.errorMsg, this.data}); + + UpdateLockInfoEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + data = json['data']; + } + + int? errorCode; + String? description; + String? errorMsg; + dynamic data; + + Map toJson() { + final Map data = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + data['data'] = this.data; + return data; + } +} diff --git a/lib/network/api.dart b/lib/network/api.dart index 8bd06dec..b9ff02c2 100755 --- a/lib/network/api.dart +++ b/lib/network/api.dart @@ -256,4 +256,5 @@ abstract class Api { final String checkIpURL = '/checkIp/ip'; final String keyNoticeTemplateURL = '/key/getNoticeTemplate'; //获取电子钥匙通知模板 final String keyNoticeSubmitURL = '/key/noticeSubmit'; //发送短信、邮件通知 + final String lockUpdateLockInfo = '/lock/updateLockInfo'; //更新锁固件版本 } diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 18cfa4b7..6bf76bb6 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -2260,6 +2260,18 @@ class ApiProvider extends BaseProvider { }), isUnShowLoading: true, ); + + Future> getLockUpdateLockInfo( + int lockId, + String fwVersion, + ) => + post( + lockUpdateLockInfo.toUrl, + jsonEncode({ + 'lockId': lockId, + 'fwVersion': fwVersion, + }), + ); } extension ExtensionString on String { diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index 1e04fe9d..b7a46ad1 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -12,6 +12,7 @@ import 'package:star_lock/main/lockDetail/electronicKey/sendEmailNotification/se import 'package:star_lock/main/lockDetail/face/addFace/addFace_entity.dart'; import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprint_entity.dart'; import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart'; +import 'package:star_lock/main/lockDetail/lockSet/lockEscalation/updateLockInfo_entity.dart'; import 'package:star_lock/main/lockDetail/lockSet/lockEscalation/version_entity.dart'; import 'package:star_lock/main/lockDetail/messageWarn/lockUser/lockUser_entity.dart'; import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprintList/coerceFingerprintList_entity.dart'; @@ -2273,4 +2274,14 @@ class ApiRepository { receiverName, lockId, keyId, channelType, openDoorType, templateType); return SendEmailNotificationEntity.fromJson(res.body); } + + // 获取电子钥匙通知模板 + Future getLockUpdateLockInfo({ + required int lockId, + required String fwVersion, + }) async { + final Response res = + await apiProvider.getLockUpdateLockInfo(lockId, fwVersion); + return UpdateLockInfoEntity.fromJson(res.body); + } }