1,新增人脸添加相关图片及页面(未完成)

2,新增人脸相关接口(未完成)人脸列表、添加人脸、校验人脸名称是否重复、更新人脸用户接口
3,新增人脸相关协议命令(未完善)
This commit is contained in:
Daisy 2024-01-23 18:12:51 +08:00
parent 95d138f66e
commit 2b7a351347
27 changed files with 2855 additions and 751 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -6,6 +6,7 @@ import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_page.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_page.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_page.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_page.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_page.dart';
import 'package:star_lock/main/lockDetail/face/faceDetail/faceDetail_page.dart';
import 'package:star_lock/main/lockDetail/lcokSet/addFamily/addFamily_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/addFamily/addFamily_page.dart';
import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeCustomMode/catEyeCustomMode_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeCustomMode/catEyeCustomMode_page.dart';
import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet/catEyeSet_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet/catEyeSet_page.dart';
@ -378,7 +379,7 @@ abstract class Routers {
static const openDoorDirectionPage = '/openDoorDirectionPage'; // static const openDoorDirectionPage = '/openDoorDirectionPage'; //
static const catEyeWorkModePage = '/catEyeWorkModePage'; // static const catEyeWorkModePage = '/catEyeWorkModePage'; //
static const msgNotificationPage = '/msgNotificationPage'; // static const msgNotificationPage = '/msgNotificationPage'; //
static const addFaceTipPage = '/addFaceTipPage'; // static const addFacePage = '/addFacePage'; //
static const nDaysUnopenedPage = '/nDaysUnopenedPage'; //N天未开门 static const nDaysUnopenedPage = '/nDaysUnopenedPage'; //N天未开门
static const notificationModePage = '/notificationModePage'; // static const notificationModePage = '/notificationModePage'; //
static const openDoorNotifyPage = '/openDoorNotifyPage'; // static const openDoorNotifyPage = '/openDoorNotifyPage'; //
@ -411,6 +412,8 @@ abstract class Routers {
static const fingerprintDetailPage = '/FingerprintDetailPage'; // static const fingerprintDetailPage = '/FingerprintDetailPage'; //
static const faceList = '/FaceList'; // static const faceList = '/FaceList'; //
static const addFaceTypeManagePage = '/AddFaceTypeManagePage'; // static const addFaceTypeManagePage = '/AddFaceTypeManagePage'; //
static const faceDetailPage = '/faceDetailPage'; //
static const passwordKeyDetailChangeDatePage = static const passwordKeyDetailChangeDatePage =
'/passwordKeyDetailChangeDatePage'; // '/passwordKeyDetailChangeDatePage'; //
static const realTimePicturePage = '/realTimePicturePage'; // static const realTimePicturePage = '/realTimePicturePage'; //
@ -937,7 +940,7 @@ abstract class AppRouters {
GetPage( GetPage(
name: Routers.msgNotificationPage, name: Routers.msgNotificationPage,
page: () => const MsgNotificationPage()), page: () => const MsgNotificationPage()),
GetPage(name: Routers.addFaceTipPage, page: () => const AddFaceTipPage()), GetPage(name: Routers.addFacePage, page: () => const AddFacePage()),
GetPage( GetPage(
name: Routers.nDaysUnopenedPage, page: () => const NDaysUnopenedPage()), name: Routers.nDaysUnopenedPage, page: () => const NDaysUnopenedPage()),
GetPage( GetPage(
@ -1013,6 +1016,7 @@ abstract class AppRouters {
name: Routers.catEyeCustomModePage, name: Routers.catEyeCustomModePage,
page: () => const CatEyeCustomModePage()), page: () => const CatEyeCustomModePage()),
GetPage(name: Routers.videoSlotPage, page: (() => const VideoSlotPage())), GetPage(name: Routers.videoSlotPage, page: (() => const VideoSlotPage())),
GetPage(name: Routers.liveVideoPage, page: (() => const LiveVideoPage())) GetPage(name: Routers.liveVideoPage, page: (() => const LiveVideoPage())),
GetPage(name: Routers.faceDetailPage, page: (() => const FaceDetailPage())),
]; ];
} }

View File

