1、添加上传锁设置功能。2、添加我的设置-锁用户管理-即将到期-电子钥匙、密码、卡、指纹、人脸的修改跟删除功能

This commit is contained in:
魏少阳 2024-05-29 09:06:26 +08:00
parent 9bce7316b9
commit df75462647
54 changed files with 2551 additions and 985 deletions

View File

@ -487,7 +487,7 @@
"未打卡": "No card punched",
"钥匙将在": "The key will be in",
"天后失效": "Days later invalid",
"锁电量更新时间:": "Lock power update time:",
"电量更新时间:": "Power update time:",
"新增配件": "Add accessories",
"请在锁旁边完成第一次开锁": "Please complete the first unlock next to the lock",
"正在开锁中...": "Unlocking...",

View File

@ -512,7 +512,7 @@
"未打卡":"未打卡",
"钥匙将在":"钥匙将在",
"天后失效":"天后失效",
"电量更新时间:":"电量更新时间:",
"电量更新时间:":"电量更新时间:",
"新增配件":"新增配件",
"请在锁旁边完成第一次开锁":"请在锁旁边完成第一次开锁",
"正在开锁中...":"正在开锁中...",

View File

@ -487,7 +487,7 @@
"早退": "早退",
"钥匙将在": "钥匙将在",
"天后失效": "天后失效",
"电量更新时间:": "电量更新时间:",
"电量更新时间:": "电量更新时间:",
"新增配件": "新增配件",
"请在锁旁边完成第一次开锁": "请在锁旁边完成第一次开锁",
"正在开锁中...": "正在开锁中...",

View File

@ -178,6 +178,7 @@ import 'mine/mineSet/hideInvalidUnlockPermissions/hideInvalidUnlockPermissions_p
import 'mine/mineSet/lockGroup/groupEditLock/groupEditLock_page.dart';
import 'mine/mineSet/lockGroup/lockGroupDetailList/lockItemList_page.dart';
import 'mine/mineSet/lockScreen/lockScreen_page.dart';
import 'mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart';
import 'mine/mineSet/lockUserManage/lockUserManageList/lockUserManageList_page.dart';
import 'mine/mineSet/lockUserManage/ownedKeyList/ownedKeyList_page.dart';
import 'mine/supportStaff/supportStaff_page.dart';
@ -380,6 +381,7 @@ abstract class Routers {
static const lockUserListPage = '/lockUserListPage'; //
static const administratorDetailsPage = '/administratorDetailsPage'; //
static const expireLockManagePage = '/expireLockManagePage'; //
static const expireKeyChangeDatePage = '/ExpireKeyChangeDatePage'; //
static const adminDetailChangeDatePage =
'/adminDetailChangeDatePage'; //
static const adminLockListPage = '/adminLockListPage'; //
@ -1072,9 +1074,12 @@ abstract class AppRouters {
page: (() => const AdvancedFeaturesWebPage())),
GetPage(
name: Routers.advancedFunctionRecordPage,
page: (() => const AdvancedFunctionRecordPage())),
page: () => const AdvancedFunctionRecordPage()),
GetPage(
name: Routers.administratorAssociationLockPage,
page: () => const AdministratorAssociationLockPage()),
GetPage(
name: Routers.expireKeyChangeDatePage,
page: () => const ExpireKeyChangeDatePage()),
];
}

View File

@ -0,0 +1,109 @@
import 'dart:convert';
import 'package:crypto/crypto.dart' as crypto;
import '../io_reply.dart';
import '../io_sender.dart';
import '../io_tool/io_tool.dart';
import '../io_type.dart';
import '../sm4Encipher/sm4.dart';
class UpdataLockSetCommand extends SenderProtocol {
UpdataLockSetCommand({
this.lockID,
this.keyID,
this.userID,
this.token,
this.needAuthor,
this.signKey,
this.privateKey
}) : super(CommandType.updataLockSet);
String? lockID;
String? keyID;
String? userID;
List<int>? token;
int? needAuthor;
List<int>? signKey;
List<int>? privateKey;
@override
String toString() {
return 'UpdataLockPasswordListCommand{lockID: $lockID, keyID:$keyID userID: $userID, '
'token: $token, '
'signKey: $signKey, privateKey: $privateKey}';
}
@override
List<int> messageDetail() {
List<int> data = <int>[];
List<int> ebcData = <int>[];
//
final int type = commandType!.typeValue;
final double typeDouble = type / 256;
final int type1 = typeDouble.toInt();
final int type2 = type % 256;
data.add(type1);
data.add(type2);
// id 40
final int lockIDLength = utf8.encode(lockID!).length;
data.addAll(utf8.encode(lockID!));
data = getFixedLengthList(data, 40 - lockIDLength);
//userID useid 20
final int userIDLength = utf8.encode(userID!).length;
data.addAll(utf8.encode(userID!));
data = getFixedLengthList(data, 20 - userIDLength);
// token 4 Token 0 token失效或者第一次发送的时候token为0
data.addAll(token!);
if(needAuthor == 0){
//AuthCodeLen 1
data.add(0);
} else {
final List<int> authCodeData = <int>[];
//KeyID
authCodeData.addAll(utf8.encode(lockID!));
//UserID
authCodeData.addAll(utf8.encode(userID!));
//token 4 Token 0
authCodeData.addAll(token!);
authCodeData.addAll(signKey!);
// KeyIDauthUserIDmd5加密之后就是authCode
final crypto.Digest authCode = crypto.md5.convert(authCodeData);
data.add(authCode.bytes.length);
data.addAll(authCode.bytes);
}
if ((data.length % 16) != 0) {
final int add = 16 - data.length % 16;
for (int i = 0; i < add; i++) {
data.add(0);
}
}
printLog(data);
// LockId进行SM4 ECB加密 key:544d485f633335373034383064613864
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
return ebcData;
}
}
class UpdataLockSetReply extends Reply {
UpdataLockSetReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) {
data = dataDetail;
final int status = data[2];
errorWithStstus(status);
}
}

View File

