1、添加上传锁设置功能。2、添加我的设置-锁用户管理-即将到期-电子钥匙、密码、卡、指纹、人脸的修改跟删除功能
This commit is contained in:
parent
9bce7316b9
commit
df75462647
@ -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...",
|
||||
|
||||
@ -512,7 +512,7 @@
|
||||
"未打卡":"未打卡",
|
||||
"钥匙将在":"钥匙将在",
|
||||
"天后失效":"天后失效",
|
||||
"锁电量更新时间:":"锁电量更新时间:",
|
||||
"电量更新时间:":"电量更新时间:",
|
||||
"新增配件":"新增配件",
|
||||
"请在锁旁边完成第一次开锁":"请在锁旁边完成第一次开锁",
|
||||
"正在开锁中...":"正在开锁中...",
|
||||
|
||||
@ -487,7 +487,7 @@
|
||||
"早退": "早退",
|
||||
"钥匙将在": "钥匙将在",
|
||||
"天后失效": "天后失效",
|
||||
"锁电量更新时间:": "锁电量更新时间:",
|
||||
"电量更新时间:": "电量更新时间:",
|
||||
"新增配件": "新增配件",
|
||||
"请在锁旁边完成第一次开锁": "请在锁旁边完成第一次开锁",
|
||||
"正在开锁中...": "正在开锁中...",
|
||||
|
||||
@ -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()),
|
||||
];
|
||||
}
|
||||
|
||||
109
lib/blue/io_protocol/io_updataLockSet.dart
Normal file
109
lib/blue/io_protocol/io_updataLockSet.dart
Normal file
@ -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<int>? token;
|
||||
int? needAuthor;
|
||||
List<int>? signKey;
|
||||
List<int>? privateKey;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'UpdataLockPasswordListCommand{lockID: $lockID, keyID:$keyID userID: $userID, '
|
||||
'token: $token, '
|
||||
'signKey: $signKey, privateKey: $privateKey}';
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = <int>[];
|
||||
List<int> ebcData = <int>[];
|
||||
|
||||
// 指令类型
|
||||
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<int> authCodeData = <int>[];
|
||||
//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<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
|
||||
final int status = data[2];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
{
|
||||
// 子命令类型
|
||||
|
||||
@ -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<int>? signKey,
|
||||
required List<int>? 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<int>? signKey,
|
||||
required List<int>? 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<int>? signKey,
|
||||
required List<int>? 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<int>? token,
|
||||
required int? needAuthor,
|
||||
required List<int>? signKey,
|
||||
required List<int>? privateKey,
|
||||
CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: UpdataLockSetCommand(
|
||||
lockID: lockID,
|
||||
userID: userID,
|
||||
token: token,
|
||||
needAuthor: needAuthor,
|
||||
signKey: signKey,
|
||||
privateKey: privateKey,
|
||||
),
|
||||
callBack: callBack);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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){
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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<OtherTypeKeyChangeDatePage>
|
||||
with RouteAware {
|
||||
final logic = Get.put(OtherTypeKeyChangeDateLogic());
|
||||
final state = Get.find<OtherTypeKeyChangeDateLogic>().state;
|
||||
class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage> with RouteAware {
|
||||
final OtherTypeKeyChangeDateLogic logic = Get.put(OtherTypeKeyChangeDateLogic());
|
||||
final OtherTypeKeyChangeDateState state = Get.find<OtherTypeKeyChangeDateLogic>().state;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -38,7 +38,7 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
|
||||
"${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}",
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor,
|
||||
actionsList: [
|
||||
actionsList: <Widget>[
|
||||
TextButton(
|
||||
child: Text(
|
||||
TranslationLoader.lanKeys!.sure!.tr,
|
||||
@ -92,7 +92,7 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
|
||||
|
||||
Widget buildMainUI() {
|
||||
return Column(
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
|
||||
rightTitle: state.beginTime.value,
|
||||
@ -102,7 +102,7 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
|
||||
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<OtherTypeKeyChangeDatePage>
|
||||
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<OtherTypeKeyChangeDatePage>
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
@ -137,7 +136,6 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
|
||||
// 添加卡片开始(重置锁里面所有卡)
|
||||
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
|
||||
_replyAddICCardBegin(reply);
|
||||
@ -47,7 +46,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
|
||||
|
||||
// 添加人脸开始
|
||||
Future<void> _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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> 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<void> _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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> _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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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: <String, Object>{
|
||||
"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: <String, Object>{
|
||||
"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: <String, Object>{
|
||||
"starDate":state.starDateTimestamp.value.toString(),
|
||||
"endDate":state.endDateTimestamp.value.toString(),
|
||||
"starTime":state.starTimeTimestamp.value.toString(),
|
||||
|
||||
@ -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<CheckingInSetPage> {
|
||||
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<CheckingInSetPage> {
|
||||
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(
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription =
|
||||
EventBusManager().eventBus!.on<Reply>().listen((reply) {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||
// 添加人脸开始(此处用作删除人脸)
|
||||
if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) {
|
||||
_replyAddFaceBegin(reply);
|
||||
@ -46,7 +46,7 @@ class FaceListLogic extends BaseGetXController {
|
||||
|
||||
// 添加人脸开始---这里用作删除人脸
|
||||
Future<void> _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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<FingerprintListDataEntity> 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<OtherTypeRefreshListEvent>().listen((event) {
|
||||
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((OtherTypeRefreshListEvent event) {
|
||||
pageNo = 1;
|
||||
getFaceListData();
|
||||
});
|
||||
@ -395,11 +397,10 @@ class FaceListLogic extends BaseGetXController {
|
||||
|
||||
@override
|
||||
Future<void> 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<void> 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<void> 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();
|
||||
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
|
||||
// 添加指纹开始
|
||||
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
|
||||
_replyAddFingerprintBegin(reply);
|
||||
@ -43,7 +44,7 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
Future<void> _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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> _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<void> _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<int> 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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<void> senderCancelAddFingerprintCommand() async {
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<void> 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<void> 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();
|
||||
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||
// 添加指纹开始(此处用作修改或者删除指纹)
|
||||
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
|
||||
_replyAddFingerprintBegin(reply);
|
||||
@ -32,7 +33,7 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
|
||||
// 添加指纹开始
|
||||
Future<void> _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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<void> 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<void> 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();
|
||||
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().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<void> _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<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> _replyQueryingFingerprintStatus(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
switch(status){
|
||||
case 0x00:
|
||||
//成功
|
||||
break;
|
||||
case 0x06:
|
||||
//需要鉴权
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Future<void> _replyQueryingFingerprintStatus(Reply reply) async {
|
||||
// final int status = reply.data[2];
|
||||
// switch(status){
|
||||
// case 0x00:
|
||||
// //成功
|
||||
// break;
|
||||
// case 0x06:
|
||||
// //需要鉴权
|
||||
// break;
|
||||
// default:
|
||||
// //失败
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// 获取卡片状态
|
||||
Future<void> _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<void> _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<void> _replyCheckingUserInfoCount(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
// Future<void> _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<int> 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<void> senderQueryingFingerprintStatus() async {
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async {
|
||||
if (state == BluetoothConnectionState.connected) {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> 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<void> senderQueryingFingerprintStatus() async {
|
||||
// BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async {
|
||||
// if (state == BluetoothConnectionState.connected) {
|
||||
// final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
// final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
//
|
||||
// final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
// final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
//
|
||||
// final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// final List<int> 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<void> senderCheckingUserInfoCount() async {
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async {
|
||||
if (state == BluetoothConnectionState.connected) {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> 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<void> senderCheckingUserInfoCount() async {
|
||||
// BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async {
|
||||
// if (state == BluetoothConnectionState.connected) {
|
||||
// final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
// final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
//
|
||||
// final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
// final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
//
|
||||
// final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// final List<int> 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<void> senderAddFingerprint() async {
|
||||
@ -253,14 +253,14 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<FingerprintListDataEntity> 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<void> 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<OtherTypeRefreshListEvent>().listen((event) {
|
||||
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().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<void> 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<void> onInit() async {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> 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();
|
||||
|
||||
@ -510,7 +510,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
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,
|
||||
|
||||
@ -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<void> _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<int> token = reply.data.sublist(3, 7);
|
||||
final List<String> saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
updataLockSet(token);
|
||||
break;
|
||||
default:
|
||||
dismissEasyLoading();
|
||||
cancelBlueConnetctToastTimer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 删除用户
|
||||
// Future<void> deletUserAction() async {
|
||||
// showEasyLoading();
|
||||
@ -553,24 +586,72 @@ class LockSetLogic extends BaseGetXController {
|
||||
}
|
||||
}
|
||||
|
||||
// 上传数据获取设置
|
||||
Future<void> getUpdataLockSet() async {
|
||||
// showBlueConnetctToastTimer(action: (){
|
||||
// });
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
|
||||
if (connectionState == BluetoothConnectionState.connected) {
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
updataLockSet(getTokenList);
|
||||
} else if (connectionState == BluetoothConnectionState.disconnected) {
|
||||
// cancelBlueConnetctToastTimer();
|
||||
// if(state.ifCurrentScreen.value == true){
|
||||
// showBlueConnetctToast();
|
||||
// }
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 公共的上传锁设置
|
||||
Future<void> updataLockSet(List<int> token) async {
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
IoSenderManage.updataLockSetCommand(
|
||||
lockID: BlueManage().connectDeviceName,
|
||||
userID: await Storage.getUid(),
|
||||
token: token,
|
||||
needAuthor: 1,
|
||||
signKey: signKeyDataList,
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
|
||||
// 锁数据上传服务器
|
||||
Future<void> _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();
|
||||
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().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<void> _replyupdataLockPasswordListReply(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
Future<void> _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<int> 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<int> token = reply.data.sublist(3, 7);
|
||||
final List<String> saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
updataLockPasswordList(token, state.uploadPasswordPage);
|
||||
@ -99,8 +106,8 @@ class UploadDataLogic extends BaseGetXController{
|
||||
}
|
||||
|
||||
// 上传数据获取锁卡列表
|
||||
Future<void> _replyupdataLockCardListReply(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
Future<void> _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<int> 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<int> token = reply.data.sublist(3, 7);
|
||||
final List<String> saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
updataLockCardList(token, state.uploadCardPage);
|
||||
@ -143,8 +150,8 @@ class UploadDataLogic extends BaseGetXController{
|
||||
}
|
||||
|
||||
// 上传数据获取锁指纹列表
|
||||
Future<void> _replyupdataLockFingerprintListReply(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
Future<void> _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<int> 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<int> token = reply.data.sublist(3, 7);
|
||||
final List<String> saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
updataLockFingerprintList(token, state.uploadFingerprintPage);
|
||||
@ -187,8 +194,8 @@ class UploadDataLogic extends BaseGetXController{
|
||||
}
|
||||
|
||||
// 上传数据获取锁人脸列表解析
|
||||
Future<void> _replyupdataLockFaceListReply(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
Future<void> _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<int> 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<int> token = reply.data.sublist(3, 7);
|
||||
final List<String> saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
updataLockFaceList(token, state.uploadFacePage);
|
||||
@ -231,8 +238,8 @@ class UploadDataLogic extends BaseGetXController{
|
||||
}
|
||||
|
||||
// 上传数据获取锁掌静脉列表解析
|
||||
Future<void> _replyupdataLockPalmVeinListReply(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
Future<void> _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<int> 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<int> token = reply.data.sublist(3, 7);
|
||||
final List<String> saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
updataLockPalmVeinList(token, state.uploadPalmVeinPage);
|
||||
@ -277,6 +281,36 @@ class UploadDataLogic extends BaseGetXController{
|
||||
}
|
||||
}
|
||||
|
||||
// 上传数据获取锁设置解析
|
||||
Future<void> _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<int> token = reply.data.sublist(3, 7);
|
||||
final List<String> saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
updataLockSet(token);
|
||||
break;
|
||||
default:
|
||||
dismissEasyLoading();
|
||||
state.sureBtnState.value = 0;
|
||||
state.indexCount.value = 0;
|
||||
cancelBlueConnetctToastTimer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 上传数据获取锁密码列表
|
||||
Future<void> 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<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
updataLockPasswordList(getTokenList, state.uploadPasswordPage);
|
||||
} else if (connectionState == BluetoothConnectionState.disconnected) {
|
||||
@ -308,11 +342,11 @@ class UploadDataLogic extends BaseGetXController{
|
||||
|
||||
// 公共的获取密码列表
|
||||
Future<void> updataLockPasswordList(List<int> token, int page) async {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> 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<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
updataLockCardList(getTokenList, state.uploadCardPage);
|
||||
} else if (connectionState == BluetoothConnectionState.disconnected) {
|
||||
@ -354,11 +388,11 @@ class UploadDataLogic extends BaseGetXController{
|
||||
|
||||
// 公共的获取Card列表
|
||||
Future<void> updataLockCardList(List<int> token, int page) async {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> 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<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
updataLockFingerprintList(getTokenList, state.uploadFingerprintPage);
|
||||
} else if (connectionState == BluetoothConnectionState.disconnected) {
|
||||
@ -400,11 +434,11 @@ class UploadDataLogic extends BaseGetXController{
|
||||
|
||||
// 公共的获取指纹列表
|
||||
Future<void> updataLockFingerprintList(List<int> token, int page) async {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> 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<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
updataLockFaceList(getTokenList, state.uploadFacePage);
|
||||
} else if (connectionState == BluetoothConnectionState.disconnected) {
|
||||
@ -446,11 +480,11 @@ class UploadDataLogic extends BaseGetXController{
|
||||
|
||||
// 公共的获取人脸列表
|
||||
Future<void> updataLockFaceList(List<int> token, int page) async {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> 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<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
updataLockPalmVeinList(getTokenList, state.uploadPalmVeinPage);
|
||||
} else if (connectionState == BluetoothConnectionState.disconnected) {
|
||||
@ -493,11 +527,11 @@ class UploadDataLogic extends BaseGetXController{
|
||||
|
||||
// 公共的获取掌静脉列表
|
||||
Future<void> updataLockPalmVeinList(List<int> token, int page) async {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
IoSenderManage.updataLockPalmVeinListCommand(
|
||||
lockID: BlueManage().connectDeviceName,
|
||||
@ -511,22 +545,70 @@ class UploadDataLogic extends BaseGetXController{
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// 上传数据获取设置
|
||||
Future<void> 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<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<void> updataLockSet(List<int> token) async {
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
IoSenderManage.updataLockSetCommand(
|
||||
lockID: BlueManage().connectDeviceName,
|
||||
userID: await Storage.getUid(),
|
||||
token: token,
|
||||
needAuthor: 1,
|
||||
signKey: signKeyDataList,
|
||||
privateKey: getPrivateKeyList
|
||||
);
|
||||
}
|
||||
|
||||
// 锁数据上传服务器
|
||||
Future<void> _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();
|
||||
|
||||
@ -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<UploadDataPage> with RouteAware{
|
||||
final logic = Get.put(UploadDataLogic());
|
||||
final state = Get.find<UploadDataLogic>().state;
|
||||
final UploadDataLogic logic = Get.put(UploadDataLogic());
|
||||
final UploadDataState state = Get.find<UploadDataLogic>().state;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -29,30 +30,31 @@ class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
|
||||
body:Container(
|
||||
padding: EdgeInsets.all(30.w),
|
||||
child: Column(
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
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<UploadDataPage> with RouteAware{
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
@ -74,7 +75,6 @@ class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
@ -94,14 +94,9 @@ class _UploadDataPageState extends State<UploadDataPage> 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<UploadDataPage> with RouteAware{
|
||||
super.didPushNext();
|
||||
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
if (EasyLoading.isShow) {
|
||||
EasyLoading.dismiss(animation: true);
|
||||
}
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<int> uploadPasswordDataList = [];// 上传密码的数据
|
||||
int uploadPasswordPage = 0;// 上传密码的页数
|
||||
List<int> uploadPasswordDataList = <int>[];// 上传密码的数据
|
||||
|
||||
var uploadCardPage = 0;// 上传卡片的页数
|
||||
List<int> uploadCardDataList = [];// 上传卡片的数据
|
||||
int uploadCardPage = 0;// 上传卡片的页数
|
||||
List<int> uploadCardDataList = <int>[];// 上传卡片的数据
|
||||
|
||||
var uploadFingerprintPage = 0;// 上传指纹的页数
|
||||
List<int> uploadFingerprintDataList = [];// 上传指纹的数据
|
||||
int uploadFingerprintPage = 0;// 上传指纹的页数
|
||||
List<int> uploadFingerprintDataList = <int>[];// 上传指纹的数据
|
||||
|
||||
var uploadFacePage = 0;// 上传人脸的页数
|
||||
List<int> uploadFaceDataList = [];// 上传人脸的数据
|
||||
int uploadFacePage = 0;// 上传人脸的页数
|
||||
List<int> uploadFaceDataList = <int>[];// 上传人脸的数据
|
||||
|
||||
var uploadPalmVeinPage = 0;// 上传掌静脉的页数
|
||||
List<int> uploadPalmVeinDataList = [];// 上传掌静脉的数据
|
||||
int uploadPalmVeinPage = 0;// 上传掌静脉的页数
|
||||
List<int> uploadPalmVeinDataList = <int>[];// 上传掌静脉的数据
|
||||
|
||||
List<int> uploadLockSetDataList = <int>[];// 上传锁设置数据
|
||||
}
|
||||
@ -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<void> 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<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
@ -133,12 +133,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
|
||||
final List<int> 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,
|
||||
|
||||
@ -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<PasswordKeyDetailChangeDatePage> with RouteAware {
|
||||
final logic = Get.put(PasswordKeyDetailChangeDateLogic());
|
||||
final state = Get.find<PasswordKeyDetailChangeDateLogic>().state;
|
||||
class _PasswordKeyDetailChangeDatePage extends State<PasswordKeyDetailChangeDatePage> with RouteAware {
|
||||
final PasswordKeyDetailChangeDateLogic logic = Get.put(PasswordKeyDetailChangeDateLogic());
|
||||
final PasswordKeyDetailChangeDateState state = Get.find<PasswordKeyDetailChangeDateLogic>().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: <Widget>[
|
||||
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: <Widget>[
|
||||
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();
|
||||
|
||||
@ -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<PasswordKeyListItem> 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连接中(不可用)
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -27,11 +27,6 @@ class ExpireCardEntity {
|
||||
}
|
||||
|
||||
class ExpireCardListEntity {
|
||||
List<ExpireCardItemEntity>? 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<ExpireCardItemEntity>? list;
|
||||
int? pageNo;
|
||||
int? pageSize;
|
||||
int? pages;
|
||||
int? total;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -201,13 +201,13 @@ class ApiUser {
|
||||
}
|
||||
|
||||
class LockInfo {
|
||||
String? btDeviceName;
|
||||
|
||||
LockInfo({this.btDeviceName});
|
||||
|
||||
LockInfo.fromJson(Map<String, dynamic> json) {
|
||||
btDeviceName = json['btDeviceName'];
|
||||
}
|
||||
String? btDeviceName;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = Map<String, dynamic>();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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<ExpireCardPage> {
|
||||
final logic = Get.put(ExpireCardLogic());
|
||||
final state = Get.find<ExpireCardLogic>().state;
|
||||
final ExpireCardLogic logic = Get.put(ExpireCardLogic());
|
||||
final ExpireCardState state = Get.find<ExpireCardLogic>().state;
|
||||
|
||||
Future<void> getHttpData() async {
|
||||
logic.expirCardListRequest().then((ExpireCardEntity value){
|
||||
if(mounted) setState(() {});
|
||||
if(mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -57,17 +59,17 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
|
||||
: 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: <Widget>[
|
||||
SlidableAction(
|
||||
onPressed: (BuildContext context){
|
||||
ShowTipView().showIosTipWithContentDialog("确定删除卡吗?", (){
|
||||
ShowTipView().showIosTipWithContentDialog('确定删除卡吗?', (){
|
||||
state.deletExpireCardItemEntity = indexEntity;
|
||||
logic.senderAddICCard();
|
||||
});
|
||||
@ -95,44 +97,30 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
|
||||
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: <Widget>[
|
||||
SizedBox(
|
||||
width: 30.w,
|
||||
),
|
||||
@ -147,10 +135,10 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
itemData.nickname ?? '',
|
||||
style: TextStyle(
|
||||
@ -170,7 +158,7 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
|
||||
SizedBox(height: 10.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
logic.getExpireDateStr(itemData),
|
||||
style: TextStyle(
|
||||
|
||||
@ -4,9 +4,9 @@ import 'package:get/get.dart';
|
||||
import 'expireCard_entity.dart';
|
||||
|
||||
class ExpireCardState{
|
||||
final dataList = <ExpireCardItemEntity>[].obs;
|
||||
final RxList<ExpireCardItemEntity> dataList = <ExpireCardItemEntity>[].obs;
|
||||
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用)
|
||||
RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用)
|
||||
ExpireCardItemEntity deletExpireCardItemEntity = ExpireCardItemEntity();
|
||||
}
|
||||
@ -0,0 +1,234 @@
|
||||
class ExpireFaceEntity {
|
||||
|
||||
ExpireFaceEntity(
|
||||
{this.errorCode, this.description, this.errorMsg, this.data});
|
||||
|
||||
ExpireFaceEntity.fromJson(Map<String, dynamic> 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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
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<String, dynamic> json) {
|
||||
if (json['list'] != null) {
|
||||
list = <ExpireFaceListItemEntity>[];
|
||||
json['list'].forEach((v) {
|
||||
list!.add(ExpireFaceListItemEntity.fromJson(v));
|
||||
});
|
||||
}
|
||||
pageNo = json['pageNo'];
|
||||
pageSize = json['pageSize'];
|
||||
pages = json['pages'];
|
||||
total = json['total'];
|
||||
}
|
||||
List<ExpireFaceListItemEntity>? list;
|
||||
int? pageNo;
|
||||
int? pageSize;
|
||||
int? pages;
|
||||
int? total;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
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<String, dynamic> 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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
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<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
accountName = json['account_name'];
|
||||
}
|
||||
int? id;
|
||||
String? accountName;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['account_name'] = accountName;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class LockInfo {
|
||||
LockInfo({this.btDeviceName});
|
||||
LockInfo.fromJson(Map<String, dynamic> json) {
|
||||
btDeviceName = json['btDeviceName'];
|
||||
}
|
||||
String? btDeviceName;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['btDeviceName'] = btDeviceName;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||
// 添加人脸开始(此处用作删除人脸)
|
||||
if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) {
|
||||
_replyAddFaceBegin(reply);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 添加人脸开始---这里用作删除人脸
|
||||
Future<void> _replyAddFaceBegin(Reply reply) async {
|
||||
final int status = reply.data[2];
|
||||
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
cancelBlueConnetctToastTimer();
|
||||
dismissEasyLoading();
|
||||
deletFacesData();
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> senderAddFace() async {
|
||||
showEasyLoading();
|
||||
showBlueConnetctToastTimer(action: () {
|
||||
dismissEasyLoading();
|
||||
});
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<void> 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<ExpireFingerprintEntity> expireFaceList() async {
|
||||
ExpireFingerprintEntity entity = await ApiRepository.to.expireFaceList(pageNo.toString(), pageSize.toString());
|
||||
Future<ExpireFaceEntity> 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<void> onReady() async {
|
||||
super.onReady();
|
||||
|
||||
// 获取是否是演示模式 演示模式不获取接口
|
||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
if (isDemoMode == false) {
|
||||
_initReplySubscription();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> onClose() async {
|
||||
super.onClose();
|
||||
|
||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
if (isDemoMode == false) {
|
||||
_replySubscription.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<ExpireFacePage> createState() => _ExpireFacePageState();
|
||||
}
|
||||
|
||||
class _ExpireFacePageState extends State<ExpireFacePage> {
|
||||
final logic = Get.put(ExpireFaceLogic());
|
||||
final state = Get.find<ExpireFaceLogic>().state;
|
||||
class _ExpireFacePageState extends State<ExpireFacePage> with RouteAware {
|
||||
final ExpireFaceLogic logic = Get.put(ExpireFaceLogic());
|
||||
final ExpireFaceState state = Get.find<ExpireFaceLogic>().state;
|
||||
|
||||
Future<void> 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<ExpireFacePage> {
|
||||
onLoad: (){
|
||||
getHttpData();
|
||||
},
|
||||
child: Obx(() => _buildMainUI())
|
||||
child: Obx(_buildMainUI)
|
||||
);
|
||||
}
|
||||
|
||||
@ -55,19 +61,19 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
|
||||
: 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: <Widget>[
|
||||
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<ExpireFacePage> {
|
||||
);
|
||||
}
|
||||
|
||||
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: <Widget>[
|
||||
SizedBox(
|
||||
width: 30.w,
|
||||
),
|
||||
@ -145,10 +137,10 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
itemData.nickname ?? '',
|
||||
style: TextStyle(
|
||||
@ -168,7 +160,7 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
|
||||
SizedBox(height: 10.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
logic.getExpireDateStr(itemData),
|
||||
style: TextStyle(
|
||||
@ -192,21 +184,7 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
|
||||
);
|
||||
}
|
||||
|
||||
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<ExpireFacePage> {
|
||||
),
|
||||
);
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../expireFingerprint/expireFingerprint_entity.dart';
|
||||
import 'expireFace_entity.dart';
|
||||
|
||||
class ExpireFaceState{
|
||||
final dataList = <ExpireFingerprintItemEntity>[].obs;
|
||||
final RxList<ExpireFaceListItemEntity> dataList = <ExpireFaceListItemEntity>[].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();
|
||||
|
||||
}
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -28,11 +28,6 @@ class ExpireFingerprintEntity {
|
||||
}
|
||||
|
||||
class ExpireFingerprintListEntity {
|
||||
List<ExpireFingerprintItemEntity>? 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<ExpireFingerprintItemEntity>? list;
|
||||
int? pageNo;
|
||||
int? pageSize;
|
||||
int? pages;
|
||||
int? total;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -202,13 +202,13 @@ class ApiUser {
|
||||
}
|
||||
|
||||
class LockInfo {
|
||||
String? btDeviceName;
|
||||
|
||||
LockInfo({this.btDeviceName});
|
||||
|
||||
LockInfo.fromJson(Map<String, dynamic> json) {
|
||||
btDeviceName = json['btDeviceName'];
|
||||
}
|
||||
String? btDeviceName;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||
@ -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<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
final List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> 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<void> 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();
|
||||
|
||||
@ -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<ExpireFingerprintPage> {
|
||||
final logic = Get.put(ExpireFingerprintLogic());
|
||||
final state = Get.find<ExpireFingerprintLogic>().state;
|
||||
final ExpireFingerprintLogic logic = Get.put(ExpireFingerprintLogic());
|
||||
final ExpireFingerprintState state = Get.find<ExpireFingerprintLogic>().state;
|
||||
|
||||
Future<void> getHttpData() async {
|
||||
logic.expirFingerprintListRequest().then((ExpireFingerprintEntity value) {
|
||||
if (mounted) setState(() {});
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -44,7 +48,7 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
|
||||
onLoad: () {
|
||||
getHttpData();
|
||||
},
|
||||
child: Obx(() => _buildMainUI()));
|
||||
child: Obx(_buildMainUI));
|
||||
}
|
||||
|
||||
Widget _buildMainUI() {
|
||||
@ -58,18 +62,17 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
|
||||
: 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: <Widget>[
|
||||
SlidableAction(
|
||||
onPressed: (BuildContext context) {
|
||||
ShowTipView().showIosTipWithContentDialog("确定删除指纹吗?",
|
||||
() {
|
||||
ShowTipView().showIosTipWithContentDialog('确定删除指纹吗?', () {
|
||||
state.deletExpireFingerprintItemEntity =
|
||||
indexEntity;
|
||||
logic.senderAddFingerprint();
|
||||
@ -98,44 +101,30 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
|
||||
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: <Widget>[
|
||||
SizedBox(
|
||||
width: 30.w,
|
||||
),
|
||||
@ -150,10 +139,10 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
itemData.nickname ?? '',
|
||||
style: TextStyle(
|
||||
@ -173,7 +162,7 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
|
||||
SizedBox(height: 10.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
logic.getExpireDateStr(itemData),
|
||||
style: TextStyle(
|
||||
@ -198,20 +187,6 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
|
||||
}
|
||||
|
||||
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),
|
||||
|
||||
@ -4,9 +4,9 @@ import 'package:get/get.dart';
|
||||
import 'expireFingerprint_entity.dart';
|
||||
|
||||
class ExpireFingerprintState{
|
||||
final dataList = <ExpireFingerprintItemEntity>[].obs;
|
||||
final RxList<ExpireFingerprintItemEntity> dataList = <ExpireFingerprintItemEntity>[].obs;
|
||||
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用)
|
||||
RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用)
|
||||
ExpireFingerprintItemEntity deletExpireFingerprintItemEntity = ExpireFingerprintItemEntity();
|
||||
}
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().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<void> _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<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> 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<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> 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<void> _replyAddICCardBegin(Reply reply) async {
|
||||
final int status = reply.data[2];
|
||||
|
||||
switch(status){
|
||||
case 0x00:
|
||||
//成功
|
||||
cancelBlueConnetctToastTimer();
|
||||
dismissEasyLoading();
|
||||
editICCardData();
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> _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<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> 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<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<void> 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<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<void> 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: <String, String>{
|
||||
'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(),
|
||||
'endTimeTimestamp':state.endTimeTimestamp.value.toString(),
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 编辑iC卡
|
||||
Future<void> 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: <String, String>{
|
||||
'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(),
|
||||
'endTimeTimestamp':state.endTimeTimestamp.value.toString(),
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 修改人脸有效期
|
||||
Future<void> 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: <String, String>{
|
||||
'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();
|
||||
}
|
||||
}
|
||||
@ -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<ExpireKeyChangeDatePage> createState() => _ExpireKeyChangeDatePageState();
|
||||
}
|
||||
|
||||
class _ExpireKeyChangeDatePageState extends State<ExpireKeyChangeDatePage> with RouteAware {
|
||||
final ExpireKeyChangeDateLogic logic = Get.put(ExpireKeyChangeDateLogic());
|
||||
final ExpireKeyChangeDateState state = Get.find<ExpireKeyChangeDateLogic>().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: <Widget>[
|
||||
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: <Widget>[
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -20,11 +20,11 @@ class _ExpireLockManagePageState extends State<ExpireLockManagePage> {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle: "即将到期",
|
||||
barTitle: '即将到期',
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor),
|
||||
body: const Column(
|
||||
children: [
|
||||
children: <Widget>[
|
||||
ExpireLockManageTabbar(),
|
||||
],
|
||||
),
|
||||
|
||||
@ -24,16 +24,15 @@ class _ExpireLockManageTabbarState extends State<ExpireLockManageTabbar> with Si
|
||||
late TabController _tabController;
|
||||
|
||||
final List<ItemView> _itemTabs = <ItemView>[
|
||||
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<ExpireLockManageTabbar> with Si
|
||||
Widget build(BuildContext context) {
|
||||
return Expanded(
|
||||
child: Column(
|
||||
children: [
|
||||
children: <Widget>[
|
||||
_tabBar(),
|
||||
_pageWidget(),
|
||||
],
|
||||
@ -61,10 +60,10 @@ class _ExpireLockManageTabbarState extends State<ExpireLockManageTabbar> 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<ExpireLockManageTabbar> with Si
|
||||
return Expanded(
|
||||
child: TabBarView(
|
||||
controller: _tabController,
|
||||
children:const [
|
||||
children: const <Widget>[
|
||||
ExpireLockListPage(),
|
||||
ExpirePasswordPage(),
|
||||
ExpireCardPage(),
|
||||
ExpireFingerprintPage(),
|
||||
// ExpireFacePage(),
|
||||
ExpireFacePage(),
|
||||
]
|
||||
),
|
||||
);
|
||||
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -27,11 +28,6 @@ class ExpirePasswordEntity {
|
||||
}
|
||||
|
||||
class ExpirePasswordListData {
|
||||
List<ExpirePasswordItemData>? 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<ExpirePasswordItemData>? list;
|
||||
int? pageNo;
|
||||
int? pageSize;
|
||||
int? pages;
|
||||
int? total;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -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<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
@ -196,3 +204,19 @@ class ApiUser {
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class ApiUserInfo {
|
||||
|
||||
ApiUserInfo({this.btDeviceName});
|
||||
|
||||
ApiUserInfo.fromJson(Map<String, dynamic> json) {
|
||||
btDeviceName = json['btDeviceName'];
|
||||
}
|
||||
String? btDeviceName;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['account_name'] = btDeviceName;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||
|
||||
// 添加卡片开始(删除自定义密码)
|
||||
if((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) {
|
||||
_replyAddPassword(reply);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 添加密码开始(此处用作删除卡片)
|
||||
Future<void> _replyAddPassword(Reply reply) async {
|
||||
final int status = reply.data[2];
|
||||
|
||||
switch(status){
|
||||
case 0x00:
|
||||
//成功
|
||||
cancelBlueConnetctToastTimer();
|
||||
deletePwdRequest();
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<int> token = reply.data.sublist(5, 9);
|
||||
final List<String> 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<void> 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<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> 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<ExpirePasswordEntity> 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<void> deletePwdRequest(
|
||||
ExpirePasswordItemData expirePasswordItemData) async {
|
||||
PasswordKeyEntity entity = await ApiRepository.to.deleteKeyboardPwd(
|
||||
lockId: expirePasswordItemData.lockId.toString(),
|
||||
keyboardPwdId: expirePasswordItemData.pwdId.toString(),
|
||||
Future<void> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<ExpirePasswordPage> {
|
||||
final logic = Get.put(ExpirePasswordLogic());
|
||||
final state = Get.find<ExpirePasswordLogic>().state;
|
||||
final ExpirePasswordLogic logic = Get.put(ExpirePasswordLogic());
|
||||
final ExpirePasswordState state = Get.find<ExpirePasswordLogic>().state;
|
||||
|
||||
Future<void> getHttpData() async {
|
||||
logic.expirePasswordListRequest().then((ExpirePasswordEntity value) {
|
||||
if (mounted) setState(() {});
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -46,7 +49,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
|
||||
onLoad: () {
|
||||
getHttpData();
|
||||
},
|
||||
child: Obx(() => _buildMainUI()));
|
||||
child: Obx(_buildMainUI));
|
||||
}
|
||||
|
||||
Widget _buildMainUI() {
|
||||
@ -60,19 +63,19 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
|
||||
: 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: <Widget>[
|
||||
SlidableAction(
|
||||
onPressed: (BuildContext context) {
|
||||
ShowTipView().showIosTipWithContentDialog("确定删除该密码吗?",
|
||||
() {
|
||||
logic.deletePwdRequest(indexEntity);
|
||||
ShowTipView().showIosTipWithContentDialog('确定删除该密码吗?', () {
|
||||
logic.senderCustomPasswords();
|
||||
});
|
||||
},
|
||||
backgroundColor: Colors.red,
|
||||
@ -119,17 +122,19 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
|
||||
// } else {
|
||||
var backData = await Get.toNamed(
|
||||
Routers.passwordKeyDetailChangeDatePage,
|
||||
arguments: {
|
||||
'itemData': itemData,
|
||||
|
||||
arguments: <String, ExpirePasswordItemData>{
|
||||
'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<ExpirePasswordPage> {
|
||||
height: 90.h,
|
||||
color: Colors.white,
|
||||
child: Row(
|
||||
children: [
|
||||
children: <Widget>[
|
||||
SizedBox(
|
||||
width: 30.w,
|
||||
),
|
||||
@ -152,10 +157,10 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
itemData.nickname ?? '',
|
||||
style: TextStyle(
|
||||
@ -166,7 +171,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
|
||||
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<ExpirePasswordPage> {
|
||||
SizedBox(height: 10.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Text(
|
||||
logic.getExpireDateStr(itemData),
|
||||
style: TextStyle(
|
||||
@ -202,7 +207,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
|
||||
Widget getStatus(ExpirePasswordItemData itemData) {
|
||||
//keyboardPwdStatus 1:正常 2:已过期
|
||||
return Row(
|
||||
children: [
|
||||
children: <Widget>[
|
||||
Visibility(
|
||||
visible: itemData.expireDate! > 0 ? true : false,
|
||||
child: Container(
|
||||
|
||||
@ -3,5 +3,10 @@ import 'package:get/get.dart';
|
||||
import 'expirePassword_entity.dart';
|
||||
|
||||
class ExpirePasswordState {
|
||||
final dataList = <ExpirePasswordItemData>[].obs;
|
||||
final RxList<ExpirePasswordItemData> dataList = <ExpirePasswordItemData>[].obs;
|
||||
ExpirePasswordItemData seletIndexEntity = ExpirePasswordItemData();
|
||||
|
||||
RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
RxInt sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用)
|
||||
|
||||
}
|
||||
@ -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'; //触摸开锁
|
||||
|
||||
@ -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<Response<dynamic>> getNoticeTemplate(
|
||||
|
||||
@ -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<ExpireFingerprintEntity> expireFaceList(
|
||||
Future<ExpireFaceEntity> 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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user