@ -0,0 +1,153 @@
import 'dart:convert';
import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart';
import '../io_reply.dart';
import '../io_sender.dart';
import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto;
///TODO:
/*
UseCountLimit 0 UseCountLimit 0FingerNo 255userId Delete All !@#
**/
class SenderAddFaceCommand extends SenderProtocol {
String? keyID;
String? userID;
int? faceNo;
int? useCountLimit;
List<int>? token;
int? startTime;
int? endTime;
int? needAuthor;
List<int>? publicKey;
List<int>? privateKey;
SenderAddFaceCommand({
this.keyID,
this.userID,
this.faceNo,
this.useCountLimit,
this.token,
this.startTime,
this.endTime,
this.needAuthor,
this.publicKey,
this.privateKey,
}) : super(CommandType.generalExtendedCommond);
@override
List<int> messageDetail() {
List<int> data = [];
List<int> subData = [];
List<int> ebcData = [];
//
int type = commandType!.typeValue;
double typeDouble = type / 256;
int type1 = typeDouble.toInt();
int type2 = type % 256;
data.add(type1);
data.add(type2);
// --
data.add(81);
// keyID 40
int keyIDLength = utf8.encode(keyID!).length;
// print("${commandType!.typeValue}LockIDLength:$lockIDLength utf8.encode(lockID!)${utf8.encode(lockID!)}");
subData.addAll(utf8.encode(keyID!));
subData = getFixedLengthList(subData, 40 - keyIDLength);
//userID 20
int userIDLength = utf8.encode(userID!).length;
// print("${commandType!.typeValue}IDLength:$authUserIDLength utf8.encode(authUserID!)${utf8.encode(authUserID!)}");
subData.addAll(utf8.encode(userID!));
subData = getFixedLengthList(subData, 20 - userIDLength);
// PwdNo
subData.add(faceNo!);
// UseCountLimit
subData.add(useCountLimit!);
// token
subData.addAll(token!);
// startTime 4
subData.add((startTime! & 0xff000000) >> 24);
subData.add((startTime! & 0xff0000) >> 16);
subData.add((startTime! & 0xff00) >> 8);
subData.add((startTime! & 0xff));
// endTime 4
subData.add((endTime! & 0xff000000) >> 24);
subData.add((endTime! & 0xff0000) >> 16);
subData.add((endTime! & 0xff00) >> 8);
subData.add((endTime! & 0xff));
if (needAuthor == 0) {
//AuthCodeLen 1
subData.add(0);
} else {
List<int> authCodeData = [];
//authUserID
authCodeData.addAll(utf8.encode(userID!));
//KeyID
authCodeData.addAll(utf8.encode(keyID!));
//token 4 Token 0
authCodeData.addAll(token!);
authCodeData.addAll(publicKey!);
print("${commandType!.typeValue}-authCodeData:$authCodeData");
// KeyIDauthUserIDmd5加密之后就是authCode
var authCode = crypto.md5.convert(authCodeData);
subData.add(authCode.bytes.length);
subData.addAll(authCode.bytes);
}
data.add(subData.length);
data.addAll(subData);
if ((data.length % 16) != 0) {
int add = (16 - data.length % 16);
for (int i = 0; i < add; i++) {
data.add(0);
}
}
print("${commandType!.typeName} SM4Data:$data");
// LockId进行SM4 ECB加密 key:544d485f633335373034383064613864
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
return ebcData;
}
}
class SenderAddFaceReply extends Reply {
SenderAddFaceReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}
class SenderAddFaceProcessReply extends Reply {
SenderAddFaceProcessReply.parseData(
CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}
class SenderAddFaceConfirmationReply extends Reply {
SenderAddFaceConfirmationReply.parseData(
CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}

View File

@ -0,0 +1,118 @@
//TODO:
import 'dart:convert';
import '../io_reply.dart';
import '../io_sender.dart';
import '../io_tool/io_tool.dart';
import '../io_type.dart';
import '../sm4Encipher/sm4.dart';
import 'package:crypto/crypto.dart' as crypto;
class SenderQueryingFaceStatusCommand extends SenderProtocol {
String? keyID;
String? userID;
int? role;
int? fingerCount;
int? fingerNo;
List<int>? token;
int? needAuthor;
List<int>? publicKey;
List<int>? privateKey;
SenderQueryingFaceStatusCommand({
this.keyID,
this.userID,
this.role,
this.fingerCount,
this.fingerNo,
this.token,
this.needAuthor,
this.publicKey,
this.privateKey,
}) : super(CommandType.generalExtendedCommond);
@override
List<int> messageDetail() {
List<int> data = [];
List<int> subData = [];
List<int> ebcData = [];
//
int type = commandType!.typeValue;
double typeDouble = type / 256;
int type1 = typeDouble.toInt();
int type2 = type % 256;
data.add(type1);
data.add(type2);
// --
data.add(80);
// keyID 40
int keyIDLength = utf8.encode(keyID!).length;
subData.addAll(utf8.encode(keyID!));
subData = getFixedLengthList(subData, 40 - keyIDLength);
//userID 20
int userIDLength = utf8.encode(userID!).length;
subData.addAll(utf8.encode(userID!));
subData = getFixedLengthList(subData, 20 - userIDLength);
// role
subData.add(role!);
// fingerCount
subData.add(fingerCount!);
// FingerNo
subData.add(fingerNo!);
if (needAuthor == 0) {
//AuthCodeLen 1
subData.add(0);
} else {
List<int> authCodeData = [];
//authUserID
authCodeData.addAll(utf8.encode(userID!));
//KeyID
authCodeData.addAll(utf8.encode(keyID!));
//token 4 Token 0
authCodeData.addAll(token!);
authCodeData.addAll(publicKey!);
print("${commandType!.typeValue}-authCodeData:$authCodeData");
// KeyIDauthUserIDmd5加密之后就是authCode
var authCode = crypto.md5.convert(authCodeData);
subData.add(authCode.bytes.length);
subData.addAll(authCode.bytes);
}
data.add(subData.length);
data.addAll(subData);
if ((data.length % 16) != 0) {
int add = (16 - data.length % 16);
for (int i = 0; i < add; i++) {
data.add(0);
}
}
print("${commandType!.typeName} SM4Data:$data");
// LockId进行SM4 ECB加密 key:544d485f633335373034383064613864
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
return ebcData;
}
}
class SenderQueryingFaceStatusReply extends Reply {
SenderQueryingFaceStatusReply.parseData(
CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}

View File

@ -1,14 +1,14 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:star_lock/blue/blue_manage.dart'; import 'package:star_lock/blue/blue_manage.dart';
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
import 'package:star_lock/blue/io_protocol/io_changeAdministratorPassword.dart'; import 'package:star_lock/blue/io_protocol/io_changeAdministratorPassword.dart';
import 'package:star_lock/blue/io_protocol/io_deletUser.dart'; import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
import 'package:star_lock/blue/io_protocol/io_editUser.dart'; import 'package:star_lock/blue/io_protocol/io_editUser.dart';
import 'package:star_lock/blue/io_protocol/io_factoryDataReset.dart'; import 'package:star_lock/blue/io_protocol/io_factoryDataReset.dart';
import 'package:star_lock/blue/io_protocol/io_getLockStatu.dart'; import 'package:star_lock/blue/io_protocol/io_getLockStatu.dart';
import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart';
import 'package:star_lock/blue/io_protocol/io_readAdminPassword.dart'; import 'package:star_lock/blue/io_protocol/io_readAdminPassword.dart';
import 'package:star_lock/blue/io_protocol/io_readSupportFunctionsNoParameters.dart'; import 'package:star_lock/blue/io_protocol/io_readSupportFunctionsNoParameters.dart';
import 'package:star_lock/blue/io_protocol/io_readSupportFunctionsWithParameters.dart'; import 'package:star_lock/blue/io_protocol/io_readSupportFunctionsWithParameters.dart';
@ -44,29 +44,31 @@ import 'io_tool/manager_event_bus.dart';
import 'sm4Encipher/sm4.dart'; import 'sm4Encipher/sm4.dart';
class CommandReciverManager { class CommandReciverManager {
static void appDataReceive(List<int> data) async { static void appDataReceive(List<int> data) async {
/// ///
if(data.isEmpty){ if (data.isEmpty) {
return; return;
} }
int dataSize = data.length; int dataSize = data.length;
// 13 // 13
if(dataSize < 13){ if (dataSize < 13) {
return; return;
} }
print("appDataReceiveData:$data"); // &&(data[4] == 0x11) print("appDataReceiveData:$data"); // &&(data[4] == 0x11)
if((data[0] == 0xEF)&&(data[1] == 0x01)&&(data[2] == 0xEE)&&(data[3] == 0x02)){ if ((data[0] == 0xEF) &&
var tmpType = (data[7] & 0x0f);// (data[1] == 0x01) &&
(data[2] == 0xEE) &&
(data[3] == 0x02)) {
var tmpType = (data[7] & 0x0f); //
// print("temType:$tmpType"); // print("temType:$tmpType");
var dataLen = data[8] * 256 + data[9];// 16 var dataLen = data[8] * 256 + data[9]; // 16
var oriLen = data[10] * 256 + data[11];// 16 var oriLen = data[10] * 256 + data[11]; // 16
// print("dataLen:$dataLen oriLen:$oriLen"); // print("dataLen:$dataLen oriLen:$oriLen");
// List<int> dataList = []; // List<int> dataList = [];
List<int> oriDataList = []; List<int> oriDataList = [];
switch(tmpType){ switch (tmpType) {
case 0: // case 0: //
// for (var i = 0; i < oriLen ; i++) { // for (var i = 0; i < oriLen ; i++) {
// oriDataList.add(data[12 + i]); // oriDataList.add(data[12 + i]);
@ -84,7 +86,9 @@ class CommandReciverManager {
// //
// String key = SM4.createHexKey(key: IoManager().getCurrentDeviceLockId); // String key = SM4.createHexKey(key: IoManager().getCurrentDeviceLockId);
oriDataList = SM4.decrypt(getDataList, key: utf8.encode(BlueManage().connectDeviceName), mode: SM4CryptoMode.ECB); oriDataList = SM4.decrypt(getDataList,
key: utf8.encode(BlueManage().connectDeviceName),
mode: SM4CryptoMode.ECB);
oriDataList = oriDataList.sublist(0, oriLen); oriDataList = oriDataList.sublist(0, oriLen);
// print("SM4 oriDataList:$oriDataList"); // print("SM4 oriDataList:$oriDataList");
break; break;
@ -98,11 +102,11 @@ class CommandReciverManager {
// print("getPrivateKeyList$getPrivateKeyList"); // print("getPrivateKeyList$getPrivateKeyList");
// //
oriDataList = SM4.decrypt(getDataList, key: getPrivateKeyList, mode: SM4CryptoMode.ECB); oriDataList = SM4.decrypt(getDataList,
key: getPrivateKeyList, mode: SM4CryptoMode.ECB);
oriDataList = oriDataList.sublist(0, oriLen); oriDataList = oriDataList.sublist(0, oriLen);
print("SM4 oriDataList:$oriDataList"); print("SM4 oriDataList:$oriDataList");
break; break;
} }
parseData(oriDataList).then((value) { parseData(oriDataList).then((value) {
EasyLoading.dismiss(); EasyLoading.dismiss();
@ -113,14 +117,14 @@ class CommandReciverManager {
} }
static Future<Reply?> parseData(List<int> data) async { static Future<Reply?> parseData(List<int> data) async {
if(data.isNotEmpty){ if (data.isNotEmpty) {
var cmd = data[0] * 256 + data[1]; var cmd = data[0] * 256 + data[1];
CommandType commandType = ExtensionCommandType.getCommandType(cmd); CommandType commandType = ExtensionCommandType.getCommandType(cmd);
await IoManager().increaseCommandIndex(); await IoManager().increaseCommandIndex();
// data.removeRange(0, 2); // data.removeRange(0, 2);
// print("111111data cmd:$cmd commandType:$commandType data:$data"); // print("111111data cmd:$cmd commandType:$commandType data:$data");
var reply; var reply;
switch(commandType) { switch (commandType) {
case CommandType.getLockPublicKey: case CommandType.getLockPublicKey:
{ {
reply = GetPublicKeyReply.parseData(commandType, data); reply = GetPublicKeyReply.parseData(commandType, data);
@ -180,17 +184,19 @@ class CommandReciverManager {
{ {
// //
int subType = data[3]; int subType = data[3];
switch(subType){ switch (subType) {
case 2: case 2:
{ {
// //
reply = ChangeAdministratorPasswordReply.parseData(commandType, data); reply = ChangeAdministratorPasswordReply.parseData(
commandType, data);
} }
break; break;
case 3: case 3:
{ {
// //
reply = SenderCustomPasswordsReply.parseData(commandType, data); reply =
SenderCustomPasswordsReply.parseData(commandType, data);
} }
break; break;
case 4: case 4:
@ -202,13 +208,15 @@ class CommandReciverManager {
case 15: case 15:
{ {
// () // ()
reply = SenderCheckingUserInfoCountReply.parseData(commandType, data); reply = SenderCheckingUserInfoCountReply.parseData(
commandType, data);
} }
break; break;
case 20: case 20:
{ {
// //
reply = SenderCheckingCardStatusReply.parseData(commandType, data); reply = SenderCheckingCardStatusReply.parseData(
commandType, data);
} }
break; break;
case 21: case 21:
@ -220,43 +228,50 @@ class CommandReciverManager {
case 22: case 22:
{ {
// //
reply = SenderAddICCardConfirmationReply.parseData(commandType, data); reply = SenderAddICCardConfirmationReply.parseData(
commandType, data);
} }
break; break;
case 30: case 30:
{ {
// //
reply = SenderQueryingFingerprintStatusReply.parseData(commandType, data); reply = SenderQueryingFingerprintStatusReply.parseData(
commandType, data);
} }
break; break;
case 31: case 31:
{ {
// //
reply = SenderAddFingerprintReply.parseData(commandType, data); reply =
SenderAddFingerprintReply.parseData(commandType, data);
} }
break; break;
case 32: case 32:
{ {
// //
reply = SenderAddFingerprintConfirmationReply.parseData(commandType, data); reply = SenderAddFingerprintConfirmationReply.parseData(
commandType, data);
} }
break; break;
case 33: case 33:
{ {
// //
reply = SenderAddFingerprintProcessReply.parseData(commandType, data); reply = SenderAddFingerprintProcessReply.parseData(
commandType, data);
} }
break; break;
case 40: case 40:
{ {
// //
reply = SenderReferEventRecordNumberReply.parseData(commandType, data); reply = SenderReferEventRecordNumberReply.parseData(
commandType, data);
} }
break; break;
case 41: case 41:
{ {
// //
reply = SenderReferEventRecordTimeReply.parseData(commandType, data); reply = SenderReferEventRecordTimeReply.parseData(
commandType, data);
} }
break; break;
// case 50: // case 50:
@ -268,55 +283,92 @@ class CommandReciverManager {
case 51: case 51:
{ {
// wifi配网结果 // wifi配网结果
reply = SenderConfiguringWifiReply.parseData(commandType, data); reply =
SenderConfiguringWifiReply.parseData(commandType, data);
} }
break; break;
case 60: case 60:
{ {
// //
reply = SenderAddStressPasswordReply.parseData(commandType, data); reply =
SenderAddStressPasswordReply.parseData(commandType, data);
} }
break; break;
case 61: case 61:
{ {
// //
reply = SenderAddStressICCardReply.parseData(commandType, data); reply =
SenderAddStressICCardReply.parseData(commandType, data);
} }
break; break;
case 62: case 62:
{ {
// //
reply = SenderAddStressFingerprintReply.parseData(commandType, data); reply = SenderAddStressFingerprintReply.parseData(
commandType, data);
} }
break; break;
case 70: case 70:
{ {
// ()/ // ()/
reply = SetSupportFunctionsNoParametersReply.parseData(commandType, data); reply = SetSupportFunctionsNoParametersReply.parseData(
commandType, data);
} }
break; break;
case 71: case 71:
{ {
// ()/ // ()/
reply = ReadSupportFunctionsNoParametersReply.parseData(commandType, data); reply = ReadSupportFunctionsNoParametersReply.parseData(
commandType, data);
} }
break; break;
case 72: case 72:
{ {
// () // ()
reply = SetSupportFunctionsWithParametersReply.parseData(commandType, data); reply = SetSupportFunctionsWithParametersReply.parseData(
commandType, data);
} }
break; break;
case 73: case 73:
{ {
// () // ()
reply = ReadSupportFunctionsWithParametersReply.parseData(commandType, data); reply = ReadSupportFunctionsWithParametersReply.parseData(
commandType, data);
} }
break; break;
case 74: case 74:
{ {
// //
reply = SenderReadAdminPasswordReply.parseData(commandType, data); reply =
SenderReadAdminPasswordReply.parseData(commandType, data);
}
break;
case 80:
{
//
reply = SenderQueryingFaceStatusReply.parseData(
commandType, data);
}
break;
case 81:
{
//
reply = SenderAddFaceReply.parseData(commandType, data);
}
break;
case 82:
{
//
reply = SenderAddFaceConfirmationReply.parseData(
commandType, data);
}
break;
case 83:
{
//
reply =
SenderAddFaceProcessReply.parseData(commandType, data);
} }
break; break;
} }
@ -326,5 +378,4 @@ class CommandReciverManager {
return reply; return reply;
} }
} }
} }

View File

@ -1,9 +1,10 @@
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
import 'package:star_lock/blue/io_protocol/io_addICCard.dart'; import 'package:star_lock/blue/io_protocol/io_addICCard.dart';
import 'package:star_lock/blue/io_protocol/io_addStressICCard.dart'; import 'package:star_lock/blue/io_protocol/io_addStressICCard.dart';
import 'package:star_lock/blue/io_protocol/io_changeAdministratorPassword.dart'; import 'package:star_lock/blue/io_protocol/io_changeAdministratorPassword.dart';
import 'package:star_lock/blue/io_protocol/io_deletUser.dart'; import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
import 'package:star_lock/blue/io_protocol/io_getLockStatu.dart'; import 'package:star_lock/blue/io_protocol/io_getLockStatu.dart';
import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart';
import 'package:star_lock/blue/io_protocol/io_readAdminPassword.dart'; import 'package:star_lock/blue/io_protocol/io_readAdminPassword.dart';
import 'io_protocol/io_addFingerprint.dart'; import 'io_protocol/io_addFingerprint.dart';
@ -33,36 +34,39 @@ import 'io_protocol/io_transferPermissions.dart';
import 'sender_data.dart'; import 'sender_data.dart';
class IoSenderManage { class IoSenderManage {
//todo: //todo:
static void getPublicKey({String? lockId ,CommandSendCallBack? callBack}) { static void getPublicKey({String? lockId, CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(command: GetPublicKeyCommand( CommandSenderManager().managerSendData(
command: GetPublicKeyCommand(
lockID: lockId, lockID: lockId,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void getPrivateKey({ static void getPrivateKey(
String? lockId, {String? lockId,
String? keyID, // ID String? keyID, // ID
String? authUserID,// ID String? authUserID, // ID
int? nowTime, int? nowTime,
List<int>? publicKeyData, List<int>? publicKeyData,
int? needAuthor, int? needAuthor,
CommandSendCallBack? callBack}) { CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(command: GetPrivateKeyCommand( CommandSenderManager().managerSendData(
command: GetPrivateKeyCommand(
lockID: lockId, lockID: lockId,
keyID: keyID, keyID: keyID,
authUserID: authUserID, authUserID: authUserID,
nowTime: nowTime, nowTime: nowTime,
publicKeyData:publicKeyData, publicKeyData: publicKeyData,
needAuthor: needAuthor, needAuthor: needAuthor,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderAddUser({ static void senderAddUser(
String? lockID, {String? lockID,
String? authUserID, String? authUserID,
String? keyID, String? keyID,
String? userID, String? userID,
@ -92,13 +96,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
token: token token: token),
), callBack:callBack); callBack: callBack);
} }
//todo: //todo:
static void senderEditUser({ static void senderEditUser(
String? lockID, {String? lockID,
String? authUserID, String? authUserID,
String? keyID, String? keyID,
String? userID, String? userID,
@ -128,13 +132,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
token: token token: token),
), callBack:callBack); callBack: callBack);
} }
//todo: //todo:
static void deletUser({ static void deletUser(
String? lockID, {String? lockID,
String? authUserID, String? authUserID,
String? keyID, String? keyID,
String? delUserID, String? delUserID,
@ -148,17 +152,17 @@ class IoSenderManage {
lockID: lockID, lockID: lockID,
authUserID: authUserID, authUserID: authUserID,
keyID: keyID, keyID: keyID,
delUserID:delUserID, delUserID: delUserID,
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
token: token token: token),
), callBack:callBack); callBack: callBack);
} }
//todo: //todo:
static void senderOpenLock({ static void senderOpenLock(
String? keyID, {String? keyID,
String? userID, String? userID,
int? openMode, int? openMode,
int? openTime, int? openTime,
@ -179,12 +183,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
signKey: signKey, signKey: signKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderGetLockStatu({ static void senderGetLockStatu(
String? lockID, {String? lockID,
String? userID, String? userID,
List<int>? privateKey, List<int>? privateKey,
CommandSendCallBack? callBack}) { CommandSendCallBack? callBack}) {
@ -193,12 +198,13 @@ class IoSenderManage {
lockID: lockID, lockID: lockID,
userID: userID, userID: userID,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderGetStarLockStatuInfo({ static void senderGetStarLockStatuInfo(
String? lockID, {String? lockID,
String? userID, String? userID,
List<int>? privateKey, List<int>? privateKey,
CommandSendCallBack? callBack}) { CommandSendCallBack? callBack}) {
@ -207,12 +213,13 @@ class IoSenderManage {
lockID: lockID, lockID: lockID,
userID: userID, userID: userID,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderTransferPermissions({ static void senderTransferPermissions(
required String? lockID, {required String? lockID,
required String? authUserID, required String? authUserID,
required String? keyID, required String? keyID,
required String? oldUserID, required String? oldUserID,
@ -232,13 +239,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
token: token token: token),
), callBack:callBack); callBack: callBack);
} }
//todo: //todo:
static void senderFactoryDataReset({ static void senderFactoryDataReset(
required String? lockID, {required String? lockID,
required String? userID, required String? userID,
required String? keyID, required String? keyID,
required List<int>? publicKey, required List<int>? publicKey,
@ -254,13 +261,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
token: token token: token),
), callBack:callBack); callBack: callBack);
} }
//todo: //todo:
static void senderCustomPasswordsCommand({ static void senderCustomPasswordsCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? pwdNo, required int? pwdNo,
required String? pwd, required String? pwd,
@ -277,7 +284,7 @@ class IoSenderManage {
keyID: keyID, keyID: keyID,
userID: userID, userID: userID,
pwdNo: pwdNo, pwdNo: pwdNo,
pwd:pwd, pwd: pwd,
useCountLimit: useCountLimit, useCountLimit: useCountLimit,
token: token, token: token,
startTime: startTime, startTime: startTime,
@ -285,12 +292,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
signKey: signKey, signKey: signKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void changeAdministratorPasswordCommand({ static void changeAdministratorPasswordCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? pwdNo, required int? pwdNo,
required String? pwd, required String? pwd,
@ -307,7 +315,7 @@ class IoSenderManage {
keyID: keyID, keyID: keyID,
userID: userID, userID: userID,
pwdNo: pwdNo, pwdNo: pwdNo,
pwd:pwd, pwd: pwd,
useCountLimit: useCountLimit, useCountLimit: useCountLimit,
token: token, token: token,
startTime: startTime, startTime: startTime,
@ -315,12 +323,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
signKey: signKey, signKey: signKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderAddFingerprintCommand({ static void senderAddFingerprintCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? fingerNo, required int? fingerNo,
required int? useCountLimit, required int? useCountLimit,
@ -343,12 +352,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderAddICCardCommand({ static void senderAddICCardCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? cardNo, required int? cardNo,
required int? useCountLimit, required int? useCountLimit,
@ -371,12 +381,42 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
}
//todo:
static void senderAddFaceCommand(
{required String? keyID,
required String? userID,
required int? faceNo,
required int? useCountLimit,
required List<int>? token,
required int? startTime,
required int? endTime,
required int? needAuthor,
required List<int>? publicKey,
required List<int>? privateKey,
CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(
command: SenderAddFaceCommand(
keyID: keyID,
userID: userID,
faceNo: faceNo,
useCountLimit: useCountLimit,
token: token,
startTime: startTime,
endTime: endTime,
needAuthor: needAuthor,
publicKey: publicKey,
privateKey: privateKey,
),
callBack: callBack);
} }
//todo: //todo:
static void senderTimingCommand({ static void senderTimingCommand(
required String? lockID, {required String? lockID,
required String? userID, required String? userID,
required int? nowTime, required int? nowTime,
required List<int>? token, required List<int>? token,
@ -393,7 +433,8 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
signKey: signKey, signKey: signKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: - //todo: -
@ -419,8 +460,8 @@ class IoSenderManage {
// } // }
//todo:() //todo:()
static void senderReferEventRecordNumberCommand({ static void senderReferEventRecordNumberCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? logsCount, required int? logsCount,
required int? logsNo, required int? logsNo,
@ -439,12 +480,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo:() //todo:()
static void senderReferEventRecordTimeCommand({ static void senderReferEventRecordTimeCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? logsCount, required int? logsCount,
required int? time, required int? time,
@ -463,12 +505,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderQueryingFingerprintStatusCommand({ static void senderQueryingFingerprintStatusCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? role, required int? role,
required int? fingerCount, required int? fingerCount,
@ -489,12 +532,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderCheckingCardStatusCommand({ static void senderCheckingCardStatusCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? role, required int? role,
required int? cardCount, required int? cardCount,
@ -515,12 +559,40 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
}
//todo:
static void senderQueryingFaceStatusCommand(
{required String? keyID,
required String? userID,
required int? role,
required int? fingerCount,
required int? fingerNo,
required List<int>? token,
required int? needAuthor,
required List<int>? publicKey,
required List<int>? privateKey,
CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(
command: SenderQueryingFaceStatusCommand(
keyID: keyID,
userID: userID,
role: role,
fingerCount: fingerCount,
fingerNo: fingerNo,
token: token,
needAuthor: needAuthor,
publicKey: publicKey,
privateKey: privateKey,
),
callBack: callBack);
} }
//todo:() //todo:()
static void senderCheckingUserInfoCountCommand({ static void senderCheckingUserInfoCountCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? role, required int? role,
required int? nowTime, required int? nowTime,
@ -539,12 +611,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo:wifi //todo:wifi
static void senderConfiguringWifiCommand({ static void senderConfiguringWifiCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required String? ssid, required String? ssid,
required String? password, required String? password,
@ -571,12 +644,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderAddStressFingerprintCommand({ static void senderAddStressFingerprintCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? fingerNo, required int? fingerNo,
required int? fingerType, required int? fingerType,
@ -602,13 +676,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
signKey: signKey signKey: signKey),
), callBack:callBack); callBack: callBack);
} }
//todo: //todo:
static void senderAddStressICCardCommand({ static void senderAddStressICCardCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? icCardNo, required int? icCardNo,
required int? cardType, required int? cardType,
@ -634,13 +708,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
signKey: signKey signKey: signKey),
), callBack:callBack); callBack: callBack);
} }
//todo: //todo:
static void senderAddStressPasswordCommand({ static void senderAddStressPasswordCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? passwordNo, required int? passwordNo,
required int? useCountLimit, required int? useCountLimit,
@ -663,12 +737,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo:()/ //todo:()/
static void readSupportFunctionsNoParametersCommand({ static void readSupportFunctionsNoParametersCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? featureBit, required int? featureBit,
required List<int>? token, required List<int>? token,
@ -685,12 +760,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo:()/ //todo:()/
static void setSupportFunctionsNoParametersCommand({ static void setSupportFunctionsNoParametersCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? featureBit, required int? featureBit,
required int? featureEnable, required int? featureEnable,
@ -704,17 +780,18 @@ class IoSenderManage {
keyID: keyID, keyID: keyID,
userID: userID, userID: userID,
featureBit: featureBit, featureBit: featureBit,
featureEnable:featureEnable, featureEnable: featureEnable,
token: token, token: token,
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo:()/ //todo:()/
static void readSupportFunctionsWithParametersCommand({ static void readSupportFunctionsWithParametersCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? featureBit, required int? featureBit,
required List<int>? token, required List<int>? token,
@ -731,12 +808,13 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo:()/ //todo:()/
static void setSupportFunctionsWithParametersCommand({ static void setSupportFunctionsWithParametersCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? featureBit, required int? featureBit,
required int? featureParaLength, required int? featureParaLength,
@ -751,18 +829,19 @@ class IoSenderManage {
keyID: keyID, keyID: keyID,
userID: userID, userID: userID,
featureBit: featureBit, featureBit: featureBit,
featureParaLength:featureParaLength, featureParaLength: featureParaLength,
featureData:featureData, featureData: featureData,
token: token, token: token,
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
//todo: //todo:
static void senderReadAdminPasswordCommand({ static void senderReadAdminPasswordCommand(
required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? role, required int? role,
required int? pwdNum, required int? pwdNum,
@ -783,7 +862,7 @@ class IoSenderManage {
needAuthor: needAuthor, needAuthor: needAuthor,
publicKey: publicKey, publicKey: publicKey,
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ),
callBack: callBack);
} }
} }

View File

@ -0,0 +1,294 @@
import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/main/lockDetail/face/addFace/addFace_state.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import '../../../../../blue/blue_manage.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 '../../../../../tools/baseGetXController.dart';
import '../../../../../tools/storage.dart';
class AddFaceLogic extends BaseGetXController {
final AddFaceState state = AddFaceState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) async {
//
if (reply is SenderAddFaceReply) {
_replyAddFaceBegin(reply);
}
//
if (reply is SenderAddFaceProcessReply) {
_replyAddFaceProcess(reply);
}
//
if (reply is SenderAddFaceConfirmationReply) {
_replyAddFaceConfirmation(reply);
}
});
}
Future<void> _replyAddFaceBegin(Reply reply) async {
int status = reply.data[2];
print("status:$status");
switch (status) {
case 0x00:
//
print("${reply.commandType!.typeValue} 人脸开始数据解析成功");
state.ifConnectScuess.value = true;
//
state.maxRegCount.value = reply.data[10];
print("人脸开始state.maxRegCount.value:${state.maxRegCount.value}");
// state.fingerprintNumber.value = reply.data.last.toString();
break;
case 0x06:
//
print("${reply.commandType!.typeValue} 需要鉴权");
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
print("_replyAddFaceReplyToken:$token");
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFaceCommand(
keyID: "1",
userID: await Storage.getUid(),
faceNo: 1,
useCountLimit: 0xff,
// startTime:0x11223344,
// endTime:0x11223344,
startTime: state.startDate.value ~/ 1000,
endTime: state.endDate.value ~/ 1000,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: token,
);
break;
case 0x07:
//
print("${reply.commandType!.typeValue} 用户无权限");
break;
case 0x09:
//
print("${reply.commandType!.typeValue} 权限校验错误");
break;
default:
//
print("${reply.commandType!.typeValue} 失败");
break;
}
}
Future<void> _replyAddFaceProcess(Reply reply) async {
int status = reply.data[2];
print("33 status:$status");
switch (status) {
case 0x00:
//
print("${reply.commandType!.typeValue} 注册人脸过程数据解析成功");
if (reply.data[5] == 255) {
//
print("${reply.commandType!.typeValue} 注册人脸过程失败");
showToast("添加失败");
Get.close(2);
} else {
// state.addFaceProcessNumber.value++;
//
state.regIndex.value = reply.data[6];
print("state.regIndex.value:${state.regIndex.value}");
}
break;
case 0x06:
//
break;
case 0x07:
//
print("${reply.commandType!.typeValue} 用户无权限");
break;
case 0x09:
//
print("${reply.commandType!.typeValue} 权限校验错误");
break;
default:
//
print("${reply.commandType!.typeValue} 注册人脸过程default失败");
break;
}
}
Future<void> _replyAddFaceConfirmation(Reply reply) async {
int status = reply.data[2];
print("status:$status");
switch (status) {
case 0x00:
//
print("${reply.commandType!.typeValue} 人脸确认数据解析成功");
// print("添加人脸确认成功,调用添加指纹接口");
if (state.faceNumber.value == (reply.data[6]).toString()) {
return;
} else {
state.faceNumber.value = (reply.data[6]).toString();
}
addFaceData();
break;
case 0x06:
//
break;
case 0x07:
//
print("${reply.commandType!.typeValue} 用户无权限");
break;
case 0x09:
//
print("${reply.commandType!.typeValue} 权限校验错误");
break;
default:
//
print("${reply.commandType!.typeValue} 人脸确认default失败");
break;
}
}
//
Future<void> senderAddFace() async {
showBlueConnetctToastTimer(action: () {
Get.close(1);
});
BlueManage().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState deviceConnectionState) async {
if (deviceConnectionState == DeviceConnectionState.connected) {
cancelBlueConnetctToastTimer();
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
print(
"openDoorTokenPubToken:$getTokenList state.startDate.value:${state.startDate.value}");
IoSenderManage.senderAddFaceCommand(
keyID: "1",
userID: await Storage.getUid(),
faceNo: 1,
useCountLimit: 0xff,
// startTime:0x11223344,
// endTime:0x11223344,
startTime: state.startDate.value ~/ 1000,
endTime: state.endDate.value ~/ 1000,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
);
} else if (deviceConnectionState == DeviceConnectionState.disconnected) {
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
cancelBlueConnetctToastTimer();
Get.close(1);
}
});
}
//
void addFaceData() async {
var entity = await ApiRepository.to.addFaceData(
lockId: state.lockId.value,
faceName: state.faceName.value,
faceNumber: state.faceNumber.value,
faceType: state.faceType.value,
startDate: state.startDate.value,
endDate: state.endDate.value,
featureData: state.featureData.value,
addType: state.addType.value,
cyclicConfig: state.cyclicConfig.value,
);
if (entity.errorCode!.codeIsSuccessful) {
// Toast.show(msg: "添加成功");
updateFaceUserNoLoadData(entity.data!.fingerprintId.toString());
}
}
//
void updateFaceUserNoLoadData(String faceId) async {
var entity = await ApiRepository.to.updateFaceUserNoLoadData(
faceId: faceId,
lockId: state.lockId.value.toString(),
faceUserNo: state.faceNumber.value,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast("添加成功");
if (state.fromType.value == 2) {
//
eventBus
.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(faceId));
} else if (state.fromType.value == 1) {
eventBus.fire(OtherTypeRefreshListEvent());
}
Get.close(2);
}
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
//
// senderAddFace();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();
}
}

View File

@ -1,39 +1,40 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/addFace/addFace_logic.dart';
import '../../../../../appRouters.dart';
import '../../../../../app_settings/app_colors.dart'; import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/submitBtn.dart'; import '../../../../../tools/submitBtn.dart';
import '../../../../../tools/titleAppBar.dart'; import '../../../../../tools/titleAppBar.dart';
import '../../../../../translations/trans_lib.dart'; import '../../../../../translations/trans_lib.dart';
class AddFaceTipPage extends StatefulWidget { class AddFacePage extends StatefulWidget {
const AddFaceTipPage({Key? key}) : super(key: key); const AddFacePage({Key? key}) : super(key: key);
@override @override
State<AddFaceTipPage> createState() => _AddFaceTipPageState(); State<AddFacePage> createState() => _AddFacePageState();
} }
class _AddFaceTipPageState extends State<AddFaceTipPage> { class _AddFacePageState extends State<AddFacePage> {
final logic = Get.put(AddFaceLogic());
final state = Get.find<AddFaceLogic>().state;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
appBar: TitleAppBar( appBar: TitleAppBar(
barTitle: "${TranslationLoader.lanKeys!.addTip!.tr}${TranslationLoader.lanKeys!.face!.tr}", barTitle:
"${TranslationLoader.lanKeys!.addTip!.tr}${TranslationLoader.lanKeys!.face!.tr}",
haveBack: true, haveBack: true,
backgroundColor: AppColors.mainColor), backgroundColor: AppColors.mainColor),
body: ListView( body: ListView(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SizedBox( SizedBox(
height: 50.h, height: 50.h,
), ),
Image.asset( Image.asset(
'images/main/icon_main_addFace.png', 'images/main/icon_addFace_step1.png',
width: 100.w, width: 100.w,
height: 457.h, height: 457.h,
fit: BoxFit.fitHeight, fit: BoxFit.fitHeight,
@ -48,9 +49,8 @@ class _AddFaceTipPageState extends State<AddFaceTipPage> {
children: [ children: [
Expanded( Expanded(
child: Text( child: Text(
"请单人正对门锁,距离一个成年人手臂长度(约0.6米).\n保持脸部无遮挡,露出五官", "请单人正对门锁,距离一个成年人手臂长度\n(约0.6米)。\n保持脸部无遮挡,露出五官。",
// TranslationLoader.lanKeys!.lightTouchScreenTip!.tr, textAlign: TextAlign.left,
textAlign: TextAlign.center,
maxLines: null, maxLines: null,
style: style:
TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
@ -62,15 +62,32 @@ class _AddFaceTipPageState extends State<AddFaceTipPage> {
SizedBox( SizedBox(
height: 120.h, height: 120.h,
), ),
Container( Obx(
() => state.isClickAddFace.value == false
? Container(
padding: EdgeInsets.only(left: 20.w, right: 20.w), padding: EdgeInsets.only(left: 20.w, right: 20.w),
child: SubmitBtn( child: SubmitBtn(
btnName: "开始添加", //TranslationLoader.lanKeys!.next!.tr, btnName:
"准备好了,开始添加", //TranslationLoader.lanKeys!.next!.tr,
borderRadius: 20.w, borderRadius: 20.w,
onClick: () { onClick: () {
EasyLoading.showToast("请确保在设备附近,设备未被连接,设备已打开", duration: 2000.milliseconds); state.isClickAddFace.value = true;
logic.senderAddFace();
}), }),
)
: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'正在录入中...',
style: TextStyle(
color: AppColors.darkGrayTextColor,
fontSize: 22.sp),
textAlign: TextAlign.center,
)
],
), ),
)
], ],
), ),
); );

View File

@ -0,0 +1,35 @@
import 'package:get/get.dart';
class AddFaceState {
var ifCurrentScreen = true.obs; // ,
var ifConnectScuess = false.obs;
var maxRegCount = 0.obs; //
var regIndex = 0.obs; //
var faceNumber = "".obs;
final lockId = 0.obs;
final endDate = 0.obs;
final addType = "".obs;
final faceName = "".obs;
final faceType = 0.obs;
final startDate = 0.obs;
final cyclicConfig = [].obs;
final fromType = 1.obs;
final featureData = ''.obs;
final isClickAddFace = false.obs;
AddFaceState() {
Map map = Get.arguments;
lockId.value = map["lockId"];
endDate.value = map["endDate"];
addType.value = map["addType"];
faceName.value = map["faceName"];
faceType.value = map["faceType"];
startDate.value = map["startDate"];
lockId.value = map["lockId"];
cyclicConfig.value = map["cyclicConfig"];
fromType.value = map["fromType"];
}
}

View File

@ -1,8 +1,96 @@
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/addFaceType/addFaceType_state.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'addFaceType_state.dart'; import '../../../../appRouters.dart';
import '../../../../network/api_repository.dart';
class AddFaceTypeLogic extends BaseGetXController{ class AddFaceTypeLogic extends BaseGetXController {
AddFaceTypeState state = AddFaceTypeState(); AddFaceTypeState state = AddFaceTypeState();
//
void addFaceData() async {
var faceType = 0; // :1;23:4
var startDate = "";
var endDate = "";
if (state.seletType.value == "0") {
faceType = 1;
startDate = "0";
endDate = "0";
} else if (state.seletType.value == "1") {
faceType = 2;
if (state.beginTimeTimestamp.value.isEmpty) {
showToast("请选择开始时间");
return;
}
if (state.endTimeTimestamp.value.isEmpty) {
showToast("请选择结束时间");
return;
}
// if(DateTime.now().millisecondsSinceEpoch > int.parse(state.beginTimeTimestamp.value)){
// Toast.show(msg: "生效时间要大于当前时间");
// return;
// }
if (int.parse(state.beginTimeTimestamp.value) >=
int.parse(state.endTimeTimestamp.value)) {
showToast("失效时间要大于生效时间");
return;
}
startDate = state.beginTimeTimestamp.value;
endDate = state.endTimeTimestamp.value;
} else if (state.seletType.value == "2") {
if (state.effectiveDateTime.value <= 0) {
showToast("请选择生效时间");
return;
}
if (state.failureDateTime.value <= 0) {
showToast("请选择失效时间");
return;
}
if (state.weekdaysList.value.isEmpty) {
showToast("请选择有效日");
return;
}
// if(DateTime.now().millisecondsSinceEpoch >= state.effectiveDateTime.value){
// Toast.show(msg: "生效时间要大于当前时间");
// return;
// }
if (state.effectiveDateTime.value >= state.failureDateTime.value) {
showToast("失效时间要大于生效时间");
return;
}
startDate = state.effectiveDateTime.value.toString();
endDate = state.failureDateTime.value.toString();
faceType = 4;
}
//
Get.toNamed(Routers.addFacePage, arguments: {
"lockId": state.lockId.value,
"endDate": int.parse(endDate),
"addType": "1",
"faceName": state.nameController.text,
"faceNumber": "123456",
"faceType": faceType,
"startDate": int.parse(startDate),
"cyclicConfig": state.weekdaysList.value,
"fromType": state.fromType.value,
});
}
//
void checkFaceNameDuplicated(String faceName) async {
var entity = await ApiRepository.to.checkFaceNameDuplicatedData(
lockId: state.lockId.value.toString(),
faceName: faceName,
);
if (entity.errorCode!.codeIsSuccessful) {
addFaceData();
}
}
} }

View File

@ -181,8 +181,7 @@ class _AddFaceTypePageState extends State<AddFaceTypePage> {
logic.showToast("请输入姓名"); logic.showToast("请输入姓名");
return; return;
} }
logic.checkFaceNameDuplicated(state.nameController.text);
Get.toNamed(Routers.addFaceTipPage);
} else { } else {
// Get.toNamed(Routers.seletLockTypePage); // Get.toNamed(Routers.seletLockTypePage);
logic.showToast("演示模式"); logic.showToast("演示模式");
@ -293,19 +292,4 @@ class _AddFaceTypePageState extends State<AddFaceTypePage> {
), ),
); );
} }
//isStressFingerprint false: ture:
CupertinoSwitch _isStressFingerprint() {
return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: true,
onChanged: (value) {
setState(() {
// state.isStressFingerprint.value = value;
});
},
);
}
} }

View File

@ -1,16 +1,25 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
class AddFaceTypeState{ class AddFaceTypeState {
var beginTime = "".obs;// final lockId = 0.obs;
var endTime = "".obs;// final seletType = "0".obs; // 0 1 2
var beginTimeTimestamp = "".obs;// final fromType = 1.obs; // // 1 2
var endTimeTimestamp = "".obs;// final isStressFingerprint = false.obs;
var effectiveDateTime = 0.obs;// var beginTime = "".obs; //
var failureDateTime = 0.obs;// var endTime = "".obs; //
var beginTimeTimestamp = "".obs; //
var endTimeTimestamp = "".obs; //
var effectiveDateTime = 0.obs; //
var failureDateTime = 0.obs; //
var weekdaysList = [].obs; var weekdaysList = [].obs;
final TextEditingController nameController = TextEditingController(); final TextEditingController nameController = TextEditingController();
AddFaceTypeState() {
Map map = Get.arguments;
lockId.value = map["lockId"];
fromType.value = map["fromType"];
}
} }

View File

@ -0,0 +1,193 @@
import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:get/get.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/main/lockDetail/face/faceDetail/faceDetail_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addFingerprint.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 '../../../../tools/storage.dart';
class FaceDetailLogic extends BaseGetXController {
FaceDetailState state = FaceDetailState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) {
// ()
if ((reply is SenderAddFingerprintReply)) {
_replyAddFingerprintBegin(reply);
}
});
}
//
Future<void> _replyAddFingerprintBegin(Reply reply) async {
int status = reply.data[2];
print("status:$status");
switch (status) {
case 0x00:
//
print("${reply.commandType!.typeValue} 数据解析成功");
state.sureBtnState.value = 0;
cancelBlueConnetctToastTimer();
dismissEasyLoading();
deletFingerprintsData();
break;
case 0x06:
//
print("${reply.commandType!.typeValue} 需要鉴权");
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
String? userID = await Storage.getUid();
IoSenderManage.senderAddFingerprintCommand(
keyID: state.keyId.value.toString(),
userID: userID,
fingerNo: int.parse(state.typeNumber.value),
useCountLimit: 0,
startTime: state.effectiveDateTime.value,
endTime: state.failureDateTime.value,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
);
break;
case 0x07:
//
print("${reply.commandType!.typeValue} 用户无权限");
break;
case 0x09:
//
print("${reply.commandType!.typeValue} 权限校验错误");
break;
default:
//
print("${reply.commandType!.typeValue} 失败");
break;
}
}
//
Future<void> senderAddFingerprint() async {
if (state.sureBtnState.value == 1) {
return;
}
state.sureBtnState.value = 1;
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState deviceConnectionState) async {
if (deviceConnectionState == DeviceConnectionState.connected) {
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
String? userID = await Storage.getUid();
IoSenderManage.senderAddFingerprintCommand(
keyID: state.keyId.value.toString(),
userID: userID,
fingerNo: int.parse(state.typeNumber.value),
useCountLimit: 0,
startTime: state.effectiveDateTime.value,
endTime: state.failureDateTime.value,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
);
} else if (deviceConnectionState == DeviceConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
});
}
//
void deletFingerprintsData() async {
var entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: state.faceItemData.value.faceId.toString(),
lockId: state.faceItemData.value.lockId.toString(),
type: "0",
deleteType: "1");
if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功", something: () {
Get.back(result: "addScuess");
});
}
}
//
void editFingerprintsData() async {
var entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.keyId.value.toString(),
lockId: state.faceItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
startDate: state.effectiveDateTime.value.toString(),
endDate: state.failureDateTime.value.toString(),
isCoerced: state.isStressFingerprint.value ? "2" : "1",
fingerprintName: state.changeNameController.text,
changeType: "1",
);
if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () {
Get.back(result: "addScuess");
});
}
}
@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();
}
}

View File

@ -0,0 +1,374 @@
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/face/faceDetail/faceDetail_logic.dart';
import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../tools/appRouteObserver.dart';
import '../../../../tools/commonItem.dart';
import '../../../../tools/dateTool.dart';
import '../../../../tools/showIosTipView.dart';
import '../../../../tools/showTFView.dart';
import '../../../../tools/submitBtn.dart';
import '../../../../tools/titleAppBar.dart';
import '../../../../translations/trans_lib.dart';
class FaceDetailPage extends StatefulWidget {
const FaceDetailPage({Key? key}) : super(key: key);
@override
State<FaceDetailPage> createState() => _FingerprintDetailPageState();
}
class _FingerprintDetailPageState extends State<FaceDetailPage>
with RouteAware {
final logic = Get.put(FaceDetailLogic());
final state = Get.find<FaceDetailLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: "指纹详情",
haveBack: true,
backgroundColor: AppColors.mainColor,
// actionsList: [
// TextButton(
// child: Text(TranslationLoader.lanKeys!.share!.tr, style: TextStyle(color: Colors.white, fontSize: 24.sp),),
// onPressed: () {
//
// },
// ),
// ],
),
body: Column(
children: [
Obx(() => CommonItem(
leftTitel:
"${TranslationLoader.lanKeys!.fingerprint!.tr}${TranslationLoader.lanKeys!.number!.tr}",
rightTitle: state.typeNumber.value,
isHaveDirection: false,
isHaveLine: true)),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.name!.tr,
rightTitle: state.typeName.value,
isHaveDirection: true,
isHaveLine: true,
action: () {
showCupertinoAlertDialog(context);
})),
Obx(() => Visibility(
visible: (state.keyType.value == 4 || state.keyType.value == 2)
? true
: false,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr,
allHeight: 70.h,
// rightTitle:"2023.09.19 11:27\n2023.09.25 11:27",
rightTitle: state.keyType.value == 1
? "永久"
: "${DateTool().dateToYMDHNString(state.effectiveDateTime.value.toString())}\n${DateTool().dateToYMDHNString(state.failureDateTime.value.toString())}",
isHaveDirection: true,
isHaveLine: true,
action: () async {
// switch(state.type.value){
// case 0:
// //
//
// break;
// case 1:
//
if (state.keyType.value == 2) {
//
var data = await Get.toNamed(
Routers.otherTypeKeyChangeDatePage,
arguments: {
"fingerprintItemData": state.faceItemData.value,
"pushType": 1,
});
if (data != null) {
setState(() {
state.effectiveDateTime.value =
data["beginTimeTimestamp"];
state.failureDateTime.value =
data["endTimeTimestamp"];
});
}
} else if (state.keyType.value == 4) {
//
var data = await Get.toNamed(
Routers.otherTypeKeyChangeValidityDatePage,
arguments: {
"fingerprintItemData": state.faceItemData.value,
});
if (data != null) {
setState(() {
state.effectiveDateTime.value =
data["beginTimeTimestamp"];
state.failureDateTime.value =
data["endTimeTimestamp"];
state.weekDay.value = data["weekDay"];
});
}
}
}))),
Obx(() => Visibility(
visible: state.keyType.value == 4 ? true : false,
child: Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveDay!.tr,
rightTitle: state.weekDay.value.join(','),
isHaveDirection: true,
action: () async {
//
var data = await Get.toNamed(
Routers.otherTypeKeyChangeValidityDatePage,
arguments: {
"fingerprintItemData": state.faceItemData.value,
});
if (data != null) {
setState(() {
state.effectiveDateTime.value =
data["beginTimeTimestamp"];
state.failureDateTime.value = data["endTimeTimestamp"];
state.weekDay.value = data["weekDay"];
});
}
})))),
Container(height: 10.h),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.additive!.tr,
rightTitle: state.adder.value,
isHaveLine: true,
action: () {})),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.addTime!.tr,
rightTitle:
DateTool().dateToYMDHNString(state.addTime.value.toString()),
action: () {})),
SizedBox(height: 10.h),
Container(height: 10.h),
CommonItem(
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
rightTitle: "",
isHaveDirection: true,
action: () {
//
Get.toNamed(Routers.keyOperationRecordPage, arguments: {
'lockId': state.faceItemData.value.lockId.toString(),
'faceId': state.faceItemData.value.faceId.toString()
});
}),
// SizedBox(height: 40.h),
// addControlsBtn(type),
SizedBox(height: 30.h),
SubmitBtn(
btnName: TranslationLoader.lanKeys!.delete!.tr,
isDelete: true,
borderRadius: 20.w,
margin: EdgeInsets.only(
left: 30.w, right: 30.w, top: 30.w, bottom: 30.w),
padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
onClick: () {
showIosTipViewDialog(context);
}),
],
),
);
}
// Widget addControlsBtn(int type) {
// List<Widget> widgetList = [];
// List<Map<String, dynamic>> routerList = [];
// //
// if (type == 0) {
// routerList.add({
// 'btnTitle': '设置密码',
// 'routerName': Routers.passwordKeyDetailPage,
// 'type': 9
// });
// routerList.add({
// 'btnTitle': '设置指纹',
// 'routerName': Routers.otherTypeKeyManagePage,
// 'type': 1
// });
// routerList.add({
// 'btnTitle': '设置遥控',
// 'routerName': Routers.otherTypeKeyManagePage,
// 'type': 2
// });
// } else if (type == 1) {
// //
// routerList.add({
// 'btnTitle': '设置密码',
// 'routerName': Routers.passwordKeyDetailPage,
// 'type': 9
// });
// routerList.add({
// 'btnTitle': '设置卡',
// 'routerName': Routers.otherTypeKeyManagePage,
// 'type': 0
// });
// routerList.add({
// 'btnTitle': '设置遥控',
// 'routerName': Routers.otherTypeKeyManagePage,
// 'type': 2
// });
// } else if (type == 2) {
// //
// routerList.add({
// 'btnTitle': '设置密码',
// 'routerName': Routers.passwordKeyDetailPage,
// 'type': 9
// });
// routerList.add({
// 'btnTitle': '设置卡',
// 'routerName': Routers.otherTypeKeyManagePage,
// 'type': 0
// });
// routerList.add({
// 'btnTitle': '设置指纹',
// 'routerName': Routers.otherTypeKeyManagePage,
// 'type': 1
// });
// }
//
// for (int i = 0; i < routerList.length; i++) {
// widgetList.add(SizedBox(
// width: ScreenUtil().screenWidth - 40.w,
// height: 60.h,
// child: OutlinedButton(
// style: OutlinedButton.styleFrom(
// // backgroundColor: Colors.white,
// side: BorderSide(width: 1, color: AppColors.mainColor)),
// onPressed: () {
// if (routerList[i]['type'] == 9) {
// Navigator.pushNamed(context, Routers.passwordKeyManagePage);
// } else {
// Navigator.pushNamed(context, Routers.otherTypeKeyManagePage,
// arguments: routerList[i]['type']);
// }
// },
// child: Text(
// routerList[i]['btnTitle'],
// style: TextStyle(color: AppColors.mainColor, fontSize: 24.sp),
// )),
// ));
//
// widgetList.add(
// SizedBox(
// height: 10.h,
// ),
// );
// }
//
// return Column(
// children: widgetList,
// );
// }
void showCupertinoAlertDialog(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return ShowTFView(
title:
"${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}",
tipTitle: "",
controller: state.changeNameController,
sureClick: () {
if (state.changeNameController.text.isEmpty) {
logic.showToast("请输入姓名");
return;
}
Get.back();
//
logic.editFingerprintsData();
},
cancelClick: () {
Get.back();
},
);
});
}
void showIosTipViewDialog(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return ShowIosTipView(
title: "提示",
tipTitle: "确定要删除吗?",
sureClick: () {
Get.back();
//
logic.senderAddFingerprint();
},
cancelClick: () {
Get.back();
},
);
});
}
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override
void dispose() {
// TODO: implement dispose
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();
}
///
@override
void didPush() {
super.didPush();
print("lockSet===didPush");
state.ifCurrentScreen.value = true;
}
///
@override
void didPop() {
super.didPop();
print("lockSet===didPop");
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
BlueManage().stopScan();
state.ifCurrentScreen.value = false;
state.sureBtnState.value = 0;
}
///
@override
void didPopNext() {
super.didPopNext();
print("lockSet===didPopNext");
state.ifCurrentScreen.value = true;
}
///
@override
void didPushNext() {
super.didPushNext();
print("lockSet===didPushNext");
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
BlueManage().stopScan();
state.ifCurrentScreen.value = false;
state.sureBtnState.value = 0;
}
}

View File

@ -0,0 +1,38 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart';
class FaceDetailState {
final faceItemData = FaceItemData().obs;
final TextEditingController changeNameController = TextEditingController();
final typeNumber = "".obs; //
final typeName = "".obs; //
var effectiveDateTime = 0.obs; //
var failureDateTime = 0.obs; //
final keyType = 0.obs; // :1;23:4
var weekDay = [].obs; //
var adder = "".obs; //
var addTime = 0.obs; //
var keyId = 0.obs;
var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs; // 0() 1()
final isStressFingerprint = false.obs;
FaceDetailState() {
Map map = Get.arguments;
faceItemData.value = map["faceItemData"];
keyId.value = faceItemData.value.faceId!;
typeNumber.value = faceItemData.value.faceNumber!;
typeName.value = faceItemData.value.faceName!;
changeNameController.text = typeName.value;
effectiveDateTime.value = faceItemData.value.startDate!;
failureDateTime.value = faceItemData.value.endDate!;
keyType.value = faceItemData.value.faceType!;
adder.value = faceItemData.value.senderUsername!;
addTime.value = faceItemData.value.createDate!;
weekDay.value = faceItemData.value.cyclicConfig!;
}
}

View File

@ -0,0 +1,131 @@
class FaceListDataEntity {
int? errorCode;
String? description;
String? errorMsg;
Data? data;
FaceListDataEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
FaceListDataEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
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 {
List<FaceItemData>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
Data({this.list, this.pageNo, this.pageSize, this.pages, this.total});
Data.fromJson(Map<String, dynamic> json) {
if (json['list'] != null) {
list = <FaceItemData>[];
json['list'].forEach((v) {
list!.add(FaceItemData.fromJson(v));
});
}
pageNo = json['pageNo'];
pageSize = json['pageSize'];
pages = json['pages'];
total = json['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 FaceItemData {
int? lockId;
int? faceId;
String? faceName;
String? faceNumber;
int? startDate;
int? endDate;
int? status;
int? addType;
int? faceType;
List? cyclicConfig;
String? featureData;
int? createDate;
String? senderUsername;
String? validTimeStr;
FaceItemData(
{this.lockId,
this.faceId,
this.faceName,
this.faceNumber,
this.startDate,
this.endDate,
this.status,
this.addType,
this.faceType,
this.cyclicConfig,
this.featureData,
this.createDate,
this.senderUsername,
this.validTimeStr});
FaceItemData.fromJson(Map<String, dynamic> json) {
lockId = json['lockId'];
faceId = json['faceId'];
faceName = json['faceName'];
faceNumber = json['faceNumber'];
startDate = json['startDate'];
endDate = json['endDate'];
status = json['status'];
addType = json['addType'];
faceType = json['faceType'];
cyclicConfig = json['cyclicConfig'];
featureData = json['featureData'];
createDate = json['createDate'];
senderUsername = json['senderUsername'];
validTimeStr = json['validTimeStr'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['lockId'] = lockId;
data['faceId'] = faceId;
data['faceName'] = faceName;
data['faceNumber'] = faceNumber;
data['startDate'] = startDate;
data['endDate'] = endDate;
data['status'] = status;
data['addType'] = addType;
data['faceType'] = faceType;
data['cyclicConfig'] = cyclicConfig;
data['featureData'] = featureData;
data['createDate'] = createDate;
data['senderUsername'] = senderUsername;
data['validTimeStr'] = validTimeStr;
return data;
}
}

View File

@ -1,8 +1,427 @@
import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.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/blue/io_type.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceList_state.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'faceList_state.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_checkingUserInfoCount.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 '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
class FaceListLogic extends BaseGetXController{ class FaceListLogic extends BaseGetXController {
FaceListState state = FaceListState(); FaceListState state = FaceListState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) {
// ()
if ((reply is SenderAddFaceReply) && (state.isDeletFaceData == true)) {
_replyAddFaceBegin(reply);
}
if (reply is SenderQueryingFaceStatusReply) {
//
_replyQueryingFaceStatus(reply);
}
if (reply is SenderCheckingUserInfoCountReply) {
_replyCheckingUserInfoCount(reply);
}
});
}
// ---
Future<void> _replyAddFaceBegin(Reply reply) async {
int status = reply.data[2];
print("status:$status");
switch (status) {
case 0x00:
//
print("${reply.commandType!.typeValue} list人脸数据解析成功");
state.isDeletFaceData = false;
cancelBlueConnetctToastTimer();
dismissEasyLoading();
deletAllFacesData();
break;
case 0x06:
//
print("${reply.commandType!.typeValue} 需要鉴权");
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFaceCommand(
keyID: state.deletKeyID,
userID: state.deletUserID,
faceNo: state.deletFaceNo,
useCountLimit: 0,
startTime: 0x11223344,
endTime: 0x11223344,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
);
break;
case 0x07:
//
print("${reply.commandType!.typeValue} 用户无权限");
break;
case 0x09:
//
print("${reply.commandType!.typeValue} 权限校验错误");
break;
default:
//
print("${reply.commandType!.typeValue} list人脸失败");
break;
}
}
//
Future<void> _replyQueryingFaceStatus(Reply reply) async {
int status = reply.data[2];
switch (status) {
case 0x00:
//
print("${reply.commandType}数据解析成功");
// _getLockStatus();
break;
case 0x06:
//
print("${reply.commandType}需要鉴权");
break;
case 0x07:
//
print("${reply.commandType}用户无权限");
break;
case 0x09:
//
print("${reply.commandType}权限校验错误");
break;
default:
//
print("${reply.commandType}失败");
break;
}
}
//
Future<void> _replyReferEventRecordNumber(Reply reply) async {
int status = reply.data[2];
switch (status) {
case 0x00:
//
print("${reply.commandType}数据解析成功");
// _getLockStatus();
break;
case 0x06:
//
print("${reply.commandType}需要鉴权");
break;
case 0x07:
//
print("${reply.commandType}用户无权限");
break;
case 0x09:
//
print("${reply.commandType}权限校验错误");
break;
default:
//
print("${reply.commandType}失败");
break;
}
}
// ()
Future<void> _replyCheckingUserInfoCount(Reply reply) async {
int status = reply.data[2];
//
int userNum = reply.data[5];
// print("userNum:$userNum");
//
int fingerNum = reply.data[6];
// print("fingerNum:$fingerNum");
//
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);
print("serialNo:$serialNo");
switch (status) {
case 0x00:
//
print("${reply.commandType}数据解析成功");
// _getLockStatus();
break;
case 0x06:
//
print("${reply.commandType}需要鉴权");
break;
case 0x07:
//
print("${reply.commandType}用户无权限");
break;
case 0x09:
//
print("${reply.commandType}权限校验错误");
break;
default:
//
print("${reply.commandType}失败");
break;
}
}
//
Future<void> senderQueryingFaceStatus() async {
BlueManage().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState state) async {
if (state == DeviceConnectionState.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.senderQueryingFaceStatusCommand(
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().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState state) async {
if (state == DeviceConnectionState.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> senderAddFace() async {
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
});
BlueManage().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState deviceConnectionState) async {
if (deviceConnectionState == DeviceConnectionState.connected) {
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFaceCommand(
keyID: state.deletKeyID,
userID: state.deletUserID,
faceNo: state.deletFaceNo,
useCountLimit: 0,
startTime: 0x11223344,
endTime: 0x11223344,
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
);
} else if (deviceConnectionState == DeviceConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
});
}
//
void getFaceListData() async {
var entity = await ApiRepository.to.getFaceListData(
lockId: state.lockId.value.toString(),
pageNo: '1',
pageSize: '20',
searchStr: state.searchController.text,
);
if (entity.errorCode!.codeIsSuccessful) {
state.faceItemListData.value = entity.data!.list!;
}
}
//
void deletAllFacesData() async {
var fingerprintId = "";
var type = "1";
if (state.isDeletAll == false) {
fingerprintId = state.deletKeyID;
type = "0";
}
print("delet fingerprintId $fingerprintId");
var entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: fingerprintId,
lockId: state.lockId.value.toString(),
type: type,
deleteType: "1");
if (entity.errorCode!.codeIsSuccessful) {
if (state.isDeletAll == false) {
showToast("删除成功");
} else {
showToast("重置成功");
}
state.isDeletFaceData = false;
getFaceListData();
}
}
//
late StreamSubscription _teamEvent;
void _initRefreshAction() {
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((event) {
getFaceListData();
});
}
@override
Future<void> onReady() async {
// TODO: implement onReady
super.onReady();
print("onReady()");
//
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
// print("aaaaaaa:$isDemoMode");
if (isDemoMode == false) {
_initReplySubscription();
_initRefreshAction();
getFaceListData();
}
}
@override
Future<void> onInit() async {
// TODO: implement onInit
super.onInit();
print("onInit()");
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
// senderQueryingFingerprintStatus();
// senderCheckingCardStatus();
// senderCheckingUserInfoCount();
}
}
@override
Future<void> onClose() async {
// TODO: implement onClose
super.onClose();
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_replySubscription.cancel();
_teamEvent.cancel();
}
}
} }

View File

@ -1,8 +1,10 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart';
import 'package:star_lock/tools/keySearchWidget.dart';
import 'package:star_lock/tools/left_slide_actions.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
@ -53,7 +55,12 @@ class _FaceListState extends State<FaceList> {
), ),
body: Column( body: Column(
children: [ children: [
_searchWidget(), KeySearchWidget(
editingController: state.searchController,
onSubmittedAction: () {
logic.getFaceListData();
},
),
SizedBox( SizedBox(
height: 20.h, height: 20.h,
), ),
@ -63,76 +70,84 @@ class _FaceListState extends State<FaceList> {
'${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.face!.tr}', '${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.face!.tr}',
onClick: () async { onClick: () async {
var data = var data =
await Get.toNamed(Routers.addFaceTypeManagePage); await Get.toNamed(Routers.addFaceTypeManagePage, arguments: {
"lockId": state.lockId.value,
"fromType": 1 // 1 2
});
if (data != null) { if (data != null) {
// logic.getFaceListData();
} }
}, },
), ),
SizedBox( SizedBox(height: 64.h)
height: 64.h,
)
], ],
), ),
); );
} }
Widget _searchWidget() { Widget _buildMainUI() {
return Container( {
height: 60.h, return Obx(() => state.faceItemListData.value.isNotEmpty
margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 10.w), ? ListView.separated(
decoration: BoxDecoration( itemCount: state.faceItemListData.value.length,
color: Colors.white, borderRadius: BorderRadius.circular(5)), itemBuilder: (c, index) {
child: TextField( FaceItemData getFaceItemData =
// state.faceItemListData.value[index];
maxLines: 1, //
controller: state.searchController, if (index < state.faceItemListData.value.length) {
autofocus: false, return LeftSlideActions(
onChanged: (value) { key: Key(getFaceItemData.faceName!),
print("onChanged:$value"); actionsWidth: 60,
}, actions: [
onEditingComplete: () { _buildDeleteBtn(getFaceItemData),
print("onEditingComplete:"); ],
}, decoration: const BoxDecoration(
onSubmitted: (value) { borderRadius: BorderRadius.all(Radius.circular(1)),
//
},
decoration: InputDecoration(
//
contentPadding: const EdgeInsets.only(
top: 12.0, left: -19.0, right: -15.0, bottom: 8.0),
hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr,
hintStyle: TextStyle(fontSize: 22.sp, height: 3.0),
//线
border: InputBorder.none,
//
icon: Padding(
padding: EdgeInsets.only(
top: 20.h, bottom: 20.h, right: 20.w, left: 10.w),
child: Image.asset(
'images/main/icon_main_search.png',
width: 40.w,
height: 40.w,
),
),
),
), ),
child: _keyItem(
'images/icon_fingerprint.png',
getFaceItemData.faceName!,
(getFaceItemData.faceType! != 1)
? (getFaceItemData.endDate! <
DateTime.now().millisecondsSinceEpoch
? "已失效"
: "")
: "",
getFaceItemData.validTimeStr!,
// fingerprintItemData.fingerprintType! == 1
// ? "永久"
// : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}",
() async {
var data =
await Get.toNamed(Routers.faceDetailPage, arguments: {
"faceItemData": getFaceItemData,
});
if (data != null) {
logic.getFaceListData();
}
}),
); );
} }
return const SizedBox.shrink();
Widget _buildMainUI() { },
String typeImgName = 'images/icon_card.png'; separatorBuilder: (BuildContext context, int index) {
return const Divider(
return const NoData(); height: 1,
color: AppColors.greyLineColor,
);
},
)
: const NoData());
}
} }
Widget _buildDeleteBtn(String idStr) { Widget _buildDeleteBtn(FaceItemData faceItemData) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
// : // :
showIosTipViewDialog(context, idStr); state.deletKeyID = faceItemData.faceId.toString();
state.deletFaceNo = int.parse(faceItemData.faceNumber!);
showIosTipViewDialog(context);
}, },
child: Container( child: Container(
width: 60, width: 60,
@ -151,7 +166,7 @@ class _FaceListState extends State<FaceList> {
); );
} }
void showIosTipViewDialog(BuildContext context, String keyId) { void showIosTipViewDialog(BuildContext context) {
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -159,8 +174,11 @@ class _FaceListState extends State<FaceList> {
title: "提示", title: "提示",
tipTitle: "确定要删除吗?", tipTitle: "确定要删除吗?",
sureClick: () async { sureClick: () async {
// Get.back();
state.isDeletFaceData = true;
state.isDeletAll = false;
state.deletUserID = (await Storage.getUid())!;
logic.senderAddFace();
}, },
cancelClick: () { cancelClick: () {
Get.back(); Get.back();
@ -170,8 +188,8 @@ class _FaceListState extends State<FaceList> {
); );
} }
Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String showTime, Widget _keyItem(String lockTypeIcon, String lockTypeTitle,
Function() action) { String ifInvalidation, String showTime, Function() action) {
return GestureDetector( return GestureDetector(
onTap: action, onTap: action,
child: Container( child: Container(
@ -192,16 +210,19 @@ class _FaceListState extends State<FaceList> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, // mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text(lockTypeTitle, Text(lockTypeTitle,
style: TextStyle( style: TextStyle(
fontSize: 24.sp, color: AppColors.blackColor)), fontSize: 24.sp, color: AppColors.blackColor)),
Expanded(child: Container()),
Text(ifInvalidation,
style: TextStyle(fontSize: 22.sp, color: Colors.red)),
SizedBox(width: 10.w),
], ],
), ),
SizedBox(height: 5.h), SizedBox(height: 5.h),
Container( Row(
child: Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Text(showTime, Text(showTime,
@ -210,7 +231,6 @@ class _FaceListState extends State<FaceList> {
color: AppColors.placeholderTextColor)), color: AppColors.placeholderTextColor)),
], ],
), ),
),
SizedBox(width: 20.h), SizedBox(width: 20.h),
], ],
), ),
@ -222,13 +242,13 @@ class _FaceListState extends State<FaceList> {
); );
} }
void showDeletAlertDialog(BuildContext context,) { void showDeletAlertDialog(BuildContext context) {
showCupertinoDialog( showCupertinoDialog(
context: context, context: context,
builder: (context) { builder: (context) {
return CupertinoAlertDialog( return CupertinoAlertDialog(
title: const Text("提示"), title: const Text("提示"),
content: const Text('重置后信息都会清除哦,确认要重置吗?'), content: const Text('重置后,该锁的人脸都将被删除哦,确认要重置吗?'),
actions: [ actions: [
CupertinoDialogAction( CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr), child: Text(TranslationLoader.lanKeys!.cancel!.tr),
@ -239,8 +259,13 @@ class _FaceListState extends State<FaceList> {
CupertinoDialogAction( CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr), child: Text(TranslationLoader.lanKeys!.sure!.tr),
onPressed: () { onPressed: () {
// Navigator.pop(context);
state.isDeletFaceData = true;
state.isDeletAll = true;
state.deletKeyID = "1";
state.deletUserID = "DeleteAll!@#";
state.deletFaceNo = 255;
logic.senderAddFace();
}, },
), ),
], ],

View File

@ -1,6 +1,24 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart';
class FaceListState{ class FaceListState {
final TextEditingController searchController = TextEditingController(); final TextEditingController searchController = TextEditingController();
final lockId = 0.obs;
//
var isDeletFaceData = false;
var isDeletAll = false;
var deletKeyID = "";
var deletUserID = "DeleteAll!@#";
var deletFaceNo = 0;
final faceItemListData = <FaceItemData>[].obs;
var ifCurrentScreen = true.obs; // ,
FaceListState() {
Map map = Get.arguments;
lockId.value = map["lockId"];
}
} }

View File

@ -105,6 +105,11 @@ abstract class Api {
final String checkFingerprintNameURL = final String checkFingerprintNameURL =
'/fingerprint/checkFingerprintName'; // '/fingerprint/checkFingerprintName'; //
final String getFaceListURL = '/face/list'; //
final String addFaceURL = '/face/add'; //
final String checkFaceNameURL = '/face/checkFaceName'; //
final String updateFaceUserNoURL = '/face/updateFaceUserNo'; //
final String getICCardListURL = '/identityCard/list'; // IC卡列表 final String getICCardListURL = '/identityCard/list'; // IC卡列表
final String addICCardURL = '/identityCard/add'; // IC卡 final String addICCardURL = '/identityCard/add'; // IC卡
final String editICCardURL = '/identityCard/update'; // IC卡 final String editICCardURL = '/identityCard/update'; // IC卡

View File

@ -261,7 +261,7 @@ class ApiProvider extends BaseProvider {
'lockId': lockId, 'lockId': lockId,
'records': records, 'records': records,
}), }),
isUnShowLoading:true); isUnShowLoading: true);
// //
Future<Response> getLockRecordLastUploadDataTime(String lockId) => post( Future<Response> getLockRecordLastUploadDataTime(String lockId) => post(
@ -346,10 +346,7 @@ class ApiProvider extends BaseProvider {
// //
Future<Response> deletOwnerKeyInfo(String lockId, String keyId) => post( Future<Response> deletOwnerKeyInfo(String lockId, String keyId) => post(
deleteElectronicKeyURL.toUrl, deleteElectronicKeyURL.toUrl,
jsonEncode({ jsonEncode({'lockId': lockId, 'keyId': keyId}));
'lockId': lockId,
'keyId': keyId
}));
// //
Future<Response> checkLoginPassword(String password) => post( Future<Response> checkLoginPassword(String password) => post(
@ -555,7 +552,8 @@ class ApiProvider extends BaseProvider {
/// ///
// //
Future<Response> setAutoUnlockLoadData(int lockId, int autoLock, int autoLockSecond) => Future<Response> setAutoUnlockLoadData(
int lockId, int autoLock, int autoLockSecond) =>
post( post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
@ -565,7 +563,8 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setLockSoundData(int lockId, int lockSound, int lockSoundVolume) => Future<Response> setLockSoundData(
int lockId, int lockSound, int lockSoundVolume) =>
post( post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
@ -575,9 +574,7 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setBurglarAlarmData( Future<Response> setBurglarAlarmData(int lockId, int antiPrySwitch) => post(
int lockId, int antiPrySwitch) =>
post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
'lockId': lockId, 'lockId': lockId,
@ -595,7 +592,8 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> remoteUnlockingOpenOrCloseLoadData(int lockId, int remoteUnlock) => Future<Response> remoteUnlockingOpenOrCloseLoadData(
int lockId, int remoteUnlock) =>
post( post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
@ -604,8 +602,7 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setResetButtonData(int lockId, int resetSwitch) => Future<Response> setResetButtonData(int lockId, int resetSwitch) => post(
post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
'lockId': lockId, 'lockId': lockId,
@ -613,8 +610,7 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setCheckInData(int lockId, int resetSwitch) => Future<Response> setCheckInData(int lockId, int resetSwitch) => post(
post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
'lockId': lockId, 'lockId': lockId,
@ -631,8 +627,7 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setRoomStatusData(int lockId, int roomStatus) => Future<Response> setRoomStatusData(int lockId, int roomStatus) => post(
post(
setRoomStatusURL.toUrl, setRoomStatusURL.toUrl,
jsonEncode({ jsonEncode({
'lockId': lockId, 'lockId': lockId,
@ -640,7 +635,8 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setNormallyModeData(int lockId, int passageMode, List passageModeConfig) => Future<Response> setNormallyModeData(
int lockId, int passageMode, List passageModeConfig) =>
post( post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
@ -657,8 +653,7 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setAdminPasswordData(int lockId, String adminPwd) => Future<Response> setAdminPasswordData(int lockId, String adminPwd) => post(
post(
updateLockSettingUrl.toUrl, updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
'lockId': lockId, 'lockId': lockId,
@ -741,8 +736,10 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> setLockPickingReminderData(int lockId, int unlockReminderPush) => Future<Response> setLockPickingReminderData(
post(updateLockSettingUrl.toUrl, int lockId, int unlockReminderPush) =>
post(
updateLockSettingUrl.toUrl,
jsonEncode({ jsonEncode({
'lockId': lockId, 'lockId': lockId,
'unlockReminderPush': unlockReminderPush, 'unlockReminderPush': unlockReminderPush,
@ -1015,15 +1012,62 @@ class ApiProvider extends BaseProvider {
// //
Future<Response> checkFingerprintNameDuplicatedData( Future<Response> checkFingerprintNameDuplicatedData(
String lockId, String lockId, String fingerprintName) =>
String fingerprintName) => post(checkFingerprintNameURL.toUrl,
jsonEncode({'lockId': lockId, 'fingerprintName': fingerprintName}));
//
Future<Response> getFaceListData(
String lockId, String pageNo, String pageSize, String searchStr) =>
post( post(
checkFingerprintNameURL.toUrl, getFaceListURL.toUrl,
jsonEncode({ jsonEncode({
'lockId': lockId, 'lockId': lockId,
'fingerprintName': fingerprintName 'pageNo': pageNo,
'pageSize': pageSize,
'searchStr': searchStr,
})); }));
//
Future<Response> addFaceData(
int lockId,
String faceName,
String faceNumber,
int faceType,
int startDate,
int endDate,
String featureData,
String addType,
List cyclicConfig,
) =>
post(
addFaceURL.toUrl,
jsonEncode({
'lockId': lockId,
'faceName': faceName,
'faceNumber': faceNumber,
'faceType': faceType,
'startDate': startDate,
'endDate': endDate,
'featureData': featureData,
'addType': addType,
'cyclicConfig': cyclicConfig,
}));
//
Future<Response> checkFaceNameDuplicatedData(
String lockId, String faceName) =>
post(checkFaceNameURL.toUrl,
jsonEncode({'lockId': lockId, 'faceName': faceName}));
//
Future<Response> updateFaceUserNoLoadData(
String faceId, String lockId, String faceUserNo) =>
post(
updateFaceUserNoURL.toUrl,
jsonEncode(
{'faceId': faceId, 'lockId': lockId, 'faceUserNo': faceUserNo}));
// IC卡列表 // IC卡列表
Future<Response> getICCardListData( Future<Response> getICCardListData(
String lockId, String pageNo, String pageSize, String searchStr) => String lockId, String pageNo, String pageSize, String searchStr) =>
@ -1063,8 +1107,15 @@ class ApiProvider extends BaseProvider {
})); }));
// ICCard // ICCard
Future<Response> editICCardData(String lockId, String cardId, String cardName, Future<Response> editICCardData(
String startDate, String endDate, String isCoerced, List weekDay, String changeType) => String lockId,
String cardId,
String cardName,
String startDate,
String endDate,
String isCoerced,
List weekDay,
String changeType) =>
post( post(
editICCardURL.toUrl, editICCardURL.toUrl,
jsonEncode({ jsonEncode({
@ -1100,14 +1151,9 @@ class ApiProvider extends BaseProvider {
// //
Future<Response> checkCardNameDuplicatedData( Future<Response> checkCardNameDuplicatedData(
String lockId, String lockId, String cardName) =>
String cardName) => post(checkCardNameURL.toUrl,
post( jsonEncode({'lockId': lockId, 'cardName': cardName}));
checkCardNameURL.toUrl,
jsonEncode({
'lockId': lockId,
'cardName': cardName
}));
// //
Future<Response> getTransferLockListData() => Future<Response> getTransferLockListData() =>
@ -1179,8 +1225,7 @@ class ApiProvider extends BaseProvider {
'searchStr': searchStr 'searchStr': searchStr
})); }));
Future<Response> deletLockUser(int uid) => Future<Response> deletLockUser(int uid) => post(
post(
deletLockUserURL.toUrl, deletLockUserURL.toUrl,
jsonEncode({ jsonEncode({
'uid': uid, 'uid': uid,
@ -1227,14 +1272,9 @@ class ApiProvider extends BaseProvider {
Future<Response> userSettingsInfo() => Future<Response> userSettingsInfo() =>
post(userSettingsInfoURL.toUrl, jsonEncode({})); post(userSettingsInfoURL.toUrl, jsonEncode({}));
Future<Response> canSendKey( Future<Response> canSendKey(String endDate, List lockIdList) => post(
String endDate, List lockIdList) =>
post(
canSendKeyURL.toUrl, canSendKeyURL.toUrl,
jsonEncode({ jsonEncode({'endDate': endDate, 'lockIdList': lockIdList}));
'endDate': endDate,
'lockIdList': lockIdList
}));
Future<Response> batchSendKey( Future<Response> batchSendKey(
String endDate, String endDate,
@ -1381,7 +1421,8 @@ class ApiProvider extends BaseProvider {
jsonEncode({"questionAndAnswerList": questionAndAnswerList})); jsonEncode({"questionAndAnswerList": questionAndAnswerList}));
// upToken updateUserInfo // upToken updateUserInfo
Future<Response> getUpToken(String module, String typeKey, String type, String filename, int size) => Future<Response> getUpToken(String module, String typeKey, String type,
String filename, int size) =>
post( post(
getUpTokenURL.toUrl, getUpTokenURL.toUrl,
jsonEncode({ jsonEncode({
@ -1392,7 +1433,8 @@ class ApiProvider extends BaseProvider {
})); }));
// //
Future<Response> uploadFile(String url, dynamic boay) => post(url, boay, isUnUploadFile: false, contentType:'multipart/form-data'); Future<Response> uploadFile(String url, dynamic boay) => post(url, boay,
isUnUploadFile: false, contentType: 'multipart/form-data');
//Token //Token
Future<Response> unbindPhoneToken(String verificationCode) => post( Future<Response> unbindPhoneToken(String verificationCode) => post(

View File

@ -4,6 +4,7 @@ import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyO
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceListData_entity.dart';
import 'package:star_lock/main/lockDetail/lcokSet/basicInformation/basicInformation/KeyDetailEntity.dart'; import 'package:star_lock/main/lockDetail/lcokSet/basicInformation/basicInformation/KeyDetailEntity.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart';
@ -217,7 +218,8 @@ class ApiRepository {
} }
// //
Future<KeyOperationRecordEntity> lockRecordUploadData({required String lockId, required List records}) async { Future<KeyOperationRecordEntity> lockRecordUploadData(
{required String lockId, required List records}) async {
final res = await apiProvider.lockRecordUploadData(lockId, records); final res = await apiProvider.lockRecordUploadData(lockId, records);
return KeyOperationRecordEntity.fromJson(res.body); return KeyOperationRecordEntity.fromJson(res.body);
} }
@ -236,14 +238,15 @@ class ApiRepository {
} }
// NO // NO
Future<LockNetTokenEntity> updateLockUserNo({required String keyId, required String lockUserNo}) async { Future<LockNetTokenEntity> updateLockUserNo(
{required String keyId, required String lockUserNo}) async {
final res = await apiProvider.updateLockUserNo(keyId, lockUserNo); final res = await apiProvider.updateLockUserNo(keyId, lockUserNo);
return LockNetTokenEntity.fromJson(res.body); return LockNetTokenEntity.fromJson(res.body);
} }
// //
Future<SaveLockEntity> bindingBlueAdmin( Future<SaveLockEntity> bindingBlueAdmin(
{ required String lockAlias, {required String lockAlias,
required Map position, required Map position,
required Map bluetooth, required Map bluetooth,
required Map lockInfo, required Map lockInfo,
@ -275,24 +278,17 @@ class ApiRepository {
// //
Future<KeyOperationRecordEntity> modifyKeyName( Future<KeyOperationRecordEntity> modifyKeyName(
{ {required String keyId,
required String keyId,
required String lockId, required String lockId,
required String keyName required String keyName}) async {
}) async { final res = await apiProvider.modifyKeyName(keyId, lockId, keyName);
final res =
await apiProvider.modifyKeyName(keyId, lockId, keyName);
return KeyOperationRecordEntity.fromJson(res.body); return KeyOperationRecordEntity.fromJson(res.body);
} }
//() //()
Future<KeyOperationRecordEntity> updateLockName( Future<KeyOperationRecordEntity> updateLockName(
{ {required String lockId, required String lockName}) async {
required String lockId, final res = await apiProvider.updateLockName(lockId, lockName);
required String lockName
}) async {
final res =
await apiProvider.updateLockName(lockId, lockName);
return KeyOperationRecordEntity.fromJson(res.body); return KeyOperationRecordEntity.fromJson(res.body);
} }
@ -373,7 +369,8 @@ class ApiRepository {
} }
// //
Future<LockListInfoEntity> checkLoginPassword({required String password}) async { Future<LockListInfoEntity> checkLoginPassword(
{required String password}) async {
final res = await apiProvider.checkLoginPassword(password); final res = await apiProvider.checkLoginPassword(password);
return LockListInfoEntity.fromJson(res.body); return LockListInfoEntity.fromJson(res.body);
} }
@ -463,10 +460,8 @@ class ApiRepository {
} }
// //
Future<MassSendLockGroupListEntity> editLockGroupRequest({ Future<MassSendLockGroupListEntity> editLockGroupRequest(
required int groupId, {required int groupId, required String groupName}) async {
required String groupName
}) async {
final res = await apiProvider.editLockGroupRequest(groupId, groupName); final res = await apiProvider.editLockGroupRequest(groupId, groupName);
return MassSendLockGroupListEntity.fromJson(res.body); return MassSendLockGroupListEntity.fromJson(res.body);
} }
@ -486,29 +481,21 @@ class ApiRepository {
// //
Future<MassSendLockGroupListEntity> deleteGroup(int groupId) async { Future<MassSendLockGroupListEntity> deleteGroup(int groupId) async {
final res = final res = await apiProvider.deleteGroup(groupId);
await apiProvider.deleteGroup(groupId);
return MassSendLockGroupListEntity.fromJson(res.body); return MassSendLockGroupListEntity.fromJson(res.body);
} }
// //
Future<MassSendLockGroupListEntity> lockGroupAddLock( Future<MassSendLockGroupListEntity> lockGroupAddLock(
{ {required List lockIds, required int groupId}) async {
required List lockIds, final res = await apiProvider.lockGroupAddLock(lockIds, groupId);
required int groupId
}) async {
final res =
await apiProvider.lockGroupAddLock(lockIds, groupId);
return MassSendLockGroupListEntity.fromJson(res.body); return MassSendLockGroupListEntity.fromJson(res.body);
} }
// //
Future<MassSendLockGroupListEntity> lockGroupDeletLock( Future<MassSendLockGroupListEntity> lockGroupDeletLock(
{ {required List lockIds}) async {
required List lockIds final res = await apiProvider.lockGroupDeletLock(lockIds);
}) async {
final res =
await apiProvider.lockGroupDeletLock(lockIds);
return MassSendLockGroupListEntity.fromJson(res.body); return MassSendLockGroupListEntity.fromJson(res.body);
} }
@ -590,8 +577,8 @@ class ApiRepository {
required int autoLock, required int autoLock,
required int autoLockSecond, required int autoLockSecond,
}) async { }) async {
final res = final res = await apiProvider.setAutoUnlockLoadData(
await apiProvider.setAutoUnlockLoadData(lockId, autoLock, autoLockSecond); lockId, autoLock, autoLockSecond);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -611,8 +598,7 @@ class ApiRepository {
required int lockId, required int lockId,
required int antiPrySwitch, required int antiPrySwitch,
}) async { }) async {
final res = final res = await apiProvider.setBurglarAlarmData(lockId, antiPrySwitch);
await apiProvider.setBurglarAlarmData(lockId, antiPrySwitch);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -649,7 +635,8 @@ class ApiRepository {
required int lockId, required int lockId,
required int appUnlockOnline, required int appUnlockOnline,
}) async { }) async {
final res = await apiProvider.setOpenLockNeedOnlineData(lockId, appUnlockOnline); final res =
await apiProvider.setOpenLockNeedOnlineData(lockId, appUnlockOnline);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -678,8 +665,8 @@ class ApiRepository {
required int passageMode, required int passageMode,
required List passageModeConfig, required List passageModeConfig,
}) async { }) async {
final res = final res = await apiProvider.setNormallyModeData(
await apiProvider.setNormallyModeData(lockId, passageMode, passageModeConfig); lockId, passageMode, passageModeConfig);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -785,10 +772,8 @@ class ApiRepository {
} }
// //
Future<KeyDetailEntity> canSendKey( Future<KeyDetailEntity> canSendKey(String endDate, List lockIdList) async {
String endDate, List lockIdList) async { final res = await apiProvider.canSendKey(endDate, lockIdList);
final res =
await apiProvider.canSendKey(endDate, lockIdList);
return KeyDetailEntity.fromJson(res.body); return KeyDetailEntity.fromJson(res.body);
} }
@ -928,7 +913,8 @@ class ApiRepository {
required int lockId, required int lockId,
required int unlockReminderPush, required int unlockReminderPush,
}) async { }) async {
final res = await apiProvider.setLockPickingReminderData(lockId, unlockReminderPush); final res = await apiProvider.setLockPickingReminderData(
lockId, unlockReminderPush);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -1168,13 +1154,58 @@ class ApiRepository {
// //
Future<LoginEntity> checkFingerprintNameDuplicatedData( Future<LoginEntity> checkFingerprintNameDuplicatedData(
{required String lockId, {required String lockId, required String fingerprintName}) async {
required String fingerprintName}) async {
final res = await apiProvider.checkFingerprintNameDuplicatedData( final res = await apiProvider.checkFingerprintNameDuplicatedData(
lockId, fingerprintName); lockId, fingerprintName);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
//
Future<FaceListDataEntity> getFaceListData({
required String lockId,
required String pageNo,
required String pageSize,
required String searchStr,
}) async {
final res =
await apiProvider.getFaceListData(lockId, pageNo, pageSize, searchStr);
return FaceListDataEntity.fromJson(res.body);
}
//
Future<AddFingerprintEntity> addFaceData({
required int lockId,
required String faceName,
required String faceNumber,
required int faceType,
required int startDate,
required int endDate,
required String featureData,
required String addType,
required List cyclicConfig,
}) async {
final res = await apiProvider.addFaceData(lockId, faceName, faceNumber,
faceType, startDate, endDate, featureData, addType, cyclicConfig);
return AddFingerprintEntity.fromJson(res.body);
}
//
Future<LoginEntity> checkFaceNameDuplicatedData(
{required String lockId, required String faceName}) async {
final res = await apiProvider.checkFaceNameDuplicatedData(lockId, faceName);
return LoginEntity.fromJson(res.body);
}
//
Future<LoginEntity> updateFaceUserNoLoadData(
{required String faceId,
required String lockId,
required String faceUserNo}) async {
final res =
await apiProvider.updateFaceUserNoLoadData(faceId, lockId, faceUserNo);
return LoginEntity.fromJson(res.body);
}
// Ic卡列表 // Ic卡列表
Future<FingerprintListDataEntity> getICCardListData({ Future<FingerprintListDataEntity> getICCardListData({
required String lockId, required String lockId,
@ -1214,8 +1245,8 @@ class ApiRepository {
required String isCoerced, required String isCoerced,
required List weekDay, required List weekDay,
required String changeType}) async { required String changeType}) async {
final res = await apiProvider.editICCardData( final res = await apiProvider.editICCardData(lockId, cardId, cardName,
lockId, cardId, cardName, startDate, endDate, isCoerced, weekDay, changeType); startDate, endDate, isCoerced, weekDay, changeType);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -1242,10 +1273,8 @@ class ApiRepository {
// //
Future<LoginEntity> checkCardNameDuplicatedData( Future<LoginEntity> checkCardNameDuplicatedData(
{required String lockId, {required String lockId, required String cardName}) async {
required String cardName}) async { final res = await apiProvider.checkCardNameDuplicatedData(lockId, cardName);
final res = await apiProvider.checkCardNameDuplicatedData(
lockId, cardName);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -1391,21 +1420,18 @@ class ApiRepository {
// upToken updateUserInfo // upToken updateUserInfo
Future<MinePersonGetUploadFileInfoEntity> getUpToken( Future<MinePersonGetUploadFileInfoEntity> getUpToken(
{ {required String module,
required String module,
required String typeKey, required String typeKey,
required String type, required String type,
required String filename, required String filename,
required int size required int size}) async {
} final res =
) async { await apiProvider.getUpToken(module, typeKey, type, filename, size);
final res = await apiProvider.getUpToken(module, typeKey, type, filename, size);
return MinePersonGetUploadFileInfoEntity.fromJson(res.body); return MinePersonGetUploadFileInfoEntity.fromJson(res.body);
} }
// //
Future<LoginEntity> uploadFile( Future<LoginEntity> uploadFile({
{
required String url, required String url,
required dynamic body, required dynamic body,
}) async { }) async {

View File

@ -4,7 +4,8 @@ import 'package:get/get.dart';
import 'package:get/get_connect/http/src/request/request.dart'; import 'package:get/get_connect/http/src/request/request.dart';
FutureOr<dynamic> responseLogInterceptor(Request request, Response response) { FutureOr<dynamic> responseLogInterceptor(Request request, Response response) {
Get.log('HTTP request:${request.url}\n RESPONSE => stataCode:${response.statusCode} ${response.body} ${response.headers}'); Get.log(
'HTTP request:${request.url}\n RESPONSE => stataCode:${response.statusCode} ${response.bodyString} ${response.headers}');
EasyLoading.dismiss(animation: true); EasyLoading.dismiss(animation: true);
return response; return response;
} }

View File

@ -16,29 +16,29 @@ class XSAliyunPushProvider {
} }
Future<void> _onNotification(Map<dynamic, dynamic> message) async { Future<void> _onNotification(Map<dynamic, dynamic> message) async {
print('onNotification: $message'); // print('onNotification: $message');
} }
Future<void> _onAndroidNotificationReceivedInApp( Future<void> _onAndroidNotificationReceivedInApp(
Map<dynamic, dynamic> message) async { Map<dynamic, dynamic> message) async {
print('onAndroidNotificationReceivedInApp: $message'); // print('onAndroidNotificationReceivedInApp: $message');
} }
Future<void> _onMessage(Map<dynamic, dynamic> message) async { Future<void> _onMessage(Map<dynamic, dynamic> message) async {
print('onMessage: $message'); // print('onMessage: $message');
} }
Future<void> _onNotificationOpened(Map<dynamic, dynamic> message) async { Future<void> _onNotificationOpened(Map<dynamic, dynamic> message) async {
print('onNotificationOpened: $message'); // print('onNotificationOpened: $message');
} }
Future<void> _onNotificationRemoved(Map<dynamic, dynamic> message) async { Future<void> _onNotificationRemoved(Map<dynamic, dynamic> message) async {
print('onNotificationRemoved: $message'); // print('onNotificationRemoved: $message');
} }
Future<void> _onAndroidNotificationClickedWithNoAction( Future<void> _onAndroidNotificationClickedWithNoAction(
Map<dynamic, dynamic> message) async { Map<dynamic, dynamic> message) async {
print('onAndroidNotificationClickedWithNoAction: $message'); // print('onAndroidNotificationClickedWithNoAction: $message');
} }
Future<void> _onIOSChannelOpened(Map<dynamic, dynamic> message) async {} Future<void> _onIOSChannelOpened(Map<dynamic, dynamic> message) async {}
@ -86,7 +86,7 @@ class XSAliyunPushProvider {
// Toast.show(msg: "初始化推送成功"); // Toast.show(msg: "初始化推送成功");
} else { } else {
String errorMsg = initResult['errorMsg']; String errorMsg = initResult['errorMsg'];
print('初始化推送失败,原因为:$errorMsg'); // print('初始化推送失败,原因为:$errorMsg');
// Toast.show(msg: '初始化推送失败, errorMsg: $errorMsg.}'); // Toast.show(msg: '初始化推送失败, errorMsg: $errorMsg.}');
} }
}); });
@ -106,7 +106,7 @@ class XSAliyunPushProvider {
} else { } else {
String errorMsg = initResult['errorMsg']; String errorMsg = initResult['errorMsg'];
// Toast.show(msg: '初始化辅助通道成功, errorMsg: $errorMsg'); // Toast.show(msg: '初始化辅助通道成功, errorMsg: $errorMsg');
print("初始化辅助通道失败,原因为:$errorMsg"); // print("初始化辅助通道失败,原因为:$errorMsg");
} }
}); });