@ -14,6 +14,7 @@ enum CommandType {
updataLockFingerprintList, //- 0x3023
updataLockFaceList, //- 0x3024
updataLockPalmVeinList, //- 0x3025
updataLockSet, //- 0x302A
getLockPublicKey, // = 0x3090
getLockPrivateKey, // = 0x3091
calibrationTime, // = 0x30f0
@ -123,6 +124,11 @@ extension ExtensionCommandType on CommandType {
type = CommandType.updataLockPalmVeinList;
}
break;
case 0x302A:
{
type = CommandType.updataLockSet;
}
break;
case 0x3030:
{
type = CommandType.generalExtendedCommond;
@ -217,6 +223,9 @@ extension ExtensionCommandType on CommandType {
case CommandType.updataLockPalmVeinList:
type = 0x3025;
break;
case CommandType.updataLockSet:
type = 0x302A;
break;
case CommandType.generalExtendedCommond:
type = 0x3030;
break;
@ -314,6 +323,9 @@ extension ExtensionCommandType on CommandType {
case 0x3025:
t = '上传数据获取锁掌静脉列表';
break;
case 0x302A:
t = '上传数据获取锁设置信息';
break;
case 0x3030:
t = '通用扩展指令';
break;

View File

@ -43,6 +43,7 @@ import 'io_protocol/io_updataLockFaceList.dart';
import 'io_protocol/io_updataLockFingerprintList.dart';
import 'io_protocol/io_updataLockPalmVeinList.dart';
import 'io_protocol/io_updataLockPasswordList.dart';
import 'io_protocol/io_updataLockSet.dart';
import 'io_reply.dart';
import 'io_protocol/io_senderCustomPasswords.dart';
import 'io_type.dart';
@ -231,6 +232,11 @@ class CommandReciverManager {
reply = UpdataLockPalmVeinListReply.parseData(commandType, data);
}
break;
case CommandType.updataLockSet:
{
reply = UpdataLockSetReply.parseData(commandType, data);
}
break;
case CommandType.generalExtendedCommond:
{
//

View File

@ -41,6 +41,7 @@ import 'io_protocol/io_updataLockFaceList.dart';
import 'io_protocol/io_updataLockFingerprintList.dart';
import 'io_protocol/io_updataLockPalmVeinList.dart';
import 'io_protocol/io_updataLockPasswordList.dart';
import 'io_protocol/io_updataLockSet.dart';
import 'sender_data.dart';
class IoSenderManage {
@ -440,6 +441,7 @@ class IoSenderManage {
required int? needAuthor,
required List<int>? signKey,
required List<int>? privateKey,
required bool? isBeforeAddUser,
CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(
command: SenderAddFingerprintWithTimeCycleCoercionCommand(
@ -461,6 +463,7 @@ class IoSenderManage {
signKey: signKey,
privateKey: privateKey,
),
isBeforeAddUser: isBeforeAddUser!,
callBack: callBack);
}
@ -533,6 +536,7 @@ class IoSenderManage {
required int? needAuthor,
required List<int>? signKey,
required List<int>? privateKey,
required bool? isBeforeAddUser,
CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(
command: SenderAddICCardWithTimeCycleCoercionCommand(
@ -554,6 +558,7 @@ class IoSenderManage {
signKey: signKey,
privateKey: privateKey,
),
isBeforeAddUser: isBeforeAddUser!,
callBack: callBack);
}
@ -597,6 +602,7 @@ class IoSenderManage {
required int? needAuthor,
required List<int>? signKey,
required List<int>? privateKey,
required bool? isBeforeAddUser,
CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(
command: SenderAddFaceCommand(
@ -618,6 +624,7 @@ class IoSenderManage {
signKey: signKey,
privateKey: privateKey,
),
isBeforeAddUser: isBeforeAddUser ?? false,
callBack: callBack);
}
@ -1317,4 +1324,25 @@ class IoSenderManage {
callBack: callBack);
}
//
static void updataLockSetCommand(
{required String? lockID,
required String? userID,
required List<int>? token,
required int? needAuthor,
required List<int>? signKey,
required List<int>? privateKey,
CommandSendCallBack? callBack}) {
CommandSenderManager().managerSendData(
command: UpdataLockSetCommand(
lockID: lockID,
userID: userID,
token: token,
needAuthor: needAuthor,
signKey: signKey,
privateKey: privateKey,
),
callBack: callBack);
}
}

View File

@ -88,6 +88,7 @@ class AddICCardLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -180,6 +181,7 @@ class AddICCardLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected){
if(state.ifCurrentScreen.value == true){

View File

@ -80,6 +80,7 @@ class CardDetailLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -129,6 +130,7 @@ class CardDetailLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();

View File

@ -86,6 +86,7 @@ class CardListLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -261,6 +262,7 @@ class CardListLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();

View File

@ -84,6 +84,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -133,6 +134,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {
@ -187,6 +189,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -236,6 +239,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -288,6 +292,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
@ -342,6 +347,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();

View File

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_state.dart';
import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart';
@ -24,10 +25,9 @@ class OtherTypeKeyChangeDatePage extends StatefulWidget {
_OtherTypeKeyChangeDatePageState();
}
class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
with RouteAware {
final logic = Get.put(OtherTypeKeyChangeDateLogic());
final state = Get.find<OtherTypeKeyChangeDateLogic>().state;
class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage> with RouteAware {
final OtherTypeKeyChangeDateLogic logic = Get.put(OtherTypeKeyChangeDateLogic());
final OtherTypeKeyChangeDateState state = Get.find<OtherTypeKeyChangeDateLogic>().state;
@override
Widget build(BuildContext context) {
@ -38,7 +38,7 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
"${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}",
haveBack: true,
backgroundColor: AppColors.mainColor,
actionsList: [
actionsList: <Widget>[
TextButton(
child: Text(
TranslationLoader.lanKeys!.sure!.tr,
@ -92,7 +92,7 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
Widget buildMainUI() {
return Column(
children: [
children: <Widget>[
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
rightTitle: state.beginTime.value,
@ -102,7 +102,7 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
PDuration selectDate =
PDuration.parse(DateTime.tryParse(state.beginTime.value));
Pickers.showDatePicker(context,
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) {
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) {
setState(() {
state.beginTime.value = DateTool().getYMDHNDateString(p, 1);
});
@ -116,7 +116,7 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
PDuration selectDate =
PDuration.parse(DateTime.tryParse(state.endTime.value));
Pickers.showDatePicker(context,
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) {
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) {
setState(() {
state.endTime.value = DateTool().getYMDHNDateString(p, 1);
});
@ -128,7 +128,6 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
@ -137,7 +136,6 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
@override
void dispose() {
// TODO: implement dispose
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();

View File

@ -1,10 +1,9 @@
import 'dart:async';
import 'dart:ffi';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart';
@ -27,7 +26,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// ()
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddICCardBegin(reply);
@ -47,7 +46,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
//
Future<void> _replyAddFaceBegin(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch (status) {
case 0x00:
@ -59,14 +58,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
break;
case 0x06:
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFaceCommand(
@ -87,6 +86,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -109,14 +109,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.senderAddFaceCommand(
keyID:state.fingerprintItemData.value.faceId!.toString(),
@ -136,6 +136,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {
@ -151,7 +152,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
// ()
Future<void> _replyAddICCardBegin(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch(status){
case 0x00:
@ -162,14 +163,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
break;
case 0x06:
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
@ -190,6 +191,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -200,7 +202,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
//
Future<void> _replyAddFingerprintBegin(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -211,14 +213,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
break;
case 0x06:
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
@ -239,6 +241,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -264,14 +267,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.fingerprintItemData.value.fingerprintId.toString(),
@ -291,6 +294,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
@ -318,14 +322,14 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:state.fingerprintItemData.value.cardId!.toString(),
@ -345,6 +349,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
@ -359,7 +364,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
//
void editFingerprintsData() async{
var entity = await ApiRepository.to.editFingerprintsData(
final LoginEntity entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
@ -376,7 +381,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){
eventBus.fire(OtherTypeRefreshListEvent());
Get.back(result: {
Get.back(result: <String, Object>{
"starDate":state.starDateTimestamp.value.toString(),
"endDate":state.endDateTimestamp.value.toString(),
"starTime":state.starTimeTimestamp.value.toString(),
@ -389,7 +394,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
// iC卡
void editICCardData() async{
var entity = await ApiRepository.to.editICCardData(
final LoginEntity entity = await ApiRepository.to.editICCardData(
cardId: state.fingerprintItemData.value.cardId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
@ -406,7 +411,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){
eventBus.fire(OtherTypeRefreshListEvent());
Get.back(result: {
Get.back(result: <String, Object>{
"starDate":state.starDateTimestamp.value.toString(),
"endDate":state.endDateTimestamp.value.toString(),
"starTime":state.starTimeTimestamp.value.toString(),
@ -419,7 +424,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
//
void editFaceData() async {
var entity = await ApiRepository.to.updateFaceValidity(
final LoginEntity entity = await ApiRepository.to.updateFaceValidity(
lockId: state.fingerprintItemData.value.lockId!,
faceId: state.fingerprintItemData.value.faceId!,
startDate: state.starDateTimestamp.value,
@ -436,7 +441,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () {
eventBus.fire(OtherTypeRefreshListEvent());
Get.back(result: {
Get.back(result: <String, Object>{
"starDate":state.starDateTimestamp.value.toString(),
"endDate":state.endDateTimestamp.value.toString(),
"starTime":state.starTimeTimestamp.value.toString(),

View File

@ -1,9 +1,9 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockDetail/checkingIn/checkingInSet/checkingInSet_state.dart';
import '../../../../appRouters.dart';
@ -79,7 +79,7 @@ class _CheckingInSetPageState extends State<CheckingInSetPage> {
Obx(() => CommonItem(
leftTitel:
"${TranslationLoader.lanKeys!.workday!.tr}${TranslationLoader.lanKeys!.set!.tr}",
rightTitle: state.isCustom.value == true ? state.weekDaysStr.value : (state.weekDaysStr.value.length == 5 ? '单休' : '双休'),
rightTitle: state.isCustom.value == true ? state.weekDaysStr.value : (state.weekDays.value.length == 6 ? '单休' : '双休'),
isHaveLine: true,
isHaveDirection: true,
action: () async {
@ -93,6 +93,8 @@ class _CheckingInSetPageState extends State<CheckingInSetPage> {
state.isCustom.value = data['attendanceType'];
state.weekDays.value = data['weekDays'];
state.weekDaysStr.value = state.weekDays.join(',');
AppLog.log('state.weekDays.value:${state.weekDays.value} state.weekDaysStr.value:${state.weekDaysStr.value}');
setState(() {});
}
})),
CommonItem(

View File

@ -83,6 +83,7 @@ class AddFaceLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -218,6 +219,7 @@ class AddFaceLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
if (state.ifCurrentScreen.value == true) {

View File

@ -77,6 +77,7 @@ class FaceDetailLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -127,6 +128,7 @@ class FaceDetailLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {

View File

@ -5,6 +5,7 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceList_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../app_settings/app_settings.dart';
@ -26,8 +27,7 @@ class FaceListLogic extends BaseGetXController {
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// ()
if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFaceBegin(reply);
@ -46,7 +46,7 @@ class FaceListLogic extends BaseGetXController {
// ---
Future<void> _replyAddFaceBegin(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch (status) {
case 0x00:
@ -61,14 +61,14 @@ class FaceListLogic extends BaseGetXController {
break;
case 0x06:
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFaceCommand(
@ -83,12 +83,13 @@ class FaceListLogic extends BaseGetXController {
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:"0",
endTime:"0",
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -260,14 +261,14 @@ class FaceListLogic extends BaseGetXController {
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFaceCommand(
keyID:state.deletKeyID,
@ -281,12 +282,13 @@ class FaceListLogic extends BaseGetXController {
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:"0",
endTime:"0",
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
@ -300,7 +302,7 @@ class FaceListLogic extends BaseGetXController {
//
Future<FingerprintListDataEntity> getFaceListData() async {
var entity = await ApiRepository.to.getFaceListData(
final FingerprintListDataEntity entity = await ApiRepository.to.getFaceListData(
lockId: state.lockId.value.toString(),
pageNo: pageNo.toString(),
pageSize: pageSize.toString(),
@ -323,16 +325,16 @@ class FaceListLogic extends BaseGetXController {
//
void deletFacesData() async {
var faceId = "";
String faceId = '';
if (state.isDeletAll == false) {
faceId = state.deletKeyID;
}
var entity = await ApiRepository.to.deleteFaceData(
final LoginEntity entity = await ApiRepository.to.deleteFaceData(
faceId: int.parse(faceId),
lockId: state.lockId.value,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功", something: (){
showToast('删除成功', something: (){
pageNo = 1;
getFaceListData();
});
@ -341,17 +343,17 @@ class FaceListLogic extends BaseGetXController {
//
void clearAllFacesData() async {
var faceId = "";
var type = "1";
String faceId = '';
String type = '1';
if (state.isDeletAll == false) {
faceId = state.deletKeyID;
type = "0";
type = '0';
}
var entity = await ApiRepository.to.clearFaceData(
final LoginEntity entity = await ApiRepository.to.clearFaceData(
lockId: state.lockId.value,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast("重置成功", something: (){
showToast('重置成功', something: (){
pageNo = 1;
getFaceListData();
});
@ -360,26 +362,26 @@ class FaceListLogic extends BaseGetXController {
String getKeyType(FingerprintItemData fingerprintItemData){
// fingerprintStatus 1: 2:
var keyTypeStr = "";//
String keyTypeStr = '';//
if(fingerprintItemData.status == 1){
if(fingerprintItemData.startDate! > DateTime.now().millisecondsSinceEpoch){
keyTypeStr = "未生效".tr;
keyTypeStr = '未生效'.tr;
}
}else if(fingerprintItemData.status == 2){
keyTypeStr = "已失效".tr;
keyTypeStr = '已失效'.tr;
}
return keyTypeStr;
}
String getKeyDateType(FingerprintItemData fingerprintItemData){
var keyDateTypeStr = "";// :1;23:4
String keyDateTypeStr = '';// :1;23:4
if(fingerprintItemData.faceType! == 1){
keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} 永久";
keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} 永久';
}else if(fingerprintItemData.faceType! == 2){
keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时";
keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时';
}else if(fingerprintItemData.faceType! == 4){
keyDateTypeStr = "${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环";
keyDateTypeStr = '${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环';
}
return keyDateTypeStr;
}
@ -387,7 +389,7 @@ class FaceListLogic extends BaseGetXController {
//
late StreamSubscription _teamEvent;
void _initRefreshAction() {
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((event) {
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((OtherTypeRefreshListEvent event) {
pageNo = 1;
getFaceListData();
});
@ -395,11 +397,10 @@ class FaceListLogic extends BaseGetXController {
@override
Future<void> onReady() async {
// TODO: implement onReady
super.onReady();
//
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_initReplySubscription();
@ -409,9 +410,8 @@ class FaceListLogic extends BaseGetXController {
@override
Future<void> onInit() async {
// TODO: implement onInit
super.onInit();
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
// senderQueryingFingerprintStatus();
// senderCheckingCardStatus();
@ -422,10 +422,9 @@ class FaceListLogic extends BaseGetXController {
@override
Future<void> onClose() async {
// TODO: implement onClose
super.onClose();
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_replySubscription.cancel();
_teamEvent.cancel();

View File

@ -3,7 +3,8 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart';
import 'package:star_lock/tools/dateTool.dart';
import '../../../../../blue/blue_manage.dart';
@ -24,7 +25,7 @@ class AddFingerprintLogic extends BaseGetXController {
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
//
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply);
@ -43,7 +44,7 @@ class AddFingerprintLogic extends BaseGetXController {
}
Future<void> _replyAddFingerprintBegin(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch(status){
case 0x00:
@ -59,25 +60,25 @@ class AddFingerprintLogic extends BaseGetXController {
break;
case 0x06:
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:"1",
keyID:'1',
userID:await Storage.getUid(),
fingerNo:0,
useCountLimit:0xffff,
isForce:state.isCoerced.value == "2" ? 1 : 0, //
isAdmin: state.isAdministrator.value == "2" ? 1 : 0,
isForce:state.isCoerced.value == '2' ? 1 : 0, //
isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
operate: 0,
isRound:state.selectType.value == "2" ? 1: 0, //
isRound:state.selectType.value == '2' ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000,
@ -87,12 +88,13 @@ class AddFingerprintLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
//
state.ifAddState.value = false;
showToast("添加指纹失败", something: (){
showToast('添加指纹失败', something: (){
Get.back();
});
break;
@ -100,7 +102,7 @@ class AddFingerprintLogic extends BaseGetXController {
}
Future<void> _replyAddFingerprintProcess(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch(status){
case 0x00:
@ -108,31 +110,31 @@ class AddFingerprintLogic extends BaseGetXController {
switch(reply.data[5]){
case 0xff:
//
showToast("退出添加".tr);
showToast('退出添加'.tr);
state.ifAddState.value = false;
Get.close(1);
break;
case 0xFE:
//
showToast("管理员已满".tr);
showToast('管理员已满'.tr);
state.ifAddState.value = false;
Get.close(1);
break;
case 0xFD:
//
showToast("用户已满".tr);
showToast('用户已满'.tr);
state.ifAddState.value = false;
Get.close(1);
break;
case 0xFC:
//
showToast("锁上面添加指纹已满".tr);
showToast('锁上面添加指纹已满'.tr);
state.ifAddState.value = false;
Get.close(1);
break;
case 0xFB:
//
showToast("指纹已存在".tr);
showToast('指纹已存在'.tr);
state.ifAddState.value = false;
break;
default:
@ -151,13 +153,13 @@ class AddFingerprintLogic extends BaseGetXController {
}
Future<void> _replyAddFingerprintConfirmation(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch(status){
case 0x00:
//
// var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString();
var fingerprintList = reply.data.sublist(reply.data.length - 2);
var fingerprintNum = listChangInt(fingerprintList).toString();
final List<int> fingerprintList = reply.data.sublist(reply.data.length - 2);
final String fingerprintNum = listChangInt(fingerprintList).toString();
state.regIndex.value++;
if(state.fingerprintNumber.value == fingerprintNum){
return;
@ -187,24 +189,24 @@ class AddFingerprintLogic extends BaseGetXController {
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:"1",
keyID:'1',
userID:await Storage.getUid(),
fingerNo:0,
useCountLimit:0xffff,
isForce:state.isCoerced.value == "2" ? 1 : 0, //
isAdmin: state.isAdministrator.value == "2" ? 1 : 0,
isForce:state.isCoerced.value == '2' ? 1 : 0, //
isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
operate: 0,
isRound:state.selectType.value == "2" ? 1: 0, //
isRound:state.selectType.value == '2' ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000,
@ -214,6 +216,7 @@ class AddFingerprintLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
}else if (deviceConnectionState == BluetoothConnectionState.disconnected){
if(state.ifCurrentScreen.value == true){
@ -229,17 +232,17 @@ class AddFingerprintLogic extends BaseGetXController {
Future<void> senderCancelAddFingerprintCommand() async {
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderCancelAddFingerprintCommand(
keyID:"1",
keyID:'1',
userID:await Storage.getUid(),
needAuthor:1,
signKey:signKeyDataList,
@ -257,8 +260,8 @@ class AddFingerprintLogic extends BaseGetXController {
}
//
void addFingerprintsData() async{
var entity = await ApiRepository.to.addFingerprintsData(
Future<void> addFingerprintsData() async{
final AddFingerprintEntity entity = await ApiRepository.to.addFingerprintsData(
lockId: state.lockId.value.toString(),
endDate: state.endDate.value,
addType:state.addType.value,
@ -268,7 +271,7 @@ class AddFingerprintLogic extends BaseGetXController {
isCoerced: state.isCoerced.value,
startDate: state.startDate.value,
weekDay: state.weekDay.value,
fingerRight:state.isAdministrator.value == "2" ? 1 : 0,
fingerRight:state.isAdministrator.value == '2' ? 1 : 0,
startTime: int.parse(state.effectiveDateTime.value),
endTime: int.parse(state.failureDateTime.value),
);
@ -278,14 +281,14 @@ class AddFingerprintLogic extends BaseGetXController {
}
//
void updateFingerprintUserNoLoadData(String fingerprintId) async{
var entity = await ApiRepository.to.updateFingerprintUserNoLoadData(
Future<void> updateFingerprintUserNoLoadData(String fingerprintId) async{
final LoginEntity entity = await ApiRepository.to.updateFingerprintUserNoLoadData(
fingerprintId: fingerprintId,
lockId: state.lockId.value.toString(),
fingerprintUserNo: state.fingerprintNumber.value,
);
if(entity.errorCode!.codeIsSuccessful){
showToast("添加成功".tr, something: (){
showToast('添加成功'.tr, something: (){
if(state.fromType.value == 2){
//
eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(state.fingerprintNumber.value));
@ -299,7 +302,6 @@ class AddFingerprintLogic extends BaseGetXController {
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
@ -307,7 +309,6 @@ class AddFingerprintLogic extends BaseGetXController {
@override
void onInit() {
// TODO: implement onInit
super.onInit();
senderAddFingerprint();
@ -315,7 +316,6 @@ class AddFingerprintLogic extends BaseGetXController {
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();

View File

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
@ -22,7 +23,7 @@ class FingerprintDetailLogic extends BaseGetXController{
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// ()
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply);
@ -32,7 +33,7 @@ class FingerprintDetailLogic extends BaseGetXController{
//
Future<void> _replyAddFingerprintBegin(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -47,17 +48,17 @@ class FingerprintDetailLogic extends BaseGetXController{
break;
case 0x06:
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
@ -78,6 +79,7 @@ class FingerprintDetailLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -100,17 +102,14 @@ class FingerprintDetailLogic extends BaseGetXController{
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.keyId.value.toString(),
@ -130,6 +129,7 @@ class FingerprintDetailLogic extends BaseGetXController{
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
@ -143,38 +143,38 @@ class FingerprintDetailLogic extends BaseGetXController{
}
//
void deletFingerprintsData() async{
var entity = await ApiRepository.to.deletFingerprintsData(
Future<void> deletFingerprintsData() async{
final LoginEntity entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: state.fingerprintItemData.value.fingerprintId.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
type: "0",
deleteType:"1"
type: '0',
deleteType:'1'
);
if(entity.errorCode!.codeIsSuccessful){
showToast("删除成功".tr, something: (){
Get.back(result: "addScuess");
showToast('删除成功'.tr, something: (){
Get.back(result: 'addScuess');
});
}
}
//
void editFingerprintsData() async{
var entity = await ApiRepository.to.editFingerprintsData(
Future<void> editFingerprintsData() async{
final LoginEntity entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.keyId.value.toString(),
lockId: state.fingerprintItemData.value.lockId.toString(),
weekDay: state.weekDay.value,
startDate: state.starDate.value,
endDate: state.endDate.value,
isCoerced: state.isStressFingerprint.value ? "2" : "1",
isCoerced: state.isStressFingerprint.value ? '2' : '1',
fingerprintName: state.changeNameController.text,
changeType: "1",
changeType: '1',
startTime: int.parse(state.startDate.value),
endTime: int.parse(state.endTime.value),
fingerprintType: state.fingerprintItemData.value.fingerprintType!,
fingerRight: state.isAdministrator.value ? 1 : 0,
);
if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){
showToast('修改成功'.tr, something: (){
eventBus.fire(OtherTypeRefreshListEvent());
});
}
@ -183,32 +183,23 @@ class FingerprintDetailLogic extends BaseGetXController{
String getKeyTypeShowDateTime(){
String useDateStr = '';
if(state.keyType.value == 1){
useDateStr = "永久".tr;
useDateStr = '永久'.tr;
}else if(state.keyType.value == 2){
useDateStr = "${DateTool().dateToYMDHNString(state.starDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}";
useDateStr = '${DateTool().dateToYMDHNString(state.starDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}';
} else if(state.keyType.value == 4){
useDateStr = "${DateTool().dateToYMDString(state.starDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}";
useDateStr = '${DateTool().dateToYMDString(state.starDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}';
}return useDateStr;
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();

View File

@ -3,12 +3,10 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
import '../../../../blue/io_protocol/io_checkingUserInfoCount.dart';
import '../../../../blue/io_protocol/io_queryingFingerprintStatus.dart';
import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
@ -26,26 +24,26 @@ class FingerprintListLogic extends BaseGetXController{
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// ()
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply);
}
if(reply is SenderQueryingFingerprintStatusReply) {
//
_replyQueryingFingerprintStatus(reply);
}
if(reply is SenderCheckingUserInfoCountReply){
_replyCheckingUserInfoCount(reply);
}
// if(reply is SenderQueryingFingerprintStatusReply) {
// //
// _replyQueryingFingerprintStatus(reply);
// }
//
// if(reply is SenderCheckingUserInfoCountReply){
// _replyCheckingUserInfoCount(reply);
// }
});
}
// ---
Future<void> _replyAddFingerprintBegin(Reply reply) async {
int status = reply.data[2];
final int status = reply.data[2];
switch(status){
case 0x00:
@ -56,14 +54,14 @@ class FingerprintListLogic extends BaseGetXController{
break;
case 0x06:
//
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
@ -78,12 +76,13 @@ class FingerprintListLogic extends BaseGetXController{
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:"0",
endTime:"0",
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: false
);
break;
default:
@ -93,154 +92,155 @@ class FingerprintListLogic extends BaseGetXController{
}
//
Future<void> _replyQueryingFingerprintStatus(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//
break;
case 0x06:
//
break;
default:
//
break;
}
}
// Future<void> _replyQueryingFingerprintStatus(Reply reply) async {
// final int status = reply.data[2];
// switch(status){
// case 0x00:
// //
// break;
// case 0x06:
// //
// break;
// default:
// //
// break;
// }
// }
//
Future<void> _replyReferEventRecordNumber(Reply reply) async {
int status = reply.data[2];
switch(status){
case 0x00:
//
// _getLockStatus();
break;
case 0x06:
//
break;
case 0x07:
//
break;
case 0x09:
//
break;
default:
//
break;
}
}
// Future<void> _replyReferEventRecordNumber(Reply reply) async {
// final int status = reply.data[2];
// switch(status){
// case 0x00:
// //
// // _getLockStatus();
// break;
// case 0x06:
// //
// break;
// case 0x07:
// //
// break;
// case 0x09:
// //
// break;
// default:
// //
// break;
// }
// }
// ()
Future<void> _replyCheckingUserInfoCount(Reply reply) async {
int status = reply.data[2];
// Future<void> _replyCheckingUserInfoCount(Reply reply) async {
// final int status = reply.data[2];
//
// //
// final int userNum = reply.data[5];
//
// //
// final int fingerNum = reply.data[6];
//
// //
// final int pwdNum = reply.data[7];
//
// //
// final int cardNum = reply.data[8];
//
// //
// final int logsNum = reply.data[9];
//
// //
// final int verNo = reply.data[10];
//
// //
// final int maxAdminFingerNum = reply.data[11];
//
// //
// final int maxUserFingerNum = reply.data[12];
//
// //
// final int maxAdminPassNum = reply.data[13];
//
// //
// final int maxUserPassNum = reply.data[14];
//
// //
// final int maxAdminCardNum = reply.data[15];
//
// //
// final int maxUserCardNum = reply.data[16];
//
// //
// final List<int> serialNo = reply.data.sublist(17, 21);
//
// switch(status){
// case 0x00:
// //
// // _getLockStatus();
// break;
// case 0x06:
// //
// break;
// default:
// //
// break;
// }
// }
//
int userNum = reply.data[5];
//
int fingerNum = reply.data[6];
//
int pwdNum = reply.data[7];
//
int cardNum = reply.data[8];
//
int logsNum = reply.data[9];
//
int verNo = reply.data[10];
//
int maxAdminFingerNum = reply.data[11];
//
int maxUserFingerNum = reply.data[12];
//
int maxAdminPassNum = reply.data[13];
//
int maxUserPassNum = reply.data[14];
//
int maxAdminCardNum = reply.data[15];
//
int maxUserCardNum = reply.data[16];
//
var serialNo = reply.data.sublist(17, 21);
switch(status){
case 0x00:
//
// _getLockStatus();
break;
case 0x06:
//
break;
default:
//
break;
}
}
//
Future<void> senderQueryingFingerprintStatus() async {
BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async {
if (state == BluetoothConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
IoSenderManage.senderQueryingFingerprintStatusCommand(
keyID:BlueManage().connectDeviceName,
userID:await Storage.getUid(),
role:0xff,
fingerCount:20,
fingerNo:1,
token:getTokenList,
needAuthor:1,
publicKey:getPublicKeyList,
privateKey:getPrivateKeyList,
);
}
});
}
// Future<void> senderQueryingFingerprintStatus() async {
// BlueManage().blueSendData(BlueManage().connectDeviceName,(BluetoothConnectionState state) async {
// if (state == BluetoothConnectionState.connected) {
// final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
// final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
// final List<String>? token = await Storage.getStringList(saveBlueToken);
// final List<int> getTokenList = changeStringListToIntList(token!);
//
// final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
// final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderQueryingFingerprintStatusCommand(
// keyID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// role:0xff,
// fingerCount:20,
// fingerNo:1,
// token:getTokenList,
// needAuthor:1,
// publicKey:getPublicKeyList,
// privateKey:getPrivateKeyList,
// );
// }
// });
// }
// ()
Future<void> senderCheckingUserInfoCount() async {
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async {
if (state == BluetoothConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
IoSenderManage.senderCheckingUserInfoCountCommand(
keyID:BlueManage().connectDeviceName,
userID:await Storage.getUid(),
role:0xff,
nowTime:DateTime.now().millisecondsSinceEpoch~/1000,
token:getTokenList,
needAuthor:1,
publicKey:getPublicKeyList,
privateKey:getPrivateKeyList,
);
}
});
}
// Future<void> senderCheckingUserInfoCount() async {
// BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async {
// if (state == BluetoothConnectionState.connected) {
// final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
// final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
// final List<String>? token = await Storage.getStringList(saveBlueToken);
// final List<int> getTokenList = changeStringListToIntList(token!);
//
// final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
// final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderCheckingUserInfoCountCommand(
// keyID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// role:0xff,
// nowTime:DateTime.now().millisecondsSinceEpoch~/1000,
// token:getTokenList,
// needAuthor:1,
// publicKey:getPublicKeyList,
// privateKey:getPrivateKeyList,
// );
// }
// });
// }
//
Future<void> senderAddFingerprint() async {
@ -253,14 +253,14 @@ class FingerprintListLogic extends BaseGetXController{
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.deletKeyID,
@ -274,12 +274,13 @@ class FingerprintListLogic extends BaseGetXController{
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:"0",
endTime:"0",
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
@ -294,7 +295,7 @@ class FingerprintListLogic extends BaseGetXController{
//
Future<FingerprintListDataEntity> getFingerprintsListData() async{
// state.fingerprintItemListData.value.clear();
FingerprintListDataEntity entity = await ApiRepository.to.getFingerprintsListData(
final FingerprintListDataEntity entity = await ApiRepository.to.getFingerprintsListData(
lockId: state.lockId.value.toString(),
pageNo: pageNo.toString(),
pageSize: pageSize.toString(),
@ -315,27 +316,27 @@ class FingerprintListLogic extends BaseGetXController{
}
//
void deletAllFingerprintsData() async{
var fingerprintId = "";
var type = "1";
Future<void> deletAllFingerprintsData() async{
String fingerprintId = '';
String type = '1';
if(state.isDeletAll == false){
fingerprintId = state.deletKeyID;
type = "0";
type = '0';
}
var entity = await ApiRepository.to.deletFingerprintsData(
final LoginEntity entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: fingerprintId,
lockId: state.lockId.value.toString(),
type: type,
deleteType:"1"
deleteType:'1'
);
if(entity.errorCode!.codeIsSuccessful){
if(state.isDeletAll == false){
showToast("删除成功".tr, something:(){
showToast('删除成功'.tr, something:(){
pageNo = 1;
getFingerprintsListData();
});
}else{
showToast("重置成功".tr, something:(){
showToast('重置成功'.tr, something:(){
pageNo = 1;
getFingerprintsListData();
});
@ -346,7 +347,7 @@ class FingerprintListLogic extends BaseGetXController{
//
late StreamSubscription _teamEvent;
void _initRefreshAction() {
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((event) {
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((OtherTypeRefreshListEvent event) {
pageNo = 1;
getFingerprintsListData();
});
@ -354,38 +355,37 @@ class FingerprintListLogic extends BaseGetXController{
String getKeyType(FingerprintItemData fingerprintItemData){
// fingerprintStatus 1: 2:
var keyTypeStr = "";//
String keyTypeStr = '';//
// (fingerprintItemData.fingerprintType! != 1) ? (fingerprintItemData.endDate! < DateTime.now().millisecondsSinceEpoch ? "已失效" : "") : ""
if(fingerprintItemData.fingerprintStatus == 1){
if(fingerprintItemData.startDate! > DateTime.now().millisecondsSinceEpoch){
keyTypeStr = "未生效".tr;
keyTypeStr = '未生效'.tr;
}
}else if(fingerprintItemData.fingerprintStatus == 2){
keyTypeStr = "已失效".tr;
keyTypeStr = '已失效'.tr;
}
return keyTypeStr;
}
String getKeyDateType(FingerprintItemData fingerprintItemData){
var keyDateTypeStr = "";// :1;23:4
String keyDateTypeStr = '';// :1;23:4
if(fingerprintItemData.fingerprintType! == 1){
keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.createDate.toString())} ${"永久".tr}";
}else if(fingerprintItemData.fingerprintType! == 2){
keyDateTypeStr = "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时";
keyDateTypeStr = '${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())} 限时';
}else if(fingerprintItemData.fingerprintType! == 4){
keyDateTypeStr = "${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环";
keyDateTypeStr = '${DateTool().dateToYMDString(fingerprintItemData.startDate.toString())}-${DateTool().dateToYMDString(fingerprintItemData.endDate.toString())} 循环';
}
return keyDateTypeStr;
}
@override
Future<void> onReady() async {
// TODO: implement onReady
super.onReady();
//
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if(isDemoMode == false){
_initReplySubscription();
@ -395,16 +395,14 @@ class FingerprintListLogic extends BaseGetXController{
@override
Future<void> onInit() async {
// TODO: implement onInit
super.onInit();
}
@override
Future<void> onClose() async {
// TODO: implement onClose
super.onClose();
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if(isDemoMode == false) {
_replySubscription.cancel();
_teamEvent.cancel();

View File

@ -510,7 +510,7 @@ class _LockDetailPageState extends State<LockDetailPage>
GestureDetector(
onTap: () {
ShowTipView().showSureAlertDialog(
"${"电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}");
"${"电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}");
},
child: Row(
mainAxisAlignment: MainAxisAlignment.end,

View File

@ -9,10 +9,12 @@ import 'package:star_lock/tools/showTipView.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_factoryDataReset.dart';
import '../../../../blue/io_protocol/io_setSupportFunctionsNoParameters.dart';
import '../../../../blue/io_protocol/io_updataLockSet.dart';
import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../blue/sender_manage.dart';
import '../../../../login/login/entity/LoginEntity.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../../tools/commonDataManage.dart';
@ -55,6 +57,11 @@ class LockSetLogic extends BaseGetXController {
// if ((reply is ReadSupportFunctionsNoParametersReply) && (state.settingUpSupportFeatures == 56)) {
// _readSupportFunctionsWithParametersReply(reply);
// }
//
if (reply is UpdataLockSetReply && (state.ifCurrentScreen.value == true)) {
_replyUpdataLockSetReply(reply);
}
});
}
@ -200,6 +207,32 @@ class LockSetLogic extends BaseGetXController {
}
}
//
Future<void> _replyUpdataLockSetReply(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
dismissEasyLoading();
cancelBlueConnetctToastTimer();
_lockDataUpload(uploadType:1, recordType:0, records:reply.data.sublist(7, reply.data.length));
break;
case 0x06:
//
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockSet(token);
break;
default:
dismissEasyLoading();
cancelBlueConnetctToastTimer();
break;
}
}
//
// Future<void> deletUserAction() async {
// showEasyLoading();
@ -553,24 +586,72 @@ class LockSetLogic extends BaseGetXController {
}
}
//
Future<void> getUpdataLockSet() async {
// showBlueConnetctToastTimer(action: (){
// });
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
updataLockSet(getTokenList);
} else if (connectionState == BluetoothConnectionState.disconnected) {
// cancelBlueConnetctToastTimer();
// if(state.ifCurrentScreen.value == true){
// showBlueConnetctToast();
// }
}
});
}
//
Future<void> updataLockSet(List<int> token) async {
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockSetCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList
);
}
//
Future<void> _lockDataUpload({
required int uploadType,
required int recordType,
required List records
}) async{
final LoginEntity entity = await ApiRepository.to.lockDataUpload(
lockId: CommonDataManage().currentKeyInfo.lockId!,
uploadType:uploadType,
recordType: recordType,
records:records,
isUnShowLoading: true
);
if(entity.errorCode!.codeIsSuccessful){
}
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
getUpdataLockSet();
_initReplySubscription();
// _scanListDiscoveredDeviceSubscriptionAction();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
_replySubscription.cancel();
_passCurrentLockInformationEvent!.cancel();

View File

@ -2,6 +2,7 @@
import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart';
@ -11,6 +12,7 @@ import '../../../../blue/io_protocol/io_updataLockFaceList.dart';
import '../../../../blue/io_protocol/io_updataLockFingerprintList.dart';
import '../../../../blue/io_protocol/io_updataLockPalmVeinList.dart';
import '../../../../blue/io_protocol/io_updataLockPasswordList.dart';
import '../../../../blue/io_protocol/io_updataLockSet.dart';
import '../../../../blue/io_reply.dart';
import '../../../../blue/io_tool/io_tool.dart';
import '../../../../blue/io_tool/manager_event_bus.dart';
@ -25,66 +27,71 @@ class UploadDataLogic extends BaseGetXController{
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
//
if (reply is UpdataLockPasswordListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockPasswordListReply(reply);
_replyUpdataLockPasswordListReply(reply);
}
//
if (reply is UpdataLockCardListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockCardListReply(reply);
_replyUpdataLockCardListReply(reply);
}
//
if (reply is UpdataLockFingerprintListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockFingerprintListReply(reply);
_replyUpdataLockFingerprintListReply(reply);
}
//
if (reply is UpdataLockFaceListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockFaceListReply(reply);
_replyUpdataLockFaceListReply(reply);
}
//
if (reply is UpdataLockPalmVeinListReply && (state.ifCurrentScreen.value == true)) {
_replyupdataLockPalmVeinListReply(reply);
_replyUpdataLockPalmVeinListReply(reply);
}
//
if (reply is UpdataLockSetReply && (state.ifCurrentScreen.value == true)) {
_replyUpdataLockSetReply(reply);
}
});
}
//
Future<void> _replyupdataLockPasswordListReply(Reply reply) async {
int status = reply.data[2];
Future<void> _replyUpdataLockPasswordListReply(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
state.indexCount.value = state.indexCount.value + 1;
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
final int dataLength = reply.data[8];
state.uploadPasswordDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 10
var token = reply.data.sublist(3, 7);
final List<int> token = reply.data.sublist(3, 7);
updataLockPasswordList(token, state.uploadPasswordPage);
}else{
dismissEasyLoading();
// 10
if(state.uploadPasswordDataList.isEmpty){
//
getUpdataLockCardList();
}else{
//
// if(state.uploadPasswordDataList.isEmpty){
// //
// getUpdataLockCardList();
// }else{
// //
_lockDataUpload(uploadType:2, recordType:2, records:state.uploadPasswordDataList);
}
// }
}
break;
case 0x06:
//
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockPasswordList(token, state.uploadPasswordPage);
@ -99,8 +106,8 @@ class UploadDataLogic extends BaseGetXController{
}
//
Future<void> _replyupdataLockCardListReply(Reply reply) async {
int status = reply.data[2];
Future<void> _replyUpdataLockCardListReply(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -108,27 +115,27 @@ class UploadDataLogic extends BaseGetXController{
dismissEasyLoading();
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
final int dataLength = reply.data[8];
state.uploadCardDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 10
var token = reply.data.sublist(3, 7);
final List<int> token = reply.data.sublist(3, 7);
updataLockCardList(token, state.uploadCardPage);
}else{
// 10
if(state.uploadCardDataList.isEmpty){
//
getUpdataLockFingerprintList();
}else{
//
// // 10
// if(state.uploadCardDataList.isEmpty){
// //
// getUpdataLockFingerprintList();
// }else{
// //
_lockDataUpload(uploadType:2, recordType:3, records:state.uploadCardDataList);
}
// }
}
break;
case 0x06:
//
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockCardList(token, state.uploadCardPage);
@ -143,8 +150,8 @@ class UploadDataLogic extends BaseGetXController{
}
//
Future<void> _replyupdataLockFingerprintListReply(Reply reply) async {
int status = reply.data[2];
Future<void> _replyUpdataLockFingerprintListReply(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -152,27 +159,27 @@ class UploadDataLogic extends BaseGetXController{
dismissEasyLoading();
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
final int dataLength = reply.data[8];
state.uploadFingerprintDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 10
var token = reply.data.sublist(3, 7);
final List<int> token = reply.data.sublist(3, 7);
updataLockFingerprintList(token, state.uploadFingerprintPage);
}else{
// 10
if(state.uploadFingerprintDataList.isEmpty){
//
getUpdataLockFaceList();
}else{
//
// // 10
// if(state.uploadFingerprintDataList.isEmpty){
// //
// getUpdataLockFaceList();
// }else{
// //
_lockDataUpload(uploadType:2, recordType:4, records:state.uploadFingerprintDataList);
}
// }
}
break;
case 0x06:
//
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockFingerprintList(token, state.uploadFingerprintPage);
@ -187,8 +194,8 @@ class UploadDataLogic extends BaseGetXController{
}
//
Future<void> _replyupdataLockFaceListReply(Reply reply) async {
int status = reply.data[2];
Future<void> _replyUpdataLockFaceListReply(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -196,27 +203,27 @@ class UploadDataLogic extends BaseGetXController{
dismissEasyLoading();
cancelBlueConnetctToastTimer();
int dataLength = reply.data[8];
final int dataLength = reply.data[8];
state.uploadFaceDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 10
var token = reply.data.sublist(3, 7);
final List<int> token = reply.data.sublist(3, 7);
updataLockFaceList(token, state.uploadFacePage);
}else{
// 10
if(state.uploadFaceDataList.isEmpty){
//
getUpdataLockPalmVeinList();
}else{
// // 10
// if(state.uploadFaceDataList.isEmpty){
// //
// getUpdataLockPalmVeinList();
// }else{
//
_lockDataUpload(uploadType:2, recordType:5, records:state.uploadFaceDataList);
}
// }
}
break;
case 0x06:
//
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockFaceList(token, state.uploadFacePage);
@ -231,8 +238,8 @@ class UploadDataLogic extends BaseGetXController{
}
//
Future<void> _replyupdataLockPalmVeinListReply(Reply reply) async {
int status = reply.data[2];
Future<void> _replyUpdataLockPalmVeinListReply(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
@ -240,30 +247,27 @@ class UploadDataLogic extends BaseGetXController{
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
int dataLength = reply.data[8];
final int dataLength = reply.data[8];
state.uploadPalmVeinDataList.addAll(reply.data.sublist(9, reply.data.length));
if(dataLength == 10){
// 10
var token = reply.data.sublist(3, 7);
final List<int> token = reply.data.sublist(3, 7);
updataLockPalmVeinList(token, state.uploadPalmVeinPage);
}else{
// 10
if(state.uploadPalmVeinDataList.isEmpty){
//
showToast("上传成功");
}else{
//
// // 10
// if(state.uploadPalmVeinDataList.isEmpty){
// //
// getUpdataLockSet();
// }else{
// //
_lockDataUpload(uploadType:2, recordType:6, records:state.uploadPalmVeinDataList);
}
// }
}
break;
case 0x06:
//
var token = reply.data.sublist(3, 7);
var saveStrList = changeIntListToStringList(token);
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockPalmVeinList(token, state.uploadPalmVeinPage);
@ -277,6 +281,36 @@ class UploadDataLogic extends BaseGetXController{
}
}
//
Future<void> _replyUpdataLockSetReply(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
state.indexCount.value = state.indexCount.value + 1;
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.uploadLockSetDataList.addAll(reply.data.sublist(7, reply.data.length));
_lockDataUpload(uploadType:1, recordType:0, records:state.uploadLockSetDataList);
break;
case 0x06:
//
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
updataLockSet(token);
break;
default:
dismissEasyLoading();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
cancelBlueConnetctToastTimer();
break;
}
}
//
Future<void> getUpdataLockPasswordList() async {
if(state.sureBtnState.value == 1){
@ -291,8 +325,8 @@ class UploadDataLogic extends BaseGetXController{
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
updataLockPasswordList(getTokenList, state.uploadPasswordPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
@ -308,11 +342,11 @@ class UploadDataLogic extends BaseGetXController{
//
Future<void> updataLockPasswordList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockPasswordListCommand(
lockID: BlueManage().connectDeviceName,
@ -336,8 +370,8 @@ class UploadDataLogic extends BaseGetXController{
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
updataLockCardList(getTokenList, state.uploadCardPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
@ -354,11 +388,11 @@ class UploadDataLogic extends BaseGetXController{
// Card列表
Future<void> updataLockCardList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockCardListCommand(
lockID: BlueManage().connectDeviceName,
@ -382,8 +416,8 @@ class UploadDataLogic extends BaseGetXController{
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
updataLockFingerprintList(getTokenList, state.uploadFingerprintPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
@ -400,11 +434,11 @@ class UploadDataLogic extends BaseGetXController{
//
Future<void> updataLockFingerprintList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockFingerprintListCommand(
lockID: BlueManage().connectDeviceName,
@ -428,8 +462,8 @@ class UploadDataLogic extends BaseGetXController{
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
updataLockFaceList(getTokenList, state.uploadFacePage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
@ -446,11 +480,11 @@ class UploadDataLogic extends BaseGetXController{
//
Future<void> updataLockFaceList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockFaceListCommand(
lockID: BlueManage().connectDeviceName,
@ -475,8 +509,8 @@ class UploadDataLogic extends BaseGetXController{
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
updataLockPalmVeinList(getTokenList, state.uploadPalmVeinPage);
} else if (connectionState == BluetoothConnectionState.disconnected) {
@ -493,11 +527,11 @@ class UploadDataLogic extends BaseGetXController{
//
Future<void> updataLockPalmVeinList(List<int> token, int page) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockPalmVeinListCommand(
lockID: BlueManage().connectDeviceName,
@ -511,22 +545,70 @@ class UploadDataLogic extends BaseGetXController{
);
}
//
Future<void> getUpdataLockSet() async {
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.indexCount.value = 0;
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
updataLockSet(getTokenList);
} else if (connectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
state.indexCount.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
//
Future<void> updataLockSet(List<int> token) async {
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockSetCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList
);
}
//
Future<void> _lockDataUpload({
required int uploadType,
required int recordType,
required List records
}) async{
var entity = await ApiRepository.to.lockDataUpload(
final LoginEntity entity = await ApiRepository.to.lockDataUpload(
lockId: CommonDataManage().currentKeyInfo.lockId!,
uploadType:uploadType,
recordType: recordType,
records:records
records:records,
isUnShowLoading: false
);
if(entity.errorCode!.codeIsSuccessful){
if(uploadType == 1){
// 1
state.indexCount.value = 0;
state.sureBtnState.value = 0;
showToast('上传成功');
}else{
// 2
switch(recordType){
@ -535,26 +617,24 @@ class UploadDataLogic extends BaseGetXController{
//
// break;
case 2:
//
//
getUpdataLockCardList();
break;
case 3:
// IC卡
// IC卡上传成功
getUpdataLockFingerprintList();
break;
case 4:
//
//
getUpdataLockFaceList();
break;
case 5:
//
//
getUpdataLockPalmVeinList();
break;
case 6:
//
state.indexCount.value = 0;
state.sureBtnState.value = 0;
showToast("上传成功");
//
getUpdataLockSet();
break;
default:
break;
@ -568,7 +648,6 @@ class UploadDataLogic extends BaseGetXController{
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
@ -576,16 +655,8 @@ class UploadDataLogic extends BaseGetXController{
// getUpdataLockPalmVeinList();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockSet/uploadData/uploadData_state.dart';
import '../../../../app_settings/app_colors.dart';
import '../../../../tools/appRouteObserver.dart';
@ -18,8 +19,8 @@ class UploadDataPage extends StatefulWidget {
}
class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
final logic = Get.put(UploadDataLogic());
final state = Get.find<UploadDataLogic>().state;
final UploadDataLogic logic = Get.put(UploadDataLogic());
final UploadDataState state = Get.find<UploadDataLogic>().state;
@override
Widget build(BuildContext context) {
@ -29,30 +30,31 @@ class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
body:Container(
padding: EdgeInsets.all(30.w),
child: Column(
children: [
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Expanded(child: Text(TranslationLoader.lanKeys!.uploadDataTip!.tr, style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor),)),
],
),
SizedBox(height: 30.h,),
Obx(() => SubmitBtn(btnName: state.indexCount.value == 0 ? TranslationLoader.lanKeys!.begin!.tr : "${TranslationLoader.lanKeys!.begin!.tr}(${state.indexCount.value}/5)",
Obx(() => SubmitBtn(btnName: state.indexCount.value == 0 ? TranslationLoader.lanKeys!.begin!.tr : '${TranslationLoader.lanKeys!.begin!.tr}(${state.indexCount.value}/6)',
borderRadius: 20.w,
fontSize: 24.sp,
// margin: EdgeInsets.only(left: 03.w, right: 30.w, top: 20.w),
padding: EdgeInsets.only(top: 20.w, bottom: 20.w),
onClick: () {
state.uploadPasswordPage = 0;
state.uploadPasswordDataList = [];
state.uploadPasswordDataList.clear();
state.uploadCardPage = 0;
state.uploadCardDataList = [];
state.uploadCardDataList.clear();
state.uploadFingerprintPage = 0;
state.uploadFingerprintDataList = [];
state.uploadFingerprintDataList.clear();
state.uploadFacePage = 0;
state.uploadFaceDataList = [];
state.uploadFaceDataList.clear();
state.uploadPalmVeinPage = 0;
state.uploadPalmVeinDataList = [];
state.uploadPalmVeinDataList.clear();
state.uploadLockSetDataList.clear();
logic.getUpdataLockPasswordList();
}
@ -65,7 +67,6 @@ class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
@ -74,7 +75,6 @@ class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
@override
void dispose() {
// TODO: implement dispose
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();
@ -94,14 +94,9 @@ class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
super.didPop();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
// if (state.deletWaitScanTimer != null) {
// state.deletWaitScanTimer!.cancel();
// }
// if (state.deletWaitScanCompleter != null &&
// !state.deletWaitScanCompleter!.isCompleted) {
// state.deletWaitScanCompleter!.complete();
// }
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
}
@ -119,7 +114,9 @@ class _UploadDataPageState extends State<UploadDataPage> with RouteAware{
super.didPushNext();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
}
}

View File

@ -2,24 +2,26 @@
import 'package:get/get.dart';
class UploadDataState{
var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0() 1()
RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs;// 0() 1()
var countReq = 10;//
var indexCount = 0.obs;// 0/5
int countReq = 10;//
RxInt indexCount = 0.obs;// 0/5
var uploadPasswordPage = 0;//
List<int> uploadPasswordDataList = [];//
int uploadPasswordPage = 0;//
List<int> uploadPasswordDataList = <int>[];//
var uploadCardPage = 0;//
List<int> uploadCardDataList = [];//
int uploadCardPage = 0;//
List<int> uploadCardDataList = <int>[];//
var uploadFingerprintPage = 0;//
List<int> uploadFingerprintDataList = [];//
int uploadFingerprintPage = 0;//
List<int> uploadFingerprintDataList = <int>[];//
var uploadFacePage = 0;//
List<int> uploadFaceDataList = [];//
int uploadFacePage = 0;//
List<int> uploadFaceDataList = <int>[];//
var uploadPalmVeinPage = 0;//
List<int> uploadPalmVeinDataList = [];//
int uploadPalmVeinPage = 0;//
List<int> uploadPalmVeinDataList = <int>[];//
List<int> uploadLockSetDataList = <int>[];//
}

View File

@ -1,3 +1,4 @@
import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
@ -49,12 +50,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderCustomPasswordsCommand(
keyID:state.itemData.value.keyboardPwdId!.toString(),
keyID:state.keyboardPwdId.toString(),
userID:await Storage.getUid(),
pwdNo: state.itemData.value.pwdUserNo!,
pwd: state.itemData.value.keyboardPwd!.toString(),
pwdNo: state.pwdUserNo,
pwd: state.keyboardPwd,
operate: 1,
isAdmin: state.itemData.value.pwdUserNo!,
isAdmin: state.pwdRight,
useCountLimit: 0xffff,
startTime:DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1) ~/ 1000,
endTime:DateTool().dateToTimestamp(state.selectFailureDate.value, 1) ~/ 1000,
@ -89,18 +90,18 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
}
final PasswordKeyEntity entity = await ApiRepository.to.updatePasswordKey(
lockId: state.itemData.value.lockId!,
keyboardPwdId: state.itemData.value.keyboardPwdId.toString(),
keyboardPwdName: state.itemData.value.keyboardPwdName!,
newKeyboardPwd: state.itemData.value.keyboardPwd!,
lockId: state.lockId,
keyboardPwdId: state.keyboardPwdId.toString(),
keyboardPwdName: state.keyboardPwdName,
newKeyboardPwd: state.keyboardPwd,
startDate: beginTimeTimestamp,
endDate: endTimeTimestamp,
changeType: '1',
hoursStart: state.itemData.value.hoursStart!,
hoursEnd: state.itemData.value.hoursEnd!,
hoursStart: state.hoursStart,
hoursEnd: state.hoursEnd,
isCoerced: '1',
keyboardPwdType: 3,
pwdRight: state.itemData.value.pwdRight!);
pwdRight: state.pwdRight);
if (entity.errorCode!.codeIsSuccessful) {
showToast('修改成功', something: (){
eventBus.fire(GetPasswordListRefreshUI());
@ -115,13 +116,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
//
Future<void> senderCustomPasswords() async {
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
@ -133,12 +133,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderCustomPasswordsCommand(
keyID:state.itemData.value.keyboardPwdId!.toString(),
keyID:state.keyboardPwdId.toString(),
userID:await Storage.getUid(),
pwdNo: state.itemData.value.pwdUserNo!,
pwd: state.itemData.value.keyboardPwd!.toString(),
pwdNo: state.pwdUserNo,
pwd: state.keyboardPwd.toString(),
operate: 1,
isAdmin: state.itemData.value.pwdRight!,
isAdmin: state.pwdRight,
useCountLimit: 0xffff,
startTime:DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1) ~/ 1000,
endTime:DateTool().dateToTimestamp(state.selectFailureDate.value, 1) ~/ 1000,

View File

@ -1,9 +1,9 @@
import 'package:date_format/date_format.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_state.dart';
import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart';
@ -23,34 +23,32 @@ class PasswordKeyDetailChangeDatePage extends StatefulWidget {
_PasswordKeyDetailChangeDatePage();
}
class _PasswordKeyDetailChangeDatePage
extends State<PasswordKeyDetailChangeDatePage> with RouteAware {
final logic = Get.put(PasswordKeyDetailChangeDateLogic());
final state = Get.find<PasswordKeyDetailChangeDateLogic>().state;
class _PasswordKeyDetailChangeDatePage extends State<PasswordKeyDetailChangeDatePage> with RouteAware {
final PasswordKeyDetailChangeDateLogic logic = Get.put(PasswordKeyDetailChangeDateLogic());
final PasswordKeyDetailChangeDateState state = Get.find<PasswordKeyDetailChangeDateLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle:
"${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}",
barTitle: '${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}',
haveBack: true,
backgroundColor: AppColors.mainColor,
actionsList: [
actionsList: <Widget>[
TextButton(
child: Text(
TranslationLoader.lanKeys!.sure!.tr,
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
onPressed: () {
if (state.itemData.value.startDate! >= state.itemData.value.endDate!) {
logic.showToast("失效时间要大于生效时间".tr);
if (state.startDate >= state.endDate) {
logic.showToast('失效时间要大于生效时间'.tr);
return;
}
if (DateTime.now().millisecondsSinceEpoch >= state.itemData.value.endDate!) {
logic.showToast("失效时间要大于当前时间".tr);
if (DateTime.now().millisecondsSinceEpoch >= state.endDate) {
logic.showToast('失效时间要大于当前时间'.tr);
return;
}
logic.senderCustomPasswords();
@ -111,18 +109,17 @@ class _PasswordKeyDetailChangeDatePage
// }
return Column(
children: [
children: <Widget>[
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
rightTitle: state.selectEffectiveDate.value,
isHaveLine: true,
isHaveDirection: true,
action: () {
PDuration selectDate = PDuration.parse(
DateTime.parse(state.selectEffectiveDate.value));
Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) {
final PDuration selectDate = PDuration.parse(DateTime.parse(state.selectEffectiveDate.value));
Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) {
state.selectEffectiveDate.value = DateTool().getYMDHNDateString(p, 1);
state.itemData.value.startDate = DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1); //
state.startDate = DateTool().dateToTimestamp(state.selectEffectiveDate.value, 1); //
});
})),
Obx(() => CommonItem(
@ -130,10 +127,10 @@ class _PasswordKeyDetailChangeDatePage
rightTitle: state.selectFailureDate.value,
isHaveDirection: true,
action: () {
PDuration selectDate = PDuration.parse(DateTime.parse(state.selectFailureDate.value));
Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) {
final PDuration selectDate = PDuration.parse(DateTime.parse(state.selectFailureDate.value));
Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) {
state.selectFailureDate.value = DateTool().getYMDHNDateString(p, 1);
state.itemData.value.endDate = DateTool().dateToTimestamp(state.selectFailureDate.value, 1); //
state.endDate = DateTool().dateToTimestamp(state.selectFailureDate.value, 1); //
});
})),
],
@ -142,7 +139,6 @@ class _PasswordKeyDetailChangeDatePage
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
@ -151,7 +147,6 @@ class _PasswordKeyDetailChangeDatePage
@override
void dispose() {
// TODO: implement dispose
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();

View File

@ -3,20 +3,58 @@ import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
import 'package:star_lock/tools/dateTool.dart';
import '../../../../mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart';
class PasswordKeyDetailChangeDateState {
PasswordKeyDetailChangeDateState() {
final Map map = Get.arguments;
if (map['itemData'] != null) {
itemData.value = map['itemData'];
selectEffectiveDate.value = itemData.value.startDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.value.startDate.toString());
selectFailureDate.value = itemData.value.endDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.value.endDate.toString());
final PasswordKeyListItem itemData = map['itemData'];
selectEffectiveDate.value = itemData.startDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.startDate.toString());
selectFailureDate.value = itemData.endDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.endDate.toString());
lockId = itemData.lockId!;
keyboardPwdId = itemData.keyboardPwdId!.toString();
keyboardPwdName = itemData.keyboardPwdName!;
keyboardPwd = itemData.keyboardPwd!;
pwdUserNo = itemData.pwdUserNo!;
hoursStart = itemData.hoursStart!;
hoursEnd = itemData.hoursEnd!;
pwdRight = itemData.pwdRight!;
}
if (map['expirePasswordItemData'] != null) {
final ExpirePasswordItemData itemData = map['expirePasswordItemData'];
selectEffectiveDate.value = itemData.startDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.startDate.toString());
selectFailureDate.value = itemData.endDate == 0 ? DateTool().getNowDateWithType(2) : DateTool().dateToYMDHNString(itemData.endDate.toString());
lockId = itemData.lockId!;
lockName = itemData.lock_info!.btDeviceName!;
keyboardPwdId = itemData.pwdId!.toString();
keyboardPwdName = itemData.nickname!;
keyboardPwd = itemData.keyboardPwd!;
pwdUserNo = itemData.pwdUserNo!;
hoursStart = itemData.hoursStart!;
hoursEnd = itemData.hoursEnd!;
pwdRight = itemData.pwdRight!;
}
}
final Rx<PasswordKeyListItem> itemData = PasswordKeyListItem().obs;
final RxString selectEffectiveDate = ''.obs; //
final RxString selectFailureDate = ''.obs; //
int lockId = 0;
String lockName = '';
String keyboardPwdId = '';
String keyboardPwdName = '';
String keyboardPwd = '';
int pwdUserNo = 0;
int hoursStart = 0;
int hoursEnd = 0;
int pwdRight = 0;
int startDate = 0;
int endDate = 0;
RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs; // 0() 1()
}

View File

@ -355,21 +355,13 @@ class PasswordKeyListLogic extends BaseGetXController {
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_getPasswordListRefreshUIAction();
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_getPasswordListRefreshUIEvent?.cancel();
_replySubscription.cancel();

View File

@ -1,8 +1,4 @@
class ExpireCardEntity {
int? errorCode;
String? description;
String? errorMsg;
ExpireCardListEntity? data;
ExpireCardEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
@ -13,6 +9,10 @@ class ExpireCardEntity {
errorMsg = json['errorMsg'];
data = json['data'] != null ? ExpireCardListEntity.fromJson(json['data']) : null;
}
int? errorCode;
String? description;
String? errorMsg;
ExpireCardListEntity? data;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -27,11 +27,6 @@ class ExpireCardEntity {
}
class ExpireCardListEntity {
List<ExpireCardItemEntity>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
ExpireCardListEntity({this.list, this.pageNo, this.pageSize, this.pages, this.total});
@ -47,6 +42,11 @@ class ExpireCardListEntity {
pages = json['pages'];
total = json['total'];
}
List<ExpireCardItemEntity>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -62,29 +62,6 @@ class ExpireCardListEntity {
}
class ExpireCardItemEntity {
String? clientId;
int? lockOwnerId;
int? lockId;
String? cardNumber;
int? startDate;
int? endDate;
int? cardStatus;
int? cardType;
int? cardRight;
List? weekDay;
int? addType;
int? isCoerced;
int? cardUserNo;
int? businessId;
String? createdAt;
String? updatedAt;
ApiUser? apiUser;
LockInfo? lockInfo;
int? cardId;
int? uid;
String? nickname;
String? lockAlias;
int? expireDate;
ExpireCardItemEntity(
{this.clientId,
@ -137,7 +114,7 @@ class ExpireCardItemEntity {
? ApiUser.fromJson(json['api_user'])
: null;
lockInfo = json['lock_info'] != null
? new LockInfo.fromJson(json['lock_info'])
? LockInfo.fromJson(json['lock_info'])
: null;
cardId = json['cardId'];
uid = json['uid'];
@ -145,6 +122,29 @@ class ExpireCardItemEntity {
lockAlias = json['lockAlias'];
expireDate = json['expireDate'];
}
String? clientId;
int? lockOwnerId;
int? lockId;
String? cardNumber;
int? startDate;
int? endDate;
int? cardStatus;
int? cardType;
int? cardRight;
List? weekDay;
int? addType;
int? isCoerced;
int? cardUserNo;
int? businessId;
String? createdAt;
String? updatedAt;
ApiUser? apiUser;
LockInfo? lockInfo;
int? cardId;
int? uid;
String? nickname;
String? lockAlias;
int? expireDate;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -182,8 +182,6 @@ class ExpireCardItemEntity {
}
class ApiUser {
int? id;
String? accountName;
ApiUser({this.id, this.accountName});
@ -191,6 +189,8 @@ class ApiUser {
id = json['id'];
accountName = json['account_name'];
}
int? id;
String? accountName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -201,13 +201,13 @@ class ApiUser {
}
class LockInfo {
String? btDeviceName;
LockInfo({this.btDeviceName});
LockInfo.fromJson(Map<String, dynamic> json) {
btDeviceName = json['btDeviceName'];
}
String? btDeviceName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();

View File

@ -75,6 +75,7 @@ class ExpireCardLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: true
);
break;
default:
@ -126,6 +127,7 @@ class ExpireCardLogic extends BaseGetXController {
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: true
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_state.dart';
import 'package:star_lock/tools/EasyRefreshTool.dart';
import 'package:star_lock/tools/noData.dart';
@ -21,12 +21,14 @@ class ExpireCardPage extends StatefulWidget {
}
class _ExpireCardPageState extends State<ExpireCardPage> {
final logic = Get.put(ExpireCardLogic());
final state = Get.find<ExpireCardLogic>().state;
final ExpireCardLogic logic = Get.put(ExpireCardLogic());
final ExpireCardState state = Get.find<ExpireCardLogic>().state;
Future<void> getHttpData() async {
logic.expirCardListRequest().then((ExpireCardEntity value){
if(mounted) setState(() {});
if(mounted) {
setState(() {});
}
});
}
@ -57,17 +59,17 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
: SlidableAutoCloseBehavior(
child: ListView.separated(
itemCount: state.dataList.length,
itemBuilder: (c, index) {
ExpireCardItemEntity indexEntity = state.dataList[index];
itemBuilder: (BuildContext c, int index) {
final ExpireCardItemEntity indexEntity = state.dataList[index];
return Slidable(
key:ValueKey(indexEntity.uid),
endActionPane: ActionPane(
extentRatio: 0.2,
motion: const ScrollMotion(),
children: [
children: <Widget>[
SlidableAction(
onPressed: (BuildContext context){
ShowTipView().showIosTipWithContentDialog("确定删除卡吗?", (){
ShowTipView().showIosTipWithContentDialog('确定删除卡吗?', (){
state.deletExpireCardItemEntity = indexEntity;
logic.senderAddICCard();
});
@ -95,44 +97,30 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
Widget _electronicKeyItem(ExpireCardItemEntity itemData) {
return GestureDetector(
onTap: () async {
// if(itemData.cardType! == 4){
// //
// var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: {
// "pushType": 0,
// "expireLockItem": itemData,
// });
// if(data != null) {
// // setState(() {
// // state.starDate.value = data["starDate"];
// // state.endDate.value = data["endDate"];
// // state.starTime.value = data["starTime"];
// // state.endTime.value = data["endTime"];
// // state.weekDay.value = data["validityValue"];
// // });
// logic.pageNo = 1;
// getHttpData();
// }
// }else{
// var data = await Get.toNamed(Routers.electronicKeyDetailChangeDate, arguments: {
// "pushType": 0,
// "expireLockItem": itemData,
// });
// if(data != null) {
// setState(() {
// // state.starDate.value = data["beginTimeTimestamp"].toString();
// // state.endDate.value = data["endTimeTimestamp"].toString();
// // state.keyType.value = 2;
// logic.pageNo = 1;
// getHttpData();
// });
// }
// }
var data = await Get.toNamed(Routers.expireKeyChangeDatePage, arguments: {
'pushType': 0,
'lockName': itemData.lockInfo!.btDeviceName,
'startDate': itemData.startDate,
'endDate': itemData.endDate,
'lockId': itemData.lockId,
'keyID': itemData.cardId,
'keyNumber': int.parse(itemData.cardNumber!),
'keyName': itemData.nickname,
'isAdmin': itemData.cardRight,
'isForce': itemData.isCoerced,
});
if(data != null) {
setState(() {
logic.pageNo = 1;
getHttpData();
});
}
},
child: Container(
height: 90.h,
color: Colors.white,
child: Row(
children: [
children: <Widget>[
SizedBox(
width: 30.w,
),
@ -147,10 +135,10 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
itemData.nickname ?? '',
style: TextStyle(
@ -170,7 +158,7 @@ class _ExpireCardPageState extends State<ExpireCardPage> {
SizedBox(height: 10.h),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
logic.getExpireDateStr(itemData),
style: TextStyle(

View File

@ -4,9 +4,9 @@ import 'package:get/get.dart';
import 'expireCard_entity.dart';
class ExpireCardState{
final dataList = <ExpireCardItemEntity>[].obs;
final RxList<ExpireCardItemEntity> dataList = <ExpireCardItemEntity>[].obs;
var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0() 1()
RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs;// 0() 1()
ExpireCardItemEntity deletExpireCardItemEntity = ExpireCardItemEntity();
}

View File

@ -0,0 +1,234 @@
class ExpireFaceEntity {
ExpireFaceEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
ExpireFaceEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
int? errorCode;
String? description;
String? errorMsg;
Data? data;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['errorCode'] = errorCode;
data['description'] = description;
data['errorMsg'] = errorMsg;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
return data;
}
}
class Data {
Data({this.list, this.pageNo, this.pageSize, this.pages, this.total});
Data.fromJson(Map<String, dynamic> json) {
if (json['list'] != null) {
list = <ExpireFaceListItemEntity>[];
json['list'].forEach((v) {
list!.add(ExpireFaceListItemEntity.fromJson(v));
});
}
pageNo = json['pageNo'];
pageSize = json['pageSize'];
pages = json['pages'];
total = json['total'];
}
List<ExpireFaceListItemEntity>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
if (list != null) {
data['list'] = list!.map((v) => v.toJson()).toList();
}
data['pageNo'] = pageNo;
data['pageSize'] = pageSize;
data['pages'] = pages;
data['total'] = total;
return data;
}
}
class ExpireFaceListItemEntity {
ExpireFaceListItemEntity(
{this.clientId,
this.lockOwnerId,
this.lockId,
this.faceNumber,
this.featureData,
this.startDate,
this.endDate,
this.weekDay,
this.faceType,
this.status,
this.cyclicConfig,
this.addType,
this.isCoerced,
this.faceRight,
this.businessId,
this.faceUserNo,
this.date,
this.createdAt,
this.updatedAt,
this.userInfo,
this.lockInfo,
this.faceId,
this.uid,
this.nickname,
this.lockAlias,
this.expireDate});
ExpireFaceListItemEntity.fromJson(Map<String, dynamic> json) {
clientId = json['clientId'];
lockOwnerId = json['lockOwnerId'];
lockId = json['lockId'];
faceNumber = json['faceNumber'];
featureData = json['featureData'];
startDate = json['startDate'];
endDate = json['endDate'];
if (json['weekDay'] != null) {
weekDay = [];
json['weekDay'].forEach((v) {
weekDay!.add(v);
});
}
faceType = json['faceType'];
status = json['status'];
if (json['cyclicConfig'] != null) {
cyclicConfig = [];
json['cyclicConfig'].forEach((v) {
cyclicConfig!.add(v);
});
}
addType = json['addType'];
isCoerced = json['isCoerced'];
faceRight = json['faceRight'];
businessId = json['businessId'];
faceUserNo = json['faceUserNo'];
date = json['date'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
userInfo = json['user_info'] != null
? UserInfo.fromJson(json['user_info'])
: null;
lockInfo = json['lock_info'] != null
? LockInfo.fromJson(json['lock_info'])
: null;
faceId = json['faceId'];
uid = json['uid'];
nickname = json['nickname'];
lockAlias = json['lockAlias'];
expireDate = json['expireDate'];
}
String? clientId;
int? lockOwnerId;
int? lockId;
String? faceNumber;
String? featureData;
int? startDate;
int? endDate;
List? weekDay;
int? faceType;
int? status;
List? cyclicConfig;
int? addType;
int? isCoerced;
int? faceRight;
int? businessId;
int? faceUserNo;
int? date;
String? createdAt;
String? updatedAt;
UserInfo? userInfo;
LockInfo? lockInfo;
int? faceId;
int? uid;
String? nickname;
String? lockAlias;
int? expireDate;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['clientId'] = clientId;
data['lockOwnerId'] = lockOwnerId;
data['lockId'] = lockId;
data['faceNumber'] = faceNumber;
data['featureData'] = featureData;
data['startDate'] = startDate;
data['endDate'] = endDate;
if (weekDay != null) {
data['weekDay'] = weekDay!.map((v) => v.toJson()).toList();
}
data['faceType'] = faceType;
data['status'] = status;
if (cyclicConfig != null) {
data['cyclicConfig'] = cyclicConfig!.map((v) => v.toJson()).toList();
}
data['addType'] = addType;
data['isCoerced'] = isCoerced;
data['faceRight'] = faceRight;
data['businessId'] = businessId;
data['faceUserNo'] = faceUserNo;
data['date'] = date;
data['created_at'] = createdAt;
data['updated_at'] = updatedAt;
if (userInfo != null) {
data['user_info'] = userInfo!.toJson();
}
if (lockInfo != null) {
data['lock_info'] = lockInfo!.toJson();
}
data['faceId'] = faceId;
data['uid'] = uid;
data['nickname'] = nickname;
data['lockAlias'] = lockAlias;
data['expireDate'] = expireDate;
return data;
}
}
class UserInfo {
UserInfo({this.id, this.accountName});
UserInfo.fromJson(Map<String, dynamic> json) {
id = json['id'];
accountName = json['account_name'];
}
int? id;
String? accountName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['account_name'] = accountName;
return data;
}
}
class LockInfo {
LockInfo({this.btDeviceName});
LockInfo.fromJson(Map<String, dynamic> json) {
btDeviceName = json['btDeviceName'];
}
String? btDeviceName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['btDeviceName'] = btDeviceName;
return data;
}
}

View File

@ -1,16 +1,149 @@
import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/dateTool.dart';
import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_protocol/io_addFace.dart';
import '../../../../../blue/io_reply.dart';
import '../../../../../blue/io_tool/io_tool.dart';
import '../../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../../blue/sender_manage.dart';
import '../../../../../network/api_repository.dart';
import '../expireFingerprint/expireFingerprint_entity.dart';
import '../../../../../tools/storage.dart';
import 'expireFace_entity.dart';
import 'expireFace_state.dart';
class ExpireFaceLogic extends BaseGetXController {
ExpireFaceState state = ExpireFaceState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// ()
if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFaceBegin(reply);
}
});
}
// ---
Future<void> _replyAddFaceBegin(Reply reply) async {
final int status = reply.data[2];
switch (status) {
case 0x00:
//
cancelBlueConnetctToastTimer();
dismissEasyLoading();
deletFacesData();
break;
case 0x06:
//
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFaceCommand(
keyID:'1',
userID:(await Storage.getUid())!,
faceNo:int.parse(state.seletExpireFaceListItemEntity.faceNumber!),
useCountLimit:0xffff,
operate: 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, //
isRound:0, //
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: true
);
break;
default:
//
break;
}
}
//
Future<void> senderAddFace() async {
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
});
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFaceCommand(
keyID:'1',
userID:(await Storage.getUid())!,
faceNo:int.parse(state.seletExpireFaceListItemEntity.faceNumber!),
useCountLimit:0xffff,
operate: 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, //
isRound:0, //
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: true
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
});
}
//
Future<void> deletFacesData() async {
final LoginEntity entity = await ApiRepository.to.deleteFaceData(
faceId: state.seletExpireFaceListItemEntity.faceId!,
lockId: state.seletExpireFaceListItemEntity.lockId!,
);
if (entity.errorCode!.codeIsSuccessful) {
showToast('删除成功', something: (){
pageNo = 1;
expireFaceList();
});
}
}
//
Future<ExpireFingerprintEntity> expireFaceList() async {
ExpireFingerprintEntity entity = await ApiRepository.to.expireFaceList(pageNo.toString(), pageSize.toString());
Future<ExpireFaceEntity> expireFaceList() async {
final ExpireFaceEntity entity = await ApiRepository.to.expireFaceList(pageNo.toString(), pageSize.toString());
if(entity.errorCode!.codeIsSuccessful){
if (pageNo == 1) {
state.dataList.value = entity.data!.list!;
@ -26,9 +159,9 @@ class ExpireFaceLogic extends BaseGetXController {
}
//使
String getExpireDateStr(ExpireFingerprintItemEntity itemData) {
String getExpireDateStr(ExpireFaceListItemEntity itemData) {
String useDateStr = '';
if(itemData.fingerprintType == 4){
if(itemData.faceType == 4){
useDateStr = '循环';
}else{
useDateStr = '${DateTool().dateToYMDString(itemData.startDate.toString())}-${DateTool().dateToYMDString(itemData.endDate.toString())}';
@ -36,4 +169,25 @@ class ExpireFaceLogic extends BaseGetXController {
return useDateStr;
}
@override
Future<void> onReady() async {
super.onReady();
//
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_initReplySubscription();
}
}
@override
Future<void> onClose() async {
super.onClose();
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_replySubscription.cancel();
}
}
}

View File

@ -1,14 +1,18 @@
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.dart';
import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_state.dart';
import 'package:star_lock/tools/EasyRefreshTool.dart';
import '../../../../../appRouters.dart';
import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/appRouteObserver.dart';
import '../../../../../tools/noData.dart';
import '../../../../../tools/showTipView.dart';
import '../expireFingerprint/expireFingerprint_entity.dart';
import 'expireFace_entity.dart';
import 'expireFace_logic.dart';
class ExpireFacePage extends StatefulWidget {
@ -18,13 +22,15 @@ class ExpireFacePage extends StatefulWidget {
State<ExpireFacePage> createState() => _ExpireFacePageState();
}
class _ExpireFacePageState extends State<ExpireFacePage> {
final logic = Get.put(ExpireFaceLogic());
final state = Get.find<ExpireFaceLogic>().state;
class _ExpireFacePageState extends State<ExpireFacePage> with RouteAware {
final ExpireFaceLogic logic = Get.put(ExpireFaceLogic());
final ExpireFaceState state = Get.find<ExpireFaceLogic>().state;
Future<void> getHttpData() async {
logic.expireFaceList().then((ExpireFingerprintEntity value){
if(mounted) setState(() {});
logic.expireFaceList().then((ExpireFaceEntity value){
if(mounted) {
setState(() {});
}
});
}
@ -45,7 +51,7 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
onLoad: (){
getHttpData();
},
child: Obx(() => _buildMainUI())
child: Obx(_buildMainUI)
);
}
@ -55,19 +61,19 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
: SlidableAutoCloseBehavior(
child: ListView.separated(
itemCount: state.dataList.length,
itemBuilder: (c, index) {
ExpireFingerprintItemEntity indexEntity = state.dataList[index];
itemBuilder: (BuildContext c, int index) {
final ExpireFaceListItemEntity indexEntity = state.dataList[index];
return Slidable(
key:ValueKey(indexEntity.uid),
endActionPane: ActionPane(
extentRatio: 0.2,
motion: const ScrollMotion(),
children: [
children: <Widget>[
SlidableAction(
onPressed: (BuildContext context){
ShowTipView().showIosTipWithContentDialog("确定删除卡吗?", (){
// state.deletExpireFingerprintItemEntity = indexEntity;
// logic.senderAddFingerprint();
ShowTipView().showIosTipWithContentDialog('确定删除人脸吗?', (){
state.seletExpireFaceListItemEntity = indexEntity;
logic.senderAddFace();
});
},
backgroundColor: Colors.red,
@ -90,47 +96,33 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
);
}
Widget _electronicKeyItem(ExpireFingerprintItemEntity itemData) {
Widget _electronicKeyItem(ExpireFaceListItemEntity itemData) {
return GestureDetector(
onTap: () async {
// if(itemData.cardType! == 4){
// //
// var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: {
// "pushType": 0,
// "expireLockItem": itemData,
// });
// if(data != null) {
// // setState(() {
// // state.starDate.value = data["starDate"];
// // state.endDate.value = data["endDate"];
// // state.starTime.value = data["starTime"];
// // state.endTime.value = data["endTime"];
// // state.weekDay.value = data["validityValue"];
// // });
// logic.pageNo = 1;
// getHttpData();
// }
// }else{
// var data = await Get.toNamed(Routers.electronicKeyDetailChangeDate, arguments: {
// "pushType": 0,
// "expireLockItem": itemData,
// });
// if(data != null) {
// setState(() {
// // state.starDate.value = data["beginTimeTimestamp"].toString();
// // state.endDate.value = data["endTimeTimestamp"].toString();
// // state.keyType.value = 2;
// logic.pageNo = 1;
// getHttpData();
// });
// }
// }
var data = await Get.toNamed(Routers.expireKeyChangeDatePage, arguments: {
'pushType': 3,
'lockName': itemData.lockInfo!.btDeviceName,
'startDate': itemData.startDate,
'endDate': itemData.endDate,
'lockId': itemData.lockId,
'keyID': itemData.faceId,
'keyNumber': int.parse(itemData.faceNumber!),
'keyName': itemData.nickname,
'isAdmin': itemData.faceRight,
'isForce': itemData.isCoerced,
});
if(data != null) {
setState(() {
logic.pageNo = 1;
getHttpData();
});
}
},
child: Container(
height: 90.h,
color: Colors.white,
child: Row(
children: [
children: <Widget>[
SizedBox(
width: 30.w,
),
@ -145,10 +137,10 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
itemData.nickname ?? '',
style: TextStyle(
@ -168,7 +160,7 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
SizedBox(height: 10.h),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
logic.getExpireDateStr(itemData),
style: TextStyle(
@ -192,21 +184,7 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
);
}
Widget getStatus(ExpireFingerprintItemEntity itemData) {
// if (itemData.keyboardPwdStatus! == 1) {
// return Container(
// padding: EdgeInsets.only(left: 5.w, right: 5.w),
// decoration: BoxDecoration(
// color: Colors.red,
// borderRadius: BorderRadius.circular(2.0),
// ),
// child: Text(
// '未生效',
// style: TextStyle(
// color: Colors.white, fontSize: 13.sp),
// ),
// );
// } else {
Widget getStatus(ExpireFaceListItemEntity itemData) {
if (itemData.expireDate! > 0) {
return Container(
padding: EdgeInsets.only(left: 5.w, right: 5.w),
@ -234,7 +212,58 @@ class _ExpireFacePageState extends State<ExpireFacePage> {
),
);
}
// }
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override
void dispose() {
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();
}
///
@override
void didPush() {
super.didPush();
state.ifCurrentScreen.value = true;
}
///
@override
void didPop() {
super.didPop();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
state.sureBtnState.value = 0;
}
///
@override
void didPopNext() {
super.didPopNext();
state.ifCurrentScreen.value = true;
}
///
@override
void didPushNext() {
super.didPushNext();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
state.sureBtnState.value = 0;
}
}

View File

@ -1,13 +1,13 @@
import 'package:get/get.dart';
import '../expireFingerprint/expireFingerprint_entity.dart';
import 'expireFace_entity.dart';
class ExpireFaceState{
final dataList = <ExpireFingerprintItemEntity>[].obs;
final RxList<ExpireFaceListItemEntity> dataList = <ExpireFaceListItemEntity>[].obs;
var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0() 1()
ExpireFingerprintItemEntity deletExpireFingerprintItemEntity = ExpireFingerprintItemEntity();
RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs;// 0() 1()
ExpireFaceListItemEntity seletExpireFaceListItemEntity = ExpireFaceListItemEntity();
}

View File

@ -1,9 +1,5 @@
class ExpireFingerprintEntity {
int? errorCode;
String? description;
String? errorMsg;
ExpireFingerprintListEntity? data;
ExpireFingerprintEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
@ -14,6 +10,10 @@ class ExpireFingerprintEntity {
errorMsg = json['errorMsg'];
data = json['data'] != null ? ExpireFingerprintListEntity.fromJson(json['data']) : null;
}
int? errorCode;
String? description;
String? errorMsg;
ExpireFingerprintListEntity? data;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -28,11 +28,6 @@ class ExpireFingerprintEntity {
}
class ExpireFingerprintListEntity {
List<ExpireFingerprintItemEntity>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
ExpireFingerprintListEntity({this.list, this.pageNo, this.pageSize, this.pages, this.total});
@ -48,6 +43,11 @@ class ExpireFingerprintListEntity {
pages = json['pages'];
total = json['total'];
}
List<ExpireFingerprintItemEntity>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -63,29 +63,6 @@ class ExpireFingerprintListEntity {
}
class ExpireFingerprintItemEntity {
String? clientId;
int? lockOwnerId;
int? lockId;
int? fingerprintStatus;
String? fingerprintNumber;
int? fingerprintType;
int? startDate;
int? endDate;
List? weekDay;
int? addType;
int? fingerRight;
int? isCoerced;
int? fingerprintUserNo;
int? businessId;
String? createdAt;
String? updatedAt;
ApiUser? apiUser;
LockInfo? lockInfo;
int? fingerprintId;
int? uid;
String? nickname;
String? lockAlias;
int? expireDate;
ExpireFingerprintItemEntity(
{this.clientId,
@ -146,6 +123,29 @@ class ExpireFingerprintItemEntity {
lockAlias = json['lockAlias'];
expireDate = json['expireDate'];
}
String? clientId;
int? lockOwnerId;
int? lockId;
int? fingerprintStatus;
String? fingerprintNumber;
int? fingerprintType;
int? startDate;
int? endDate;
List? weekDay;
int? addType;
int? fingerRight;
int? isCoerced;
int? fingerprintUserNo;
int? businessId;
String? createdAt;
String? updatedAt;
ApiUser? apiUser;
LockInfo? lockInfo;
int? fingerprintId;
int? uid;
String? nickname;
String? lockAlias;
int? expireDate;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -183,8 +183,6 @@ class ExpireFingerprintItemEntity {
}
class ApiUser {
int? id;
String? accountName;
ApiUser({this.id, this.accountName});
@ -192,6 +190,8 @@ class ApiUser {
id = json['id'];
accountName = json['account_name'];
}
int? id;
String? accountName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -202,13 +202,13 @@ class ApiUser {
}
class LockInfo {
String? btDeviceName;
LockInfo({this.btDeviceName});
LockInfo.fromJson(Map<String, dynamic> json) {
btDeviceName = json['btDeviceName'];
}
String? btDeviceName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};

View File

@ -3,7 +3,6 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:star_lock/blue/io_tool/io_tool.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/dateTool.dart';
@ -53,9 +52,6 @@ class ExpireFingerprintLogic extends BaseGetXController {
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
final List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
@ -69,14 +65,15 @@ class ExpireFingerprintLogic extends BaseGetXController {
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:"0",
endTime:"0",
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isAdmin: 0,
operate: 0,
isBeforeAddUser: true
);
break;
default:
@ -98,9 +95,6 @@ class ExpireFingerprintLogic extends BaseGetXController {
});
BlueManage().blueSendData(state.deletExpireFingerprintItemEntity.lockInfo!.btDeviceName!, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
@ -120,28 +114,16 @@ class ExpireFingerprintLogic extends BaseGetXController {
weekRound:0, //
startDate: 0x11223344,
endDate: 0x11223344,
startTime:"0",
endTime:"0",
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isAdmin: 0,
operate: 0,
isBeforeAddUser: true
);
// IoSenderManage.senderAddFingerprintCommand(
// keyID:state.deletExpireFingerprintItemEntity.fingerprintId.toString(),
// userID:userID,
// fingerNo:int.parse(state.deletExpireFingerprintItemEntity.fingerprintNumber!),
// useCountLimit:0,
// startTime:state.deletExpireFingerprintItemEntity.startDate!~/1000,
// endTime:state.deletExpireFingerprintItemEntity.endDate!~/1000,
// needAuthor:1,
// signKey:signKeyDataList,
// privateKey:getPrivateKeyList,
// token: getTokenList,
// );
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
@ -154,15 +136,15 @@ class ExpireFingerprintLogic extends BaseGetXController {
}
//
void deletFingerprintsData() async{
Future<void> deletFingerprintsData() async{
final LoginEntity entity = await ApiRepository.to.deletFingerprintsData(
fingerprintId: state.deletExpireFingerprintItemEntity.fingerprintId.toString(),
lockId: state.deletExpireFingerprintItemEntity.lockId.toString(),
type: "0",
deleteType:"1"
type: '0',
deleteType:'1'
);
if(entity.errorCode!.codeIsSuccessful){
showToast("删除成功",something: (){
showToast('删除成功',something: (){
BlueManage().disconnect();
pageNo = 1;
expirFingerprintListRequest();
@ -201,22 +183,13 @@ class ExpireFingerprintLogic extends BaseGetXController {
@override
void onReady() {
// TODO: implement onReady
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
_replySubscription.cancel();

View File

@ -2,9 +2,11 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.dart';
import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireFingerprint/expireFingerprint_state.dart';
import 'package:star_lock/tools/noData.dart';
import 'package:star_lock/tools/showTipView.dart';
import '../../../../../appRouters.dart';
import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/EasyRefreshTool.dart';
import 'expireFingerprint_entity.dart';
@ -18,12 +20,14 @@ class ExpireFingerprintPage extends StatefulWidget {
}
class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
final logic = Get.put(ExpireFingerprintLogic());
final state = Get.find<ExpireFingerprintLogic>().state;
final ExpireFingerprintLogic logic = Get.put(ExpireFingerprintLogic());
final ExpireFingerprintState state = Get.find<ExpireFingerprintLogic>().state;
Future<void> getHttpData() async {
logic.expirFingerprintListRequest().then((ExpireFingerprintEntity value) {
if (mounted) setState(() {});
if (mounted) {
setState(() {});
}
});
}
@ -44,7 +48,7 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
onLoad: () {
getHttpData();
},
child: Obx(() => _buildMainUI()));
child: Obx(_buildMainUI));
}
Widget _buildMainUI() {
@ -58,18 +62,17 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
: SlidableAutoCloseBehavior(
child: ListView.separated(
itemCount: state.dataList.length,
itemBuilder: (c, index) {
ExpireFingerprintItemEntity indexEntity = state.dataList[index];
itemBuilder: (BuildContext c, int index) {
final ExpireFingerprintItemEntity indexEntity = state.dataList[index];
return Slidable(
key: ValueKey(indexEntity.uid),
endActionPane: ActionPane(
extentRatio: 0.2,
motion: const ScrollMotion(),
children: [
children: <Widget>[
SlidableAction(
onPressed: (BuildContext context) {
ShowTipView().showIosTipWithContentDialog("确定删除指纹吗?",
() {
ShowTipView().showIosTipWithContentDialog('确定删除指纹吗?', () {
state.deletExpireFingerprintItemEntity =
indexEntity;
logic.senderAddFingerprint();
@ -98,44 +101,30 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
Widget _electronicKeyItem(ExpireFingerprintItemEntity itemData) {
return GestureDetector(
onTap: () async {
// if(itemData.cardType! == 4){
// //
// var data = await Get.toNamed(Routers.electronicKeyPeriodValidityPage, arguments: {
// "pushType": 0,
// "expireLockItem": itemData,
// });
// if(data != null) {
// // setState(() {
// // state.starDate.value = data["starDate"];
// // state.endDate.value = data["endDate"];
// // state.starTime.value = data["starTime"];
// // state.endTime.value = data["endTime"];
// // state.weekDay.value = data["validityValue"];
// // });
// logic.pageNo = 1;
// getHttpData();
// }
// }else{
// var data = await Get.toNamed(Routers.electronicKeyDetailChangeDate, arguments: {
// "pushType": 0,
// "expireLockItem": itemData,
// });
// if(data != null) {
// setState(() {
// // state.starDate.value = data["beginTimeTimestamp"].toString();
// // state.endDate.value = data["endTimeTimestamp"].toString();
// // state.keyType.value = 2;
// logic.pageNo = 1;
// getHttpData();
// });
// }
// }
var data = await Get.toNamed(Routers.expireKeyChangeDatePage, arguments: {
'pushType': 1,
'lockName': itemData.lockInfo!.btDeviceName,
'startDate': itemData.startDate,
'endDate': itemData.endDate,
'lockId': itemData.lockId,
'keyID': itemData.fingerprintId,
'keyNumber': int.parse(itemData.fingerprintNumber!),
'keyName': itemData.nickname,
'isAdmin': itemData.fingerRight,
'isForce': itemData.isCoerced,
});
if(data != null) {
setState(() {
logic.pageNo = 1;
getHttpData();
});
}
},
child: Container(
height: 90.h,
color: Colors.white,
child: Row(
children: [
children: <Widget>[
SizedBox(
width: 30.w,
),
@ -150,10 +139,10 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
itemData.nickname ?? '',
style: TextStyle(
@ -173,7 +162,7 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
SizedBox(height: 10.h),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
logic.getExpireDateStr(itemData),
style: TextStyle(
@ -198,20 +187,6 @@ class _ExpireFingerprintPageState extends State<ExpireFingerprintPage> {
}
Widget getStatus(ExpireFingerprintItemEntity itemData) {
// if (itemData.keyboardPwdStatus! == 1) {
// return Container(
// padding: EdgeInsets.only(left: 5.w, right: 5.w),
// decoration: BoxDecoration(
// color: Colors.red,
// borderRadius: BorderRadius.circular(2.0),
// ),
// child: Text(
// '未生效',
// style: TextStyle(
// color: Colors.white, fontSize: 13.sp),
// ),
// );
// } else {
if (itemData.expireDate! > 0) {
return Container(
padding: EdgeInsets.only(left: 5.w, right: 5.w),

View File

@ -4,9 +4,9 @@ import 'package:get/get.dart';
import 'expireFingerprint_entity.dart';
class ExpireFingerprintState{
final dataList = <ExpireFingerprintItemEntity>[].obs;
final RxList<ExpireFingerprintItemEntity> dataList = <ExpireFingerprintItemEntity>[].obs;
var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0() 1()
RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs;// 0() 1()
ExpireFingerprintItemEntity deletExpireFingerprintItemEntity = ExpireFingerprintItemEntity();
}

View File

@ -0,0 +1,459 @@
import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_protocol/io_addFace.dart';
import '../../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
import '../../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart';
import '../../../../../blue/io_reply.dart';
import '../../../../../blue/io_tool/io_tool.dart';
import '../../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../../blue/sender_manage.dart';
import '../../../../../login/login/entity/LoginEntity.dart';
import '../../../../../network/api_repository.dart';
import '../../../../../tools/storage.dart';
import 'expireKeyChangeDate_state.dart';
class ExpireKeyChangeDateLogic extends BaseGetXController {
ExpireKeyChangeDateState state = ExpireKeyChangeDateState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// ()
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddICCardBegin(reply);
}
// ()
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply);
}
// ()
if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFaceBegin(reply);
}
});
}
//
Future<void> _replyAddFaceBegin(Reply reply) async {
final int status = reply.data[2];
switch (status) {
case 0x00:
//
state.sureBtnState.value = 0;
cancelBlueConnetctToastTimer();
dismissEasyLoading();
editFaceData();
break;
case 0x06:
//
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFaceCommand(
keyID:state.keyID.toString(),
userID:await Storage.getUid(),
faceNo:state.keyNumber,
useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.isAdmin,
isForce:state.isForce, //
isRound:0, //
weekRound:0, //
startDate: state.beginTimeTimestamp.value~/1000,
endDate: state.endTimeTimestamp.value~/1000,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: true
);
break;
default:
//
break;
}
}
// /
Future<void> senderAddFace() async {
if (state.sureBtnState.value == 1) {
return;
}
state.sureBtnState.value = 1;
showEasyLoading();
showBlueConnetctToastTimer(action: () {
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.senderAddFaceCommand(
keyID:state.keyID.toString(),
userID:await Storage.getUid(),
faceNo:state.keyNumber,
useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.isAdmin,
isForce:state.isForce, //
isRound:0, //
weekRound:0, //
startDate: state.beginTimeTimestamp.value~/1000,
endDate: state.endTimeTimestamp.value~/1000,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: true
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
}
});
}
// ()
Future<void> _replyAddICCardBegin(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
cancelBlueConnetctToastTimer();
dismissEasyLoading();
editICCardData();
break;
case 0x06:
//
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:state.keyID.toString(),
userID:await Storage.getUid(),
cardNo:state.keyNumber,
useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.isAdmin,
isForce:state.isForce, //
isRound:0, //
weekRound:0, //
startDate: state.beginTimeTimestamp.value~/1000,
endDate: state.endTimeTimestamp.value~/1000,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: true
);
break;
default:
//
break;
}
}
//
Future<void> _replyAddFingerprintBegin(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
state.sureBtnState.value = 0;
cancelBlueConnetctToastTimer();
dismissEasyLoading();
editFingerprintsData();
break;
case 0x06:
//
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.keyID.toString(),
userID:await Storage.getUid(),
fingerNo:state.keyNumber,
useCountLimit:0xffff,
operate:1, // 0: 1 2: 3
isAdmin:state.isAdmin,
isForce:state.isForce, //
isRound:0, //
weekRound:0, //
startDate: state.beginTimeTimestamp.value~/1000,
endDate: state.endTimeTimestamp.value~/1000,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: token,
isBeforeAddUser: true
);
break;
default:
//
break;
}
}
//
Future<void> senderAddFingerprint() async {
if(state.sureBtnState.value == 1){
return;
}
state.sureBtnState.value = 1;
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.keyID.toString(),
userID:await Storage.getUid(),
fingerNo:state.keyNumber,
useCountLimit:0xffff,
operate:1, // 0: 1 2: 3
isAdmin:state.isAdmin,
isForce:state.isForce, //
isRound:0, //
weekRound:0, //
startDate: state.beginTimeTimestamp.value~/1000,
endDate: state.endTimeTimestamp.value~/1000,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: true
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
//
Future<void> senderAddICCard() async {
if(state.sureBtnState.value == 1){
return;
}
state.sureBtnState.value = 1;
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
state.sureBtnState.value = 0;
});
BlueManage().blueSendData(state.lockName.isEmpty ? BlueManage().connectDeviceName : state.lockName, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected){
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:state.keyID.toString(),
userID:await Storage.getUid(),
cardNo:state.keyNumber,
useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.isAdmin,
isForce:state.isForce, //
isRound:0, //
weekRound:0, //
startDate: state.beginTimeTimestamp.value~/1000,
endDate: state.endTimeTimestamp.value~/1000,
startTime:'0',
endTime:'0',
needAuthor:1,
signKey:signKeyDataList,
privateKey:getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: true
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
//
Future<void> editFingerprintsData() async{
final LoginEntity entity = await ApiRepository.to.editFingerprintsData(
fingerprintId: state.keyID.toString(),
lockId: state.lockId.toString(),
weekDay: [],
startDate: state.beginTimeTimestamp.value.toString(),
endDate: state.endTimeTimestamp.value.toString(),
isCoerced: state.isForce.toString(),
fingerprintName: state.keyName,
changeType: '1',
startTime: 0,
endTime: 0,
fingerprintType: 2,
fingerRight: state.isAdmin,
);
if(entity.errorCode!.codeIsSuccessful){
showToast('修改成功'.tr, something: (){
Get.back(result: <String, String>{
'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(),
'endTimeTimestamp':state.endTimeTimestamp.value.toString(),
});
});
}
}
// iC卡
Future<void> editICCardData() async{
final LoginEntity entity = await ApiRepository.to.editICCardData(
cardId: state.keyID.toString(),
lockId: state.lockId.toString(),
weekDay: [],
startDate: state.beginTimeTimestamp.value.toString(),
endDate: state.endTimeTimestamp.value.toString(),
isCoerced: state.isForce.toString(),
cardName: state.keyName,
changeType: '1',
startTime: 0,
endTime: 0,
cardType: 2,// 2:
cardRight: state.isAdmin,
);
if(entity.errorCode!.codeIsSuccessful){
showToast('修改成功'.tr, something: (){
Get.back(result: <String, String>{
'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(),
'endTimeTimestamp':state.endTimeTimestamp.value.toString(),
});
});
}
}
//
Future<void> editFaceData() async {
final LoginEntity entity = await ApiRepository.to.updateFaceValidity(
lockId: state.lockId,
faceId: state.keyID,
startDate: state.beginTimeTimestamp.value,
endDate: state.endTimeTimestamp.value,
startTime: 0,
endTime: 0,
faceType: 2,
weekDay: [],
faceName: state.keyName,
addType: '1',
isCoerced: state.isForce,
faceRight: state.isAdmin
);
if (entity.errorCode!.codeIsSuccessful) {
showToast('修改成功', something: () {
Get.back(result: <String, String>{
'beginTimeTimestamp':state.beginTimeTimestamp.value.toString(),
'endTimeTimestamp':state.endTimeTimestamp.value.toString(),
});
});
}
}
@override
void onReady() {
super.onReady();
_initReplySubscription();
}
@override
void onInit() {
super.onInit();
}
@override
void onClose() {
super.onClose();
_replySubscription.cancel();
}
}

View File

@ -0,0 +1,179 @@
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/appRouteObserver.dart';
import '../../../../../tools/commonItem.dart';
import '../../../../../tools/dateTool.dart';
import '../../../../../tools/pickers/pickers.dart';
import '../../../../../tools/pickers/time_picker/model/date_mode.dart';
import '../../../../../tools/pickers/time_picker/model/pduration.dart';
import '../../../../../tools/titleAppBar.dart';
import '../../../../../translations/trans_lib.dart';
import 'expireKeyChangeDate_logic.dart';
import 'expireKeyChangeDate_state.dart';
class ExpireKeyChangeDatePage extends StatefulWidget {
const ExpireKeyChangeDatePage({Key? key}) : super(key: key);
@override
State<ExpireKeyChangeDatePage> createState() => _ExpireKeyChangeDatePageState();
}
class _ExpireKeyChangeDatePageState extends State<ExpireKeyChangeDatePage> with RouteAware {
final ExpireKeyChangeDateLogic logic = Get.put(ExpireKeyChangeDateLogic());
final ExpireKeyChangeDateState state = Get.find<ExpireKeyChangeDateLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle:
'${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.periodValidity!.tr}',
haveBack: true,
backgroundColor: AppColors.mainColor,
actionsList: <Widget>[
TextButton(
child: Text(
TranslationLoader.lanKeys!.sure!.tr,
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
onPressed: () {
state.beginTimeTimestamp.value =
DateTool().dateToTimestamp(state.beginTime.value, 1);
state.endTimeTimestamp.value =
DateTool().dateToTimestamp(state.endTime.value, 1);
if (state.beginTimeTimestamp.value >
state.endTimeTimestamp.value ||
state.beginTimeTimestamp.value ==
state.endTimeTimestamp.value) {
logic.showToast('失效时间需大于生效时间'.tr);
return;
}
if (state.endTimeTimestamp.value <
DateTime.now().millisecondsSinceEpoch) {
logic.showToast('生效时间需大于当前时间'.tr);
return;
}
switch (state.pushType.value) {
case 0:
//
logic.senderAddICCard();
break;
case 1:
//
logic.senderAddFingerprint();
break;
case 2:
//
break;
case 3:
//
logic.senderAddFace();
break;
default:
break;
}
},
),
],
),
body: buildMainUI(),
);
}
Widget buildMainUI() {
return Column(
children: <Widget>[
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
rightTitle: state.beginTime.value,
isHaveLine: true,
isHaveDirection: true,
action: () {
final PDuration selectDate =
PDuration.parse(DateTime.tryParse(state.beginTime.value));
Pickers.showDatePicker(context,
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) {
setState(() {
state.beginTime.value = DateTool().getYMDHNDateString(p, 1);
});
});
})),
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.failureTime!.tr,
rightTitle: state.endTime.value,
isHaveDirection: true,
action: () {
final PDuration selectDate =
PDuration.parse(DateTime.tryParse(state.endTime.value));
Pickers.showDatePicker(context,
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) {
setState(() {
state.endTime.value = DateTool().getYMDHNDateString(p, 1);
});
});
})),
],
);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override
void dispose() {
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();
}
///
@override
void didPush() {
super.didPush();
state.ifCurrentScreen.value = true;
}
///
@override
void didPop() {
super.didPop();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
state.sureBtnState.value = 0;
}
///
@override
void didPopNext() {
super.didPopNext();
state.ifCurrentScreen.value = true;
}
///
@override
void didPushNext() {
super.didPushNext();
logic.cancelBlueConnetctToastTimer();
if (EasyLoading.isShow) {
EasyLoading.dismiss(animation: true);
}
state.ifCurrentScreen.value = false;
state.sureBtnState.value = 0;
}
}

View File

@ -0,0 +1,68 @@
import 'package:get/get.dart';
import '../../../../../tools/dateTool.dart';
class ExpireKeyChangeDateState {
ExpireKeyChangeDateState() {
Map map = Get.arguments;
if(map['pushType'] != null){
pushType.value = map['pushType'];
}
if(map['lockName'] != null){
lockName = map['lockName'];
}
if(map['startDate'] != null){
final int startDate = map['startDate'];
final int endDate = map['endDate'];
if(startDate == 0){
beginTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString());
endTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString());
beginTimeTimestamp.value = DateTime.now().millisecondsSinceEpoch;
endTimeTimestamp.value = DateTime.now().millisecondsSinceEpoch;
}else{
beginTime.value = DateTool().dateToYMDHNString(startDate.toString());
endTime.value = DateTool().dateToYMDHNString(endDate.toString());
beginTimeTimestamp.value = startDate;
endTimeTimestamp.value = endDate;
}
}
if(map['lockId'] != null){
lockId = map['lockId'];
}
if(map['keyID'] != null){
keyID = map['keyID'];
}
if(map['keyNumber'] != null){
keyNumber = map['keyNumber'];
}
if(map['keyName'] != null){
keyName = map['keyName'];
}
if(map['isAdmin'] != null){
isAdmin = map['isAdmin'];
}
if(map['isForce'] != null){
isForce = map['isForce'];
}
}
RxString beginTime = ''.obs;//
RxString endTime = ''.obs;//
RxInt beginTimeTimestamp = 0.obs;//
RxInt endTimeTimestamp = 0.obs;//
String lockName = '';
int lockId = 0;
int keyID = 0;
String keyName = '';
int keyNumber = 0;
int isAdmin = 0;
int isForce = 0;
RxInt pushType = 0.obs;// 0 1 2 3
RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs;
}

View File

@ -20,11 +20,11 @@ class _ExpireLockManagePageState extends State<ExpireLockManagePage> {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: "即将到期",
barTitle: '即将到期',
haveBack: true,
backgroundColor: AppColors.mainColor),
body: const Column(
children: [
children: <Widget>[
ExpireLockManageTabbar(),
],
),

View File

@ -24,16 +24,15 @@ class _ExpireLockManageTabbarState extends State<ExpireLockManageTabbar> with Si
late TabController _tabController;
final List<ItemView> _itemTabs = <ItemView>[
ItemView(title: TranslationLoader.lanKeys!.electronicKey!.tr, selectType: "0"),
ItemView(title: TranslationLoader.lanKeys!.password!.tr, selectType: "1"),
ItemView(title: TranslationLoader.lanKeys!.card!.tr, selectType: "2"),
ItemView(title: TranslationLoader.lanKeys!.fingerprint!.tr, selectType: "3"),
// ItemView(title: TranslationLoader.lanKeys!.face!.tr, selectType: "4"),
ItemView(title: TranslationLoader.lanKeys!.electronicKey!.tr, selectType: '0'),
ItemView(title: TranslationLoader.lanKeys!.password!.tr, selectType: '1'),
ItemView(title: TranslationLoader.lanKeys!.card!.tr, selectType: '2'),
ItemView(title: TranslationLoader.lanKeys!.fingerprint!.tr, selectType: '3'),
ItemView(title: TranslationLoader.lanKeys!.face!.tr, selectType: '4'),
];
@override
void initState() {
// TODO: implement initState
super.initState();
_tabController = TabController(
@ -51,7 +50,7 @@ class _ExpireLockManageTabbarState extends State<ExpireLockManageTabbar> with Si
Widget build(BuildContext context) {
return Expanded(
child: Column(
children: [
children: <Widget>[
_tabBar(),
_pageWidget(),
],
@ -61,10 +60,10 @@ class _ExpireLockManageTabbarState extends State<ExpireLockManageTabbar> with Si
TabBar _tabBar() {
return TabBar(
controller: _tabController,
onTap: (index) {
onTap: (int index) {
FocusScope.of(context).requestFocus(FocusNode());
},
tabs: _itemTabs.map((ItemView item) => _tab(item)).toList(),
tabs: _itemTabs.map(_tab).toList(),
isScrollable: true,
indicatorColor: Colors.red,
unselectedLabelColor: Colors.black,
@ -96,12 +95,12 @@ class _ExpireLockManageTabbarState extends State<ExpireLockManageTabbar> with Si
return Expanded(
child: TabBarView(
controller: _tabController,
children:const [
children: const <Widget>[
ExpireLockListPage(),
ExpirePasswordPage(),
ExpireCardPage(),
ExpireFingerprintPage(),
// ExpireFacePage(),
ExpireFacePage(),
]
),
);

View File

@ -1,8 +1,5 @@
class ExpirePasswordEntity {
int? errorCode;
String? description;
String? errorMsg;
ExpirePasswordListData? data;
ExpirePasswordEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
@ -13,6 +10,10 @@ class ExpirePasswordEntity {
errorMsg = json['errorMsg'];
data = json['data'] != null ? ExpirePasswordListData.fromJson(json['data']) : null;
}
int? errorCode;
String? description;
String? errorMsg;
ExpirePasswordListData? data;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -27,11 +28,6 @@ class ExpirePasswordEntity {
}
class ExpirePasswordListData {
List<ExpirePasswordItemData>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
ExpirePasswordListData({this.list, this.pageNo, this.pageSize, this.pages, this.total});
@ -47,6 +43,11 @@ class ExpirePasswordListData {
pages = json['pages'];
total = json['total'];
}
List<ExpirePasswordItemData>? list;
int? pageNo;
int? pageSize;
int? pages;
int? total;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -62,31 +63,6 @@ class ExpirePasswordListData {
}
class ExpirePasswordItemData {
String? clientId;
int? lockOwnerId;
int? lockId;
int? keyboardPwdType;
int? keyboardPwdStatus;
int? startDate;
int? endDate;
String? keyboardPwd;
String? keyboardPwdHash;
int? addType;
int? pwdRight;
int? isCustom;
int? isCoerced;
int? hoursStart;
int? hoursEnd;
int? pwdUserNo;
int? businessId;
String? createdAt;
String? updatedAt;
ApiUser? apiUser;
int? pwdId;
int? uid;
String? nickname;
String? lockAlias;
int? expireDate;
ExpirePasswordItemData(
{this.clientId,
@ -138,12 +114,41 @@ class ExpirePasswordItemData {
apiUser = json['api_user'] != null
? ApiUser.fromJson(json['api_user'])
: null;
lock_info = json['lock_info'] != null
? ApiUserInfo.fromJson(json['lock_info'])
: null;
pwdId = json['pwdId'];
uid = json['uid'];
nickname = json['nickname'];
lockAlias = json['lockAlias'];
expireDate = json['expireDate'];
}
String? clientId;
int? lockOwnerId;
int? lockId;
int? keyboardPwdType;
int? keyboardPwdStatus;
int? startDate;
int? endDate;
String? keyboardPwd;
String? keyboardPwdHash;
int? addType;
int? pwdRight;
int? isCustom;
int? isCoerced;
int? hoursStart;
int? hoursEnd;
int? pwdUserNo;
int? businessId;
String? createdAt;
String? updatedAt;
ApiUser? apiUser;
ApiUserInfo? lock_info;
int? pwdId;
int? uid;
String? nickname;
String? lockAlias;
int? expireDate;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -169,6 +174,9 @@ class ExpirePasswordItemData {
if (apiUser != null) {
data['api_user'] = apiUser!.toJson();
}
if (lock_info != null) {
data['lock_info'] = lock_info!.toJson();
}
data['pwdId'] = pwdId;
data['uid'] = uid;
data['nickname'] = nickname;
@ -179,8 +187,6 @@ class ExpirePasswordItemData {
}
class ApiUser {
int? id;
String? accountName;
ApiUser({this.id, this.accountName});
@ -188,6 +194,8 @@ class ApiUser {
id = json['id'];
accountName = json['account_name'];
}
int? id;
String? accountName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
@ -196,3 +204,19 @@ class ApiUser {
return data;
}
}
class ApiUserInfo {
ApiUserInfo({this.btDeviceName});
ApiUserInfo.fromJson(Map<String, dynamic> json) {
btDeviceName = json['btDeviceName'];
}
String? btDeviceName;
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['account_name'] = btDeviceName;
return data;
}
}

View File

@ -1,19 +1,129 @@
import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/dateTool.dart';
import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_protocol/io_senderCustomPasswords.dart';
import '../../../../../blue/io_reply.dart';
import '../../../../../blue/io_tool/io_tool.dart';
import '../../../../../blue/io_tool/manager_event_bus.dart';
import '../../../../../blue/sender_manage.dart';
import '../../../../../main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart';
import '../../../../../network/api_repository.dart';
import '../../../../../tools/eventBusEventManage.dart';
import '../../../../../tools/storage.dart';
import 'expirePassword_entity.dart';
import 'expirePassword_state.dart';
class ExpirePasswordLogic extends BaseGetXController {
ExpirePasswordState state = ExpirePasswordState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
// ()
if((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) {
_replyAddPassword(reply);
}
});
}
// ()
Future<void> _replyAddPassword(Reply reply) async {
final int status = reply.data[2];
switch(status){
case 0x00:
//
cancelBlueConnetctToastTimer();
deletePwdRequest();
break;
case 0x06:
//
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<int> token = reply.data.sublist(5, 9);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderCustomPasswordsCommand(
keyID:'0',
userID:(await Storage.getUid())!,
pwdNo:state.seletIndexEntity.isCustom == 1 ? state.seletIndexEntity.pwdUserNo : 0,
pwd:state.seletIndexEntity.keyboardPwd,//state.deletPWD,
operate: state.seletIndexEntity.isCustom == 1 ? 2 : 3,
isAdmin: 0,
useCountLimit: 0xffff,
startTime:0x11223344,
endTime:0x11223344,
needAuthor: 1,
isBeforeAddUser: true,
signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: token);
break;
default:
//
cancelBlueConnetctToastTimer();
break;
}
}
//
Future<void> senderCustomPasswords() async {
showEasyLoading();
showBlueConnetctToastTimer(action: (){
dismissEasyLoading();
});
BlueManage().blueSendData(state.seletIndexEntity.lock_info!.btDeviceName!.isEmpty ? BlueManage().connectDeviceName : state.seletIndexEntity.lock_info!.btDeviceName!, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderCustomPasswordsCommand(
keyID:'0',
userID:(await Storage.getUid())!,
pwdNo:state.seletIndexEntity.isCustom == 1 ? state.seletIndexEntity.pwdUserNo : 0,
pwd:state.seletIndexEntity.keyboardPwd,//state.deletPWD,
operate: state.seletIndexEntity.isCustom == 1 ? 2 : 3,
isAdmin: 0,
useCountLimit: 0xffff,
startTime:0x11223344,
endTime:0x11223344,
needAuthor: 1,
isBeforeAddUser: true,
signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList,
);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading();
cancelBlueConnetctToastTimer();
state.sureBtnState.value = 0;
if(state.ifCurrentScreen.value == true){
showBlueConnetctToast();
}
}
});
}
//
Future<ExpirePasswordEntity> expirePasswordListRequest() async {
ExpirePasswordEntity entity = await ApiRepository.to
.expirePasswordList(pageNo.toString(), pageSize.toString());
final ExpirePasswordEntity entity = await ApiRepository.to.expirePasswordList(pageNo.toString(), pageSize.toString());
if (entity.errorCode!.codeIsSuccessful) {
if (pageNo == 1) {
state.dataList.value = entity.data!.list!;
@ -29,14 +139,13 @@ class ExpirePasswordLogic extends BaseGetXController {
}
// deleteType:1- 2-
Future<void> deletePwdRequest(
ExpirePasswordItemData expirePasswordItemData) async {
PasswordKeyEntity entity = await ApiRepository.to.deleteKeyboardPwd(
lockId: expirePasswordItemData.lockId.toString(),
keyboardPwdId: expirePasswordItemData.pwdId.toString(),
Future<void> deletePwdRequest() async {
final PasswordKeyEntity entity = await ApiRepository.to.deleteKeyboardPwd(
lockId: state.seletIndexEntity.lockId.toString(),
keyboardPwdId: state.seletIndexEntity.pwdId.toString(),
deleteType: 1);
if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功", something: () {
showToast('删除成功', something: () {
pageNo = 1;
expirePasswordListRequest();
eventBus.fire(LockUserManageListRefreshUI());
@ -56,4 +165,17 @@ class ExpirePasswordLogic extends BaseGetXController {
}
return useDateStr;
}
@override
void onReady() {
super.onReady();
_initReplySubscription();
}
@override
void onClose() {
super.onClose();
_replySubscription.cancel();
}
}

View File

@ -1,10 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_state.dart';
import 'package:star_lock/tools/EasyRefreshTool.dart';
import 'package:star_lock/tools/noData.dart';
@ -20,12 +21,14 @@ class ExpirePasswordPage extends StatefulWidget {
}
class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
final logic = Get.put(ExpirePasswordLogic());
final state = Get.find<ExpirePasswordLogic>().state;
final ExpirePasswordLogic logic = Get.put(ExpirePasswordLogic());
final ExpirePasswordState state = Get.find<ExpirePasswordLogic>().state;
Future<void> getHttpData() async {
logic.expirePasswordListRequest().then((ExpirePasswordEntity value) {
if (mounted) setState(() {});
if (mounted) {
setState(() {});
}
});
}
@ -46,7 +49,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
onLoad: () {
getHttpData();
},
child: Obx(() => _buildMainUI()));
child: Obx(_buildMainUI));
}
Widget _buildMainUI() {
@ -60,19 +63,19 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
: SlidableAutoCloseBehavior(
child: ListView.separated(
itemCount: state.dataList.length,
itemBuilder: (c, index) {
ExpirePasswordItemData indexEntity = state.dataList[index];
itemBuilder: (BuildContext c, int index) {
final ExpirePasswordItemData indexEntity = state.dataList[index];
state.seletIndexEntity = indexEntity;
return Slidable(
key: ValueKey(indexEntity.uid),
endActionPane: ActionPane(
extentRatio: 0.2,
motion: const ScrollMotion(),
children: [
children: <Widget>[
SlidableAction(
onPressed: (BuildContext context) {
ShowTipView().showIosTipWithContentDialog("确定删除该密码吗?",
() {
logic.deletePwdRequest(indexEntity);
ShowTipView().showIosTipWithContentDialog('确定删除该密码吗?', () {
logic.senderCustomPasswords();
});
},
backgroundColor: Colors.red,
@ -119,17 +122,19 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
// } else {
var backData = await Get.toNamed(
Routers.passwordKeyDetailChangeDatePage,
arguments: {
'itemData': itemData,
arguments: <String, ExpirePasswordItemData>{
'expirePasswordItemData': itemData,
});
if (backData != null) {
itemData.startDate =
int.parse(backData["beginTimeTimestamp"]) * 1000;
itemData.endDate = int.parse(backData["endTimeTimestamp"]) * 1000;
//
itemData.keyboardPwdType = 3;
setState(() {});
// itemData.startDate =
// int.parse(backData['beginTimeTimestamp']) * 1000;
// itemData.endDate = int.parse(backData['endTimeTimestamp']) * 1000;
// //
// itemData.keyboardPwdType = 3;
// setState(() {});
logic.pageNo = 1;
getHttpData();
}
// }
},
@ -137,7 +142,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
height: 90.h,
color: Colors.white,
child: Row(
children: [
children: <Widget>[
SizedBox(
width: 30.w,
),
@ -152,10 +157,10 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
itemData.nickname ?? '',
style: TextStyle(
@ -166,7 +171,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
width: 10.w,
)),
Text(
itemData.lockAlias ?? '',
itemData.lock_info!.btDeviceName ?? '',
style: TextStyle(
fontSize: 20.sp, color: AppColors.blackColor),
),
@ -175,7 +180,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
SizedBox(height: 10.h),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
children: <Widget>[
Text(
logic.getExpireDateStr(itemData),
style: TextStyle(
@ -202,7 +207,7 @@ class _ExpirePasswordPageState extends State<ExpirePasswordPage> {
Widget getStatus(ExpirePasswordItemData itemData) {
//keyboardPwdStatus 1 2
return Row(
children: [
children: <Widget>[
Visibility(
visible: itemData.expireDate! > 0 ? true : false,
child: Container(

View File

@ -3,5 +3,10 @@ import 'package:get/get.dart';
import 'expirePassword_entity.dart';
class ExpirePasswordState {
final dataList = <ExpirePasswordItemData>[].obs;
final RxList<ExpirePasswordItemData> dataList = <ExpirePasswordItemData>[].obs;
ExpirePasswordItemData seletIndexEntity = ExpirePasswordItemData();
RxBool ifCurrentScreen = true.obs; // ,
RxInt sureBtnState = 0.obs;// 0() 1()
}

View File

@ -156,7 +156,7 @@ abstract class Api {
final String expireCardListURL = '/keyUser/listExpireCard'; //
final String expireFingerprintListURL =
'/keyUser/listExpireFingerprint'; //
final String expireFaceListURL = '//keyUser/listExpireFace'; //
final String expireFaceListURL = '/keyUser/listExpireFace'; //
final String userSettingsInfoURL = '/user/userSettingsInfo'; //
final String setAlertModeURL = '/user/setAlertMode'; //
final String setTouchUnlockFlagURL = '/user/setTouchUnlockFlag'; //

View File

@ -2096,6 +2096,7 @@ class ApiProvider extends BaseProvider {
int uploadType,
int recordType,
List records,
bool isUnShowLoading,
) =>
post(
lockDataUploadUrl.toUrl,
@ -2104,7 +2105,9 @@ class ApiProvider extends BaseProvider {
'uploadType': uploadType,
'recordType': recordType,
'records': records
}));
}),
isUnShowLoading: isUnShowLoading
);
//
Future<Response<dynamic>> getNoticeTemplate(

View File

@ -64,6 +64,7 @@ import '../mine/addLock/saveLock/entity/SaveLockEntity.dart';
import '../mine/message/messageList/messageList_entity.dart';
import '../mine/minePersonInfo/minePersonInfoPage/minePersonGetUploadFileInfo_entity.dart';
import '../mine/mineSet/lockUserManage/expireLockList/expireCard/expireCard_entity.dart';
import '../mine/mineSet/lockUserManage/expireLockList/expireFace/expireFace_entity.dart';
import '../mine/mineSet/lockUserManage/expireLockList/expirePassword/expirePassword_entity.dart';
import '../mine/mineSet/transferGateway/selectGetewayList_entity.dart';
import '../mine/mineSet/transferSmartLock/recipientInformation/recipientInformation_entity.dart';
@ -692,10 +693,10 @@ class ApiRepository {
}
//
Future<ExpireFingerprintEntity> expireFaceList(
Future<ExpireFaceEntity> expireFaceList(
String pageNo, String pageSize) async {
final res = await apiProvider.expireFaceList(pageNo, pageSize);
return ExpireFingerprintEntity.fromJson(res.body);
return ExpireFaceEntity.fromJson(res.body);
}
//
@ -2132,9 +2133,10 @@ class ApiRepository {
required int uploadType,
required int recordType,
required List records,
required bool isUnShowLoading,
}) async {
final res = await apiProvider.lockDataUpload(
lockId, uploadType, recordType, records);
lockId, uploadType, recordType, records, isUnShowLoading);
return LoginEntity.fromJson(res.body);
}