diff --git a/images/lan/lan_en.json b/images/lan/lan_en.json index 09fb7bec..904aa204 100755 --- a/images/lan/lan_en.json +++ b/images/lan/lan_en.json @@ -487,7 +487,7 @@ "未打卡": "No card punched", "钥匙将在": "The key will be in", "天后失效": "Days later invalid", - "锁电量更新时间:": "Lock power update time:", + "电量更新时间:": "Power update time:", "新增配件": "Add accessories", "请在锁旁边完成第一次开锁": "Please complete the first unlock next to the lock", "正在开锁中...": "Unlocking...", diff --git a/images/lan/lan_keys.json b/images/lan/lan_keys.json index e470018b..9999cb3f 100755 --- a/images/lan/lan_keys.json +++ b/images/lan/lan_keys.json @@ -512,7 +512,7 @@ "未打卡":"未打卡", "钥匙将在":"钥匙将在", "天后失效":"天后失效", - "锁电量更新时间:":"锁电量更新时间:", + "电量更新时间:":"电量更新时间:", "新增配件":"新增配件", "请在锁旁边完成第一次开锁":"请在锁旁边完成第一次开锁", "正在开锁中...":"正在开锁中...", diff --git a/images/lan/lan_zh.json b/images/lan/lan_zh.json index c8671034..835dccc8 100755 --- a/images/lan/lan_zh.json +++ b/images/lan/lan_zh.json @@ -487,7 +487,7 @@ "早退": "早退", "钥匙将在": "钥匙将在", "天后失效": "天后失效", - "锁电量更新时间:": "锁电量更新时间:", + "电量更新时间:": "电量更新时间:", "新增配件": "新增配件", "请在锁旁边完成第一次开锁": "请在锁旁边完成第一次开锁", "正在开锁中...": "正在开锁中...", diff --git a/lib/appRouters.dart b/lib/appRouters.dart index d2d4e3c3..77b769b3 100755 --- a/lib/appRouters.dart +++ b/lib/appRouters.dart @@ -178,6 +178,7 @@ import 'mine/mineSet/hideInvalidUnlockPermissions/hideInvalidUnlockPermissions_p import 'mine/mineSet/lockGroup/groupEditLock/groupEditLock_page.dart'; import 'mine/mineSet/lockGroup/lockGroupDetailList/lockItemList_page.dart'; import 'mine/mineSet/lockScreen/lockScreen_page.dart'; +import 'mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart'; import 'mine/mineSet/lockUserManage/lockUserManageList/lockUserManageList_page.dart'; import 'mine/mineSet/lockUserManage/ownedKeyList/ownedKeyList_page.dart'; import 'mine/supportStaff/supportStaff_page.dart'; @@ -380,6 +381,7 @@ abstract class Routers { static const lockUserListPage = '/lockUserListPage'; //锁用户列表 static const administratorDetailsPage = '/administratorDetailsPage'; //管理员详情 static const expireLockManagePage = '/expireLockManagePage'; //即将到期 + static const expireKeyChangeDatePage = '/ExpireKeyChangeDatePage'; //即将到期卡、指纹、遥控钥匙详情修改日期 static const adminDetailChangeDatePage = '/adminDetailChangeDatePage'; //管理员详情修改生效时间 static const adminLockListPage = '/adminLockListPage'; //管理员详情的锁列表 @@ -1072,9 +1074,12 @@ abstract class AppRouters { page: (() => const AdvancedFeaturesWebPage())), GetPage( name: Routers.advancedFunctionRecordPage, - page: (() => const AdvancedFunctionRecordPage())), + page: () => const AdvancedFunctionRecordPage()), GetPage( name: Routers.administratorAssociationLockPage, page: () => const AdministratorAssociationLockPage()), + GetPage( + name: Routers.expireKeyChangeDatePage, + page: () => const ExpireKeyChangeDatePage()), ]; } diff --git a/lib/blue/io_protocol/io_updataLockSet.dart b/lib/blue/io_protocol/io_updataLockSet.dart new file mode 100644 index 00000000..77adbc07 --- /dev/null +++ b/lib/blue/io_protocol/io_updataLockSet.dart @@ -0,0 +1,109 @@ + +import 'dart:convert'; + +import 'package:crypto/crypto.dart' as crypto; + +import '../io_reply.dart'; +import '../io_sender.dart'; +import '../io_tool/io_tool.dart'; +import '../io_type.dart'; +import '../sm4Encipher/sm4.dart'; + +class UpdataLockSetCommand extends SenderProtocol { + + UpdataLockSetCommand({ + this.lockID, + this.keyID, + this.userID, + this.token, + this.needAuthor, + this.signKey, + this.privateKey + }) : super(CommandType.updataLockSet); + String? lockID; + String? keyID; + String? userID; + List? token; + int? needAuthor; + List? signKey; + List? privateKey; + + @override + String toString() { + return 'UpdataLockPasswordListCommand{lockID: $lockID, keyID:$keyID userID: $userID, ' + 'token: $token, ' + 'signKey: $signKey, privateKey: $privateKey}'; + } + + @override + List messageDetail() { + List data = []; + List ebcData = []; + + // 指令类型 + 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 + final int lockIDLength = utf8.encode(lockID!).length; + data.addAll(utf8.encode(lockID!)); + data = getFixedLengthList(data, 40 - lockIDLength); + + //userID 要接受钥匙的用户的useid 20 + final int userIDLength = utf8.encode(userID!).length; + data.addAll(utf8.encode(userID!)); + data = getFixedLengthList(data, 20 - userIDLength); + + // token 长度4 首次请求 Token 填 0,如果锁需要鉴权 操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。 当token失效或者第一次发送的时候token为0 + data.addAll(token!); + + if(needAuthor == 0){ + //AuthCodeLen 1 + data.add(0); + } else { + final List authCodeData = []; + //KeyID + authCodeData.addAll(utf8.encode(lockID!)); + + //UserID + authCodeData.addAll(utf8.encode(userID!)); + + //token 4 首次请求 Token 填 0,如果锁需要鉴权操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。 + authCodeData.addAll(token!); + + authCodeData.addAll(signKey!); + + // 把KeyID、authUserID、时间戳、公钥通过md5加密之后就是authCode + final crypto.Digest authCode = crypto.md5.convert(authCodeData); + + data.add(authCode.bytes.length); + data.addAll(authCode.bytes); + } + + if ((data.length % 16) != 0) { + final int add = 16 - data.length % 16; + for (int i = 0; i < add; i++) { + data.add(0); + } + } + + printLog(data); + // 拿到数据之后通过LockId进行SM4 ECB加密 key:544d485f633335373034383064613864 + ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB); + return ebcData; + } +} + +class UpdataLockSetReply extends Reply { + UpdataLockSetReply.parseData(CommandType commandType, List dataDetail) + : super.parseData(commandType, dataDetail) { + data = dataDetail; + + final int status = data[2]; + errorWithStstus(status); + } +} \ No newline at end of file diff --git a/lib/blue/io_type.dart b/lib/blue/io_type.dart index a1379764..7153475c 100755 --- a/lib/blue/io_type.dart +++ b/lib/blue/io_type.dart @@ -14,6 +14,7 @@ enum CommandType { updataLockFingerprintList, //上传数据-获取锁指纹列表 0x3023 updataLockFaceList, //上传数据-获取锁指纹列表 0x3024 updataLockPalmVeinList, //上传数据-获取锁指纹列表 0x3025 + updataLockSet, //上传数据-获取锁设置 0x302A getLockPublicKey, // 获取锁公钥 = 0x3090 getLockPrivateKey, // 获取锁私钥 = 0x3091 calibrationTime, // 校时 = 0x30f0 @@ -123,6 +124,11 @@ extension ExtensionCommandType on CommandType { type = CommandType.updataLockPalmVeinList; } break; + case 0x302A: + { + type = CommandType.updataLockSet; + } + break; case 0x3030: { type = CommandType.generalExtendedCommond; @@ -217,6 +223,9 @@ extension ExtensionCommandType on CommandType { case CommandType.updataLockPalmVeinList: type = 0x3025; break; + case CommandType.updataLockSet: + type = 0x302A; + break; case CommandType.generalExtendedCommond: type = 0x3030; break; @@ -314,6 +323,9 @@ extension ExtensionCommandType on CommandType { case 0x3025: t = '上传数据获取锁掌静脉列表'; break; + case 0x302A: + t = '上传数据获取锁设置信息'; + break; case 0x3030: t = '通用扩展指令'; break; diff --git a/lib/blue/reciver_data.dart b/lib/blue/reciver_data.dart index 297c81a0..20db084a 100755 --- a/lib/blue/reciver_data.dart +++ b/lib/blue/reciver_data.dart @@ -43,6 +43,7 @@ import 'io_protocol/io_updataLockFaceList.dart'; import 'io_protocol/io_updataLockFingerprintList.dart'; import 'io_protocol/io_updataLockPalmVeinList.dart'; import 'io_protocol/io_updataLockPasswordList.dart'; +import 'io_protocol/io_updataLockSet.dart'; import 'io_reply.dart'; import 'io_protocol/io_senderCustomPasswords.dart'; import 'io_type.dart'; @@ -231,6 +232,11 @@ class CommandReciverManager { reply = UpdataLockPalmVeinListReply.parseData(commandType, data); } break; + case CommandType.updataLockSet: + { + reply = UpdataLockSetReply.parseData(commandType, data); + } + break; case CommandType.generalExtendedCommond: { // 子命令类型 diff --git a/lib/blue/sender_manage.dart b/lib/blue/sender_manage.dart index b76e4e83..e2cd0759 100755 --- a/lib/blue/sender_manage.dart +++ b/lib/blue/sender_manage.dart @@ -41,6 +41,7 @@ import 'io_protocol/io_updataLockFaceList.dart'; import 'io_protocol/io_updataLockFingerprintList.dart'; import 'io_protocol/io_updataLockPalmVeinList.dart'; import 'io_protocol/io_updataLockPasswordList.dart'; +import 'io_protocol/io_updataLockSet.dart'; import 'sender_data.dart'; class IoSenderManage { @@ -440,6 +441,7 @@ class IoSenderManage { required int? needAuthor, required List? signKey, required List? privateKey, + required bool? isBeforeAddUser, CommandSendCallBack? callBack}) { CommandSenderManager().managerSendData( command: SenderAddFingerprintWithTimeCycleCoercionCommand( @@ -461,6 +463,7 @@ class IoSenderManage { signKey: signKey, privateKey: privateKey, ), + isBeforeAddUser: isBeforeAddUser!, callBack: callBack); } @@ -533,6 +536,7 @@ class IoSenderManage { required int? needAuthor, required List? signKey, required List? privateKey, + required bool? isBeforeAddUser, CommandSendCallBack? callBack}) { CommandSenderManager().managerSendData( command: SenderAddICCardWithTimeCycleCoercionCommand( @@ -554,6 +558,7 @@ class IoSenderManage { signKey: signKey, privateKey: privateKey, ), + isBeforeAddUser: isBeforeAddUser!, callBack: callBack); } @@ -597,6 +602,7 @@ class IoSenderManage { required int? needAuthor, required List? signKey, required List? privateKey, + required bool? isBeforeAddUser, CommandSendCallBack? callBack}) { CommandSenderManager().managerSendData( command: SenderAddFaceCommand( @@ -618,6 +624,7 @@ class IoSenderManage { signKey: signKey, privateKey: privateKey, ), + isBeforeAddUser: isBeforeAddUser ?? false, callBack: callBack); } @@ -1317,4 +1324,25 @@ class IoSenderManage { callBack: callBack); } + // 上传数据获取锁设置 + static void updataLockSetCommand( + {required String? lockID, + required String? userID, + required List? token, + required int? needAuthor, + required List? signKey, + required List? privateKey, + CommandSendCallBack? callBack}) { + CommandSenderManager().managerSendData( + command: UpdataLockSetCommand( + lockID: lockID, + userID: userID, + token: token, + needAuthor: needAuthor, + signKey: signKey, + privateKey: privateKey, + ), + callBack: callBack); + } + } diff --git a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart index 91d317a7..88f7c707 100755 --- a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart +++ b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart @@ -88,6 +88,7 @@ class AddICCardLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -180,6 +181,7 @@ class AddICCardLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected){ if(state.ifCurrentScreen.value == true){ diff --git a/lib/main/lockDetail/card/cardDetail/cardDetail_logic.dart b/lib/main/lockDetail/card/cardDetail/cardDetail_logic.dart index c4c4d51f..47402368 100755 --- a/lib/main/lockDetail/card/cardDetail/cardDetail_logic.dart +++ b/lib/main/lockDetail/card/cardDetail/cardDetail_logic.dart @@ -80,6 +80,7 @@ class CardDetailLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -129,6 +130,7 @@ class CardDetailLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); diff --git a/lib/main/lockDetail/card/cardList/cardList_logic.dart b/lib/main/lockDetail/card/cardList/cardList_logic.dart index b1eabbff..f3432d5e 100755 --- a/lib/main/lockDetail/card/cardList/cardList_logic.dart +++ b/lib/main/lockDetail/card/cardList/cardList_logic.dart @@ -86,6 +86,7 @@ class CardListLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -261,6 +262,7 @@ class CardListLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); diff --git a/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_logic.dart b/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_logic.dart index b76786d3..170ea711 100755 --- a/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_logic.dart +++ b/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_logic.dart @@ -84,6 +84,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -133,6 +134,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { @@ -187,6 +189,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -236,6 +239,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -288,6 +292,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -342,6 +347,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); diff --git a/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart b/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart index ab6de185..a0c0908a 100755 --- a/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart +++ b/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart @@ -4,6 +4,7 @@ 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/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_state.dart'; import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; @@ -24,10 +25,9 @@ class OtherTypeKeyChangeDatePage extends StatefulWidget { _OtherTypeKeyChangeDatePageState(); } -class _OtherTypeKeyChangeDatePageState extends State - with RouteAware { - final logic = Get.put(OtherTypeKeyChangeDateLogic()); - final state = Get.find().state; +class _OtherTypeKeyChangeDatePageState extends State with RouteAware { + final OtherTypeKeyChangeDateLogic logic = Get.put(OtherTypeKeyChangeDateLogic()); + final OtherTypeKeyChangeDateState state = Get.find().state; @override Widget build(BuildContext context) { @@ -38,7 +38,7 @@ class _OtherTypeKeyChangeDatePageState extends State "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}", haveBack: true, backgroundColor: AppColors.mainColor, - actionsList: [ + actionsList: [ TextButton( child: Text( TranslationLoader.lanKeys!.sure!.tr, @@ -92,7 +92,7 @@ class _OtherTypeKeyChangeDatePageState extends State Widget buildMainUI() { return Column( - children: [ + children: [ Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, rightTitle: state.beginTime.value, @@ -102,7 +102,7 @@ class _OtherTypeKeyChangeDatePageState extends State PDuration selectDate = PDuration.parse(DateTime.tryParse(state.beginTime.value)); Pickers.showDatePicker(context, - selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { + selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { setState(() { state.beginTime.value = DateTool().getYMDHNDateString(p, 1); }); @@ -116,7 +116,7 @@ class _OtherTypeKeyChangeDatePageState extends State PDuration selectDate = PDuration.parse(DateTime.tryParse(state.endTime.value)); Pickers.showDatePicker(context, - selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { + selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { setState(() { state.endTime.value = DateTool().getYMDHNDateString(p, 1); }); @@ -128,7 +128,6 @@ class _OtherTypeKeyChangeDatePageState extends State @override void didChangeDependencies() { - // TODO: implement didChangeDependencies super.didChangeDependencies(); /// 路由订阅 @@ -137,7 +136,6 @@ class _OtherTypeKeyChangeDatePageState extends State @override void dispose() { - // TODO: implement dispose /// 取消路由订阅 AppRouteObserver().routeObserver.unsubscribe(this); super.dispose(); diff --git a/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_logic.dart b/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_logic.dart index 3cde986b..d4f3d6bd 100755 --- a/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_logic.dart +++ b/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_logic.dart @@ -1,10 +1,9 @@ import 'dart:async'; -import 'dart:ffi'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; -import 'package:star_lock/blue/io_type.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../blue/blue_manage.dart'; @@ -27,7 +26,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // 监听设备返回的数据 late StreamSubscription _replySubscription; void _initReplySubscription() { - _replySubscription = EventBusManager().eventBus!.on().listen((reply) async { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { // 添加卡片开始(重置锁里面所有卡) if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { _replyAddICCardBegin(reply); @@ -47,7 +46,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // 添加人脸开始 Future _replyAddFaceBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch (status) { case 0x00: @@ -59,14 +58,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = reply.data.sublist(5, 9); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderAddFaceCommand( @@ -87,6 +86,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -109,14 +109,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected) { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); IoSenderManage.senderAddFaceCommand( keyID:state.fingerprintItemData.value.faceId!.toString(), @@ -136,6 +136,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { @@ -151,7 +152,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // 添加卡片开始(此处用作删除卡片) Future _replyAddICCardBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch(status){ case 0x00: @@ -162,14 +163,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = reply.data.sublist(5, 9); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( @@ -190,6 +191,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -200,7 +202,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // 添加指纹开始 Future _replyAddFingerprintBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch(status){ case 0x00: //成功 @@ -211,14 +213,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = reply.data.sublist(5, 9); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( @@ -239,6 +241,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -264,14 +267,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // var publicKey = await Storage.getStringList(saveBluePublicKey); // List publicKeyDataList = changeStringListToIntList(publicKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( keyID:state.fingerprintItemData.value.fingerprintId.toString(), @@ -291,6 +294,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -318,14 +322,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected){ - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( keyID:state.fingerprintItemData.value.cardId!.toString(), @@ -345,6 +349,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -359,7 +364,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // 修改指纹信息 void editFingerprintsData() async{ - var entity = await ApiRepository.to.editFingerprintsData( + final LoginEntity entity = await ApiRepository.to.editFingerprintsData( fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(), lockId: state.fingerprintItemData.value.lockId.toString(), weekDay: state.weekDay.value, @@ -376,7 +381,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ if(entity.errorCode!.codeIsSuccessful){ showToast("修改成功".tr, something: (){ eventBus.fire(OtherTypeRefreshListEvent()); - Get.back(result: { + Get.back(result: { "starDate":state.starDateTimestamp.value.toString(), "endDate":state.endDateTimestamp.value.toString(), "starTime":state.starTimeTimestamp.value.toString(), @@ -389,7 +394,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // 编辑iC卡 void editICCardData() async{ - var entity = await ApiRepository.to.editICCardData( + final LoginEntity entity = await ApiRepository.to.editICCardData( cardId: state.fingerprintItemData.value.cardId.toString(), lockId: state.fingerprintItemData.value.lockId.toString(), weekDay: state.weekDay.value, @@ -406,7 +411,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ if(entity.errorCode!.codeIsSuccessful){ showToast("修改成功".tr, something: (){ eventBus.fire(OtherTypeRefreshListEvent()); - Get.back(result: { + Get.back(result: { "starDate":state.starDateTimestamp.value.toString(), "endDate":state.endDateTimestamp.value.toString(), "starTime":state.starTimeTimestamp.value.toString(), @@ -419,7 +424,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ // 修改人脸有效期 void editFaceData() async { - var entity = await ApiRepository.to.updateFaceValidity( + final LoginEntity entity = await ApiRepository.to.updateFaceValidity( lockId: state.fingerprintItemData.value.lockId!, faceId: state.fingerprintItemData.value.faceId!, startDate: state.starDateTimestamp.value, @@ -436,7 +441,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{ if (entity.errorCode!.codeIsSuccessful) { showToast("修改成功", something: () { eventBus.fire(OtherTypeRefreshListEvent()); - Get.back(result: { + Get.back(result: { "starDate":state.starDateTimestamp.value.toString(), "endDate":state.endDateTimestamp.value.toString(), "starTime":state.starTimeTimestamp.value.toString(), diff --git a/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart b/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart index f4674bb8..51f82718 100755 --- a/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart +++ b/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart @@ -1,9 +1,9 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/main/lockDetail/checkingIn/checkingInSet/checkingInSet_state.dart'; import '../../../../appRouters.dart'; @@ -79,7 +79,7 @@ class _CheckingInSetPageState extends State { Obx(() => CommonItem( leftTitel: "${TranslationLoader.lanKeys!.workday!.tr}${TranslationLoader.lanKeys!.set!.tr}", - rightTitle: state.isCustom.value == true ? state.weekDaysStr.value : (state.weekDaysStr.value.length == 5 ? '单休' : '双休'), + rightTitle: state.isCustom.value == true ? state.weekDaysStr.value : (state.weekDays.value.length == 6 ? '单休' : '双休'), isHaveLine: true, isHaveDirection: true, action: () async { @@ -93,6 +93,8 @@ class _CheckingInSetPageState extends State { state.isCustom.value = data['attendanceType']; state.weekDays.value = data['weekDays']; state.weekDaysStr.value = state.weekDays.join(','); + AppLog.log('state.weekDays.value:${state.weekDays.value} state.weekDaysStr.value:${state.weekDaysStr.value}'); + setState(() {}); } })), CommonItem( diff --git a/lib/main/lockDetail/face/addFace/addFace_logic.dart b/lib/main/lockDetail/face/addFace/addFace_logic.dart index 0cbecfd2..2d539952 100755 --- a/lib/main/lockDetail/face/addFace/addFace_logic.dart +++ b/lib/main/lockDetail/face/addFace/addFace_logic.dart @@ -83,6 +83,7 @@ class AddFaceLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -218,6 +219,7 @@ class AddFaceLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { if (state.ifCurrentScreen.value == true) { diff --git a/lib/main/lockDetail/face/faceDetail/faceDetail_logic.dart b/lib/main/lockDetail/face/faceDetail/faceDetail_logic.dart index 7e79a191..774e722f 100755 --- a/lib/main/lockDetail/face/faceDetail/faceDetail_logic.dart +++ b/lib/main/lockDetail/face/faceDetail/faceDetail_logic.dart @@ -77,6 +77,7 @@ class FaceDetailLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -127,6 +128,7 @@ class FaceDetailLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { diff --git a/lib/main/lockDetail/face/faceList/faceList_logic.dart b/lib/main/lockDetail/face/faceList/faceList_logic.dart index 1a166331..8a1bb0fa 100755 --- a/lib/main/lockDetail/face/faceList/faceList_logic.dart +++ b/lib/main/lockDetail/face/faceList/faceList_logic.dart @@ -5,6 +5,7 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; import 'package:star_lock/blue/io_protocol/io_addFace.dart'; import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/main/lockDetail/face/faceList/faceList_state.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../app_settings/app_settings.dart'; @@ -26,8 +27,7 @@ class FaceListLogic extends BaseGetXController { // 获取解析后的数据 late StreamSubscription _replySubscription; void _initReplySubscription() { - _replySubscription = - EventBusManager().eventBus!.on().listen((reply) { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) { // 添加人脸开始(此处用作删除人脸) if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) { _replyAddFaceBegin(reply); @@ -46,7 +46,7 @@ class FaceListLogic extends BaseGetXController { // 添加人脸开始---这里用作删除人脸 Future _replyAddFaceBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch (status) { case 0x00: @@ -61,14 +61,14 @@ class FaceListLogic extends BaseGetXController { break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = reply.data.sublist(5, 9); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderAddFaceCommand( @@ -83,12 +83,13 @@ class FaceListLogic extends BaseGetXController { weekRound:0, // 周循环 startDate: 0x11223344, endDate: 0x11223344, - startTime:"0", - endTime:"0", + startTime:'0', + endTime:'0', needAuthor:1, signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -260,14 +261,14 @@ class FaceListLogic extends BaseGetXController { (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected) { - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderAddFaceCommand( keyID:state.deletKeyID, @@ -281,12 +282,13 @@ class FaceListLogic extends BaseGetXController { weekRound:0, // 周循环 startDate: 0x11223344, endDate: 0x11223344, - startTime:"0", - endTime:"0", + startTime:'0', + endTime:'0', needAuthor:1, signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -300,7 +302,7 @@ class FaceListLogic extends BaseGetXController { // 获取人脸列表 Future getFaceListData() async { - var entity = await ApiRepository.to.getFaceListData( + final FingerprintListDataEntity entity = await ApiRepository.to.getFaceListData( lockId: state.lockId.value.toString(), pageNo: pageNo.toString(), pageSize: pageSize.toString(), @@ -323,16 +325,16 @@ class FaceListLogic extends BaseGetXController { // 删除的人脸 void deletFacesData() async { - var faceId = ""; + String faceId = ''; if (state.isDeletAll == false) { faceId = state.deletKeyID; } - var entity = await ApiRepository.to.deleteFaceData( + final LoginEntity entity = await ApiRepository.to.deleteFaceData( faceId: int.parse(faceId), lockId: state.lockId.value, ); if (entity.errorCode!.codeIsSuccessful) { - showToast("删除成功", something: (){ + showToast('删除成功', something: (){ pageNo = 1; getFaceListData(); }); @@ -341,17 +343,17 @@ class FaceListLogic extends BaseGetXController { // 重置所有的人脸 void clearAllFacesData() async { - var faceId = ""; - var type = "1"; + String faceId = ''; + String type = '1'; if (state.isDeletAll == false) { faceId = state.deletKeyID; - type = "0"; + type = '0'; } - var entity = await ApiRepository.to.clearFaceData( + final LoginEntity entity = await ApiRepository.to.clearFaceData( lockId: state.lockId.value, ); if (entity.errorCode!.codeIsSuccessful) { - showToast("重置成功", something: (){ + showToast('重置成功', something: (){ pageNo = 1; getFaceListData(); }); @@ -360,26 +362,26 @@ class FaceListLogic extends BaseGetXController { String getKeyType(FingerprintItemData fingerprintItemData){ // fingerprintStatus 1:正常 2:失效 - var keyTypeStr = "";// + String keyTypeStr = '';// if(fingerprintItemData.status == 1){ if(fingerprintItemData.startDate! > DateTime.now().millisecondsSinceEpoch){ - keyTypeStr = "未生效".tr; + keyTypeStr = '未生效'.tr; } }else if(fingerprintItemData.status == 2){ - keyTypeStr = "已失效".tr; + keyTypeStr = '已失效'.tr; } return keyTypeStr; } String getKeyDateType(FingerprintItemData fingerprintItemData){ - var keyDateTypeStr = "";// 永久:1;限时2,单次3,循环:4 + String keyDateTypeStr = '';// 永久:1;限时2,单次3,循环:4 if(fingerprintItemData.faceType! == 1){ - keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} 永久"; + keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} 永久'; }else if(fingerprintItemData.faceType! == 2){ - keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时"; + keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时'; }else if(fingerprintItemData.faceType! == 4){ - keyDateTypeStr = "${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环"; + keyDateTypeStr = '${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环'; } return keyDateTypeStr; } @@ -387,7 +389,7 @@ class FaceListLogic extends BaseGetXController { // 监听修改完详情之后刷新列表 late StreamSubscription _teamEvent; void _initRefreshAction() { - _teamEvent = eventBus.on().listen((event) { + _teamEvent = eventBus.on().listen((OtherTypeRefreshListEvent event) { pageNo = 1; getFaceListData(); }); @@ -395,11 +397,10 @@ class FaceListLogic extends BaseGetXController { @override Future onReady() async { - // TODO: implement onReady super.onReady(); // 获取是否是演示模式 演示模式不获取接口 - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { _initReplySubscription(); @@ -409,9 +410,8 @@ class FaceListLogic extends BaseGetXController { @override Future onInit() async { - // TODO: implement onInit super.onInit(); - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { // senderQueryingFingerprintStatus(); // senderCheckingCardStatus(); @@ -422,10 +422,9 @@ class FaceListLogic extends BaseGetXController { @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(); _teamEvent.cancel(); diff --git a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart index f01eb892..12bb3386 100755 --- a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart +++ b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart @@ -3,7 +3,8 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; -import 'package:star_lock/app_settings/app_settings.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; +import 'package:star_lock/main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart'; import 'package:star_lock/tools/dateTool.dart'; import '../../../../../blue/blue_manage.dart'; @@ -24,7 +25,7 @@ class AddFingerprintLogic extends BaseGetXController { // 监听设备返回的数据 late StreamSubscription _replySubscription; void _initReplySubscription() { - _replySubscription = EventBusManager().eventBus!.on().listen((reply) async { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { // 添加指纹开始 if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { _replyAddFingerprintBegin(reply); @@ -43,7 +44,7 @@ class AddFingerprintLogic extends BaseGetXController { } Future _replyAddFingerprintBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch(status){ case 0x00: @@ -59,25 +60,25 @@ class AddFingerprintLogic extends BaseGetXController { break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = reply.data.sublist(5, 9); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( - keyID:"1", + keyID:'1', userID:await Storage.getUid(), fingerNo:0, useCountLimit:0xffff, - isForce:state.isCoerced.value == "2" ? 1 : 0, // 是否是胁迫 - isAdmin: state.isAdministrator.value == "2" ? 1 : 0, + isForce:state.isCoerced.value == '2' ? 1 : 0, // 是否是胁迫 + isAdmin: state.isAdministrator.value == '2' ? 1 : 0, operate: 0, - isRound:state.selectType.value == "2" ? 1: 0, // 是否是循环 + isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环 weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环 startDate: int.parse(state.startDate.value)~/1000, endDate: int.parse(state.endDate.value)~/1000, @@ -87,12 +88,13 @@ class AddFingerprintLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: //失败 state.ifAddState.value = false; - showToast("添加指纹失败", something: (){ + showToast('添加指纹失败', something: (){ Get.back(); }); break; @@ -100,7 +102,7 @@ class AddFingerprintLogic extends BaseGetXController { } Future _replyAddFingerprintProcess(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch(status){ case 0x00: @@ -108,31 +110,31 @@ class AddFingerprintLogic extends BaseGetXController { switch(reply.data[5]){ case 0xff: // 注册指纹失败 - showToast("退出添加".tr); + showToast('退出添加'.tr); state.ifAddState.value = false; Get.close(1); break; case 0xFE: // 管理员已满 - showToast("管理员已满".tr); + showToast('管理员已满'.tr); state.ifAddState.value = false; Get.close(1); break; case 0xFD: // 用户已满 - showToast("用户已满".tr); + showToast('用户已满'.tr); state.ifAddState.value = false; Get.close(1); break; case 0xFC: // 指纹已满 - showToast("锁上面添加指纹已满".tr); + showToast('锁上面添加指纹已满'.tr); state.ifAddState.value = false; Get.close(1); break; case 0xFB: // 指纹已存在 - showToast("指纹已存在".tr); + showToast('指纹已存在'.tr); state.ifAddState.value = false; break; default: @@ -151,13 +153,13 @@ class AddFingerprintLogic extends BaseGetXController { } Future _replyAddFingerprintConfirmation(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch(status){ case 0x00: //成功 // var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString(); - var fingerprintList = reply.data.sublist(reply.data.length - 2); - var fingerprintNum = listChangInt(fingerprintList).toString(); + final List fingerprintList = reply.data.sublist(reply.data.length - 2); + final String fingerprintNum = listChangInt(fingerprintList).toString(); state.regIndex.value++; if(state.fingerprintNumber.value == fingerprintNum){ return; @@ -187,24 +189,24 @@ class AddFingerprintLogic extends BaseGetXController { }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected){ - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( - keyID:"1", + keyID:'1', userID:await Storage.getUid(), fingerNo:0, useCountLimit:0xffff, - isForce:state.isCoerced.value == "2" ? 1 : 0, // 是否是胁迫 - isAdmin: state.isAdministrator.value == "2" ? 1 : 0, + isForce:state.isCoerced.value == '2' ? 1 : 0, // 是否是胁迫 + isAdmin: state.isAdministrator.value == '2' ? 1 : 0, operate: 0, - isRound:state.selectType.value == "2" ? 1: 0, // 是否是循环 + isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环 weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环 startDate: int.parse(state.startDate.value)~/1000, endDate: int.parse(state.endDate.value)~/1000, @@ -214,6 +216,7 @@ class AddFingerprintLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); }else if (deviceConnectionState == BluetoothConnectionState.disconnected){ if(state.ifCurrentScreen.value == true){ @@ -229,17 +232,17 @@ class AddFingerprintLogic extends BaseGetXController { Future senderCancelAddFingerprintCommand() async { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected){ - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderCancelAddFingerprintCommand( - keyID:"1", + keyID:'1', userID:await Storage.getUid(), needAuthor:1, signKey:signKeyDataList, @@ -257,8 +260,8 @@ class AddFingerprintLogic extends BaseGetXController { } // 添加指纹 - void addFingerprintsData() async{ - var entity = await ApiRepository.to.addFingerprintsData( + Future addFingerprintsData() async{ + final AddFingerprintEntity entity = await ApiRepository.to.addFingerprintsData( lockId: state.lockId.value.toString(), endDate: state.endDate.value, addType:state.addType.value, @@ -268,7 +271,7 @@ class AddFingerprintLogic extends BaseGetXController { isCoerced: state.isCoerced.value, startDate: state.startDate.value, weekDay: state.weekDay.value, - fingerRight:state.isAdministrator.value == "2" ? 1 : 0, + fingerRight:state.isAdministrator.value == '2' ? 1 : 0, startTime: int.parse(state.effectiveDateTime.value), endTime: int.parse(state.failureDateTime.value), ); @@ -278,14 +281,14 @@ class AddFingerprintLogic extends BaseGetXController { } // 更新指纹用户账号 - void updateFingerprintUserNoLoadData(String fingerprintId) async{ - var entity = await ApiRepository.to.updateFingerprintUserNoLoadData( + Future updateFingerprintUserNoLoadData(String fingerprintId) async{ + final LoginEntity entity = await ApiRepository.to.updateFingerprintUserNoLoadData( fingerprintId: fingerprintId, lockId: state.lockId.value.toString(), fingerprintUserNo: state.fingerprintNumber.value, ); if(entity.errorCode!.codeIsSuccessful){ - showToast("添加成功".tr, something: (){ + showToast('添加成功'.tr, something: (){ if(state.fromType.value == 2){ // 回调指纹号 eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(state.fingerprintNumber.value)); @@ -299,7 +302,6 @@ class AddFingerprintLogic extends BaseGetXController { @override void onReady() { - // TODO: implement onReady super.onReady(); _initReplySubscription(); @@ -307,7 +309,6 @@ class AddFingerprintLogic extends BaseGetXController { @override void onInit() { - // TODO: implement onInit super.onInit(); senderAddFingerprint(); @@ -315,7 +316,6 @@ class AddFingerprintLogic extends BaseGetXController { @override void onClose() { - // TODO: implement onClose super.onClose(); _replySubscription.cancel(); diff --git a/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_logic.dart b/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_logic.dart index 67989e56..8ebc985d 100755 --- a/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_logic.dart +++ b/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_logic.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart'; @@ -22,7 +23,7 @@ class FingerprintDetailLogic extends BaseGetXController{ // 获取解析后的数据 late StreamSubscription _replySubscription; void _initReplySubscription() { - _replySubscription = EventBusManager().eventBus!.on().listen((reply) { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) { // 添加指纹开始(此处用作修改或者删除指纹) if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { _replyAddFingerprintBegin(reply); @@ -32,7 +33,7 @@ class FingerprintDetailLogic extends BaseGetXController{ // 添加指纹开始 Future _replyAddFingerprintBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch(status){ case 0x00: //成功 @@ -47,17 +48,17 @@ class FingerprintDetailLogic extends BaseGetXController{ break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); // var publicKey = await Storage.getStringList(saveBluePublicKey); // List publicKeyDataList = changeStringListToIntList(publicKey!); - var token = reply.data.sublist(5, 9); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( @@ -78,6 +79,7 @@ class FingerprintDetailLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -100,17 +102,14 @@ class FingerprintDetailLogic extends BaseGetXController{ }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected){ - // var publicKey = await Storage.getStringList(saveBluePublicKey); - // List publicKeyDataList = changeStringListToIntList(publicKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); - - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( keyID:state.keyId.value.toString(), @@ -130,6 +129,7 @@ class FingerprintDetailLogic extends BaseGetXController{ signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -143,38 +143,38 @@ class FingerprintDetailLogic extends BaseGetXController{ } // 删除指纹 - void deletFingerprintsData() async{ - var entity = await ApiRepository.to.deletFingerprintsData( + Future deletFingerprintsData() async{ + final LoginEntity entity = await ApiRepository.to.deletFingerprintsData( fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(), lockId: state.fingerprintItemData.value.lockId.toString(), - type: "0", - deleteType:"1" + type: '0', + deleteType:'1' ); if(entity.errorCode!.codeIsSuccessful){ - showToast("删除成功".tr, something: (){ - Get.back(result: "addScuess"); + showToast('删除成功'.tr, something: (){ + Get.back(result: 'addScuess'); }); } } // 编辑指纹 - void editFingerprintsData() async{ - var entity = await ApiRepository.to.editFingerprintsData( + Future editFingerprintsData() async{ + final LoginEntity entity = await ApiRepository.to.editFingerprintsData( fingerprintId: state.keyId.value.toString(), lockId: state.fingerprintItemData.value.lockId.toString(), weekDay: state.weekDay.value, startDate: state.starDate.value, endDate: state.endDate.value, - isCoerced: state.isStressFingerprint.value ? "2" : "1", + isCoerced: state.isStressFingerprint.value ? '2' : '1', fingerprintName: state.changeNameController.text, - changeType: "1", + changeType: '1', startTime: int.parse(state.startDate.value), endTime: int.parse(state.endTime.value), fingerprintType: state.fingerprintItemData.value.fingerprintType!, fingerRight: state.isAdministrator.value ? 1 : 0, ); if(entity.errorCode!.codeIsSuccessful){ - showToast("修改成功".tr, something: (){ + showToast('修改成功'.tr, something: (){ eventBus.fire(OtherTypeRefreshListEvent()); }); } @@ -183,32 +183,23 @@ class FingerprintDetailLogic extends BaseGetXController{ String getKeyTypeShowDateTime(){ String useDateStr = ''; if(state.keyType.value == 1){ - useDateStr = "永久".tr; + useDateStr = '永久'.tr; }else if(state.keyType.value == 2){ - useDateStr = "${DateTool().dateToYMDHNString(state.starDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}"; + useDateStr = '${DateTool().dateToYMDHNString(state.starDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}'; } else if(state.keyType.value == 4){ - useDateStr = "${DateTool().dateToYMDString(state.starDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}"; + useDateStr = '${DateTool().dateToYMDString(state.starDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}'; }return useDateStr; } @override void onReady() { - // TODO: implement onReady super.onReady(); _initReplySubscription(); } - @override - void onInit() { - // TODO: implement onInit - super.onInit(); - - } - @override void onClose() { - // TODO: implement onClose super.onClose(); _replySubscription.cancel(); diff --git a/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart b/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart index 4bffbc07..22925060 100755 --- a/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart +++ b/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart @@ -3,12 +3,10 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; -import 'package:star_lock/blue/io_type.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart'; -import '../../../../blue/io_protocol/io_checkingUserInfoCount.dart'; -import '../../../../blue/io_protocol/io_queryingFingerprintStatus.dart'; import '../../../../blue/io_reply.dart'; import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/manager_event_bus.dart'; @@ -26,26 +24,26 @@ class FingerprintListLogic extends BaseGetXController{ // 获取解析后的数据 late StreamSubscription _replySubscription; void _initReplySubscription() { - _replySubscription = EventBusManager().eventBus!.on().listen((reply) { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) { // 添加指纹开始(此处用作删除指纹) if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { _replyAddFingerprintBegin(reply); } - if(reply is SenderQueryingFingerprintStatusReply) { - // 获取指纹状态 - _replyQueryingFingerprintStatus(reply); - } - - if(reply is SenderCheckingUserInfoCountReply){ - _replyCheckingUserInfoCount(reply); - } + // if(reply is SenderQueryingFingerprintStatusReply) { + // // 获取指纹状态 + // _replyQueryingFingerprintStatus(reply); + // } + // + // if(reply is SenderCheckingUserInfoCountReply){ + // _replyCheckingUserInfoCount(reply); + // } }); } // 添加指纹开始---这里用作删除指纹 Future _replyAddFingerprintBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch(status){ case 0x00: @@ -56,14 +54,14 @@ class FingerprintListLogic extends BaseGetXController{ break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = reply.data.sublist(5, 9); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( @@ -78,12 +76,13 @@ class FingerprintListLogic extends BaseGetXController{ weekRound:0, // 周循环 startDate: 0x11223344, endDate: 0x11223344, - startTime:"0", - endTime:"0", + startTime:'0', + endTime:'0', needAuthor:1, signKey:signKeyDataList, privateKey:getPrivateKeyList, token: token, + isBeforeAddUser: false ); break; default: @@ -93,154 +92,155 @@ class FingerprintListLogic extends BaseGetXController{ } // 获取指纹状态 - Future _replyQueryingFingerprintStatus(Reply reply) async { - int status = reply.data[2]; - switch(status){ - case 0x00: - //成功 - break; - case 0x06: - //需要鉴权 - break; - default: - //失败 - break; - } - } + // Future _replyQueryingFingerprintStatus(Reply reply) async { + // final int status = reply.data[2]; + // switch(status){ + // case 0x00: + // //成功 + // break; + // case 0x06: + // //需要鉴权 + // break; + // default: + // //失败 + // break; + // } + // } // 获取卡片状态 - Future _replyReferEventRecordNumber(Reply reply) async { - int status = reply.data[2]; - switch(status){ - case 0x00: - //成功 - // _getLockStatus(); - break; - case 0x06: - //无权限 - break; - case 0x07: - //无权限 - break; - case 0x09: - // 权限校验错误 - break; - default: - //失败 - break; - } - } + // Future _replyReferEventRecordNumber(Reply reply) async { + // final int status = reply.data[2]; + // switch(status){ + // case 0x00: + // //成功 + // // _getLockStatus(); + // break; + // case 0x06: + // //无权限 + // break; + // case 0x07: + // //无权限 + // break; + // case 0x09: + // // 权限校验错误 + // break; + // default: + // //失败 + // break; + // } + // } // 查询用户、指纹、密码、卡片数量(用于判断是否同步) - Future _replyCheckingUserInfoCount(Reply reply) async { - int status = reply.data[2]; + // Future _replyCheckingUserInfoCount(Reply reply) async { + // final int status = reply.data[2]; + // + // // 用户数量 + // final int userNum = reply.data[5]; + // + // // 指纹数量 + // final int fingerNum = reply.data[6]; + // + // // 密码数量 + // final int pwdNum = reply.data[7]; + // + // // 卡片数量 + // final int cardNum = reply.data[8]; + // + // // 记录数量 + // final int logsNum = reply.data[9]; + // + // // 版本 + // final int verNo = reply.data[10]; + // + // // 最大管理员指纹数量 + // final int maxAdminFingerNum = reply.data[11]; + // + // // 最大用户指纹数量 + // final int maxUserFingerNum = reply.data[12]; + // + // // 最大管理员密码数量 + // final int maxAdminPassNum = reply.data[13]; + // + // // 最大用户密码数量 + // final int maxUserPassNum = reply.data[14]; + // + // // 最大管理员卡片数量 + // final int maxAdminCardNum = reply.data[15]; + // + // // 最大用户卡片数量 + // final int maxUserCardNum = reply.data[16]; + // + // // 序列号 + // final List serialNo = reply.data.sublist(17, 21); + // + // switch(status){ + // case 0x00: + // //成功 + // // _getLockStatus(); + // break; + // case 0x06: + // //无权限 + // break; + // default: + // //失败 + // break; + // } + // } - // 用户数量 - int userNum = reply.data[5]; - - // 指纹数量 - int fingerNum = reply.data[6]; - - // 密码数量 - int pwdNum = reply.data[7]; - - // 卡片数量 - int cardNum = reply.data[8]; - - // 记录数量 - int logsNum = reply.data[9]; - - // 版本 - int verNo = reply.data[10]; - - // 最大管理员指纹数量 - int maxAdminFingerNum = reply.data[11]; - - // 最大用户指纹数量 - int maxUserFingerNum = reply.data[12]; - - // 最大管理员密码数量 - int maxAdminPassNum = reply.data[13]; - - // 最大用户密码数量 - int maxUserPassNum = reply.data[14]; - - // 最大管理员卡片数量 - int maxAdminCardNum = reply.data[15]; - - // 最大用户卡片数量 - int maxUserCardNum = reply.data[16]; - - // 序列号 - var serialNo = reply.data.sublist(17, 21); - - switch(status){ - case 0x00: - //成功 - // _getLockStatus(); - break; - case 0x06: - //无权限 - break; - default: - //失败 - break; - } - } // 获取指纹状态 - Future senderQueryingFingerprintStatus() async { - BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async { - if (state == BluetoothConnectionState.connected) { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); - - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); - - var publicKey = await Storage.getStringList(saveBluePublicKey); - List getPublicKeyList = changeStringListToIntList(publicKey!); - - IoSenderManage.senderQueryingFingerprintStatusCommand( - keyID:BlueManage().connectDeviceName, - userID:await Storage.getUid(), - role:0xff, - fingerCount:20, - fingerNo:1, - token:getTokenList, - needAuthor:1, - publicKey:getPublicKeyList, - privateKey:getPrivateKeyList, - ); - } - }); - } + // Future senderQueryingFingerprintStatus() async { + // BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async { + // if (state == BluetoothConnectionState.connected) { + // final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + // final List getPrivateKeyList = changeStringListToIntList(privateKey!); + // + // final List? token = await Storage.getStringList(saveBlueToken); + // final List getTokenList = changeStringListToIntList(token!); + // + // final List? publicKey = await Storage.getStringList(saveBluePublicKey); + // final List getPublicKeyList = changeStringListToIntList(publicKey!); + // + // IoSenderManage.senderQueryingFingerprintStatusCommand( + // keyID:BlueManage().connectDeviceName, + // userID:await Storage.getUid(), + // role:0xff, + // fingerCount:20, + // fingerNo:1, + // token:getTokenList, + // needAuthor:1, + // publicKey:getPublicKeyList, + // privateKey:getPrivateKeyList, + // ); + // } + // }); + // } // 查询用户、指纹、密码、卡片数量(用于判断是否同步) - Future senderCheckingUserInfoCount() async { - BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async { - if (state == BluetoothConnectionState.connected) { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); - - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); - - var publicKey = await Storage.getStringList(saveBluePublicKey); - List getPublicKeyList = changeStringListToIntList(publicKey!); - - IoSenderManage.senderCheckingUserInfoCountCommand( - keyID:BlueManage().connectDeviceName, - userID:await Storage.getUid(), - role:0xff, - nowTime:DateTime.now().millisecondsSinceEpoch~/1000, - token:getTokenList, - needAuthor:1, - publicKey:getPublicKeyList, - privateKey:getPrivateKeyList, - ); - } - }); - } + // Future senderCheckingUserInfoCount() async { + // BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async { + // if (state == BluetoothConnectionState.connected) { + // final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + // final List getPrivateKeyList = changeStringListToIntList(privateKey!); + // + // final List? token = await Storage.getStringList(saveBlueToken); + // final List getTokenList = changeStringListToIntList(token!); + // + // final List? publicKey = await Storage.getStringList(saveBluePublicKey); + // final List getPublicKeyList = changeStringListToIntList(publicKey!); + // + // IoSenderManage.senderCheckingUserInfoCountCommand( + // keyID:BlueManage().connectDeviceName, + // userID:await Storage.getUid(), + // role:0xff, + // nowTime:DateTime.now().millisecondsSinceEpoch~/1000, + // token:getTokenList, + // needAuthor:1, + // publicKey:getPublicKeyList, + // privateKey:getPrivateKeyList, + // ); + // } + // }); + // } // 删除指纹 Future senderAddFingerprint() async { @@ -253,14 +253,14 @@ class FingerprintListLogic extends BaseGetXController{ // var publicKey = await Storage.getStringList(saveBluePublicKey); // List publicKeyDataList = changeStringListToIntList(publicKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( keyID:state.deletKeyID, @@ -274,12 +274,13 @@ class FingerprintListLogic extends BaseGetXController{ weekRound:0, // 周循环 startDate: 0x11223344, endDate: 0x11223344, - startTime:"0", - endTime:"0", + startTime:'0', + endTime:'0', needAuthor:1, signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: false ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); @@ -294,7 +295,7 @@ class FingerprintListLogic extends BaseGetXController{ // 获取指纹列表 Future getFingerprintsListData() async{ // state.fingerprintItemListData.value.clear(); - FingerprintListDataEntity entity = await ApiRepository.to.getFingerprintsListData( + final FingerprintListDataEntity entity = await ApiRepository.to.getFingerprintsListData( lockId: state.lockId.value.toString(), pageNo: pageNo.toString(), pageSize: pageSize.toString(), @@ -315,27 +316,27 @@ class FingerprintListLogic extends BaseGetXController{ } // 重置所有的指纹 - void deletAllFingerprintsData() async{ - var fingerprintId = ""; - var type = "1"; + Future deletAllFingerprintsData() async{ + String fingerprintId = ''; + String type = '1'; if(state.isDeletAll == false){ fingerprintId = state.deletKeyID; - type = "0"; + type = '0'; } - var entity = await ApiRepository.to.deletFingerprintsData( + final LoginEntity entity = await ApiRepository.to.deletFingerprintsData( fingerprintId: fingerprintId, lockId: state.lockId.value.toString(), type: type, - deleteType:"1" + deleteType:'1' ); if(entity.errorCode!.codeIsSuccessful){ if(state.isDeletAll == false){ - showToast("删除成功".tr, something:(){ + showToast('删除成功'.tr, something:(){ pageNo = 1; getFingerprintsListData(); }); }else{ - showToast("重置成功".tr, something:(){ + showToast('重置成功'.tr, something:(){ pageNo = 1; getFingerprintsListData(); }); @@ -346,7 +347,7 @@ class FingerprintListLogic extends BaseGetXController{ // 监听修改完详情之后刷新列表 late StreamSubscription _teamEvent; void _initRefreshAction() { - _teamEvent = eventBus.on().listen((event) { + _teamEvent = eventBus.on().listen((OtherTypeRefreshListEvent event) { pageNo = 1; getFingerprintsListData(); }); @@ -354,38 +355,37 @@ class FingerprintListLogic extends BaseGetXController{ String getKeyType(FingerprintItemData fingerprintItemData){ // fingerprintStatus 1:正常 2:失效 - var keyTypeStr = "";// + String keyTypeStr = '';// // (fingerprintItemData.fingerprintType! != 1) ? (fingerprintItemData.endDate! < DateTime.now().millisecondsSinceEpoch ? "已失效" : "") : "" if(fingerprintItemData.fingerprintStatus == 1){ if(fingerprintItemData.startDate! > DateTime.now().millisecondsSinceEpoch){ - keyTypeStr = "未生效".tr; + keyTypeStr = '未生效'.tr; } }else if(fingerprintItemData.fingerprintStatus == 2){ - keyTypeStr = "已失效".tr; + keyTypeStr = '已失效'.tr; } return keyTypeStr; } String getKeyDateType(FingerprintItemData fingerprintItemData){ - var keyDateTypeStr = "";// 永久:1;限时2,单次3,循环:4 + String keyDateTypeStr = '';// 永久:1;限时2,单次3,循环:4 if(fingerprintItemData.fingerprintType! == 1){ keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} ${"永久".tr}"; }else if(fingerprintItemData.fingerprintType! == 2){ - keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时"; + keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时'; }else if(fingerprintItemData.fingerprintType! == 4){ - keyDateTypeStr = "${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环"; + keyDateTypeStr = '${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环'; } return keyDateTypeStr; } @override Future onReady() async { - // TODO: implement onReady super.onReady(); // 获取是否是演示模式 演示模式不获取接口 - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if(isDemoMode == false){ _initReplySubscription(); @@ -395,16 +395,14 @@ class FingerprintListLogic extends BaseGetXController{ @override Future onInit() async { - // TODO: implement onInit super.onInit(); } @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(); _teamEvent.cancel(); diff --git a/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/lib/main/lockDetail/lockDetail/lockDetail_page.dart index 96a038ad..9fc2b0fd 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -510,7 +510,7 @@ class _LockDetailPageState extends State GestureDetector( onTap: () { ShowTipView().showSureAlertDialog( - "${"锁电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}"); + "${"电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}"); }, child: Row( mainAxisAlignment: MainAxisAlignment.end, diff --git a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart index b90056e3..e4134749 100755 --- a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart +++ b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart @@ -9,10 +9,12 @@ import 'package:star_lock/tools/showTipView.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_factoryDataReset.dart'; import '../../../../blue/io_protocol/io_setSupportFunctionsNoParameters.dart'; +import '../../../../blue/io_protocol/io_updataLockSet.dart'; import '../../../../blue/io_reply.dart'; import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../blue/sender_manage.dart'; +import '../../../../login/login/entity/LoginEntity.dart'; import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; import '../../../../tools/commonDataManage.dart'; @@ -55,6 +57,11 @@ class LockSetLogic extends BaseGetXController { // if ((reply is ReadSupportFunctionsNoParametersReply) && (state.settingUpSupportFeatures == 56)) { // _readSupportFunctionsWithParametersReply(reply); // } + + // 上传数据获取锁设置 + if (reply is UpdataLockSetReply && (state.ifCurrentScreen.value == true)) { + _replyUpdataLockSetReply(reply); + } }); } @@ -200,6 +207,32 @@ class LockSetLogic extends BaseGetXController { } } + // 上传数据获取锁设置解析 + Future _replyUpdataLockSetReply(Reply reply) async { + final int status = reply.data[2]; + switch(status){ + case 0x00: + //成功 + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + + _lockDataUpload(uploadType:1, recordType:0, records:reply.data.sublist(7, reply.data.length)); + break; + case 0x06: + //无权限 + final List token = reply.data.sublist(3, 7); + final List saveStrList = changeIntListToStringList(token); + Storage.setStringList(saveBlueToken, saveStrList); + + updataLockSet(token); + break; + default: + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + break; + } + } + // 删除用户 // Future deletUserAction() async { // showEasyLoading(); @@ -553,24 +586,72 @@ class LockSetLogic extends BaseGetXController { } } + // 上传数据获取设置 + Future getUpdataLockSet() async { + // showBlueConnetctToastTimer(action: (){ + // }); + BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { + if (connectionState == BluetoothConnectionState.connected) { + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); + + updataLockSet(getTokenList); + } else if (connectionState == BluetoothConnectionState.disconnected) { + // cancelBlueConnetctToastTimer(); + // if(state.ifCurrentScreen.value == true){ + // showBlueConnetctToast(); + // } + } + }); + } + + // 公共的上传锁设置 + Future updataLockSet(List token) async { + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + IoSenderManage.updataLockSetCommand( + lockID: BlueManage().connectDeviceName, + userID: await Storage.getUid(), + token: token, + needAuthor: 1, + signKey: signKeyDataList, + privateKey: getPrivateKeyList + ); + } + + // 锁数据上传服务器 + Future _lockDataUpload({ + required int uploadType, + required int recordType, + required List records + }) async{ + final LoginEntity entity = await ApiRepository.to.lockDataUpload( + lockId: CommonDataManage().currentKeyInfo.lockId!, + uploadType:uploadType, + recordType: recordType, + records:records, + isUnShowLoading: true + ); + if(entity.errorCode!.codeIsSuccessful){ + + } + } + @override void onReady() { - // TODO: implement onReady super.onReady(); + getUpdataLockSet(); _initReplySubscription(); // _scanListDiscoveredDeviceSubscriptionAction(); } - @override - void onInit() { - // TODO: implement onInit - super.onInit(); - } - @override void onClose() { - // TODO: implement onClose _replySubscription.cancel(); _passCurrentLockInformationEvent!.cancel(); diff --git a/lib/main/lockDetail/lockSet/uploadData/uploadData_logic.dart b/lib/main/lockDetail/lockSet/uploadData/uploadData_logic.dart index e477ba75..614b1594 100644 --- a/lib/main/lockDetail/lockSet/uploadData/uploadData_logic.dart +++ b/lib/main/lockDetail/lockSet/uploadData/uploadData_logic.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/commonDataManage.dart'; @@ -11,6 +12,7 @@ import '../../../../blue/io_protocol/io_updataLockFaceList.dart'; import '../../../../blue/io_protocol/io_updataLockFingerprintList.dart'; import '../../../../blue/io_protocol/io_updataLockPalmVeinList.dart'; import '../../../../blue/io_protocol/io_updataLockPasswordList.dart'; +import '../../../../blue/io_protocol/io_updataLockSet.dart'; import '../../../../blue/io_reply.dart'; import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/manager_event_bus.dart'; @@ -25,66 +27,71 @@ class UploadDataLogic extends BaseGetXController{ // 监听蓝牙协议返回结果 late StreamSubscription _replySubscription; void _initReplySubscription() { - _replySubscription = EventBusManager().eventBus!.on().listen((reply) async { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { // 上传数据获取锁密码列表 if (reply is UpdataLockPasswordListReply && (state.ifCurrentScreen.value == true)) { - _replyupdataLockPasswordListReply(reply); + _replyUpdataLockPasswordListReply(reply); } // 上传数据获取锁卡列表 if (reply is UpdataLockCardListReply && (state.ifCurrentScreen.value == true)) { - _replyupdataLockCardListReply(reply); + _replyUpdataLockCardListReply(reply); } // 上传数据获取锁指纹列表 if (reply is UpdataLockFingerprintListReply && (state.ifCurrentScreen.value == true)) { - _replyupdataLockFingerprintListReply(reply); + _replyUpdataLockFingerprintListReply(reply); } // 上传数据获取锁人脸列表 if (reply is UpdataLockFaceListReply && (state.ifCurrentScreen.value == true)) { - _replyupdataLockFaceListReply(reply); + _replyUpdataLockFaceListReply(reply); } // 上传数据获取锁掌静脉列表 if (reply is UpdataLockPalmVeinListReply && (state.ifCurrentScreen.value == true)) { - _replyupdataLockPalmVeinListReply(reply); + _replyUpdataLockPalmVeinListReply(reply); + } + + // 上传数据获取锁设置 + if (reply is UpdataLockSetReply && (state.ifCurrentScreen.value == true)) { + _replyUpdataLockSetReply(reply); } }); } // 上传数据获取锁密码列表 - Future _replyupdataLockPasswordListReply(Reply reply) async { - int status = reply.data[2]; + Future _replyUpdataLockPasswordListReply(Reply reply) async { + final int status = reply.data[2]; switch(status){ case 0x00: //成功 state.indexCount.value = state.indexCount.value + 1; cancelBlueConnetctToastTimer(); - int dataLength = reply.data[8]; + final int dataLength = reply.data[8]; state.uploadPasswordDataList.addAll(reply.data.sublist(9, reply.data.length)); if(dataLength == 10){ // 当数据是10的时候继续请求 - var token = reply.data.sublist(3, 7); + final List token = reply.data.sublist(3, 7); updataLockPasswordList(token, state.uploadPasswordPage); }else{ dismissEasyLoading(); // 当数据不是10的时候解析数据上传 - if(state.uploadPasswordDataList.isEmpty){ - // 如果是空的直接上传下一个 - getUpdataLockCardList(); - }else{ - // 如果不是空的解析数据上传 + // if(state.uploadPasswordDataList.isEmpty){ + // // 如果是空的直接上传下一个 + // getUpdataLockCardList(); + // }else{ + // // 如果不是空的解析数据上传 _lockDataUpload(uploadType:2, recordType:2, records:state.uploadPasswordDataList); - } + // } } break; case 0x06: //无权限 - var token = reply.data.sublist(3, 7); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(3, 7); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); updataLockPasswordList(token, state.uploadPasswordPage); @@ -99,8 +106,8 @@ class UploadDataLogic extends BaseGetXController{ } // 上传数据获取锁卡列表 - Future _replyupdataLockCardListReply(Reply reply) async { - int status = reply.data[2]; + Future _replyUpdataLockCardListReply(Reply reply) async { + final int status = reply.data[2]; switch(status){ case 0x00: //成功 @@ -108,27 +115,27 @@ class UploadDataLogic extends BaseGetXController{ dismissEasyLoading(); cancelBlueConnetctToastTimer(); - int dataLength = reply.data[8]; + final int dataLength = reply.data[8]; state.uploadCardDataList.addAll(reply.data.sublist(9, reply.data.length)); if(dataLength == 10){ // 当数据是10的时候继续请求 - var token = reply.data.sublist(3, 7); + final List token = reply.data.sublist(3, 7); updataLockCardList(token, state.uploadCardPage); }else{ - // 当数据不是10的时候解析数据上传 - if(state.uploadCardDataList.isEmpty){ - // 如果是空的直接上传下一个 - getUpdataLockFingerprintList(); - }else{ - // 如果不是空的解析数据上传 + // // 当数据不是10的时候解析数据上传 + // if(state.uploadCardDataList.isEmpty){ + // // 如果是空的直接上传下一个 + // getUpdataLockFingerprintList(); + // }else{ + // // 如果不是空的解析数据上传 _lockDataUpload(uploadType:2, recordType:3, records:state.uploadCardDataList); - } + // } } break; case 0x06: //无权限 - var token = reply.data.sublist(3, 7); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(3, 7); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); updataLockCardList(token, state.uploadCardPage); @@ -143,8 +150,8 @@ class UploadDataLogic extends BaseGetXController{ } // 上传数据获取锁指纹列表 - Future _replyupdataLockFingerprintListReply(Reply reply) async { - int status = reply.data[2]; + Future _replyUpdataLockFingerprintListReply(Reply reply) async { + final int status = reply.data[2]; switch(status){ case 0x00: //成功 @@ -152,27 +159,27 @@ class UploadDataLogic extends BaseGetXController{ dismissEasyLoading(); cancelBlueConnetctToastTimer(); - int dataLength = reply.data[8]; + final int dataLength = reply.data[8]; state.uploadFingerprintDataList.addAll(reply.data.sublist(9, reply.data.length)); if(dataLength == 10){ // 当数据是10的时候继续请求 - var token = reply.data.sublist(3, 7); + final List token = reply.data.sublist(3, 7); updataLockFingerprintList(token, state.uploadFingerprintPage); }else{ - // 当数据不是10的时候解析数据上传 - if(state.uploadFingerprintDataList.isEmpty){ - // 如果是空的直接上传下一个 - getUpdataLockFaceList(); - }else{ - // 如果不是空的解析数据上传 + // // 当数据不是10的时候解析数据上传 + // if(state.uploadFingerprintDataList.isEmpty){ + // // 如果是空的直接上传下一个 + // getUpdataLockFaceList(); + // }else{ + // // 如果不是空的解析数据上传 _lockDataUpload(uploadType:2, recordType:4, records:state.uploadFingerprintDataList); - } + // } } break; case 0x06: //无权限 - var token = reply.data.sublist(3, 7); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(3, 7); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); updataLockFingerprintList(token, state.uploadFingerprintPage); @@ -187,8 +194,8 @@ class UploadDataLogic extends BaseGetXController{ } // 上传数据获取锁人脸列表解析 - Future _replyupdataLockFaceListReply(Reply reply) async { - int status = reply.data[2]; + Future _replyUpdataLockFaceListReply(Reply reply) async { + final int status = reply.data[2]; switch(status){ case 0x00: //成功 @@ -196,27 +203,27 @@ class UploadDataLogic extends BaseGetXController{ dismissEasyLoading(); cancelBlueConnetctToastTimer(); - int dataLength = reply.data[8]; + final int dataLength = reply.data[8]; state.uploadFaceDataList.addAll(reply.data.sublist(9, reply.data.length)); if(dataLength == 10){ // 当数据是10的时候继续请求 - var token = reply.data.sublist(3, 7); + final List token = reply.data.sublist(3, 7); updataLockFaceList(token, state.uploadFacePage); }else{ - // 当数据不是10的时候解析数据上传 - if(state.uploadFaceDataList.isEmpty){ - // 如果是空的直接上传下一个 - getUpdataLockPalmVeinList(); - }else{ + // // 当数据不是10的时候解析数据上传 + // if(state.uploadFaceDataList.isEmpty){ + // // 如果是空的直接上传下一个 + // getUpdataLockPalmVeinList(); + // }else{ // 如果不是空的解析数据上传 _lockDataUpload(uploadType:2, recordType:5, records:state.uploadFaceDataList); - } + // } } break; case 0x06: //无权限 - var token = reply.data.sublist(3, 7); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(3, 7); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); updataLockFaceList(token, state.uploadFacePage); @@ -231,8 +238,8 @@ class UploadDataLogic extends BaseGetXController{ } // 上传数据获取锁掌静脉列表解析 - Future _replyupdataLockPalmVeinListReply(Reply reply) async { - int status = reply.data[2]; + Future _replyUpdataLockPalmVeinListReply(Reply reply) async { + final int status = reply.data[2]; switch(status){ case 0x00: //成功 @@ -240,30 +247,27 @@ class UploadDataLogic extends BaseGetXController{ dismissEasyLoading(); cancelBlueConnetctToastTimer(); - state.sureBtnState.value = 0; - state.indexCount.value = 0; - - int dataLength = reply.data[8]; + final int dataLength = reply.data[8]; state.uploadPalmVeinDataList.addAll(reply.data.sublist(9, reply.data.length)); if(dataLength == 10){ // 当数据是10的时候继续请求 - var token = reply.data.sublist(3, 7); + final List token = reply.data.sublist(3, 7); updataLockPalmVeinList(token, state.uploadPalmVeinPage); }else{ - // 当数据不是10的时候解析数据上传 - if(state.uploadPalmVeinDataList.isEmpty){ - // 不需要上传 如果是空的直接上传下一个 - showToast("上传成功"); - }else{ - // 如果不是空的解析数据上传 + // // 当数据不是10的时候解析数据上传 + // if(state.uploadPalmVeinDataList.isEmpty){ + // // 不需要上传 如果是空的直接上传下一个 + // getUpdataLockSet(); + // }else{ + // // 如果不是空的解析数据上传 _lockDataUpload(uploadType:2, recordType:6, records:state.uploadPalmVeinDataList); - } + // } } break; case 0x06: //无权限 - var token = reply.data.sublist(3, 7); - var saveStrList = changeIntListToStringList(token); + final List token = reply.data.sublist(3, 7); + final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); updataLockPalmVeinList(token, state.uploadPalmVeinPage); @@ -277,6 +281,36 @@ class UploadDataLogic extends BaseGetXController{ } } + // 上传数据获取锁设置解析 + Future _replyUpdataLockSetReply(Reply reply) async { + final int status = reply.data[2]; + switch(status){ + case 0x00: + //成功 + state.indexCount.value = state.indexCount.value + 1; + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + + state.uploadLockSetDataList.addAll(reply.data.sublist(7, reply.data.length)); + _lockDataUpload(uploadType:1, recordType:0, records:state.uploadLockSetDataList); + break; + case 0x06: + //无权限 + final List token = reply.data.sublist(3, 7); + final List saveStrList = changeIntListToStringList(token); + Storage.setStringList(saveBlueToken, saveStrList); + + updataLockSet(token); + break; + default: + dismissEasyLoading(); + state.sureBtnState.value = 0; + state.indexCount.value = 0; + cancelBlueConnetctToastTimer(); + break; + } + } + // 上传数据获取锁密码列表 Future getUpdataLockPasswordList() async { if(state.sureBtnState.value == 1){ @@ -291,8 +325,8 @@ class UploadDataLogic extends BaseGetXController{ }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected) { - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); updataLockPasswordList(getTokenList, state.uploadPasswordPage); } else if (connectionState == BluetoothConnectionState.disconnected) { @@ -308,11 +342,11 @@ class UploadDataLogic extends BaseGetXController{ // 公共的获取密码列表 Future updataLockPasswordList(List token, int page) async { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); IoSenderManage.updataLockPasswordListCommand( lockID: BlueManage().connectDeviceName, @@ -336,8 +370,8 @@ class UploadDataLogic extends BaseGetXController{ }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected) { - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); updataLockCardList(getTokenList, state.uploadCardPage); } else if (connectionState == BluetoothConnectionState.disconnected) { @@ -354,11 +388,11 @@ class UploadDataLogic extends BaseGetXController{ // 公共的获取Card列表 Future updataLockCardList(List token, int page) async { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); IoSenderManage.updataLockCardListCommand( lockID: BlueManage().connectDeviceName, @@ -382,8 +416,8 @@ class UploadDataLogic extends BaseGetXController{ }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected) { - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); updataLockFingerprintList(getTokenList, state.uploadFingerprintPage); } else if (connectionState == BluetoothConnectionState.disconnected) { @@ -400,11 +434,11 @@ class UploadDataLogic extends BaseGetXController{ // 公共的获取指纹列表 Future updataLockFingerprintList(List token, int page) async { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); IoSenderManage.updataLockFingerprintListCommand( lockID: BlueManage().connectDeviceName, @@ -428,8 +462,8 @@ class UploadDataLogic extends BaseGetXController{ }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected) { - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); updataLockFaceList(getTokenList, state.uploadFacePage); } else if (connectionState == BluetoothConnectionState.disconnected) { @@ -446,11 +480,11 @@ class UploadDataLogic extends BaseGetXController{ // 公共的获取人脸列表 Future updataLockFaceList(List token, int page) async { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); IoSenderManage.updataLockFaceListCommand( lockID: BlueManage().connectDeviceName, @@ -475,8 +509,8 @@ class UploadDataLogic extends BaseGetXController{ }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected) { - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); updataLockPalmVeinList(getTokenList, state.uploadPalmVeinPage); } else if (connectionState == BluetoothConnectionState.disconnected) { @@ -493,11 +527,11 @@ class UploadDataLogic extends BaseGetXController{ // 公共的获取掌静脉列表 Future updataLockPalmVeinList(List token, int page) async { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); IoSenderManage.updataLockPalmVeinListCommand( lockID: BlueManage().connectDeviceName, @@ -511,22 +545,70 @@ class UploadDataLogic extends BaseGetXController{ ); } + + // 上传数据获取设置 + Future getUpdataLockSet() async { + showEasyLoading(); + showBlueConnetctToastTimer(action: (){ + dismissEasyLoading(); + state.indexCount.value = 0; + state.sureBtnState.value = 0; + }); + BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { + if (connectionState == BluetoothConnectionState.connected) { + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); + + updataLockSet(getTokenList); + } else if (connectionState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + state.sureBtnState.value = 0; + state.indexCount.value = 0; + if(state.ifCurrentScreen.value == true){ + showBlueConnetctToast(); + } + } + }); + } + + // 公共的上传锁设置 + Future updataLockSet(List token) async { + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + IoSenderManage.updataLockSetCommand( + lockID: BlueManage().connectDeviceName, + userID: await Storage.getUid(), + token: token, + needAuthor: 1, + signKey: signKeyDataList, + privateKey: getPrivateKeyList + ); + } + // 锁数据上传服务器 Future _lockDataUpload({ required int uploadType, required int recordType, required List records }) async{ - var entity = await ApiRepository.to.lockDataUpload( + final LoginEntity entity = await ApiRepository.to.lockDataUpload( lockId: CommonDataManage().currentKeyInfo.lockId!, uploadType:uploadType, recordType: recordType, - records:records + records:records, + isUnShowLoading: false ); if(entity.errorCode!.codeIsSuccessful){ if(uploadType == 1){ // 1设置 - + state.indexCount.value = 0; + state.sureBtnState.value = 0; + showToast('上传成功'); }else{ // 2开门方式 switch(recordType){ @@ -535,26 +617,24 @@ class UploadDataLogic extends BaseGetXController{ // // break; case 2: - // 密码 + // 密码上传成功之后,获取卡列表 getUpdataLockCardList(); break; case 3: - // IC卡 + // IC卡上传成功,获取指纹列表 getUpdataLockFingerprintList(); break; case 4: - // 指纹 + // 指纹上传成功,获取人脸列表 getUpdataLockFaceList(); break; case 5: - // 人脸 + // 人脸上传成功,获取掌静脉列表 getUpdataLockPalmVeinList(); break; case 6: - // 掌静脉 - state.indexCount.value = 0; - state.sureBtnState.value = 0; - showToast("上传成功"); + // 掌静脉上传成功,获取锁设置 + getUpdataLockSet(); break; default: break; @@ -568,7 +648,6 @@ class UploadDataLogic extends BaseGetXController{ @override void onReady() { - // TODO: implement onReady super.onReady(); _initReplySubscription(); @@ -576,16 +655,8 @@ class UploadDataLogic extends BaseGetXController{ // getUpdataLockPalmVeinList(); } - @override - void onInit() { - // TODO: implement onInit - super.onInit(); - - } - @override void onClose() { - // TODO: implement onClose super.onClose(); _replySubscription.cancel(); diff --git a/lib/main/lockDetail/lockSet/uploadData/uploadData_page.dart b/lib/main/lockDetail/lockSet/uploadData/uploadData_page.dart index eb700861..e4a24f6e 100755 --- a/lib/main/lockDetail/lockSet/uploadData/uploadData_page.dart +++ b/lib/main/lockDetail/lockSet/uploadData/uploadData_page.dart @@ -2,6 +2,7 @@ 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/main/lockDetail/lockSet/uploadData/uploadData_state.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/appRouteObserver.dart'; @@ -18,8 +19,8 @@ class UploadDataPage extends StatefulWidget { } class _UploadDataPageState extends State with RouteAware{ - final logic = Get.put(UploadDataLogic()); - final state = Get.find().state; + final UploadDataLogic logic = Get.put(UploadDataLogic()); + final UploadDataState state = Get.find().state; @override Widget build(BuildContext context) { @@ -29,30 +30,31 @@ class _UploadDataPageState extends State with RouteAware{ body:Container( padding: EdgeInsets.all(30.w), child: Column( - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Expanded(child: Text(TranslationLoader.lanKeys!.uploadDataTip!.tr, style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor),)), ], ), SizedBox(height: 30.h,), - Obx(() => SubmitBtn(btnName: state.indexCount.value == 0 ? TranslationLoader.lanKeys!.begin!.tr : "${TranslationLoader.lanKeys!.begin!.tr}(${state.indexCount.value}/5)", + Obx(() => SubmitBtn(btnName: state.indexCount.value == 0 ? TranslationLoader.lanKeys!.begin!.tr : '${TranslationLoader.lanKeys!.begin!.tr}(${state.indexCount.value}/6)', borderRadius: 20.w, fontSize: 24.sp, // margin: EdgeInsets.only(left: 03.w, right: 30.w, top: 20.w), padding: EdgeInsets.only(top: 20.w, bottom: 20.w), onClick: () { state.uploadPasswordPage = 0; - state.uploadPasswordDataList = []; + state.uploadPasswordDataList.clear(); state.uploadCardPage = 0; - state.uploadCardDataList = []; + state.uploadCardDataList.clear(); state.uploadFingerprintPage = 0; - state.uploadFingerprintDataList = []; + state.uploadFingerprintDataList.clear(); state.uploadFacePage = 0; - state.uploadFaceDataList = []; + state.uploadFaceDataList.clear(); state.uploadPalmVeinPage = 0; - state.uploadPalmVeinDataList = []; + state.uploadPalmVeinDataList.clear(); + state.uploadLockSetDataList.clear(); logic.getUpdataLockPasswordList(); } @@ -65,7 +67,6 @@ class _UploadDataPageState extends State with RouteAware{ @override void didChangeDependencies() { - // TODO: implement didChangeDependencies super.didChangeDependencies(); /// 路由订阅 @@ -74,7 +75,6 @@ class _UploadDataPageState extends State with RouteAware{ @override void dispose() { - // TODO: implement dispose /// 取消路由订阅 AppRouteObserver().routeObserver.unsubscribe(this); super.dispose(); @@ -94,14 +94,9 @@ class _UploadDataPageState extends State with RouteAware{ super.didPop(); logic.cancelBlueConnetctToastTimer(); - if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); - // if (state.deletWaitScanTimer != null) { - // state.deletWaitScanTimer!.cancel(); - // } - // if (state.deletWaitScanCompleter != null && - // !state.deletWaitScanCompleter!.isCompleted) { - // state.deletWaitScanCompleter!.complete(); - // } + if (EasyLoading.isShow) { + EasyLoading.dismiss(animation: true); + } state.ifCurrentScreen.value = false; } @@ -119,7 +114,9 @@ class _UploadDataPageState extends State with RouteAware{ super.didPushNext(); logic.cancelBlueConnetctToastTimer(); - if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); + if (EasyLoading.isShow) { + EasyLoading.dismiss(animation: true); + } state.ifCurrentScreen.value = false; } } diff --git a/lib/main/lockDetail/lockSet/uploadData/uploadData_state.dart b/lib/main/lockDetail/lockSet/uploadData/uploadData_state.dart index 8481c4a9..05b700b4 100644 --- a/lib/main/lockDetail/lockSet/uploadData/uploadData_state.dart +++ b/lib/main/lockDetail/lockSet/uploadData/uploadData_state.dart @@ -2,24 +2,26 @@ import 'package:get/get.dart'; class UploadDataState{ - var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) - var countReq = 10;// 每次请求的数量 - var indexCount = 0.obs;// 用来显示按钮的索引 0/5 + int countReq = 10;// 每次请求的数量 + RxInt indexCount = 0.obs;// 用来显示按钮的索引 0/5 - var uploadPasswordPage = 0;// 上传密码的页数 - List uploadPasswordDataList = [];// 上传密码的数据 + int uploadPasswordPage = 0;// 上传密码的页数 + List uploadPasswordDataList = [];// 上传密码的数据 - var uploadCardPage = 0;// 上传卡片的页数 - List uploadCardDataList = [];// 上传卡片的数据 + int uploadCardPage = 0;// 上传卡片的页数 + List uploadCardDataList = [];// 上传卡片的数据 - var uploadFingerprintPage = 0;// 上传指纹的页数 - List uploadFingerprintDataList = [];// 上传指纹的数据 + int uploadFingerprintPage = 0;// 上传指纹的页数 + List uploadFingerprintDataList = [];// 上传指纹的数据 - var uploadFacePage = 0;// 上传人脸的页数 - List uploadFaceDataList = [];// 上传人脸的数据 + int uploadFacePage = 0;// 上传人脸的页数 + List uploadFaceDataList = [];// 上传人脸的数据 - var uploadPalmVeinPage = 0;// 上传掌静脉的页数 - List uploadPalmVeinDataList = [];// 上传掌静脉的数据 + int uploadPalmVeinPage = 0;// 上传掌静脉的页数 + List uploadPalmVeinDataList = [];// 上传掌静脉的数据 + + List uploadLockSetDataList = [];// 上传锁设置数据 } \ No newline at end of file diff --git a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart index 0d4855be..9f4185a0 100755 --- a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart +++ b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart @@ -1,3 +1,4 @@ + import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; @@ -49,12 +50,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController { Storage.setStringList(saveBlueToken, saveStrList); IoSenderManage.senderCustomPasswordsCommand( - keyID:state.itemData.value.keyboardPwdId!.toString(), + keyID:state.keyboardPwdId.toString(), userID:await Storage.getUid(), - pwdNo: state.itemData.value.pwdUserNo!, - pwd: state.itemData.value.keyboardPwd!.toString(), + pwdNo: state.pwdUserNo, + pwd: state.keyboardPwd, operate: 1, - isAdmin: state.itemData.value.pwdUserNo!, + isAdmin: state.pwdRight, useCountLimit: 0xffff, startTime:DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1) ~/ 1000, endTime:DateTool().dateToTimestamp(state.selectFailureDate.value, 1) ~/ 1000, @@ -89,18 +90,18 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController { } final PasswordKeyEntity entity = await ApiRepository.to.updatePasswordKey( - lockId: state.itemData.value.lockId!, - keyboardPwdId: state.itemData.value.keyboardPwdId.toString(), - keyboardPwdName: state.itemData.value.keyboardPwdName!, - newKeyboardPwd: state.itemData.value.keyboardPwd!, + lockId: state.lockId, + keyboardPwdId: state.keyboardPwdId.toString(), + keyboardPwdName: state.keyboardPwdName, + newKeyboardPwd: state.keyboardPwd, startDate: beginTimeTimestamp, endDate: endTimeTimestamp, changeType: '1', - hoursStart: state.itemData.value.hoursStart!, - hoursEnd: state.itemData.value.hoursEnd!, + hoursStart: state.hoursStart, + hoursEnd: state.hoursEnd, isCoerced: '1', keyboardPwdType: 3, - pwdRight: state.itemData.value.pwdRight!); + pwdRight: state.pwdRight); if (entity.errorCode!.codeIsSuccessful) { showToast('修改成功', something: (){ eventBus.fire(GetPasswordListRefreshUI()); @@ -115,13 +116,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController { // 设置自定义密码 这里用作修改或者删除密码 Future senderCustomPasswords() async { - showEasyLoading(); showBlueConnetctToastTimer(action: (){ dismissEasyLoading(); state.sureBtnState.value = 0; }); - BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { + BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected) { final List? signKey = await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); @@ -133,12 +133,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController { final List getTokenList = changeStringListToIntList(token!); IoSenderManage.senderCustomPasswordsCommand( - keyID:state.itemData.value.keyboardPwdId!.toString(), + keyID:state.keyboardPwdId.toString(), userID:await Storage.getUid(), - pwdNo: state.itemData.value.pwdUserNo!, - pwd: state.itemData.value.keyboardPwd!.toString(), + pwdNo: state.pwdUserNo, + pwd: state.keyboardPwd.toString(), operate: 1, - isAdmin: state.itemData.value.pwdRight!, + isAdmin: state.pwdRight, useCountLimit: 0xffff, startTime:DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1) ~/ 1000, endTime:DateTool().dateToTimestamp(state.selectFailureDate.value, 1) ~/ 1000, diff --git a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart index 62ec91fc..b3941e90 100755 --- a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart +++ b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart @@ -1,9 +1,9 @@ -import 'package:date_format/date_format.dart'; + import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart'; +import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_state.dart'; import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; @@ -23,34 +23,32 @@ class PasswordKeyDetailChangeDatePage extends StatefulWidget { _PasswordKeyDetailChangeDatePage(); } -class _PasswordKeyDetailChangeDatePage - extends State with RouteAware { - final logic = Get.put(PasswordKeyDetailChangeDateLogic()); - final state = Get.find().state; +class _PasswordKeyDetailChangeDatePage extends State with RouteAware { + final PasswordKeyDetailChangeDateLogic logic = Get.put(PasswordKeyDetailChangeDateLogic()); + final PasswordKeyDetailChangeDateState state = Get.find().state; @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( - barTitle: - "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}", + barTitle: '${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}', haveBack: true, backgroundColor: AppColors.mainColor, - actionsList: [ + actionsList: [ TextButton( child: Text( TranslationLoader.lanKeys!.sure!.tr, style: TextStyle(color: Colors.white, fontSize: 24.sp), ), onPressed: () { - if (state.itemData.value.startDate! >= state.itemData.value.endDate!) { - logic.showToast("失效时间要大于生效时间".tr); + if (state.startDate >= state.endDate) { + logic.showToast('失效时间要大于生效时间'.tr); return; } - if (DateTime.now().millisecondsSinceEpoch >= state.itemData.value.endDate!) { - logic.showToast("失效时间要大于当前时间".tr); + if (DateTime.now().millisecondsSinceEpoch >= state.endDate) { + logic.showToast('失效时间要大于当前时间'.tr); return; } logic.senderCustomPasswords(); @@ -111,18 +109,17 @@ class _PasswordKeyDetailChangeDatePage // } return Column( - children: [ + children: [ Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, rightTitle: state.selectEffectiveDate.value, isHaveLine: true, isHaveDirection: true, action: () { - PDuration selectDate = PDuration.parse( - DateTime.parse(state.selectEffectiveDate.value)); - Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { + final PDuration selectDate = PDuration.parse(DateTime.parse(state.selectEffectiveDate.value)); + Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { state.selectEffectiveDate.value = DateTool().getYMDHNDateString(p, 1); - state.itemData.value.startDate = DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1); //更新开始时间 + state.startDate = DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1); //更新开始时间 }); })), Obx(() => CommonItem( @@ -130,10 +127,10 @@ class _PasswordKeyDetailChangeDatePage rightTitle: state.selectFailureDate.value, isHaveDirection: true, action: () { - PDuration selectDate = PDuration.parse(DateTime.parse(state.selectFailureDate.value)); - Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { + final PDuration selectDate = PDuration.parse(DateTime.parse(state.selectFailureDate.value)); + Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { state.selectFailureDate.value = DateTool().getYMDHNDateString(p, 1); - state.itemData.value.endDate = DateTool().dateToTimestamp(state.selectFailureDate.value, 1); //更新结束时间 + state.endDate = DateTool().dateToTimestamp(state.selectFailureDate.value, 1); //更新结束时间 }); })), ], @@ -142,7 +139,6 @@ class _PasswordKeyDetailChangeDatePage @override void didChangeDependencies() { - // TODO: implement didChangeDependencies super.didChangeDependencies(); /// 路由订阅 @@ -151,7 +147,6 @@ class _PasswordKeyDetailChangeDatePage @override void dispose() { - // TODO: implement dispose /// 取消路由订阅 AppRouteObserver().routeObserver.unsubscribe(this); super.dispose(); diff --git a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_state.dart b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_state.dart index f01943e1..b1616c6e 100755 --- a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_state.dart +++ b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_state.dart @@ -3,20 +3,58 @@ import 'package:get/get.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; import 'package:star_lock/tools/dateTool.dart'; +import '../../../../mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart'; + class PasswordKeyDetailChangeDateState { PasswordKeyDetailChangeDateState() { final Map map = Get.arguments; if (map['itemData'] != null) { - itemData.value = map['itemData']; - selectEffectiveDate.value = itemData.value.startDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.value.startDate.toString()); - selectFailureDate.value = itemData.value.endDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.value.endDate.toString()); + final PasswordKeyListItem itemData = map['itemData']; + selectEffectiveDate.value = itemData.startDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.startDate.toString()); + selectFailureDate.value = itemData.endDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.endDate.toString()); + + lockId = itemData.lockId!; + keyboardPwdId = itemData.keyboardPwdId!.toString(); + keyboardPwdName = itemData.keyboardPwdName!; + keyboardPwd = itemData.keyboardPwd!; + pwdUserNo = itemData.pwdUserNo!; + hoursStart = itemData.hoursStart!; + hoursEnd = itemData.hoursEnd!; + pwdRight = itemData.pwdRight!; + } + + if (map['expirePasswordItemData'] != null) { + final ExpirePasswordItemData itemData = map['expirePasswordItemData']; + selectEffectiveDate.value = itemData.startDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.startDate.toString()); + selectFailureDate.value = itemData.endDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.endDate.toString()); + + lockId = itemData.lockId!; + lockName = itemData.lock_info!.btDeviceName!; + keyboardPwdId = itemData.pwdId!.toString(); + keyboardPwdName = itemData.nickname!; + keyboardPwd = itemData.keyboardPwd!; + pwdUserNo = itemData.pwdUserNo!; + hoursStart = itemData.hoursStart!; + hoursEnd = itemData.hoursEnd!; + pwdRight = itemData.pwdRight!; } } - final Rx itemData = PasswordKeyListItem().obs; final RxString selectEffectiveDate = ''.obs; //生效时间 final RxString selectFailureDate = ''.obs; //失效时间 + int lockId = 0; + String lockName = ''; + String keyboardPwdId = ''; + String keyboardPwdName = ''; + String keyboardPwd = ''; + int pwdUserNo = 0; + int hoursStart = 0; + int hoursEnd = 0; + int pwdRight = 0; + int startDate = 0; + int endDate = 0; + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 RxInt sureBtnState = 0.obs; // 0普通状态(可用) 1连接中(不可用) } diff --git a/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_logic.dart b/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_logic.dart index fe252ea0..db2c9b86 100755 --- a/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_logic.dart +++ b/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_logic.dart @@ -355,21 +355,13 @@ class PasswordKeyListLogic extends BaseGetXController { @override void onReady() { - // TODO: implement onReady super.onReady(); _getPasswordListRefreshUIAction(); _initReplySubscription(); } - @override - void onInit() { - // TODO: implement onInit - super.onInit(); - } - @override void onClose() { - // TODO: implement onClose super.onClose(); _getPasswordListRefreshUIEvent?.cancel(); _replySubscription.cancel(); diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_entity.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_entity.dart index 52829086..3d8fb475 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_entity.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_entity.dart @@ -1,8 +1,4 @@ class ExpireCardEntity { - int? errorCode; - String? description; - String? errorMsg; - ExpireCardListEntity? data; ExpireCardEntity( {this.errorCode, this.description, this.errorMsg, this.data}); @@ -13,6 +9,10 @@ class ExpireCardEntity { errorMsg = json['errorMsg']; data = json['data'] != null ? ExpireCardListEntity.fromJson(json['data']) : null; } + int? errorCode; + String? description; + String? errorMsg; + ExpireCardListEntity? data; Map toJson() { final Map data = {}; @@ -27,11 +27,6 @@ class ExpireCardEntity { } class ExpireCardListEntity { - List? list; - int? pageNo; - int? pageSize; - int? pages; - int? total; ExpireCardListEntity({this.list, this.pageNo, this.pageSize, this.pages, this.total}); @@ -47,6 +42,11 @@ class ExpireCardListEntity { pages = json['pages']; total = json['total']; } + List? list; + int? pageNo; + int? pageSize; + int? pages; + int? total; Map toJson() { final Map data = {}; @@ -62,29 +62,6 @@ class ExpireCardListEntity { } class ExpireCardItemEntity { - String? clientId; - int? lockOwnerId; - int? lockId; - String? cardNumber; - int? startDate; - int? endDate; - int? cardStatus; - int? cardType; - int? cardRight; - List? weekDay; - int? addType; - int? isCoerced; - int? cardUserNo; - int? businessId; - String? createdAt; - String? updatedAt; - ApiUser? apiUser; - LockInfo? lockInfo; - int? cardId; - int? uid; - String? nickname; - String? lockAlias; - int? expireDate; ExpireCardItemEntity( {this.clientId, @@ -137,7 +114,7 @@ class ExpireCardItemEntity { ? ApiUser.fromJson(json['api_user']) : null; lockInfo = json['lock_info'] != null - ? new LockInfo.fromJson(json['lock_info']) + ? LockInfo.fromJson(json['lock_info']) : null; cardId = json['cardId']; uid = json['uid']; @@ -145,6 +122,29 @@ class ExpireCardItemEntity { lockAlias = json['lockAlias']; expireDate = json['expireDate']; } + String? clientId; + int? lockOwnerId; + int? lockId; + String? cardNumber; + int? startDate; + int? endDate; + int? cardStatus; + int? cardType; + int? cardRight; + List? weekDay; + int? addType; + int? isCoerced; + int? cardUserNo; + int? businessId; + String? createdAt; + String? updatedAt; + ApiUser? apiUser; + LockInfo? lockInfo; + int? cardId; + int? uid; + String? nickname; + String? lockAlias; + int? expireDate; Map toJson() { final Map data = {}; @@ -182,8 +182,6 @@ class ExpireCardItemEntity { } class ApiUser { - int? id; - String? accountName; ApiUser({this.id, this.accountName}); @@ -191,6 +189,8 @@ class ApiUser { id = json['id']; accountName = json['account_name']; } + int? id; + String? accountName; Map toJson() { final Map data = {}; @@ -201,13 +201,13 @@ class ApiUser { } class LockInfo { - String? btDeviceName; LockInfo({this.btDeviceName}); LockInfo.fromJson(Map json) { btDeviceName = json['btDeviceName']; } + String? btDeviceName; Map toJson() { final Map data = Map(); diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_logic.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_logic.dart index 065a0285..9cb3eb60 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_logic.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_logic.dart @@ -75,6 +75,7 @@ class ExpireCardLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: true ); break; default: @@ -126,6 +127,7 @@ class ExpireCardLogic extends BaseGetXController { signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, + isBeforeAddUser: true ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_page.dart index cc7035d1..541b37d3 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_page.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_page.dart @@ -1,10 +1,10 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:get/get.dart'; import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_state.dart'; import 'package:star_lock/tools/EasyRefreshTool.dart'; import 'package:star_lock/tools/noData.dart'; @@ -21,12 +21,14 @@ class ExpireCardPage extends StatefulWidget { } class _ExpireCardPageState extends State { - final logic = Get.put(ExpireCardLogic()); - final state = Get.find().state; + final ExpireCardLogic logic = Get.put(ExpireCardLogic()); + final ExpireCardState state = Get.find().state; Future getHttpData() async { logic.expirCardListRequest().then((ExpireCardEntity value){ - if(mounted) setState(() {}); + if(mounted) { + setState(() {}); + } }); } @@ -57,17 +59,17 @@ class _ExpireCardPageState extends State { : SlidableAutoCloseBehavior( child: ListView.separated( itemCount: state.dataList.length, - itemBuilder: (c, index) { - ExpireCardItemEntity indexEntity = state.dataList[index]; + itemBuilder: (BuildContext c, int index) { + final ExpireCardItemEntity indexEntity = state.dataList[index]; return Slidable( key:ValueKey(indexEntity.uid), endActionPane: ActionPane( extentRatio: 0.2, motion: const ScrollMotion(), - children: [ + children: [ SlidableAction( onPressed: (BuildContext context){ - ShowTipView().showIosTipWithContentDialog("确定删除卡吗?", (){ + ShowTipView().showIosTipWithContentDialog('确定删除卡吗?', (){ state.deletExpireCardItemEntity = indexEntity; logic.senderAddICCard(); }); @@ -95,44 +97,30 @@ class _ExpireCardPageState extends State { Widget _electronicKeyItem(ExpireCardItemEntity itemData) { return GestureDetector( onTap: () async { - // if(itemData.cardType! == 4){ - // // 循环 - // var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: { - // "pushType": 0, - // "expireLockItem": itemData, - // }); - // if(data != null) { - // // setState(() { - // // state.starDate.value = data["starDate"]; - // // state.endDate.value = data["endDate"]; - // // state.starTime.value = data["starTime"]; - // // state.endTime.value = data["endTime"]; - // // state.weekDay.value = data["validityValue"]; - // // }); - // logic.pageNo = 1; - // getHttpData(); - // } - // }else{ - // var data = await Get.toNamed(Routers.electronicKeyDetailChangeDate, arguments: { - // "pushType": 0, - // "expireLockItem": itemData, - // }); - // if(data != null) { - // setState(() { - // // state.starDate.value = data["beginTimeTimestamp"].toString(); - // // state.endDate.value = data["endTimeTimestamp"].toString(); - // // state.keyType.value = 2; - // logic.pageNo = 1; - // getHttpData(); - // }); - // } - // } + var data = await Get.toNamed(Routers.expireKeyChangeDatePage, arguments: { + 'pushType': 0, + 'lockName': itemData.lockInfo!.btDeviceName, + 'startDate': itemData.startDate, + 'endDate': itemData.endDate, + 'lockId': itemData.lockId, + 'keyID': itemData.cardId, + 'keyNumber': int.parse(itemData.cardNumber!), + 'keyName': itemData.nickname, + 'isAdmin': itemData.cardRight, + 'isForce': itemData.isCoerced, + }); + if(data != null) { + setState(() { + logic.pageNo = 1; + getHttpData(); + }); + } }, child: Container( height: 90.h, color: Colors.white, child: Row( - children: [ + children: [ SizedBox( width: 30.w, ), @@ -147,10 +135,10 @@ class _ExpireCardPageState extends State { Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( itemData.nickname ?? '', style: TextStyle( @@ -170,7 +158,7 @@ class _ExpireCardPageState extends State { SizedBox(height: 10.h), Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( logic.getExpireDateStr(itemData), style: TextStyle( diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_state.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_state.dart index 971346a9..51f4336b 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_state.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_state.dart @@ -4,9 +4,9 @@ import 'package:get/get.dart'; import 'expireCard_entity.dart'; class ExpireCardState{ - final dataList = [].obs; + final RxList dataList = [].obs; - var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) ExpireCardItemEntity deletExpireCardItemEntity = ExpireCardItemEntity(); } \ No newline at end of file diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_entity.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_entity.dart index e69de29b..ab494f4a 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_entity.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_entity.dart @@ -0,0 +1,234 @@ +class ExpireFaceEntity { + + ExpireFaceEntity( + {this.errorCode, this.description, this.errorMsg, this.data}); + + ExpireFaceEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + 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 = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + if (this.data != null) { + data['data'] = this.data!.toJson(); + } + return data; + } +} + +class Data { + + Data({this.list, this.pageNo, this.pageSize, this.pages, this.total}); + + Data.fromJson(Map json) { + if (json['list'] != null) { + list = []; + json['list'].forEach((v) { + list!.add(ExpireFaceListItemEntity.fromJson(v)); + }); + } + pageNo = json['pageNo']; + pageSize = json['pageSize']; + pages = json['pages']; + total = json['total']; + } + List? list; + int? pageNo; + int? pageSize; + int? pages; + int? total; + + Map toJson() { + final Map data = {}; + if (list != null) { + data['list'] = list!.map((v) => v.toJson()).toList(); + } + data['pageNo'] = pageNo; + data['pageSize'] = pageSize; + data['pages'] = pages; + data['total'] = total; + return data; + } +} + +class ExpireFaceListItemEntity { + + ExpireFaceListItemEntity( + {this.clientId, + this.lockOwnerId, + this.lockId, + this.faceNumber, + this.featureData, + this.startDate, + this.endDate, + this.weekDay, + this.faceType, + this.status, + this.cyclicConfig, + this.addType, + this.isCoerced, + this.faceRight, + this.businessId, + this.faceUserNo, + this.date, + this.createdAt, + this.updatedAt, + this.userInfo, + this.lockInfo, + this.faceId, + this.uid, + this.nickname, + this.lockAlias, + this.expireDate}); + + ExpireFaceListItemEntity.fromJson(Map json) { + clientId = json['clientId']; + lockOwnerId = json['lockOwnerId']; + lockId = json['lockId']; + faceNumber = json['faceNumber']; + featureData = json['featureData']; + startDate = json['startDate']; + endDate = json['endDate']; + if (json['weekDay'] != null) { + weekDay = []; + json['weekDay'].forEach((v) { + weekDay!.add(v); + }); + } + faceType = json['faceType']; + status = json['status']; + if (json['cyclicConfig'] != null) { + cyclicConfig = []; + json['cyclicConfig'].forEach((v) { + cyclicConfig!.add(v); + }); + } + addType = json['addType']; + isCoerced = json['isCoerced']; + faceRight = json['faceRight']; + businessId = json['businessId']; + faceUserNo = json['faceUserNo']; + date = json['date']; + createdAt = json['created_at']; + updatedAt = json['updated_at']; + userInfo = json['user_info'] != null + ? UserInfo.fromJson(json['user_info']) + : null; + lockInfo = json['lock_info'] != null + ? LockInfo.fromJson(json['lock_info']) + : null; + faceId = json['faceId']; + uid = json['uid']; + nickname = json['nickname']; + lockAlias = json['lockAlias']; + expireDate = json['expireDate']; + } + String? clientId; + int? lockOwnerId; + int? lockId; + String? faceNumber; + String? featureData; + int? startDate; + int? endDate; + List? weekDay; + int? faceType; + int? status; + List? cyclicConfig; + int? addType; + int? isCoerced; + int? faceRight; + int? businessId; + int? faceUserNo; + int? date; + String? createdAt; + String? updatedAt; + UserInfo? userInfo; + LockInfo? lockInfo; + int? faceId; + int? uid; + String? nickname; + String? lockAlias; + int? expireDate; + + Map toJson() { + final Map data = {}; + data['clientId'] = clientId; + data['lockOwnerId'] = lockOwnerId; + data['lockId'] = lockId; + data['faceNumber'] = faceNumber; + data['featureData'] = featureData; + data['startDate'] = startDate; + data['endDate'] = endDate; + if (weekDay != null) { + data['weekDay'] = weekDay!.map((v) => v.toJson()).toList(); + } + data['faceType'] = faceType; + data['status'] = status; + if (cyclicConfig != null) { + data['cyclicConfig'] = cyclicConfig!.map((v) => v.toJson()).toList(); + } + data['addType'] = addType; + data['isCoerced'] = isCoerced; + data['faceRight'] = faceRight; + data['businessId'] = businessId; + data['faceUserNo'] = faceUserNo; + data['date'] = date; + data['created_at'] = createdAt; + data['updated_at'] = updatedAt; + if (userInfo != null) { + data['user_info'] = userInfo!.toJson(); + } + if (lockInfo != null) { + data['lock_info'] = lockInfo!.toJson(); + } + data['faceId'] = faceId; + data['uid'] = uid; + data['nickname'] = nickname; + data['lockAlias'] = lockAlias; + data['expireDate'] = expireDate; + return data; + } +} + +class UserInfo { + + UserInfo({this.id, this.accountName}); + + UserInfo.fromJson(Map json) { + id = json['id']; + accountName = json['account_name']; + } + int? id; + String? accountName; + + Map toJson() { + final Map data = {}; + data['id'] = id; + data['account_name'] = accountName; + return data; + } +} + +class LockInfo { + LockInfo({this.btDeviceName}); + LockInfo.fromJson(Map json) { + btDeviceName = json['btDeviceName']; + } + String? btDeviceName; + + Map toJson() { + final Map data = {}; + data['btDeviceName'] = btDeviceName; + return data; + } +} \ No newline at end of file diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_logic.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_logic.dart index cffb789c..dc0134c9 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_logic.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_logic.dart @@ -1,16 +1,149 @@ +import 'dart:async'; + +import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/dateTool.dart'; +import '../../../../../blue/blue_manage.dart'; +import '../../../../../blue/io_protocol/io_addFace.dart'; +import '../../../../../blue/io_reply.dart'; +import '../../../../../blue/io_tool/io_tool.dart'; +import '../../../../../blue/io_tool/manager_event_bus.dart'; +import '../../../../../blue/sender_manage.dart'; import '../../../../../network/api_repository.dart'; -import '../expireFingerprint/expireFingerprint_entity.dart'; +import '../../../../../tools/storage.dart'; +import 'expireFace_entity.dart'; import 'expireFace_state.dart'; class ExpireFaceLogic extends BaseGetXController { ExpireFaceState state = ExpireFaceState(); + // 获取解析后的数据 + late StreamSubscription _replySubscription; + void _initReplySubscription() { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) { + // 添加人脸开始(此处用作删除人脸) + if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) { + _replyAddFaceBegin(reply); + } + }); + } + + // 添加人脸开始---这里用作删除人脸 + Future _replyAddFaceBegin(Reply reply) async { + final int status = reply.data[2]; + + switch (status) { + case 0x00: + //成功 + cancelBlueConnetctToastTimer(); + dismissEasyLoading(); + deletFacesData(); + break; + case 0x06: + //无权限 + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); + Storage.setStringList(saveBlueToken, saveStrList); + + IoSenderManage.senderAddFaceCommand( + keyID:'1', + userID:(await Storage.getUid())!, + faceNo:int.parse(state.seletExpireFaceListItemEntity.faceNumber!), + useCountLimit:0xffff, + operate: 2, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:0, + isForce:0, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: 0x11223344, + endDate: 0x11223344, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: token, + isBeforeAddUser: true + ); + break; + default: + //失败 + break; + } + } + + // 删除人脸 + Future senderAddFace() async { + showEasyLoading(); + showBlueConnetctToastTimer(action: () { + dismissEasyLoading(); + }); + BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected) { + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); + + IoSenderManage.senderAddFaceCommand( + keyID:'1', + userID:(await Storage.getUid())!, + faceNo:int.parse(state.seletExpireFaceListItemEntity.faceNumber!), + useCountLimit:0xffff, + operate: 2, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:0, + isForce:0, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: 0x11223344, + endDate: 0x11223344, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: getTokenList, + isBeforeAddUser: true + ); + } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + if (state.ifCurrentScreen.value == true) { + showBlueConnetctToast(); + } + } + }); + } + + // 删除的人脸 + Future deletFacesData() async { + final LoginEntity entity = await ApiRepository.to.deleteFaceData( + faceId: state.seletExpireFaceListItemEntity.faceId!, + lockId: state.seletExpireFaceListItemEntity.lockId!, + ); + if (entity.errorCode!.codeIsSuccessful) { + showToast('删除成功', something: (){ + pageNo = 1; + expireFaceList(); + }); + } + } + //请求人脸即将到期列表 - Future expireFaceList() async { - ExpireFingerprintEntity entity = await ApiRepository.to.expireFaceList(pageNo.toString(), pageSize.toString()); + Future expireFaceList() async { + final ExpireFaceEntity entity = await ApiRepository.to.expireFaceList(pageNo.toString(), pageSize.toString()); if(entity.errorCode!.codeIsSuccessful){ if (pageNo == 1) { state.dataList.value = entity.data!.list!; @@ -26,9 +159,9 @@ class ExpireFaceLogic extends BaseGetXController { } //使用期限 - String getExpireDateStr(ExpireFingerprintItemEntity itemData) { + String getExpireDateStr(ExpireFaceListItemEntity itemData) { String useDateStr = ''; - if(itemData.fingerprintType == 4){ + if(itemData.faceType == 4){ useDateStr = '循环'; }else{ useDateStr = '${DateTool().dateToYMDString(itemData.startDate.toString())}-${DateTool().dateToYMDString(itemData.endDate.toString())}'; @@ -36,4 +169,25 @@ class ExpireFaceLogic extends BaseGetXController { return useDateStr; } + @override + Future onReady() async { + super.onReady(); + + // 获取是否是演示模式 演示模式不获取接口 + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + if (isDemoMode == false) { + _initReplySubscription(); + } + } + + @override + Future onClose() async { + super.onClose(); + + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + if (isDemoMode == false) { + _replySubscription.cancel(); + } + } + } \ No newline at end of file diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_page.dart index 94b51d18..00b28146 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_page.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_page.dart @@ -1,14 +1,18 @@ import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:get/get.dart'; +import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_state.dart'; import 'package:star_lock/tools/EasyRefreshTool.dart'; +import '../../../../../appRouters.dart'; import '../../../../../app_settings/app_colors.dart'; +import '../../../../../tools/appRouteObserver.dart'; import '../../../../../tools/noData.dart'; import '../../../../../tools/showTipView.dart'; -import '../expireFingerprint/expireFingerprint_entity.dart'; +import 'expireFace_entity.dart'; import 'expireFace_logic.dart'; class ExpireFacePage extends StatefulWidget { @@ -18,13 +22,15 @@ class ExpireFacePage extends StatefulWidget { State createState() => _ExpireFacePageState(); } -class _ExpireFacePageState extends State { - final logic = Get.put(ExpireFaceLogic()); - final state = Get.find().state; +class _ExpireFacePageState extends State with RouteAware { + final ExpireFaceLogic logic = Get.put(ExpireFaceLogic()); + final ExpireFaceState state = Get.find().state; Future getHttpData() async { - logic.expireFaceList().then((ExpireFingerprintEntity value){ - if(mounted) setState(() {}); + logic.expireFaceList().then((ExpireFaceEntity value){ + if(mounted) { + setState(() {}); + } }); } @@ -45,7 +51,7 @@ class _ExpireFacePageState extends State { onLoad: (){ getHttpData(); }, - child: Obx(() => _buildMainUI()) + child: Obx(_buildMainUI) ); } @@ -55,19 +61,19 @@ class _ExpireFacePageState extends State { : SlidableAutoCloseBehavior( child: ListView.separated( itemCount: state.dataList.length, - itemBuilder: (c, index) { - ExpireFingerprintItemEntity indexEntity = state.dataList[index]; + itemBuilder: (BuildContext c, int index) { + final ExpireFaceListItemEntity indexEntity = state.dataList[index]; return Slidable( key:ValueKey(indexEntity.uid), endActionPane: ActionPane( extentRatio: 0.2, motion: const ScrollMotion(), - children: [ + children: [ SlidableAction( onPressed: (BuildContext context){ - ShowTipView().showIosTipWithContentDialog("确定删除卡吗?", (){ - // state.deletExpireFingerprintItemEntity = indexEntity; - // logic.senderAddFingerprint(); + ShowTipView().showIosTipWithContentDialog('确定删除人脸吗?', (){ + state.seletExpireFaceListItemEntity = indexEntity; + logic.senderAddFace(); }); }, backgroundColor: Colors.red, @@ -90,47 +96,33 @@ class _ExpireFacePageState extends State { ); } - Widget _electronicKeyItem(ExpireFingerprintItemEntity itemData) { + Widget _electronicKeyItem(ExpireFaceListItemEntity itemData) { return GestureDetector( onTap: () async { - // if(itemData.cardType! == 4){ - // // 循环 - // var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: { - // "pushType": 0, - // "expireLockItem": itemData, - // }); - // if(data != null) { - // // setState(() { - // // state.starDate.value = data["starDate"]; - // // state.endDate.value = data["endDate"]; - // // state.starTime.value = data["starTime"]; - // // state.endTime.value = data["endTime"]; - // // state.weekDay.value = data["validityValue"]; - // // }); - // logic.pageNo = 1; - // getHttpData(); - // } - // }else{ - // var data = await Get.toNamed(Routers.electronicKeyDetailChangeDate, arguments: { - // "pushType": 0, - // "expireLockItem": itemData, - // }); - // if(data != null) { - // setState(() { - // // state.starDate.value = data["beginTimeTimestamp"].toString(); - // // state.endDate.value = data["endTimeTimestamp"].toString(); - // // state.keyType.value = 2; - // logic.pageNo = 1; - // getHttpData(); - // }); - // } - // } + var data = await Get.toNamed(Routers.expireKeyChangeDatePage, arguments: { + 'pushType': 3, + 'lockName': itemData.lockInfo!.btDeviceName, + 'startDate': itemData.startDate, + 'endDate': itemData.endDate, + 'lockId': itemData.lockId, + 'keyID': itemData.faceId, + 'keyNumber': int.parse(itemData.faceNumber!), + 'keyName': itemData.nickname, + 'isAdmin': itemData.faceRight, + 'isForce': itemData.isCoerced, + }); + if(data != null) { + setState(() { + logic.pageNo = 1; + getHttpData(); + }); + } }, child: Container( height: 90.h, color: Colors.white, child: Row( - children: [ + children: [ SizedBox( width: 30.w, ), @@ -145,10 +137,10 @@ class _ExpireFacePageState extends State { Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( itemData.nickname ?? '', style: TextStyle( @@ -168,7 +160,7 @@ class _ExpireFacePageState extends State { SizedBox(height: 10.h), Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( logic.getExpireDateStr(itemData), style: TextStyle( @@ -192,21 +184,7 @@ class _ExpireFacePageState extends State { ); } - Widget getStatus(ExpireFingerprintItemEntity itemData) { - // if (itemData.keyboardPwdStatus! == 1) { - // return Container( - // padding: EdgeInsets.only(left: 5.w, right: 5.w), - // decoration: BoxDecoration( - // color: Colors.red, - // borderRadius: BorderRadius.circular(2.0), - // ), - // child: Text( - // '未生效', - // style: TextStyle( - // color: Colors.white, fontSize: 13.sp), - // ), - // ); - // } else { + Widget getStatus(ExpireFaceListItemEntity itemData) { if (itemData.expireDate! > 0) { return Container( padding: EdgeInsets.only(left: 5.w, right: 5.w), @@ -234,7 +212,58 @@ class _ExpireFacePageState extends State { ), ); } - // } } + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + /// 路由订阅 + AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!); + } + + @override + void 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; + state.sureBtnState.value = 0; + } + + /// 从下级返回 当前界面即将出现 + @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; + state.sureBtnState.value = 0; + } } diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_state.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_state.dart index 5054fff7..18da1a91 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_state.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_state.dart @@ -1,13 +1,13 @@ import 'package:get/get.dart'; -import '../expireFingerprint/expireFingerprint_entity.dart'; +import 'expireFace_entity.dart'; class ExpireFaceState{ - final dataList = [].obs; + final RxList dataList = [].obs; - var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) - ExpireFingerprintItemEntity deletExpireFingerprintItemEntity = ExpireFingerprintItemEntity(); + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) + ExpireFaceListItemEntity seletExpireFaceListItemEntity = ExpireFaceListItemEntity(); } \ No newline at end of file diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_entity.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_entity.dart index 88cb63b4..8ca60bac 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_entity.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_entity.dart @@ -1,9 +1,5 @@ class ExpireFingerprintEntity { - int? errorCode; - String? description; - String? errorMsg; - ExpireFingerprintListEntity? data; ExpireFingerprintEntity( {this.errorCode, this.description, this.errorMsg, this.data}); @@ -14,6 +10,10 @@ class ExpireFingerprintEntity { errorMsg = json['errorMsg']; data = json['data'] != null ? ExpireFingerprintListEntity.fromJson(json['data']) : null; } + int? errorCode; + String? description; + String? errorMsg; + ExpireFingerprintListEntity? data; Map toJson() { final Map data = {}; @@ -28,11 +28,6 @@ class ExpireFingerprintEntity { } class ExpireFingerprintListEntity { - List? list; - int? pageNo; - int? pageSize; - int? pages; - int? total; ExpireFingerprintListEntity({this.list, this.pageNo, this.pageSize, this.pages, this.total}); @@ -48,6 +43,11 @@ class ExpireFingerprintListEntity { pages = json['pages']; total = json['total']; } + List? list; + int? pageNo; + int? pageSize; + int? pages; + int? total; Map toJson() { final Map data = {}; @@ -63,29 +63,6 @@ class ExpireFingerprintListEntity { } class ExpireFingerprintItemEntity { - String? clientId; - int? lockOwnerId; - int? lockId; - int? fingerprintStatus; - String? fingerprintNumber; - int? fingerprintType; - int? startDate; - int? endDate; - List? weekDay; - int? addType; - int? fingerRight; - int? isCoerced; - int? fingerprintUserNo; - int? businessId; - String? createdAt; - String? updatedAt; - ApiUser? apiUser; - LockInfo? lockInfo; - int? fingerprintId; - int? uid; - String? nickname; - String? lockAlias; - int? expireDate; ExpireFingerprintItemEntity( {this.clientId, @@ -146,6 +123,29 @@ class ExpireFingerprintItemEntity { lockAlias = json['lockAlias']; expireDate = json['expireDate']; } + String? clientId; + int? lockOwnerId; + int? lockId; + int? fingerprintStatus; + String? fingerprintNumber; + int? fingerprintType; + int? startDate; + int? endDate; + List? weekDay; + int? addType; + int? fingerRight; + int? isCoerced; + int? fingerprintUserNo; + int? businessId; + String? createdAt; + String? updatedAt; + ApiUser? apiUser; + LockInfo? lockInfo; + int? fingerprintId; + int? uid; + String? nickname; + String? lockAlias; + int? expireDate; Map toJson() { final Map data = {}; @@ -183,8 +183,6 @@ class ExpireFingerprintItemEntity { } class ApiUser { - int? id; - String? accountName; ApiUser({this.id, this.accountName}); @@ -192,6 +190,8 @@ class ApiUser { id = json['id']; accountName = json['account_name']; } + int? id; + String? accountName; Map toJson() { final Map data = {}; @@ -202,13 +202,13 @@ class ApiUser { } class LockInfo { - String? btDeviceName; LockInfo({this.btDeviceName}); LockInfo.fromJson(Map json) { btDeviceName = json['btDeviceName']; } + String? btDeviceName; Map toJson() { final Map data = {}; diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_logic.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_logic.dart index 3aa7fb2e..1023ca3e 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_logic.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_logic.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:star_lock/blue/io_tool/io_tool.dart'; -import 'package:star_lock/blue/io_type.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/dateTool.dart'; @@ -53,9 +52,6 @@ class ExpireFingerprintLogic extends BaseGetXController { final List? signKey = await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); - final List? publicKey = await Storage.getStringList(saveBluePublicKey); - final List publicKeyDataList = changeStringListToIntList(publicKey!); - final List? token = await Storage.getStringList(saveBlueToken); final List getTokenList = changeStringListToIntList(token!); @@ -69,14 +65,15 @@ class ExpireFingerprintLogic extends BaseGetXController { weekRound:0, // 周循环 startDate: 0x11223344, endDate: 0x11223344, - startTime:"0", - endTime:"0", + startTime:'0', + endTime:'0', needAuthor:1, signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, isAdmin: 0, operate: 0, + isBeforeAddUser: true ); break; default: @@ -98,9 +95,6 @@ class ExpireFingerprintLogic extends BaseGetXController { }); BlueManage().blueSendData(state.deletExpireFingerprintItemEntity.lockInfo!.btDeviceName!, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected){ - // var publicKey = await Storage.getStringList(saveBluePublicKey); - // List publicKeyDataList = changeStringListToIntList(publicKey!); - final List? signKey = await Storage.getStringList(saveBlueSignKey); final List signKeyDataList = changeStringListToIntList(signKey!); @@ -120,28 +114,16 @@ class ExpireFingerprintLogic extends BaseGetXController { weekRound:0, // 周循环 startDate: 0x11223344, endDate: 0x11223344, - startTime:"0", - endTime:"0", + startTime:'0', + endTime:'0', needAuthor:1, signKey:signKeyDataList, privateKey:getPrivateKeyList, token: getTokenList, isAdmin: 0, operate: 0, + isBeforeAddUser: true ); - - // IoSenderManage.senderAddFingerprintCommand( - // keyID:state.deletExpireFingerprintItemEntity.fingerprintId.toString(), - // userID:userID, - // fingerNo:int.parse(state.deletExpireFingerprintItemEntity.fingerprintNumber!), - // useCountLimit:0, - // startTime:state.deletExpireFingerprintItemEntity.startDate!~/1000, - // endTime:state.deletExpireFingerprintItemEntity.endDate!~/1000, - // needAuthor:1, - // signKey:signKeyDataList, - // privateKey:getPrivateKeyList, - // token: getTokenList, - // ); } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); cancelBlueConnetctToastTimer(); @@ -154,15 +136,15 @@ class ExpireFingerprintLogic extends BaseGetXController { } // 删除指纹 - void deletFingerprintsData() async{ + Future deletFingerprintsData() async{ final LoginEntity entity = await ApiRepository.to.deletFingerprintsData( fingerprintId: state.deletExpireFingerprintItemEntity.fingerprintId.toString(), lockId: state.deletExpireFingerprintItemEntity.lockId.toString(), - type: "0", - deleteType:"1" + type: '0', + deleteType:'1' ); if(entity.errorCode!.codeIsSuccessful){ - showToast("删除成功",something: (){ + showToast('删除成功',something: (){ BlueManage().disconnect(); pageNo = 1; expirFingerprintListRequest(); @@ -201,22 +183,13 @@ class ExpireFingerprintLogic extends BaseGetXController { @override void onReady() { - // TODO: implement onReady super.onReady(); _initReplySubscription(); } - @override - void onInit() { - // TODO: implement onInit - super.onInit(); - - } - @override void onClose() { - // TODO: implement onClose super.onClose(); _replySubscription.cancel(); diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_page.dart index 9d49169e..ccb1c11d 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_page.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_page.dart @@ -2,9 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:get/get.dart'; +import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_state.dart'; import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/showTipView.dart'; +import '../../../../../appRouters.dart'; import '../../../../../app_settings/app_colors.dart'; import '../../../../../tools/EasyRefreshTool.dart'; import 'expireFingerprint_entity.dart'; @@ -18,12 +20,14 @@ class ExpireFingerprintPage extends StatefulWidget { } class _ExpireFingerprintPageState extends State { - final logic = Get.put(ExpireFingerprintLogic()); - final state = Get.find().state; + final ExpireFingerprintLogic logic = Get.put(ExpireFingerprintLogic()); + final ExpireFingerprintState state = Get.find().state; Future getHttpData() async { logic.expirFingerprintListRequest().then((ExpireFingerprintEntity value) { - if (mounted) setState(() {}); + if (mounted) { + setState(() {}); + } }); } @@ -44,7 +48,7 @@ class _ExpireFingerprintPageState extends State { onLoad: () { getHttpData(); }, - child: Obx(() => _buildMainUI())); + child: Obx(_buildMainUI)); } Widget _buildMainUI() { @@ -58,18 +62,17 @@ class _ExpireFingerprintPageState extends State { : SlidableAutoCloseBehavior( child: ListView.separated( itemCount: state.dataList.length, - itemBuilder: (c, index) { - ExpireFingerprintItemEntity indexEntity = state.dataList[index]; + itemBuilder: (BuildContext c, int index) { + final ExpireFingerprintItemEntity indexEntity = state.dataList[index]; return Slidable( key: ValueKey(indexEntity.uid), endActionPane: ActionPane( extentRatio: 0.2, motion: const ScrollMotion(), - children: [ + children: [ SlidableAction( onPressed: (BuildContext context) { - ShowTipView().showIosTipWithContentDialog("确定删除指纹吗?", - () { + ShowTipView().showIosTipWithContentDialog('确定删除指纹吗?', () { state.deletExpireFingerprintItemEntity = indexEntity; logic.senderAddFingerprint(); @@ -98,44 +101,30 @@ class _ExpireFingerprintPageState extends State { Widget _electronicKeyItem(ExpireFingerprintItemEntity itemData) { return GestureDetector( onTap: () async { - // if(itemData.cardType! == 4){ - // // 循环 - // var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: { - // "pushType": 0, - // "expireLockItem": itemData, - // }); - // if(data != null) { - // // setState(() { - // // state.starDate.value = data["starDate"]; - // // state.endDate.value = data["endDate"]; - // // state.starTime.value = data["starTime"]; - // // state.endTime.value = data["endTime"]; - // // state.weekDay.value = data["validityValue"]; - // // }); - // logic.pageNo = 1; - // getHttpData(); - // } - // }else{ - // var data = await Get.toNamed(Routers.electronicKeyDetailChangeDate, arguments: { - // "pushType": 0, - // "expireLockItem": itemData, - // }); - // if(data != null) { - // setState(() { - // // state.starDate.value = data["beginTimeTimestamp"].toString(); - // // state.endDate.value = data["endTimeTimestamp"].toString(); - // // state.keyType.value = 2; - // logic.pageNo = 1; - // getHttpData(); - // }); - // } - // } + var data = await Get.toNamed(Routers.expireKeyChangeDatePage, arguments: { + 'pushType': 1, + 'lockName': itemData.lockInfo!.btDeviceName, + 'startDate': itemData.startDate, + 'endDate': itemData.endDate, + 'lockId': itemData.lockId, + 'keyID': itemData.fingerprintId, + 'keyNumber': int.parse(itemData.fingerprintNumber!), + 'keyName': itemData.nickname, + 'isAdmin': itemData.fingerRight, + 'isForce': itemData.isCoerced, + }); + if(data != null) { + setState(() { + logic.pageNo = 1; + getHttpData(); + }); + } }, child: Container( height: 90.h, color: Colors.white, child: Row( - children: [ + children: [ SizedBox( width: 30.w, ), @@ -150,10 +139,10 @@ class _ExpireFingerprintPageState extends State { Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( itemData.nickname ?? '', style: TextStyle( @@ -173,7 +162,7 @@ class _ExpireFingerprintPageState extends State { SizedBox(height: 10.h), Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( logic.getExpireDateStr(itemData), style: TextStyle( @@ -198,20 +187,6 @@ class _ExpireFingerprintPageState extends State { } Widget getStatus(ExpireFingerprintItemEntity itemData) { - // if (itemData.keyboardPwdStatus! == 1) { - // return Container( - // padding: EdgeInsets.only(left: 5.w, right: 5.w), - // decoration: BoxDecoration( - // color: Colors.red, - // borderRadius: BorderRadius.circular(2.0), - // ), - // child: Text( - // '未生效', - // style: TextStyle( - // color: Colors.white, fontSize: 13.sp), - // ), - // ); - // } else { if (itemData.expireDate! > 0) { return Container( padding: EdgeInsets.only(left: 5.w, right: 5.w), diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_state.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_state.dart index 0cbda268..1da604b7 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_state.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_state.dart @@ -4,9 +4,9 @@ import 'package:get/get.dart'; import 'expireFingerprint_entity.dart'; class ExpireFingerprintState{ - final dataList = [].obs; + final RxList dataList = [].obs; - var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) ExpireFingerprintItemEntity deletExpireFingerprintItemEntity = ExpireFingerprintItemEntity(); } \ No newline at end of file diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_logic.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_logic.dart new file mode 100644 index 00000000..45512c91 --- /dev/null +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_logic.dart @@ -0,0 +1,459 @@ + +import 'dart:async'; + +import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/tools/baseGetXController.dart'; + +import '../../../../../blue/blue_manage.dart'; +import '../../../../../blue/io_protocol/io_addFace.dart'; +import '../../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart'; +import '../../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart'; +import '../../../../../blue/io_reply.dart'; +import '../../../../../blue/io_tool/io_tool.dart'; +import '../../../../../blue/io_tool/manager_event_bus.dart'; +import '../../../../../blue/sender_manage.dart'; +import '../../../../../login/login/entity/LoginEntity.dart'; +import '../../../../../network/api_repository.dart'; +import '../../../../../tools/storage.dart'; +import 'expireKeyChangeDate_state.dart'; + +class ExpireKeyChangeDateLogic extends BaseGetXController { + ExpireKeyChangeDateState state = ExpireKeyChangeDateState(); + + // 监听设备返回的数据 + late StreamSubscription _replySubscription; + void _initReplySubscription() { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { + // 添加卡片开始(重置锁里面所有卡) + if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { + _replyAddICCardBegin(reply); + } + + // 添加指纹开始(此处用作修改或者删除指纹) + if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { + _replyAddFingerprintBegin(reply); + } + + // 添加人脸开始(此处用作修改人脸) + if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) { + _replyAddFaceBegin(reply); + } + }); + } + + // 添加人脸开始 + Future _replyAddFaceBegin(Reply reply) async { + final int status = reply.data[2]; + + switch (status) { + case 0x00: + //成功 + state.sureBtnState.value = 0; + cancelBlueConnetctToastTimer(); + dismissEasyLoading(); + editFaceData(); + break; + case 0x06: + //无权限 + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); + Storage.setStringList(saveBlueToken, saveStrList); + + IoSenderManage.senderAddFaceCommand( + keyID:state.keyID.toString(), + userID:await Storage.getUid(), + faceNo:state.keyNumber, + useCountLimit:0xffff, + operate: 1, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:state.isAdmin, + isForce:state.isForce, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: state.beginTimeTimestamp.value~/1000, + endDate: state.endTimeTimestamp.value~/1000, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: token, + isBeforeAddUser: true + ); + break; + default: + //失败 + break; + } + } + + // 删除/修改人脸信息 + Future senderAddFace() async { + if (state.sureBtnState.value == 1) { + return; + } + state.sureBtnState.value = 1; + + showEasyLoading(); + showBlueConnetctToastTimer(action: () { + dismissEasyLoading(); + state.sureBtnState.value = 0; + }); + BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected) { + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + IoSenderManage.senderAddFaceCommand( + keyID:state.keyID.toString(), + userID:await Storage.getUid(), + faceNo:state.keyNumber, + useCountLimit:0xffff, + operate: 1, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:state.isAdmin, + isForce:state.isForce, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: state.beginTimeTimestamp.value~/1000, + endDate: state.endTimeTimestamp.value~/1000, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: getTokenList, + isBeforeAddUser: true + ); + } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + state.sureBtnState.value = 0; + if (state.ifCurrentScreen.value == true) { + showBlueConnetctToast(); + } + } + }); + } + + // 添加卡片开始(此处用作删除卡片) + Future _replyAddICCardBegin(Reply reply) async { + final int status = reply.data[2]; + + switch(status){ + case 0x00: + //成功 + cancelBlueConnetctToastTimer(); + dismissEasyLoading(); + editICCardData(); + break; + case 0x06: + //无权限 + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); + Storage.setStringList(saveBlueToken, saveStrList); + + IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( + keyID:state.keyID.toString(), + userID:await Storage.getUid(), + cardNo:state.keyNumber, + useCountLimit:0xffff, + operate: 1, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:state.isAdmin, + isForce:state.isForce, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: state.beginTimeTimestamp.value~/1000, + endDate: state.endTimeTimestamp.value~/1000, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: token, + isBeforeAddUser: true + ); + break; + default: + //失败 + break; + } + } + + // 添加指纹开始 + Future _replyAddFingerprintBegin(Reply reply) async { + final int status = reply.data[2]; + switch(status){ + case 0x00: + //成功 + state.sureBtnState.value = 0; + cancelBlueConnetctToastTimer(); + dismissEasyLoading(); + editFingerprintsData(); + break; + case 0x06: + //无权限 + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); + Storage.setStringList(saveBlueToken, saveStrList); + + IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( + keyID:state.keyID.toString(), + userID:await Storage.getUid(), + fingerNo:state.keyNumber, + useCountLimit:0xffff, + operate:1, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:state.isAdmin, + isForce:state.isForce, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: state.beginTimeTimestamp.value~/1000, + endDate: state.endTimeTimestamp.value~/1000, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: token, + isBeforeAddUser: true + ); + break; + default: + //失败 + break; + } + } + + // 删除指纹 + Future senderAddFingerprint() async { + if(state.sureBtnState.value == 1){ + return; + } + state.sureBtnState.value = 1; + + showEasyLoading(); + showBlueConnetctToastTimer(action: (){ + dismissEasyLoading(); + state.sureBtnState.value = 0; + }); + BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected){ + // var publicKey = await Storage.getStringList(saveBluePublicKey); + // List publicKeyDataList = changeStringListToIntList(publicKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); + + IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( + keyID:state.keyID.toString(), + userID:await Storage.getUid(), + fingerNo:state.keyNumber, + useCountLimit:0xffff, + operate:1, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:state.isAdmin, + isForce:state.isForce, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: state.beginTimeTimestamp.value~/1000, + endDate: state.endTimeTimestamp.value~/1000, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: getTokenList, + isBeforeAddUser: true + ); + } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + state.sureBtnState.value = 0; + if(state.ifCurrentScreen.value == true){ + showBlueConnetctToast(); + } + } + }); + } + + // 添加卡片 + Future senderAddICCard() async { + if(state.sureBtnState.value == 1){ + return; + } + state.sureBtnState.value = 1; + + showEasyLoading(); + showBlueConnetctToastTimer(action: (){ + dismissEasyLoading(); + state.sureBtnState.value = 0; + }); + BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected){ + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); + + IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( + keyID:state.keyID.toString(), + userID:await Storage.getUid(), + cardNo:state.keyNumber, + useCountLimit:0xffff, + operate: 1, // 0:注册 1:修改 2:删除 3:删除全部 + isAdmin:state.isAdmin, + isForce:state.isForce, // 是否是胁迫 + isRound:0, // 是否是循环 + weekRound:0, // 周循环 + startDate: state.beginTimeTimestamp.value~/1000, + endDate: state.endTimeTimestamp.value~/1000, + startTime:'0', + endTime:'0', + needAuthor:1, + signKey:signKeyDataList, + privateKey:getPrivateKeyList, + token: getTokenList, + isBeforeAddUser: true + ); + } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + state.sureBtnState.value = 0; + if(state.ifCurrentScreen.value == true){ + showBlueConnetctToast(); + } + } + }); + } + + // 修改指纹信息 + Future editFingerprintsData() async{ + final LoginEntity entity = await ApiRepository.to.editFingerprintsData( + fingerprintId: state.keyID.toString(), + lockId: state.lockId.toString(), + weekDay: [], + startDate: state.beginTimeTimestamp.value.toString(), + endDate: state.endTimeTimestamp.value.toString(), + isCoerced: state.isForce.toString(), + fingerprintName: state.keyName, + changeType: '1', + startTime: 0, + endTime: 0, + fingerprintType: 2, + fingerRight: state.isAdmin, + ); + if(entity.errorCode!.codeIsSuccessful){ + showToast('修改成功'.tr, something: (){ + Get.back(result: { + 'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(), + 'endTimeTimestamp':state.endTimeTimestamp.value.toString(), + }); + }); + } + } + + // 编辑iC卡 + Future editICCardData() async{ + final LoginEntity entity = await ApiRepository.to.editICCardData( + cardId: state.keyID.toString(), + lockId: state.lockId.toString(), + weekDay: [], + startDate: state.beginTimeTimestamp.value.toString(), + endDate: state.endTimeTimestamp.value.toString(), + isCoerced: state.isForce.toString(), + cardName: state.keyName, + changeType: '1', + startTime: 0, + endTime: 0, + cardType: 2,// 2:限时 无论之前是永久还是限时,修改之后都是限时 + cardRight: state.isAdmin, + ); + if(entity.errorCode!.codeIsSuccessful){ + showToast('修改成功'.tr, something: (){ + Get.back(result: { + 'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(), + 'endTimeTimestamp':state.endTimeTimestamp.value.toString(), + }); + }); + } + } + + // 修改人脸有效期 + Future editFaceData() async { + final LoginEntity entity = await ApiRepository.to.updateFaceValidity( + lockId: state.lockId, + faceId: state.keyID, + startDate: state.beginTimeTimestamp.value, + endDate: state.endTimeTimestamp.value, + startTime: 0, + endTime: 0, + faceType: 2, + weekDay: [], + faceName: state.keyName, + addType: '1', + isCoerced: state.isForce, + faceRight: state.isAdmin + ); + if (entity.errorCode!.codeIsSuccessful) { + showToast('修改成功', something: () { + Get.back(result: { + 'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(), + 'endTimeTimestamp':state.endTimeTimestamp.value.toString(), + }); + }); + } + } + + @override + void onReady() { + super.onReady(); + + _initReplySubscription(); + } + + @override + void onInit() { + super.onInit(); + + } + + @override + void onClose() { + super.onClose(); + + _replySubscription.cancel(); + } +} \ No newline at end of file diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart new file mode 100644 index 00000000..0d6f22e0 --- /dev/null +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart @@ -0,0 +1,179 @@ + +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 '../../../../../app_settings/app_colors.dart'; +import '../../../../../tools/appRouteObserver.dart'; +import '../../../../../tools/commonItem.dart'; +import '../../../../../tools/dateTool.dart'; +import '../../../../../tools/pickers/pickers.dart'; +import '../../../../../tools/pickers/time_picker/model/date_mode.dart'; +import '../../../../../tools/pickers/time_picker/model/pduration.dart'; +import '../../../../../tools/titleAppBar.dart'; +import '../../../../../translations/trans_lib.dart'; +import 'expireKeyChangeDate_logic.dart'; +import 'expireKeyChangeDate_state.dart'; + +class ExpireKeyChangeDatePage extends StatefulWidget { + const ExpireKeyChangeDatePage({Key? key}) : super(key: key); + + @override + State createState() => _ExpireKeyChangeDatePageState(); +} + +class _ExpireKeyChangeDatePageState extends State with RouteAware { + final ExpireKeyChangeDateLogic logic = Get.put(ExpireKeyChangeDateLogic()); + final ExpireKeyChangeDateState state = Get.find().state; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: + '${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}', + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + child: Text( + TranslationLoader.lanKeys!.sure!.tr, + style: TextStyle(color: Colors.white, fontSize: 24.sp), + ), + onPressed: () { + state.beginTimeTimestamp.value = + DateTool().dateToTimestamp(state.beginTime.value, 1); + state.endTimeTimestamp.value = + DateTool().dateToTimestamp(state.endTime.value, 1); + if (state.beginTimeTimestamp.value > + state.endTimeTimestamp.value || + state.beginTimeTimestamp.value == + state.endTimeTimestamp.value) { + logic.showToast('失效时间需大于生效时间'.tr); + return; + } + + if (state.endTimeTimestamp.value < + DateTime.now().millisecondsSinceEpoch) { + logic.showToast('生效时间需大于当前时间'.tr); + return; + } + switch (state.pushType.value) { + case 0: + // 卡 + logic.senderAddICCard(); + break; + case 1: + // 指纹 + logic.senderAddFingerprint(); + break; + case 2: + // 遥控 + + break; + case 3: + // 人脸 + logic.senderAddFace(); + break; + default: + break; + } + }, + ), + ], + ), + body: buildMainUI(), + ); + } + + Widget buildMainUI() { + return Column( + children: [ + Obx(() => CommonItem( + leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, + rightTitle: state.beginTime.value, + isHaveLine: true, + isHaveDirection: true, + action: () { + final PDuration selectDate = + PDuration.parse(DateTime.tryParse(state.beginTime.value)); + Pickers.showDatePicker(context, + selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { + setState(() { + state.beginTime.value = DateTool().getYMDHNDateString(p, 1); + }); + }); + })), + Obx(() => CommonItem( + leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, + rightTitle: state.endTime.value, + isHaveDirection: true, + action: () { + final PDuration selectDate = + PDuration.parse(DateTime.tryParse(state.endTime.value)); + Pickers.showDatePicker(context, + selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { + setState(() { + state.endTime.value = DateTool().getYMDHNDateString(p, 1); + }); + }); + })), + ], + ); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + /// 路由订阅 + AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!); + } + + @override + void 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; + state.sureBtnState.value = 0; + } + + /// 从下级返回 当前界面即将出现 + @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; + state.sureBtnState.value = 0; + } +} diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_state.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_state.dart new file mode 100644 index 00000000..de48d7df --- /dev/null +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_state.dart @@ -0,0 +1,68 @@ + +import 'package:get/get.dart'; + +import '../../../../../tools/dateTool.dart'; + +class ExpireKeyChangeDateState { + ExpireKeyChangeDateState() { + Map map = Get.arguments; + if(map['pushType'] != null){ + pushType.value = map['pushType']; + } + if(map['lockName'] != null){ + lockName = map['lockName']; + } + + if(map['startDate'] != null){ + final int startDate = map['startDate']; + final int endDate = map['endDate']; + if(startDate == 0){ + beginTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()); + endTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()); + beginTimeTimestamp.value = DateTime.now().millisecondsSinceEpoch; + endTimeTimestamp.value = DateTime.now().millisecondsSinceEpoch; + }else{ + beginTime.value = DateTool().dateToYMDHNString(startDate.toString()); + endTime.value = DateTool().dateToYMDHNString(endDate.toString()); + beginTimeTimestamp.value = startDate; + endTimeTimestamp.value = endDate; + } + } + + if(map['lockId'] != null){ + lockId = map['lockId']; + } + if(map['keyID'] != null){ + keyID = map['keyID']; + } + if(map['keyNumber'] != null){ + keyNumber = map['keyNumber']; + } + if(map['keyName'] != null){ + keyName = map['keyName']; + } + if(map['isAdmin'] != null){ + isAdmin = map['isAdmin']; + } + if(map['isForce'] != null){ + isForce = map['isForce']; + } + } + + RxString beginTime = ''.obs;// 开始时间 + RxString endTime = ''.obs;// 结束时间 + RxInt beginTimeTimestamp = 0.obs;// 开始时间 + RxInt endTimeTimestamp = 0.obs;// 结束时间 + + String lockName = ''; + int lockId = 0; + int keyID = 0; + String keyName = ''; + int keyNumber = 0; + int isAdmin = 0; + int isForce = 0; + + RxInt pushType = 0.obs;// 0卡 1指纹 2遥控 3人脸 + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + RxInt sureBtnState = 0.obs; +} \ No newline at end of file diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_page.dart index bc6ed43f..1c8008a2 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_page.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_page.dart @@ -20,11 +20,11 @@ class _ExpireLockManagePageState extends State { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( - barTitle: "即将到期", + barTitle: '即将到期', haveBack: true, backgroundColor: AppColors.mainColor), body: const Column( - children: [ + children: [ ExpireLockManageTabbar(), ], ), diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_tabbar.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_tabbar.dart index 2c9c9a00..d6f6001b 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_tabbar.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireLockManage_tabbar.dart @@ -24,16 +24,15 @@ class _ExpireLockManageTabbarState extends State with Si late TabController _tabController; final List _itemTabs = [ - ItemView(title: TranslationLoader.lanKeys!.electronicKey!.tr, selectType: "0"), - ItemView(title: TranslationLoader.lanKeys!.password!.tr, selectType: "1"), - ItemView(title: TranslationLoader.lanKeys!.card!.tr, selectType: "2"), - ItemView(title: TranslationLoader.lanKeys!.fingerprint!.tr, selectType: "3"), - // ItemView(title: TranslationLoader.lanKeys!.face!.tr, selectType: "4"), + ItemView(title: TranslationLoader.lanKeys!.electronicKey!.tr, selectType: '0'), + ItemView(title: TranslationLoader.lanKeys!.password!.tr, selectType: '1'), + ItemView(title: TranslationLoader.lanKeys!.card!.tr, selectType: '2'), + ItemView(title: TranslationLoader.lanKeys!.fingerprint!.tr, selectType: '3'), + ItemView(title: TranslationLoader.lanKeys!.face!.tr, selectType: '4'), ]; @override void initState() { - // TODO: implement initState super.initState(); _tabController = TabController( @@ -51,7 +50,7 @@ class _ExpireLockManageTabbarState extends State with Si Widget build(BuildContext context) { return Expanded( child: Column( - children: [ + children: [ _tabBar(), _pageWidget(), ], @@ -61,10 +60,10 @@ class _ExpireLockManageTabbarState extends State with Si TabBar _tabBar() { return TabBar( controller: _tabController, - onTap: (index) { + onTap: (int index) { FocusScope.of(context).requestFocus(FocusNode()); }, - tabs: _itemTabs.map((ItemView item) => _tab(item)).toList(), + tabs: _itemTabs.map(_tab).toList(), isScrollable: true, indicatorColor: Colors.red, unselectedLabelColor: Colors.black, @@ -96,12 +95,12 @@ class _ExpireLockManageTabbarState extends State with Si return Expanded( child: TabBarView( controller: _tabController, - children:const [ + children: const [ ExpireLockListPage(), ExpirePasswordPage(), ExpireCardPage(), ExpireFingerprintPage(), - // ExpireFacePage(), + ExpireFacePage(), ] ), ); diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart index 97e6cf3b..9bf13230 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart @@ -1,8 +1,5 @@ + class ExpirePasswordEntity { - int? errorCode; - String? description; - String? errorMsg; - ExpirePasswordListData? data; ExpirePasswordEntity( {this.errorCode, this.description, this.errorMsg, this.data}); @@ -13,6 +10,10 @@ class ExpirePasswordEntity { errorMsg = json['errorMsg']; data = json['data'] != null ? ExpirePasswordListData.fromJson(json['data']) : null; } + int? errorCode; + String? description; + String? errorMsg; + ExpirePasswordListData? data; Map toJson() { final Map data = {}; @@ -27,11 +28,6 @@ class ExpirePasswordEntity { } class ExpirePasswordListData { - List? list; - int? pageNo; - int? pageSize; - int? pages; - int? total; ExpirePasswordListData({this.list, this.pageNo, this.pageSize, this.pages, this.total}); @@ -47,6 +43,11 @@ class ExpirePasswordListData { pages = json['pages']; total = json['total']; } + List? list; + int? pageNo; + int? pageSize; + int? pages; + int? total; Map toJson() { final Map data = {}; @@ -62,31 +63,6 @@ class ExpirePasswordListData { } class ExpirePasswordItemData { - String? clientId; - int? lockOwnerId; - int? lockId; - int? keyboardPwdType; - int? keyboardPwdStatus; - int? startDate; - int? endDate; - String? keyboardPwd; - String? keyboardPwdHash; - int? addType; - int? pwdRight; - int? isCustom; - int? isCoerced; - int? hoursStart; - int? hoursEnd; - int? pwdUserNo; - int? businessId; - String? createdAt; - String? updatedAt; - ApiUser? apiUser; - int? pwdId; - int? uid; - String? nickname; - String? lockAlias; - int? expireDate; ExpirePasswordItemData( {this.clientId, @@ -138,12 +114,41 @@ class ExpirePasswordItemData { apiUser = json['api_user'] != null ? ApiUser.fromJson(json['api_user']) : null; + lock_info = json['lock_info'] != null + ? ApiUserInfo.fromJson(json['lock_info']) + : null; pwdId = json['pwdId']; uid = json['uid']; nickname = json['nickname']; lockAlias = json['lockAlias']; expireDate = json['expireDate']; } + String? clientId; + int? lockOwnerId; + int? lockId; + int? keyboardPwdType; + int? keyboardPwdStatus; + int? startDate; + int? endDate; + String? keyboardPwd; + String? keyboardPwdHash; + int? addType; + int? pwdRight; + int? isCustom; + int? isCoerced; + int? hoursStart; + int? hoursEnd; + int? pwdUserNo; + int? businessId; + String? createdAt; + String? updatedAt; + ApiUser? apiUser; + ApiUserInfo? lock_info; + int? pwdId; + int? uid; + String? nickname; + String? lockAlias; + int? expireDate; Map toJson() { final Map data = {}; @@ -169,6 +174,9 @@ class ExpirePasswordItemData { if (apiUser != null) { data['api_user'] = apiUser!.toJson(); } + if (lock_info != null) { + data['lock_info'] = lock_info!.toJson(); + } data['pwdId'] = pwdId; data['uid'] = uid; data['nickname'] = nickname; @@ -179,8 +187,6 @@ class ExpirePasswordItemData { } class ApiUser { - int? id; - String? accountName; ApiUser({this.id, this.accountName}); @@ -188,6 +194,8 @@ class ApiUser { id = json['id']; accountName = json['account_name']; } + int? id; + String? accountName; Map toJson() { final Map data = {}; @@ -196,3 +204,19 @@ class ApiUser { return data; } } + +class ApiUserInfo { + + ApiUserInfo({this.btDeviceName}); + + ApiUserInfo.fromJson(Map json) { + btDeviceName = json['btDeviceName']; + } + String? btDeviceName; + + Map toJson() { + final Map data = {}; + data['account_name'] = btDeviceName; + return data; + } +} diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_logic.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_logic.dart index 2fc3273e..6b9a2d9d 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_logic.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_logic.dart @@ -1,19 +1,129 @@ +import 'dart:async'; + +import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/dateTool.dart'; +import '../../../../../blue/blue_manage.dart'; +import '../../../../../blue/io_protocol/io_senderCustomPasswords.dart'; +import '../../../../../blue/io_reply.dart'; +import '../../../../../blue/io_tool/io_tool.dart'; +import '../../../../../blue/io_tool/manager_event_bus.dart'; +import '../../../../../blue/sender_manage.dart'; import '../../../../../main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart'; import '../../../../../network/api_repository.dart'; import '../../../../../tools/eventBusEventManage.dart'; +import '../../../../../tools/storage.dart'; import 'expirePassword_entity.dart'; import 'expirePassword_state.dart'; class ExpirePasswordLogic extends BaseGetXController { ExpirePasswordState state = ExpirePasswordState(); + // 获取解析后的数据 + late StreamSubscription _replySubscription; + void _initReplySubscription() { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) { + + // 添加卡片开始(删除自定义密码) + if((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) { + _replyAddPassword(reply); + } + }); + } + + // 添加密码开始(此处用作删除卡片) + Future _replyAddPassword(Reply reply) async { + final int status = reply.data[2]; + + switch(status){ + case 0x00: + //成功 + cancelBlueConnetctToastTimer(); + deletePwdRequest(); + break; + case 0x06: + //无权限 + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List token = reply.data.sublist(5, 9); + final List saveStrList = changeIntListToStringList(token); + Storage.setStringList(saveBlueToken, saveStrList); + + IoSenderManage.senderCustomPasswordsCommand( + keyID:'0', + userID:(await Storage.getUid())!, + pwdNo:state.seletIndexEntity.isCustom == 1 ? state.seletIndexEntity.pwdUserNo : 0, + pwd:state.seletIndexEntity.keyboardPwd,//state.deletPWD, + operate: state.seletIndexEntity.isCustom == 1 ? 2 : 3, + isAdmin: 0, + useCountLimit: 0xffff, + startTime:0x11223344, + endTime:0x11223344, + needAuthor: 1, + isBeforeAddUser: true, + signKey: signKeyDataList, + privateKey: getPrivateKeyList, + token: token); + break; + default: + //失败 + cancelBlueConnetctToastTimer(); + break; + } + } + + // 设置自定义密码 这里用作删除密码 + Future senderCustomPasswords() async { + showEasyLoading(); + showBlueConnetctToastTimer(action: (){ + dismissEasyLoading(); + }); + BlueManage().blueSendData(state.seletIndexEntity.lock_info!.btDeviceName!.isEmpty ? BlueManage().connectDeviceName : state.seletIndexEntity.lock_info!.btDeviceName!, (BluetoothConnectionState deviceConnectionState) async { + if (deviceConnectionState == BluetoothConnectionState.connected) { + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); + + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); + + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); + + IoSenderManage.senderCustomPasswordsCommand( + keyID:'0', + userID:(await Storage.getUid())!, + pwdNo:state.seletIndexEntity.isCustom == 1 ? state.seletIndexEntity.pwdUserNo : 0, + pwd:state.seletIndexEntity.keyboardPwd,//state.deletPWD, + operate: state.seletIndexEntity.isCustom == 1 ? 2 : 3, + isAdmin: 0, + useCountLimit: 0xffff, + startTime:0x11223344, + endTime:0x11223344, + needAuthor: 1, + isBeforeAddUser: true, + signKey: signKeyDataList, + privateKey: getPrivateKeyList, + token: getTokenList, + ); + } else if (deviceConnectionState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + state.sureBtnState.value = 0; + if(state.ifCurrentScreen.value == true){ + showBlueConnetctToast(); + } + } + }); + } + //请求即将到期列表 Future expirePasswordListRequest() async { - ExpirePasswordEntity entity = await ApiRepository.to - .expirePasswordList(pageNo.toString(), pageSize.toString()); + final ExpirePasswordEntity entity = await ApiRepository.to.expirePasswordList(pageNo.toString(), pageSize.toString()); if (entity.errorCode!.codeIsSuccessful) { if (pageNo == 1) { state.dataList.value = entity.data!.list!; @@ -29,14 +139,13 @@ class ExpirePasswordLogic extends BaseGetXController { } //删除密码请求 deleteType:1-蓝牙 2-网关 - Future deletePwdRequest( - ExpirePasswordItemData expirePasswordItemData) async { - PasswordKeyEntity entity = await ApiRepository.to.deleteKeyboardPwd( - lockId: expirePasswordItemData.lockId.toString(), - keyboardPwdId: expirePasswordItemData.pwdId.toString(), + Future deletePwdRequest() async { + final PasswordKeyEntity entity = await ApiRepository.to.deleteKeyboardPwd( + lockId: state.seletIndexEntity.lockId.toString(), + keyboardPwdId: state.seletIndexEntity.pwdId.toString(), deleteType: 1); if (entity.errorCode!.codeIsSuccessful) { - showToast("删除成功", something: () { + showToast('删除成功', something: () { pageNo = 1; expirePasswordListRequest(); eventBus.fire(LockUserManageListRefreshUI()); @@ -56,4 +165,17 @@ class ExpirePasswordLogic extends BaseGetXController { } return useDateStr; } + + @override + void onReady() { + super.onReady(); + _initReplySubscription(); + } + + @override + void onClose() { + super.onClose(); + _replySubscription.cancel(); + } + } diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_page.dart index e9d7cee7..16254d9e 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_page.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_page.dart @@ -1,10 +1,11 @@ + import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_colors.dart'; -import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; +import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_state.dart'; import 'package:star_lock/tools/EasyRefreshTool.dart'; import 'package:star_lock/tools/noData.dart'; @@ -20,12 +21,14 @@ class ExpirePasswordPage extends StatefulWidget { } class _ExpirePasswordPageState extends State { - final logic = Get.put(ExpirePasswordLogic()); - final state = Get.find().state; + final ExpirePasswordLogic logic = Get.put(ExpirePasswordLogic()); + final ExpirePasswordState state = Get.find().state; Future getHttpData() async { logic.expirePasswordListRequest().then((ExpirePasswordEntity value) { - if (mounted) setState(() {}); + if (mounted) { + setState(() {}); + } }); } @@ -46,7 +49,7 @@ class _ExpirePasswordPageState extends State { onLoad: () { getHttpData(); }, - child: Obx(() => _buildMainUI())); + child: Obx(_buildMainUI)); } Widget _buildMainUI() { @@ -60,19 +63,19 @@ class _ExpirePasswordPageState extends State { : SlidableAutoCloseBehavior( child: ListView.separated( itemCount: state.dataList.length, - itemBuilder: (c, index) { - ExpirePasswordItemData indexEntity = state.dataList[index]; + itemBuilder: (BuildContext c, int index) { + final ExpirePasswordItemData indexEntity = state.dataList[index]; + state.seletIndexEntity = indexEntity; return Slidable( key: ValueKey(indexEntity.uid), endActionPane: ActionPane( extentRatio: 0.2, motion: const ScrollMotion(), - children: [ + children: [ SlidableAction( onPressed: (BuildContext context) { - ShowTipView().showIosTipWithContentDialog("确定删除该密码吗?", - () { - logic.deletePwdRequest(indexEntity); + ShowTipView().showIosTipWithContentDialog('确定删除该密码吗?', () { + logic.senderCustomPasswords(); }); }, backgroundColor: Colors.red, @@ -119,17 +122,19 @@ class _ExpirePasswordPageState extends State { // } else { var backData = await Get.toNamed( Routers.passwordKeyDetailChangeDatePage, - arguments: { - 'itemData': itemData, - + arguments: { + 'expirePasswordItemData': itemData, }); if (backData != null) { - itemData.startDate = - int.parse(backData["beginTimeTimestamp"]) * 1000; - itemData.endDate = int.parse(backData["endTimeTimestamp"]) * 1000; - // 改了日期之后,永久只能改限时的 - itemData.keyboardPwdType = 3; - setState(() {}); + // itemData.startDate = + // int.parse(backData['beginTimeTimestamp']) * 1000; + // itemData.endDate = int.parse(backData['endTimeTimestamp']) * 1000; + // // 改了日期之后,永久只能改限时的 + // itemData.keyboardPwdType = 3; + // setState(() {}); + + logic.pageNo = 1; + getHttpData(); } // } }, @@ -137,7 +142,7 @@ class _ExpirePasswordPageState extends State { height: 90.h, color: Colors.white, child: Row( - children: [ + children: [ SizedBox( width: 30.w, ), @@ -152,10 +157,10 @@ class _ExpirePasswordPageState extends State { Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, - children: [ + children: [ Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( itemData.nickname ?? '', style: TextStyle( @@ -166,7 +171,7 @@ class _ExpirePasswordPageState extends State { width: 10.w, )), Text( - itemData.lockAlias ?? '', + itemData.lock_info!.btDeviceName ?? '', style: TextStyle( fontSize: 20.sp, color: AppColors.blackColor), ), @@ -175,7 +180,7 @@ class _ExpirePasswordPageState extends State { SizedBox(height: 10.h), Row( mainAxisAlignment: MainAxisAlignment.start, - children: [ + children: [ Text( logic.getExpireDateStr(itemData), style: TextStyle( @@ -202,7 +207,7 @@ class _ExpirePasswordPageState extends State { Widget getStatus(ExpirePasswordItemData itemData) { //keyboardPwdStatus 1:正常 2:已过期 return Row( - children: [ + children: [ Visibility( visible: itemData.expireDate! > 0 ? true : false, child: Container( diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_state.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_state.dart index 838831c4..f189b5bd 100755 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_state.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_state.dart @@ -3,5 +3,10 @@ import 'package:get/get.dart'; import 'expirePassword_entity.dart'; class ExpirePasswordState { - final dataList = [].obs; + final RxList dataList = [].obs; + ExpirePasswordItemData seletIndexEntity = ExpirePasswordItemData(); + + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) + } \ No newline at end of file diff --git a/lib/network/api.dart b/lib/network/api.dart index 794164db..70fe404b 100755 --- a/lib/network/api.dart +++ b/lib/network/api.dart @@ -156,7 +156,7 @@ abstract class Api { final String expireCardListURL = '/keyUser/listExpireCard'; //即将到期的卡列表 final String expireFingerprintListURL = '/keyUser/listExpireFingerprint'; //即将到期的指纹列表 - final String expireFaceListURL = '//keyUser/listExpireFace'; //即将到期的人脸列表 + final String expireFaceListURL = '/keyUser/listExpireFace'; //即将到期的人脸列表 final String userSettingsInfoURL = '/user/userSettingsInfo'; //个人设置信息 final String setAlertModeURL = '/user/setAlertMode'; //提示音 final String setTouchUnlockFlagURL = '/user/setTouchUnlockFlag'; //触摸开锁 diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 74914665..49d0a0aa 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -2096,6 +2096,7 @@ class ApiProvider extends BaseProvider { int uploadType, int recordType, List records, + bool isUnShowLoading, ) => post( lockDataUploadUrl.toUrl, @@ -2104,7 +2105,9 @@ class ApiProvider extends BaseProvider { 'uploadType': uploadType, 'recordType': recordType, 'records': records - })); + }), + isUnShowLoading: isUnShowLoading + ); // 获取短信或者邮箱模板 Future> getNoticeTemplate( diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index 1b839317..dc880523 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -64,6 +64,7 @@ import '../mine/addLock/saveLock/entity/SaveLockEntity.dart'; import '../mine/message/messageList/messageList_entity.dart'; import '../mine/minePersonInfo/minePersonInfoPage/minePersonGetUploadFileInfo_entity.dart'; import '../mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_entity.dart'; +import '../mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_entity.dart'; import '../mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart'; import '../mine/mineSet/transferGateway/selectGetewayList_entity.dart'; import '../mine/mineSet/transferSmartLock/recipientInformation/recipientInformation_entity.dart'; @@ -692,10 +693,10 @@ class ApiRepository { } //即将到期的人脸列表 - Future expireFaceList( + Future expireFaceList( String pageNo, String pageSize) async { final res = await apiProvider.expireFaceList(pageNo, pageSize); - return ExpireFingerprintEntity.fromJson(res.body); + return ExpireFaceEntity.fromJson(res.body); } //删除密码 @@ -2132,9 +2133,10 @@ class ApiRepository { required int uploadType, required int recordType, required List records, + required bool isUnShowLoading, }) async { final res = await apiProvider.lockDataUpload( - lockId, uploadType, recordType, records); + lockId, uploadType, recordType, records, isUnShowLoading); return LoginEntity.fromJson(res.body); }