This commit is contained in:
Daisy 2023-08-31 15:58:47 +08:00
commit 7f44198536
44 changed files with 888 additions and 115 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -55,6 +55,8 @@ import 'main/lockDetail/lcokSet/wirelessKeyboard/addWirelessKeyboard/addWireless
import 'main/lockDetail/lcokSet/wirelessKeyboard/addWirelessKeyboardScreenNotLightOn/addWirelessKeyboardScreenNotLightOn_page.dart'; import 'main/lockDetail/lcokSet/wirelessKeyboard/addWirelessKeyboardScreenNotLightOn/addWirelessKeyboardScreenNotLightOn_page.dart';
import 'main/lockDetail/lcokSet/wirelessKeyboard/seletWirelessKeyboard/seletWirelessKeyboard_page.dart'; import 'main/lockDetail/lcokSet/wirelessKeyboard/seletWirelessKeyboard/seletWirelessKeyboard_page.dart';
import 'main/lockDetail/lcokSet/wirelessKeyboard/wirelessKeyboardList/wirelessKeyboard_page.dart'; import 'main/lockDetail/lcokSet/wirelessKeyboard/wirelessKeyboardList/wirelessKeyboard_page.dart';
import 'main/lockDetail/otherTypeKey/addFingerprint/addFingerprint/addFingerprint_page.dart';
import 'main/lockDetail/otherTypeKey/addFingerprint/addFingerprintTip/addFingerprintTip_page.dart';
import 'mine/about/about_page.dart'; import 'mine/about/about_page.dart';
import 'mine/addLock/addLock/addLock_page.dart'; import 'mine/addLock/addLock/addLock_page.dart';
import 'main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdminManage/authorizedAdminManage_page.dart'; import 'main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdminManage/authorizedAdminManage_page.dart';
@ -149,6 +151,12 @@ abstract class Routers {
'/OtherTypeKeyDetailPage'; // '/OtherTypeKeyDetailPage'; //
static const otherTypeKeyManagePage = static const otherTypeKeyManagePage =
'/OtherTypeKeyManagePage'; // '/OtherTypeKeyManagePage'; //
static const addFingerprintTipPage =
'/AddFingerprintTipPage'; //
static const addFingerprintPage =
'/AddFingerprintPage'; //
static const authorizedAdminListPage = '/AuthorizedAdminListPage'; // static const authorizedAdminListPage = '/AuthorizedAdminListPage'; //
static const authorizedAdminDetailPage = static const authorizedAdminDetailPage =
'/AuthorizedAdminDetailPage'; // '/AuthorizedAdminDetailPage'; //
@ -722,5 +730,9 @@ abstract class AppRouters {
GetPage( GetPage(
name: Routers.authorityManagementPage, name: Routers.authorityManagementPage,
page: () => const AuthorityManagementPage()), page: () => const AuthorityManagementPage()),
GetPage(name: Routers.addFingerprintTipPage, page: () => const AddFingerprintTipPage()),
GetPage(
name: Routers.addFingerprintPage,
page: () => const AddFingerprintPage()),
]; ];
} }

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 SenderAddFingerprintCommand extends SenderProtocol {
String? keyID;
String? userID;
int? fingerNo;
int? useCountLimit;
List<int>? token;
int? startTime;
int? endTime;
int? needAuthor;
List<int>? publicKey;
List<int>? privateKey;
SenderAddFingerprintCommand({
this.keyID,
this.userID,
this.fingerNo,
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(31);
// 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(fingerNo!);
// UseCountLimit
subData.add(0xff);
// 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 SenderAddFingerprintReply extends Reply {
SenderAddFingerprintReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}
class SenderAddFingerprintProcessReply extends Reply {
SenderAddFingerprintProcessReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}
class SenderAddFingerprintConfirmationReply extends Reply {
SenderAddFingerprintConfirmationReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}

View File

@ -3,9 +3,9 @@ import 'dart:convert';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;
//TODO: //TODO:

View File

@ -5,9 +5,9 @@ import 'dart:convert';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;
class DeletUserCommand extends SenderProtocol { class DeletUserCommand extends SenderProtocol {

View File

@ -5,9 +5,9 @@ import 'dart:convert';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;
class EditUserCommand extends SenderProtocol { class EditUserCommand extends SenderProtocol {

View File

@ -8,9 +8,9 @@ import '../io_tool/io_manager.dart';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sender_manage.dart'; import '../sender_manage.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;
class FactoryDataResetCommand extends SenderProtocol { class FactoryDataResetCommand extends SenderProtocol {

View File

@ -4,9 +4,9 @@ import 'dart:convert';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
class GetLockStatuCommand extends SenderProtocol { class GetLockStatuCommand extends SenderProtocol {

View File

@ -5,9 +5,9 @@ import 'package:star_lock/blue/sm4Encipher/sm4.dart';
import '../io_tool/io_manager.dart'; import '../io_tool/io_manager.dart';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;

View File

@ -5,9 +5,9 @@ import '../../tools/storage.dart';
import '../io_tool/io_manager.dart'; import '../io_tool/io_manager.dart';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sender_manage.dart'; import '../sender_manage.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
class GetPublicKeyCommand extends SenderProtocol { class GetPublicKeyCommand extends SenderProtocol {
String? lockID; String? lockID;

View File

@ -2,9 +2,9 @@
import 'dart:convert'; import 'dart:convert';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;
//TODO: //TODO:

View File

@ -3,9 +3,9 @@ import 'dart:convert';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;
//TODO: //TODO:

View File

@ -0,0 +1,77 @@
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:
class TimingCommand extends SenderProtocol {
String? lockID;
String? userID;
int? nowTime;
List<int>? token;
int? needAuthor;
List<int>? signKey;
List<int>? privateKey;
TimingCommand({
this.lockID,
this.userID,
this.nowTime,
this.token,
this.needAuthor,
this.signKey,
this.privateKey
}) : super(CommandType.openLock);
@override
List<int> messageDetail() {
List<int> data = [];
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);
//lockID 40
int lockIDLength = utf8.encode(lockID!).length;
data.addAll(utf8.encode(lockID!));
data = getFixedLengthList(data, 40 - lockIDLength);
//userID useid 20
int userIDLength = utf8.encode(userID!).length;
print("openDoorUserId:${utf8.encode(userID!)} utf8.encode(userID!).length:${utf8.encode(userID!).length}");
data.addAll(utf8.encode(userID!));
data = getFixedLengthList(data, 20 - userIDLength);
// nowTime 4
int? d1 = nowTime;
data.add((d1! & 0xff000000) >> 24);
data.add((d1 & 0xff0000) >> 16);
data.add((d1 & 0xff00) >> 8);
data.add((d1 & 0xff));
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");
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
return ebcData;
}
}
class TimingReply extends Reply {
TimingReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
}
}

View File

@ -3,9 +3,9 @@ import 'dart:convert';
import '../io_tool/io_tool.dart'; import '../io_tool/io_tool.dart';
import '../sm4Encipher/sm4.dart'; import '../sm4Encipher/sm4.dart';
import 'io_reply.dart'; import '../io_reply.dart';
import 'io_sender.dart'; import '../io_sender.dart';
import 'io_type.dart'; import '../io_type.dart';
import 'package:crypto/crypto.dart' as crypto; import 'package:crypto/crypto.dart' as crypto;
//TODO: //TODO:

View File

@ -1,7 +1,7 @@
import 'dart:typed_data'; import 'dart:typed_data';
import '../io_tool/io_manager.dart'; import 'io_tool/io_manager.dart';
import '../io_tool/io_tool.dart'; import 'io_tool/io_tool.dart';
import 'io_type.dart'; import 'io_type.dart';
abstract class IOData { abstract class IOData {

View File

@ -8,16 +8,18 @@ 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_timing.dart';
import 'package:star_lock/blue/io_protocol/io_transferPermissions.dart'; import 'package:star_lock/blue/io_protocol/io_transferPermissions.dart';
import '../tools/storage.dart'; import '../tools/storage.dart';
import 'io_protocol/io_addFingerprint.dart';
import 'io_protocol/io_addUser.dart'; import 'io_protocol/io_addUser.dart';
import 'io_protocol/io_getPrivateKey.dart'; import 'io_protocol/io_getPrivateKey.dart';
import 'io_protocol/io_getPublicKey.dart'; import 'io_protocol/io_getPublicKey.dart';
import 'io_protocol/io_openLock.dart'; import 'io_protocol/io_openLock.dart';
import 'io_protocol/io_reply.dart'; import 'io_reply.dart';
import 'io_protocol/io_senderCustomPasswords.dart'; import 'io_protocol/io_senderCustomPasswords.dart';
import 'io_protocol/io_type.dart'; import 'io_type.dart';
import 'io_tool/io_manager.dart'; import 'io_tool/io_manager.dart';
import 'io_tool/io_tool.dart'; import 'io_tool/io_tool.dart';
import 'io_tool/manager_event_bus.dart'; import 'io_tool/manager_event_bus.dart';
@ -35,8 +37,8 @@ class CommandReciverManager {
if(data_size < 13){ if(data_size < 13){
return; return;
} }
// print("appDataReceiveData:$data"); // print("appDataReceiveData:$data"); // &&(data[4] == 0x11)
if((data[0] == 0xEF)&&(data[1] == 0x01)&&(data[2] == 0xEE)&&(data[3] == 0x02)&&(data[4] == 0x11)){ if((data[0] == 0xEF)&&(data[1] == 0x01)&&(data[2] == 0xEE)&&(data[3] == 0x02)){
var tmpType = (data[7] & 0x0f);// 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
@ -144,6 +146,11 @@ class CommandReciverManager {
reply = FactoryDataResetReply.parseData(commandType, data); reply = FactoryDataResetReply.parseData(commandType, data);
} }
break; break;
case CommandType.calibrationTime:
{
reply = TimingReply.parseData(commandType, data);
}
break;
case CommandType.generalExtendedCommond: case CommandType.generalExtendedCommond:
{ {
// //
@ -155,6 +162,24 @@ class CommandReciverManager {
reply = SenderCustomPasswordsReply.parseData(commandType, data); reply = SenderCustomPasswordsReply.parseData(commandType, data);
} }
break; break;
case 31:
{
//
reply = SenderAddFingerprintReply.parseData(commandType, data);
}
break;
case 32:
{
//
reply = SenderAddFingerprintConfirmationReply.parseData(commandType, data);
}
break;
case 33:
{
//
reply = SenderAddFingerprintProcessReply.parseData(commandType, data);
}
break;
} }
} }
break; break;
@ -163,17 +188,4 @@ class CommandReciverManager {
} }
} }
static Future<Reply?> replySubCommand(CommandType commandType, List<int> data){
int subType = data[3];
var reply;
switch(subType){
case 3:
{
//
reply = SenderCustomPasswordsReply.parseData(commandType, data);
}
break;
}
return reply;
}
} }

View File

@ -1,7 +1,7 @@
import '../app_settings/app_settings.dart'; import '../app_settings/app_settings.dart';
import 'io_protocol/io_sender.dart'; import 'io_sender.dart';
import 'io_protocol/io_type.dart'; import 'io_type.dart';
import 'io_tool/io_model.dart'; import 'io_tool/io_model.dart';
import 'io_tool/manager_event_bus.dart'; import 'io_tool/manager_event_bus.dart';

View File

@ -2,6 +2,7 @@
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 'io_protocol/io_addFingerprint.dart';
import 'io_protocol/io_addUser.dart'; import 'io_protocol/io_addUser.dart';
import 'io_protocol/io_editUser.dart'; import 'io_protocol/io_editUser.dart';
import 'io_protocol/io_factoryDataReset.dart'; import 'io_protocol/io_factoryDataReset.dart';
@ -251,4 +252,32 @@ class IoSenderManage {
privateKey: privateKey, privateKey: privateKey,
), callBack:callBack); ), callBack:callBack);
} }
//todo:
static void senderAddFingerprintCommand({
required String? keyID,
required String? userID,
required int? fingerNo,
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: SenderAddFingerprintCommand(
keyID: keyID,
userID: userID,
fingerNo: fingerNo,
useCountLimit: useCountLimit,
token: token,
startTime: startTime,
endTime: endTime,
needAuthor: needAuthor,
publicKey: publicKey,
privateKey: privateKey,
), callBack:callBack);
}
} }

View File

@ -2,10 +2,10 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:star_lock/blue/io_protocol/io_type.dart'; import 'package:star_lock/blue/io_type.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_reply.dart'; import '../../../../blue/io_reply.dart';
import '../../../../blue/io_protocol/io_transferPermissions.dart'; import '../../../../blue/io_protocol/io_transferPermissions.dart';
import '../../../../blue/io_tool/io_manager.dart'; import '../../../../blue/io_tool/io_manager.dart';
import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/io_tool.dart';
@ -52,7 +52,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
IoSenderManage.senderFactoryDataReset( IoSenderManage.senderFactoryDataReset(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
userID:await Storage.getUserId(), userID:await Storage.getUid(),
keyID:"1", keyID:"1",
needAuthor:1, needAuthor:1,
publicKey:publicKeyDataList, publicKey:publicKeyDataList,
@ -96,9 +96,9 @@ class AuthorizedAdminLogic extends BaseGetXController {
IoSenderManage.senderTransferPermissions( IoSenderManage.senderTransferPermissions(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
authUserID:await Storage.getUserId(), authUserID:await Storage.getUid(),
keyID:"1", keyID:"1",
oldUserID:await Storage.getUserId(), oldUserID:await Storage.getUid(),
newUserID:"100002", newUserID:"100002",
needAuthor:1, needAuthor:1,
publicKey:publicKeyDataList, publicKey:publicKeyDataList,

View File

@ -7,7 +7,7 @@ import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_reply.dart'; import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_manager.dart'; import '../../../../blue/io_tool/io_manager.dart';
import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../blue/io_tool/manager_event_bus.dart';
@ -58,9 +58,9 @@ class LockSetLogic extends BaseGetXController{
IoSenderManage.deletUser( IoSenderManage.deletUser(
lockID:state.getKeyInfosData.value.bluetooth!.bluetoothDeviceName, lockID:state.getKeyInfosData.value.bluetooth!.bluetoothDeviceName,
authUserID:await Storage.getUserId(), authUserID:await Storage.getUid(),
keyID:"1", keyID:"1",
delUserID:await Storage.getUserId(), delUserID:await Storage.getUid(),
needAuthor:1, needAuthor:1,
publicKey:publicKeyDataList, publicKey:publicKeyDataList,
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,

View File

@ -6,11 +6,11 @@ import 'package:flutter_reactive_ble/flutter_reactive_ble.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_type.dart'; import 'package:star_lock/blue/io_type.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_openLock.dart'; import '../../../blue/io_protocol/io_openLock.dart';
import '../../../blue/io_protocol/io_reply.dart'; import '../../../blue/io_reply.dart';
import '../../../blue/io_tool/io_manager.dart'; import '../../../blue/io_tool/io_manager.dart';
import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/io_tool.dart';
import '../../../blue/io_tool/manager_event_bus.dart'; import '../../../blue/io_tool/manager_event_bus.dart';
@ -87,7 +87,7 @@ class LockDetailLogic extends BaseGetXController{
IoSenderManage.senderOpenLock( IoSenderManage.senderOpenLock(
keyID: "1", keyID: "1",
userID: await Storage.getUserId(), userID: await Storage.getUid(),
openMode: 1, openMode: 1,
openTime: DateTime.now().millisecondsSinceEpoch, openTime: DateTime.now().millisecondsSinceEpoch,
token: tokenData, token: tokenData,
@ -215,9 +215,9 @@ class LockDetailLogic extends BaseGetXController{
IoSenderManage.senderEditUser( IoSenderManage.senderEditUser(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
authUserID:await Storage.getUserId(), authUserID:await Storage.getUid(),
keyID:"1", keyID:"1",
userID:await Storage.getUserId(), userID:await Storage.getUid(),
openMode:1, openMode:1,
keyType:1, keyType:1,
startDate:0x11223344, startDate:0x11223344,
@ -278,7 +278,7 @@ class LockDetailLogic extends BaseGetXController{
IoSenderManage.senderFactoryDataReset( IoSenderManage.senderFactoryDataReset(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
userID:await Storage.getUserId(), userID:await Storage.getUid(),
keyID:"1", keyID:"1",
needAuthor:1, needAuthor:1,
publicKey:publicKeyDataList, publicKey:publicKeyDataList,
@ -326,7 +326,7 @@ class LockDetailLogic extends BaseGetXController{
// print("userId:$userId"); // print("userId:$userId");
IoSenderManage.senderOpenLock( IoSenderManage.senderOpenLock(
keyID: "1", keyID: "1",
userID: await Storage.getUserId(), userID: await Storage.getUid(),
openMode: 1, openMode: 1,
openTime: DateTime.now().millisecondsSinceEpoch, openTime: DateTime.now().millisecondsSinceEpoch,
token: getTokenList, token: getTokenList,
@ -355,9 +355,9 @@ class LockDetailLogic extends BaseGetXController{
print("publicKey:$publicKey publicKeyDataList:$publicKeyDataList privateKey:$privateKey getPrivateKeyList:$getPrivateKeyList token:$token getTokenList:$getTokenList"); print("publicKey:$publicKey publicKeyDataList:$publicKeyDataList privateKey:$privateKey getPrivateKeyList:$getPrivateKeyList token:$token getTokenList:$getTokenList");
IoSenderManage.senderEditUser( IoSenderManage.senderEditUser(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
authUserID:await Storage.getUserId(), authUserID:await Storage.getUid(),
keyID:"1", keyID:"1",
userID:await Storage.getUserId(), userID:await Storage.getUid(),
openMode:1, openMode:1,
keyType:1, keyType:1,
startDate:0x11223344, startDate:0x11223344,
@ -388,7 +388,7 @@ class LockDetailLogic extends BaseGetXController{
IoSenderManage.senderFactoryDataReset( IoSenderManage.senderFactoryDataReset(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
userID:await Storage.getUserId(), userID:await Storage.getUid(),
keyID:"1", keyID:"1",
needAuthor:1, needAuthor:1,
publicKey:publicKeyDataList, publicKey:publicKeyDataList,
@ -408,7 +408,7 @@ class LockDetailLogic extends BaseGetXController{
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
IoSenderManage.senderGetLockStatu( IoSenderManage.senderGetLockStatu(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
userID:await Storage.getUserId(), userID:await Storage.getUid(),
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
); );
} }
@ -433,12 +433,6 @@ class LockDetailLogic extends BaseGetXController{
super.onInit(); super.onInit();
print("lockDetail_onInit()"); print("lockDetail_onInit()");
// BlueManage().connectDeviceName = "TMH_c3570480da8d";
// BlueManage().connectDeviceMacAddress = "AD01447A-30B5-A780-E778-DED3BDCB613E";
// BlueManage().connectDeviceName = state.keyInfos.value.bluetooth!.bluetoothDeviceName!;
// BlueManage().connectDeviceMacAddress = state.keyInfos.value.bluetooth!.bluetoothDeviceId!;
// //
// connectBlue(); // connectBlue();
} }

View File

@ -53,6 +53,11 @@ class _LockDetailPageState extends State<LockDetailPage> {
state.keyInfos.value.bluetooth!.privateKey!.cast<int>(); state.keyInfos.value.bluetooth!.privateKey!.cast<int>();
var savePrivateKeyList = changeIntListToStringList(privateKeyData); var savePrivateKeyList = changeIntListToStringList(privateKeyData);
Storage.setStringList(saveBluePrivateKey, savePrivateKeyList); Storage.setStringList(saveBluePrivateKey, savePrivateKeyList);
// signKey
List<int> signKeyData = state.keyInfos.value.bluetooth!.signKey!.cast<int>();
var saveSignKeyList = changeIntListToStringList(signKeyData);
Storage.setStringList(saveBlueSignKey, saveSignKeyList);
// print("publicKeyData:$publicKeyData saveStrList:$saveStrList privateKeyData:$privateKeyData savePrivateKeyList:$savePrivateKeyList"); // print("publicKeyData:$publicKeyData saveStrList:$saveStrList privateKeyData:$privateKeyData savePrivateKeyList:$savePrivateKeyList");
// logic.connectBlue(); // logic.connectBlue();

View File

@ -0,0 +1,226 @@
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 '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_protocol/io_addFingerprint.dart';
import '../../../../../blue/io_reply.dart';
import '../../../../../blue/io_tool/io_manager.dart';
import '../../../../../blue/io_tool/io_tool.dart';
import '../../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../../blue/sender_manage.dart';
import '../../../../../tools/baseGetXController.dart';
import '../../../../../tools/storage.dart';
import 'addFingerprint_state.dart';
class AddFingerprintLogic extends BaseGetXController {
final AddFingerprintState state = AddFingerprintState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
//
if(reply is SenderAddFingerprintReply) {
_replyAddFingerprintBegin(reply);
}
//
if(reply is SenderAddFingerprintProcessReply) {
_replyAddFingerprintProcess(reply);
}
//
if(reply is SenderAddFingerprintConfirmationReply) {
_replyAddFingerprintConfirmation(reply);
}
});
}
Future<void> _replyAddFingerprintBegin(Reply reply) async {
var token = reply.data.sublist(2, 6);
var saveStrList = changeIntListToStringList(token);
print("_replyAddFingerprintReplyToken:$token");
Storage.setStringList(saveBlueToken, saveStrList);
int status = reply.data[2];
print("status:$status");
switch(status){
case 0x00:
//
print("${reply.commandType!.typeValue} 数据解析成功");
state.ifConnectScuess.value = true;
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!);
IoSenderManage.senderAddFingerprintCommand(
keyID:"1",
userID:await Storage.getUid(),
fingerNo:1,
useCountLimit:0xff,
startTime:0x11223344,
endTime:0x11223344,
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> _replyAddFingerprintProcess(Reply reply) async {
var token = reply.data.sublist(2, 6);
var saveStrList = changeIntListToStringList(token);
print("_replyAddFingerprintReplyToken:$token");
Storage.setStringList(saveBlueToken, saveStrList);
int status = reply.data[2];
print("33 status:$status");
switch(status){
case 0x00:
//
print("${reply.commandType!.typeValue} 数据解析成功");
state.addFingerprintProcessNumber.value++;
print("state.addFingerprintProcessNumber.value:${state.addFingerprintProcessNumber.value}");
break;
case 0x06:
//
break;
case 0x07:
//
print("${reply.commandType!.typeValue} 用户无权限");
break;
case 0x09:
//
print("${reply.commandType!.typeValue} 权限校验错误");
break;
default:
//
print("${reply.commandType!.typeValue} 失败");
break;
}
}
Future<void> _replyAddFingerprintConfirmation(Reply reply) async {
var token = reply.data.sublist(2, 6);
var saveStrList = changeIntListToStringList(token);
print("_replyAddFingerprintReplyToken:$token");
Storage.setStringList(saveBlueToken, saveStrList);
int status = reply.data[2];
print("status:$status");
switch(status){
case 0x00:
//
print("${reply.commandType!.typeValue} 数据解析成功");
print("添加指纹确认成功,调用添加指纹接口");
Get.close(3);
break;
case 0x06:
//
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 {
BlueManage().judgeReconnect(BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName, (DeviceConnectionState state) async {
if (state == 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!);
print("openDoorTokenPubToken:$getTokenList");
IoSenderManage.senderAddFingerprintCommand(
keyID:"1",
userID:await Storage.getUid(),
fingerNo:1,
useCountLimit:1,
startTime:0x11223344,
endTime:0x11223344,
needAuthor:1,
publicKey:publicKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
);
}
});
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
senderAddFingerprint();
}
@override
void onClose() {
// TODO: implement onClose
_replySubscription.cancel();
}
}

View File

@ -0,0 +1,138 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../../../../appRouters.dart';
import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/submitBtn.dart';
import '../../../../../tools/titleAppBar.dart';
import '../../../../../translations/trans_lib.dart';
import 'addFingerprint_logic.dart';
class AddFingerprintPage extends StatefulWidget {
const AddFingerprintPage({Key? key}) : super(key: key);
@override
State<AddFingerprintPage> createState() => _AddFingerprintPageState();
}
class _AddFingerprintPageState extends State<AddFingerprintPage> {
final logic = Get.put(AddFingerprintLogic());
final state = Get.find<AddFingerprintLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: TitleAppBar(
barTitle: TranslationLoader.lanKeys!.addLock!.tr,
haveBack: true,
backgroundColor: AppColors.mainColor),
body: ListView(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 50.h,
),
Obx(() => Visibility(
visible:logic.state.ifConnectScuess.value,
child: Container(
padding: EdgeInsets.only(left: 20.w, right: 20.w),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Text(
"请将您的手指按下",
// TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
textAlign: TextAlign.center,
maxLines:null,
style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
),
),
],
),
SizedBox(height: 10.h),
Text(
"(${state.addFingerprintProcessNumber.value}/4)",
// TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
textAlign: TextAlign.center,
maxLines:null,
style: TextStyle(fontSize: 24.sp),
),
],
),
),
)),
Obx(() => Visibility(
visible:!logic.state.ifConnectScuess.value,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Text(
"尝试连接设备......",
// TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
textAlign: TextAlign.center,
maxLines:null,
style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
),
),
],
),
)),
SizedBox(
height: 50.h,
),
Obx(() => Image.asset(
getIconNumber(state.addFingerprintProcessNumber.value),
width: 270.w,
height: 457.h,
),),
SizedBox(
height: 120.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Text(
"根据提示抬起手指后再进行下一次指纹采集共3次",
// TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
textAlign: TextAlign.center,
maxLines:null,
style: TextStyle(fontSize: 24.sp),
),
),
],
),
],
),
);
}
String getIconNumber(int number){
switch(number){
case 1:
return 'images/main/icon_addFingerprint_fingerprint_two.png';
break;
case 2:
return 'images/main/icon_addFingerprint_fingerprint_three.png';
break;
case 3:
return 'images/main/icon_addFingerprint_fingerprint_four.png';
break;
// case 4:
// return 'images/main/icon_addFingerprint_fingerprint_four.png';
// break;
default:
return 'images/main/icon_addFingerprint_fingerprint_one.png';
break;
}
}
}

View File

@ -0,0 +1,7 @@
import 'package:get/get.dart';
class AddFingerprintState{
var ifConnectScuess = false.obs;
var addFingerprintProcessNumber = 0.obs;
}

View File

@ -0,0 +1,76 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../../../../appRouters.dart';
import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/submitBtn.dart';
import '../../../../../tools/titleAppBar.dart';
import '../../../../../translations/trans_lib.dart';
class AddFingerprintTipPage extends StatefulWidget {
const AddFingerprintTipPage({Key? key}) : super(key: key);
@override
State<AddFingerprintTipPage> createState() => _AddFingerprintTipPageState();
}
class _AddFingerprintTipPageState extends State<AddFingerprintTipPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: TitleAppBar(
barTitle: TranslationLoader.lanKeys!.addLock!.tr,
haveBack: true,
backgroundColor: AppColors.mainColor),
body: ListView(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 50.h,
),
Container(
padding: EdgeInsets.only(left: 20.w, right: 20.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Text(
"添加过程中,请根据提示,在指纹采集器上进行多次的抬起按压",
// TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
textAlign: TextAlign.center,
maxLines:null,
style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
),
),
],
),
),
SizedBox(
height: 60.h,
),
Image.asset(
'images/main/icon_addFingerprintTip.png',
width: 270.w,
height: 457.h,
),
SizedBox(
height: 120.h,
),
Container(
padding: EdgeInsets.only(left: 20.w, right: 20.w),
child: SubmitBtn(
btnName: "开始添加",//TranslationLoader.lanKeys!.next!.tr,
borderRadius: 20.w,
onClick: () {
Get.toNamed(Routers.addFingerprintPage);
}),
),
],
),
);
}
}

View File

@ -0,0 +1,41 @@
import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:star_lock/blue/io_protocol/io_addFingerprint.dart';
import 'package:star_lock/blue/io_type.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_reply.dart';
import '../../../../blue/io_protocol/io_senderCustomPasswords.dart';
import '../../../../blue/io_tool/io_manager.dart';
import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../../tools/storage.dart';
class OtherTypeAddKeyLogic extends BaseGetXController {
@override
void onReady() {
// TODO: implement onReady
super.onReady();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
}
}

View File

@ -1,6 +1,7 @@
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/appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
import '../../../../tools/commonItem.dart'; import '../../../../tools/commonItem.dart';
@ -9,10 +10,9 @@ import '../../../../translations/trans_lib.dart';
class OtherTypeAddKeyPage extends StatefulWidget { class OtherTypeAddKeyPage extends StatefulWidget {
final String seletType; final String seletType;
final int lockType; final int lockType; // 0 1 2
const OtherTypeAddKeyPage( const OtherTypeAddKeyPage(
{Key? key, required this.seletType, required this.lockType}) {Key? key, required this.seletType, required this.lockType}) : super(key: key);
: super(key: key);
@override @override
State<OtherTypeAddKeyPage> createState() => _OtherTypeAddKeyPageState(); State<OtherTypeAddKeyPage> createState() => _OtherTypeAddKeyPageState();
@ -127,16 +127,11 @@ class _OtherTypeAddKeyPageState extends State<OtherTypeAddKeyPage> {
Widget keyBottomWidget() { Widget keyBottomWidget() {
return Column( return Column(
children: [ children: [
// Container( SubmitBtn(btnName: TranslationLoader.lanKeys!.next!.tr, onClick: () {
// padding: EdgeInsets.all(20.w), if(widget.lockType == 1){
// child: Row( Get.toNamed(Routers.addFingerprintTipPage);
// // crossAxisAlignment: CrossAxisAlignment.start, }
// children: [ }),
// Expanded(child: Text(tipStr, textAlign: TextAlign.start,)),
// ],
// ),
// ),
SubmitBtn(btnName: TranslationLoader.lanKeys!.next!.tr, onClick: () {}),
], ],
); );
} }

View File

@ -18,6 +18,7 @@ class _OtherTypeKeyManagePageState extends State<OtherTypeKeyManagePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// 0 1 2
var lockType = ModalRoute.of(context)?.settings.arguments as int; var lockType = ModalRoute.of(context)?.settings.arguments as int;
return Scaffold( return Scaffold(
backgroundColor: AppColors.mainBackgroundColor, backgroundColor: AppColors.mainBackgroundColor,

View File

@ -1,10 +1,10 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:star_lock/blue/io_protocol/io_type.dart'; import 'package:star_lock/blue/io_type.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_reply.dart'; import '../../../../blue/io_reply.dart';
import '../../../../blue/io_protocol/io_senderCustomPasswords.dart'; import '../../../../blue/io_protocol/io_senderCustomPasswords.dart';
import '../../../../blue/io_tool/io_manager.dart'; import '../../../../blue/io_tool/io_manager.dart';
import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/io_tool.dart';
@ -46,7 +46,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUserId(), userID:await Storage.getUid(),
pwdNo:1, pwdNo:1,
pwd: "123456", pwd: "123456",
useCountLimit:0xff, useCountLimit:0xff,
@ -94,7 +94,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUserId(), userID:await Storage.getUid(),
pwdNo:1, pwdNo:1,
pwd: "123456", pwd: "123456",
useCountLimit:0xff, useCountLimit:0xff,

View File

@ -102,17 +102,17 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Container( Container(
width: 220.w, width: 330.w,
height: 220.w, height: 330.w,
decoration: BoxDecoration( // decoration: BoxDecoration(
border: Border.all(width: 4.w, color: AppColors.mainColor), // border: Border.all(width: 4.w, color: AppColors.mainColor),
borderRadius: BorderRadius.circular(110.w), // borderRadius: BorderRadius.circular(110.w),
), // ),
child: InkWell( child: InkWell(
child: Padding( child: Padding(
padding: const EdgeInsets.all(30.0), padding: const EdgeInsets.all(30.0),
child: Image.asset( child: Image.asset(
'images/main/icon_main_addLock.png', 'images/main/icon_main_unHaveLockData.png',
width: 150.w, width: 150.w,
height: 150.w, height: 150.w,
), ),
@ -140,8 +140,8 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
.lanKeys!.whenAddingLockThePhoneMustBeNextToTheLock!.tr, .lanKeys!.whenAddingLockThePhoneMustBeNextToTheLock!.tr,
style: TextStyle( style: TextStyle(
fontSize: 26.sp, fontSize: 26.sp,
fontWeight: FontWeight.w800, // fontWeight: FontWeight.w800,
color: AppColors.mainColor), color: Colors.black),
)) ))
], ],
); );

View File

@ -12,7 +12,7 @@ import 'package:star_lock/tools/baseGetXController.dart';
import '../../../appRouters.dart'; import '../../../appRouters.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_addUser.dart'; import '../../../blue/io_protocol/io_addUser.dart';
import '../../../blue/io_protocol/io_reply.dart'; import '../../../blue/io_reply.dart';
import '../../../blue/io_tool/io_manager.dart'; import '../../../blue/io_tool/io_manager.dart';
import '../../../blue/io_tool/io_model.dart'; import '../../../blue/io_tool/io_model.dart';
import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/io_tool.dart';

View File

@ -10,7 +10,7 @@ import '../../../appRouters.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_addUser.dart'; import '../../../blue/io_protocol/io_addUser.dart';
import '../../../blue/io_protocol/io_getLockStatu.dart'; import '../../../blue/io_protocol/io_getLockStatu.dart';
import '../../../blue/io_protocol/io_reply.dart'; import '../../../blue/io_reply.dart';
import '../../../blue/io_tool/io_manager.dart'; import '../../../blue/io_tool/io_manager.dart';
import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/io_tool.dart';
import '../../../blue/io_tool/manager_event_bus.dart'; import '../../../blue/io_tool/manager_event_bus.dart';
@ -23,6 +23,7 @@ import 'saveLock_state.dart';
class SaveLockLogic extends BaseGetXController { class SaveLockLogic extends BaseGetXController {
final SaveLockState state = SaveLockState(); final SaveLockState state = SaveLockState();
int userNo = 0;
// //
late StreamSubscription<Reply> _replySubscription; late StreamSubscription<Reply> _replySubscription;
@ -51,6 +52,8 @@ class SaveLockLogic extends BaseGetXController {
int status = reply.data[46]; int status = reply.data[46];
print("status:$status"); print("status:$status");
userNo = reply.data[47];
print("status:$status");
switch(status){ switch(status){
case 0x00: case 0x00:
// //
@ -68,9 +71,9 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.senderAddUser( IoSenderManage.senderAddUser(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
authUserID:await Storage.getUserId(), authUserID:await Storage.getUid(),
keyID:"1", keyID:"1",
userID:await Storage.getUserId(), userID:await Storage.getUid(),
openMode:1, openMode:1,
keyType:1, keyType:1,
startDate:0x11223344, startDate:0x11223344,
@ -199,9 +202,9 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.senderAddUser( IoSenderManage.senderAddUser(
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
authUserID:await Storage.getUserId(), authUserID:await Storage.getUid(),
keyID:"1", keyID:"1",
userID:await Storage.getUserId(), userID:await Storage.getUid(),
openMode:1, openMode:1,
keyType:1, keyType:1,
startDate:DateTime.now().millisecondsSinceEpoch, startDate:DateTime.now().millisecondsSinceEpoch,
@ -258,7 +261,8 @@ class SaveLockLogic extends BaseGetXController {
nbInitSuccess:"0", nbInitSuccess:"0",
position:positionMap, position:positionMap,
bluetooth:bluetooth, bluetooth:bluetooth,
deviceNo:"123456" deviceNo:"123456",
lockUserNo:userNo.toString()
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
EventBusManager().eventBusFir(RefreshLockListInfoDataEvent); EventBusManager().eventBusFir(RefreshLockListInfoDataEvent);
@ -275,7 +279,7 @@ class SaveLockLogic extends BaseGetXController {
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
IoSenderManage.senderGetLockStatu( IoSenderManage.senderGetLockStatu(
lockID:BlueManage().connectDeviceName, lockID:BlueManage().connectDeviceName,
userID:await Storage.getUserId(), userID:await Storage.getUid(),
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
); );
} }

View File

@ -241,7 +241,8 @@ class ApiProvider extends BaseProvider {
String nbInitSuccess, String nbInitSuccess,
Map position, Map position,
Map bluetooth, Map bluetooth,
String deviceNo) => String deviceNo,
String lockUserNo) =>
post( post(
bindingBlueAdminURL.toUrl, bindingBlueAdminURL.toUrl,
jsonEncode({ jsonEncode({
@ -252,7 +253,8 @@ class ApiProvider extends BaseProvider {
"nbInitSuccess": nbInitSuccess, "nbInitSuccess": nbInitSuccess,
'position': position, 'position': position,
'bluetooth': bluetooth, 'bluetooth': bluetooth,
'deviceNo': deviceNo 'deviceNo': deviceNo,
'lockUserNo': lockUserNo,
})); }));
// //

View File

@ -191,9 +191,10 @@ class ApiRepository {
required String nbInitSuccess, required String nbInitSuccess,
required Map position, required Map position,
required Map bluetooth, required Map bluetooth,
required String deviceNo}) async { required String deviceNo,
required String lockUserNo}) async {
final res = await apiProvider.bindingBlueAdmin(bindingDate, hotelMode, final res = await apiProvider.bindingBlueAdmin(bindingDate, hotelMode,
lockAlias, lockData, nbInitSuccess, position, bluetooth, deviceNo); lockAlias, lockData, nbInitSuccess, position, bluetooth, deviceNo, lockUserNo);
return SaveLockEntity.fromJson(res.body); return SaveLockEntity.fromJson(res.body);
} }

View File

@ -118,7 +118,7 @@ class Storage {
sp.clear(); sp.clear();
} }
static Future<String?> getUserId() async { static Future<String?> getUid() async {
String? userId = ''; String? userId = '';
final data = await Storage.getString('userLoginData'); final data = await Storage.getString('userLoginData');
if (data != null && data.isNotEmpty) { if (data != null && data.isNotEmpty) {