Merge branch 'wsy_20240503'

# Conflicts:
#	star_lock/images/lan/lan_en.json
#	star_lock/lib/login/register/starLock_register_xhj_page.dart
#	star_lock/lib/tools/tf_loginInput.dart
This commit is contained in:
魏少阳 2024-05-04 18:14:23 +08:00
commit c7e72a1527
76 changed files with 668 additions and 361 deletions

View File

@ -795,4 +795,5 @@
"当前剩余数量":"Current surplus quantity", "当前剩余数量":"Current surplus quantity",
"购买":"Buy", "购买":"Buy",
"实名认证为付费功能,请购买后再使用":"Real-name authentication is a paid function, please use it after purchase" "实名认证为付费功能,请购买后再使用":"Real-name authentication is a paid function, please use it after purchase"
"密码不一致哦":"The passwords are inconsistent",
} }

View File

@ -707,6 +707,7 @@
"型号": "型号", "型号": "型号",
"密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。": "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。", "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。": "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。",
"密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。":"密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。", "密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。":"密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。",
"密码不一致哦":"密码不一致哦",
"相机": "相机", "相机": "相机",
"相册": "相册", "相册": "相册",

View File

@ -709,6 +709,7 @@
"型号": "型号", "型号": "型号",
"密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。": "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。", "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。": "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。",
"密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。":"密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。", "密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。":"密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。",
"密码不一致哦":"密码不一致哦",
"相机": "相机", "相机": "相机",
"相册": "相册", "相册": "相册",

View File

@ -23,6 +23,8 @@ class SenderAddFaceCommand extends SenderProtocol {
int? faceNo; int? faceNo;
int? useCountLimit; int? useCountLimit;
int? isForce; int? isForce;
int? operate;
int? isAdmin;
List<int>? token; List<int>? token;
int? isRound; int? isRound;
int? weekRound; int? weekRound;
@ -39,6 +41,8 @@ class SenderAddFaceCommand extends SenderProtocol {
this.userID, this.userID,
this.faceNo, this.faceNo,
this.useCountLimit, this.useCountLimit,
this.operate,
this.isAdmin,
this.isForce, this.isForce,
this.token, this.token,
this.isRound, this.isRound,
@ -73,12 +77,13 @@ class SenderAddFaceCommand extends SenderProtocol {
List<int> ebcData = []; List<int> ebcData = [];
// //
int type = commandType!.typeValue; // int type = commandType!.typeValue;
double typeDouble = type / 256; // double typeDouble = type / 256;
int type1 = typeDouble.toInt(); // int type1 = typeDouble.toInt();
int type2 = type % 256; // int type2 = type % 256;
data.add(type1); // data.add(type1);
data.add(type2); // data.add(type2);
data.addAll(intChangList(commandType!.typeValue));
// //
data.add(81); data.add(81);
@ -93,11 +98,20 @@ class SenderAddFaceCommand extends SenderProtocol {
subData.addAll(utf8.encode(userID!)); subData.addAll(utf8.encode(userID!));
subData = getFixedLengthList(subData, 20 - userIDLength); subData = getFixedLengthList(subData, 20 - userIDLength);
// fingerNo // faceNo
subData.add(faceNo!); subData.addAll(intChangList(faceNo!));
AppLog.log("faceNo:$faceNo intChangList(faceNo!):${intChangList(faceNo!)}");
// UseCountLimit // UseCountLimit
subData.add(useCountLimit!); subData.addAll(intChangList(useCountLimit!));
// Operate 0: 1 2: 3
subData.add(operate!);
AppLog.log("addFingerprint operate:$operate");
// isAdmin
subData.add(isAdmin!);
AppLog.log("addFingerprint isAdmin:$isAdmin");
// isForce // isForce
subData.add(isForce!); subData.add(isForce!);
@ -122,6 +136,7 @@ class SenderAddFaceCommand extends SenderProtocol {
subData.add((endDate! & 0xff0000) >> 16); subData.add((endDate! & 0xff0000) >> 16);
subData.add((endDate! & 0xff00) >> 8); subData.add((endDate! & 0xff00) >> 8);
subData.add((endDate! & 0xff)); subData.add((endDate! & 0xff));
AppLog.log("addFingerprint startDate:${DateTool().dateToYMDHNString(startDate.toString())} endDate:${DateTool().dateToYMDHNString(endDate.toString())}");
// startTime 4 // startTime 4
List<int> startTimeList = [0,0,0,0]; List<int> startTimeList = [0,0,0,0];

View File

@ -23,6 +23,8 @@ class SenderAddFingerprintWithTimeCycleCoercionCommand extends SenderProtocol {
int? fingerNo; int? fingerNo;
int? useCountLimit; int? useCountLimit;
int? isForce; int? isForce;
int? operate;
int? isAdmin;
List<int>? token; List<int>? token;
int? isRound; int? isRound;
int? weekRound; int? weekRound;
@ -40,6 +42,8 @@ class SenderAddFingerprintWithTimeCycleCoercionCommand extends SenderProtocol {
this.fingerNo, this.fingerNo,
this.useCountLimit, this.useCountLimit,
this.isForce, this.isForce,
this.operate,
this.isAdmin,
this.token, this.token,
this.isRound, this.isRound,
this.weekRound, this.weekRound,
@ -73,12 +77,13 @@ class SenderAddFingerprintWithTimeCycleCoercionCommand extends SenderProtocol {
List<int> ebcData = []; List<int> ebcData = [];
// //
int type = commandType!.typeValue; // int type = commandType!.typeValue;
double typeDouble = type / 256; // double typeDouble = type / 256;
int type1 = typeDouble.toInt(); // int type1 = typeDouble.toInt();
int type2 = type % 256; // int type2 = type % 256;
data.add(type1); // data.add(type1);
data.add(type2); // data.add(type2);
data.addAll(intChangList(commandType!.typeValue));
// //
data.add(36); data.add(36);
@ -94,10 +99,19 @@ class SenderAddFingerprintWithTimeCycleCoercionCommand extends SenderProtocol {
subData = getFixedLengthList(subData, 20 - userIDLength); subData = getFixedLengthList(subData, 20 - userIDLength);
// fingerNo // fingerNo
subData.add(fingerNo!); subData.addAll(intChangList(fingerNo!));
AppLog.log("fingerNo:$fingerNo intChangList(fingerNo!):${intChangList(fingerNo!)}");
// UseCountLimit // UseCountLimit
subData.add(useCountLimit!); subData.addAll(intChangList(useCountLimit!));
// Operate 0: 1 2: 3
subData.add(operate!);
AppLog.log("addFingerprint operate:$operate");
// isAdmin
subData.add(isAdmin!);
AppLog.log("addFingerprint isAdmin:$isAdmin");
// isForce // isForce
subData.add(isForce!); subData.add(isForce!);

View File

@ -23,6 +23,8 @@ class SenderAddICCardWithTimeCycleCoercionCommand extends SenderProtocol {
int? cardNo; int? cardNo;
int? useCountLimit; int? useCountLimit;
int? isForce; int? isForce;
int? operate;
int? isAdmin;
List<int>? token; List<int>? token;
int? isRound; int? isRound;
int? weekRound; int? weekRound;
@ -40,6 +42,8 @@ class SenderAddICCardWithTimeCycleCoercionCommand extends SenderProtocol {
this.cardNo, this.cardNo,
this.useCountLimit, this.useCountLimit,
this.isForce, this.isForce,
this.operate,
this.isAdmin,
this.token, this.token,
this.isRound, this.isRound,
this.weekRound, this.weekRound,
@ -73,12 +77,13 @@ class SenderAddICCardWithTimeCycleCoercionCommand extends SenderProtocol {
List<int> ebcData = []; List<int> ebcData = [];
// //
int type = commandType!.typeValue; // int type = commandType!.typeValue;
double typeDouble = type / 256; // double typeDouble = type / 256;
int type1 = typeDouble.toInt(); // int type1 = typeDouble.toInt();
int type2 = type % 256; // int type2 = type % 256;
data.add(type1); // data.add(type1);
data.add(type2); // data.add(type2);
data.addAll(intChangList(commandType!.typeValue));
// //
data.add(24); data.add(24);
@ -93,14 +98,23 @@ class SenderAddICCardWithTimeCycleCoercionCommand extends SenderProtocol {
subData.addAll(utf8.encode(userID!)); subData.addAll(utf8.encode(userID!));
subData = getFixedLengthList(subData, 20 - userIDLength); subData = getFixedLengthList(subData, 20 - userIDLength);
// fingerNo // cardNo
subData.add(cardNo!); subData.addAll(intChangList(cardNo!));
// UseCountLimit // UseCountLimit
subData.add(useCountLimit!); subData.addAll(intChangList(useCountLimit!));
// Operate 0: 1 2: 3
subData.add(operate!);
AppLog.log("addCard operate:$operate");
// isAdmin
subData.add(isAdmin!);
AppLog.log("addCard isAdmin:$isAdmin");
// isForce // isForce
subData.add(isForce!); subData.add(isForce!);
AppLog.log("addCard isForce:$isForce");
// token // token
subData.addAll(token!); subData.addAll(token!);

View File

@ -58,12 +58,13 @@ class ChangeAdministratorPasswordCommand extends SenderProtocol {
List<int> ebcData = []; List<int> ebcData = [];
// //
int type = commandType!.typeValue; // int type = commandType!.typeValue;
double typeDouble = type / 256; // double typeDouble = type / 256;
int type1 = typeDouble.toInt(); // int type1 = typeDouble.toInt();
int type2 = type % 256; // int type2 = type % 256;
data.add(type1); // data.add(type1);
data.add(type2); // data.add(type2);
data.addAll(intChangList(commandType!.typeValue));
// //
data.add(2); data.add(2);
@ -79,7 +80,8 @@ class ChangeAdministratorPasswordCommand extends SenderProtocol {
subData = getFixedLengthList(subData, 20 - userIDLength); subData = getFixedLengthList(subData, 20 - userIDLength);
// PwdNo // PwdNo
subData.add(1); subData.addAll(intChangList(pwdNo!));
AppLog.log("pwdNo:$pwdNo");
// pwd 20 // pwd 20
int pwdLength = utf8.encode(pwd!).length; int pwdLength = utf8.encode(pwd!).length;
@ -87,7 +89,7 @@ class ChangeAdministratorPasswordCommand extends SenderProtocol {
subData = getFixedLengthList(subData, 20 - pwdLength); subData = getFixedLengthList(subData, 20 - pwdLength);
// UseCountLimit // UseCountLimit
subData.add(0xff); subData.addAll(intChangList(useCountLimit!));
// token // token
subData.addAll(token!); subData.addAll(token!);

View File

@ -19,6 +19,8 @@ class SenderCustomPasswordsCommand extends SenderProtocol {
String? keyID; String? keyID;
String? userID; String? userID;
int? pwdNo; int? pwdNo;
int? operate;
int? isAdmin;
String? pwd; String? pwd;
int? useCountLimit; int? useCountLimit;
List<int>? token; List<int>? token;
@ -32,6 +34,8 @@ class SenderCustomPasswordsCommand extends SenderProtocol {
this.keyID, this.keyID,
this.userID, this.userID,
this.pwdNo, this.pwdNo,
this.operate,
this.isAdmin,
this.pwd, this.pwd,
this.useCountLimit, this.useCountLimit,
this.token, this.token,
@ -59,12 +63,13 @@ class SenderCustomPasswordsCommand extends SenderProtocol {
List<int> ebcData = []; List<int> ebcData = [];
// //
int type = commandType!.typeValue; // int type = commandType!.typeValue;
double typeDouble = type / 256; // double typeDouble = type / 256;
int type1 = typeDouble.toInt(); // int type1 = typeDouble.toInt();
int type2 = type % 256; // int type2 = type % 256;
data.add(type1); // data.add(type1);
data.add(type2); // data.add(type2);
data.addAll(intChangList(commandType!.typeValue));
// //
data.add(3); data.add(3);
@ -80,9 +85,15 @@ class SenderCustomPasswordsCommand extends SenderProtocol {
subData = getFixedLengthList(subData, 20 - userIDLength); subData = getFixedLengthList(subData, 20 - userIDLength);
// PwdNo // PwdNo
subData.add(pwdNo!); subData.addAll(intChangList(pwdNo!));
AppLog.log("pwdNo:$pwdNo"); AppLog.log("pwdNo:$pwdNo");
// Operate 0: 1 2: 3
subData.add(operate!);
// isAdmin
subData.add(isAdmin!);
// pwd 20 // pwd 20
int pwdLength = utf8.encode(pwd!).length; int pwdLength = utf8.encode(pwd!).length;
subData.addAll(utf8.encode(pwd!)); subData.addAll(utf8.encode(pwd!));
@ -90,7 +101,7 @@ class SenderCustomPasswordsCommand extends SenderProtocol {
AppLog.log("pwd:$pwd"); AppLog.log("pwd:$pwd");
// UseCountLimit // UseCountLimit
subData.add(useCountLimit!); subData.addAll(intChangList(useCountLimit!));
// token // token
subData.addAll(token!); subData.addAll(token!);

View File

@ -4,6 +4,21 @@ import 'dart:typed_data';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
int listChangInt(List<int> list){
int dataLen = (list[0] << 8) + list[1];
return dataLen;
}
List<int> intChangList(int count){
List<int> intList = [];
double typeDouble = count / 256;
int type1 = typeDouble.toInt();
int type2 = count % 256;
intList.add(type1);
intList.add(type2);
return intList;
}
List<String> changeIntListToStringList(List<int> list){ List<String> changeIntListToStringList(List<int> list){
List<String> strList = []; List<String> strList = [];
for(int i = 0; i<list.length; i++) for(int i = 0; i<list.length; i++)

View File

@ -280,13 +280,15 @@ class IoSenderManage {
{required String? keyID, {required String? keyID,
required String? userID, required String? userID,
required int? pwdNo, required int? pwdNo,
required int? operate,
required int? isAdmin,
required String? pwd, required String? pwd,
required int? useCountLimit, required int? useCountLimit,
required List<int>? token, required List<int>? token,
required int? startTime, required int? startTime,
required int? endTime, required int? endTime,
required int? needAuthor, required int? needAuthor,
required bool? isBeforeAddUser, required bool? isBeforeAddUser,
required List<int>? signKey, required List<int>? signKey,
required List<int>? privateKey, required List<int>? privateKey,
CommandSendCallBack? callBack}) { CommandSendCallBack? callBack}) {
@ -295,6 +297,8 @@ class IoSenderManage {
keyID: keyID, keyID: keyID,
userID: userID, userID: userID,
pwdNo: pwdNo, pwdNo: pwdNo,
operate: operate,
isAdmin: isAdmin,
pwd: pwd, pwd: pwd,
useCountLimit: useCountLimit, useCountLimit: useCountLimit,
token: token, token: token,
@ -377,6 +381,8 @@ class IoSenderManage {
required int? fingerNo, required int? fingerNo,
required int? useCountLimit, required int? useCountLimit,
required int? isForce, required int? isForce,
required int? isAdmin,
required int? operate,
required List<int>? token, required List<int>? token,
required int? isRound, required int? isRound,
required int? weekRound, required int? weekRound,
@ -395,6 +401,8 @@ class IoSenderManage {
fingerNo: fingerNo, fingerNo: fingerNo,
useCountLimit: useCountLimit, useCountLimit: useCountLimit,
isForce: isForce, isForce: isForce,
operate: operate,
isAdmin: isAdmin,
token: token, token: token,
isRound: isRound, isRound: isRound,
weekRound: weekRound, weekRound: weekRound,
@ -444,6 +452,8 @@ class IoSenderManage {
required String? userID, required String? userID,
required int? cardNo, required int? cardNo,
required int? useCountLimit, required int? useCountLimit,
required int? operate,
required int? isAdmin,
required int? isForce, required int? isForce,
required List<int>? token, required List<int>? token,
required int? isRound, required int? isRound,
@ -462,6 +472,8 @@ class IoSenderManage {
userID: userID, userID: userID,
cardNo: cardNo, cardNo: cardNo,
useCountLimit: useCountLimit, useCountLimit: useCountLimit,
operate: operate,
isAdmin: isAdmin,
isForce: isForce, isForce: isForce,
token: token, token: token,
isRound: isRound, isRound: isRound,
@ -484,6 +496,8 @@ class IoSenderManage {
required int? faceNo, required int? faceNo,
required int? useCountLimit, required int? useCountLimit,
required int? isForce, required int? isForce,
required int? operate,
required int? isAdmin,
required List<int>? token, required List<int>? token,
required int? isRound, required int? isRound,
required int? weekRound, required int? weekRound,
@ -502,6 +516,8 @@ class IoSenderManage {
faceNo: faceNo, faceNo: faceNo,
useCountLimit: useCountLimit, useCountLimit: useCountLimit,
isForce: isForce, isForce: isForce,
operate: operate,
isAdmin: isAdmin,
token: token, token: token,
isRound: isRound, isRound: isRound,
weekRound: weekRound, weekRound: weekRound,

View File

@ -113,6 +113,7 @@ class _StarLockForgetPasswordPageState
logic.checkNext(state.pwdController); logic.checkNext(state.pwdController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 30.w, bottom: 20.w, right: 5.w, left: 5.w), top: 30.w, bottom: 20.w, right: 5.w, left: 5.w),
@ -140,6 +141,7 @@ class _StarLockForgetPasswordPageState
logic.checkNext(state.sureController); logic.checkNext(state.sureController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 30.w, bottom: 20.w, right: 5.w, left: 5.w), top: 30.w, bottom: 20.w, right: 5.w, left: 5.w),

View File

@ -96,6 +96,7 @@ class _StarLockForgetPasswordPageState
logic.checkNext(state.pwdController); logic.checkNext(state.pwdController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only(top: 30.w, bottom: 20.w, left: 5.w), padding: EdgeInsets.only(top: 30.w, bottom: 20.w, left: 5.w),
), ),
@ -115,6 +116,7 @@ class _StarLockForgetPasswordPageState
logic.checkNext(state.sureController); logic.checkNext(state.sureController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only(top: 30.w, bottom: 20.w, left: 5.w), padding: EdgeInsets.only(top: 30.w, bottom: 20.w, left: 5.w),
), ),

View File

@ -116,6 +116,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
logic.checkNext(state.pwdController); logic.checkNext(state.pwdController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 30.w, bottom: 20.w, right: 5.w, left: 5.w), top: 30.w, bottom: 20.w, right: 5.w, left: 5.w),

View File

@ -105,6 +105,7 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
logic.checkNext(state.pwdController); logic.checkNext(state.pwdController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: 30.w, top: 30.w,

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import '../../network/api_repository.dart'; import '../../network/api_repository.dart';
import '../../tools/baseGetXController.dart'; import '../../tools/baseGetXController.dart';
@ -29,6 +30,11 @@ class StarLockRegisterLogic extends BaseGetXController {
} }
void register() async { void register() async {
AppLog.log("state.pwd.value:${state.pwd.value} state.surePwd.value:${state.surePwd.value}");
if(state.pwd.value != state.surePwd.value){
showToast("密码不一致哦".tr);
return;
}
var entity = await ApiRepository.to.register( var entity = await ApiRepository.to.register(
receiverType: state.isIphoneType.value == true ? 1 : 2, receiverType: state.isIphoneType.value == true ? 1 : 2,
countryCode: int.parse(state.countryCode.value), countryCode: int.parse(state.countryCode.value),

View File

@ -226,6 +226,7 @@ class _StarLockRegisterPageState extends State<StarLockRegisterPage> {
logic.checkNext(state.pwdController); logic.checkNext(state.pwdController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only(right: 5.w, left: 5.w), padding: EdgeInsets.only(right: 5.w, left: 5.w),
child: Image.asset( child: Image.asset(
@ -252,6 +253,7 @@ class _StarLockRegisterPageState extends State<StarLockRegisterPage> {
logic.checkNext(state.sureController); logic.checkNext(state.sureController);
}, },
isPwd: true, isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding( leftWidget: Padding(
padding: EdgeInsets.only(right: 10.w, left: 5.w), padding: EdgeInsets.only(right: 10.w, left: 5.w),
child: Image.asset( child: Image.asset(

View File

@ -25,7 +25,7 @@ class StarLockRegisterState {
bool get isEmail => RegexUtil.isEmail(phoneOrEmailStr.value); bool get isEmail => RegexUtil.isEmail(phoneOrEmailStr.value);
bool get isIphone => RegexUtil.isMobileSimple(phoneOrEmailStr.value); bool get isIphone => RegexUtil.isMobileSimple(phoneOrEmailStr.value);
bool get pwdIsOK => pwd.value.isNotEmpty && (pwd.value == surePwd.value); bool get pwdIsOK => pwd.value.isNotEmpty && surePwd.value.isNotEmpty;
bool get codeIsOK => verificationCode.value.isNotEmpty; bool get codeIsOK => verificationCode.value.isNotEmpty;
var canResend = false.obs; var canResend = false.obs;

View File

@ -193,17 +193,18 @@ class _StarLockRegisterPageState extends State<StarLockRegisterXHJPage> {
), ),
Obx(() => GestureDetector( Obx(() => GestureDetector(
onTap: onTap:
state.phoneOrEmailStrIsOK.value && state.canResend.value state.phoneOrEmailStrIsOK.value && state.canResend.value ? () async {
? () async {
// Navigator.pushNamed(context, Routers.safetyVerificationPage, arguments: {"countryCode":"+86", "account":state.phoneOrEmailStr.value}); // Navigator.pushNamed(context, Routers.safetyVerificationPage, arguments: {"countryCode":"+86", "account":state.phoneOrEmailStr.value});
var result = await Navigator.pushNamed( if(state.pwd.value != state.surePwd.value){
context, Routers.safetyVerificationPage, logic.showToast("密码不一致哦".tr);
return;
}
var result = await Get.toNamed(Routers.safetyVerificationPage,
arguments: { arguments: {
"countryCode": state.countryCode, "countryCode": state.countryCode,
"account": state.phoneOrEmailStr.value "account": state.phoneOrEmailStr.value
}); });
state.xWidth.value = state.xWidth.value = (result as Map<String, dynamic>)['xWidth'];
(result as Map<String, dynamic>)['xWidth'];
logic.sendValidationCode(); logic.sendValidationCode();
} }
: null, : null,

View File

@ -50,7 +50,10 @@ class AddICCardLogic extends BaseGetXController{
switch(status){ switch(status){
case 0x00: case 0x00:
// //
state.cardNumber.value = reply.data.last.toString(); var cardNumberList = reply.data.sublist(reply.data.length - 2);
var cardNumber = listChangInt(cardNumberList).toString();
// AppLog.log("添加卡号:$cardNumberList cardNumber:$cardNumber");
state.cardNumber.value = cardNumber.toString();
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
state.ifConnectScuess.value = true; state.ifConnectScuess.value = true;
break; break;
@ -68,13 +71,16 @@ class AddICCardLogic extends BaseGetXController{
var token = reply.data.sublist(5, 9); var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token); var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList); Storage.setStringList(saveBlueToken, saveStrList);
AppLog.log("添加卡token:$token");
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:state.isAdministrator.value == "2" ? 254 : 0, cardNo:0,
useCountLimit:0xff, useCountLimit:0xffff,
isForce:state.isCoerced.value == "1" ? 0 : 1, // operate:0, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == "2" ? 1 : 0,
isForce:state.isCoerced.value == "2" ? 1 : 0, //
isRound:state.selectType.value == "2" ? 1: 0, // isRound:state.selectType.value == "2" ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000, startDate: int.parse(state.startDate.value)~/1000,
@ -205,8 +211,10 @@ class AddICCardLogic extends BaseGetXController{
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:state.isAdministrator.value == "2" ? 254 : 0, cardNo:0,
useCountLimit:0xff, useCountLimit:0xffff,
operate:0, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == "2" ? 1 : 0,
isForce:state.isCoerced.value == "2" ? 1 : 0, // isForce:state.isCoerced.value == "2" ? 1 : 0, //
isRound:state.selectType.value == "2" ? 1: 0, // isRound:state.selectType.value == "2" ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //

View File

@ -66,7 +66,9 @@ class CardDetailLogic extends BaseGetXController{
keyID:state.keyId.value.toString(), keyID:state.keyId.value.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:int.parse(state.typeNumber.value), cardNo:int.parse(state.typeNumber.value),
useCountLimit:state.isDeletCard.value == true ? 0 : 0xff, useCountLimit:0xffff,
operate:state.isDeletCard.value ? 2 : 1, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressCard.value == true ? 1 : 0, // isForce:state.isStressCard.value == true ? 1 : 0, //
isRound:state.keyType.value == 4 ? 1: 0, // isRound:state.keyType.value == 4 ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -113,7 +115,9 @@ class CardDetailLogic extends BaseGetXController{
keyID:state.keyId.value.toString(), keyID:state.keyId.value.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:int.parse(state.typeNumber.value), cardNo:int.parse(state.typeNumber.value),
useCountLimit:state.isDeletCard.value == true ? 0 : 0xff, useCountLimit:0xffff,
operate:state.isDeletCard.value ? 2 : 1, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressCard.value == true ? 1 : 0, // isForce:state.isStressCard.value == true ? 1 : 0, //
isRound:state.keyType.value == 4 ? 1: 0, // isRound:state.keyType.value == 4 ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -151,6 +155,7 @@ class CardDetailLogic extends BaseGetXController{
startTime: int.parse(state.starTime.value), startTime: int.parse(state.starTime.value),
endTime: int.parse(state.endTime.value), endTime: int.parse(state.endTime.value),
cardType:state.keyType.value, cardType:state.keyType.value,
cardRight: state.isAdministrator.value ? 1 : 0,
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){ showToast("修改成功".tr, something: (){

View File

@ -160,8 +160,15 @@ class _CardDetailPageState extends State<CardDetailPage> with RouteAware {
leftTitel: TranslationLoader.lanKeys!.stressCard!.tr, leftTitel: TranslationLoader.lanKeys!.stressCard!.tr,
rightTitle: "", rightTitle: "",
isTipsImg: false, isTipsImg: false,
isHaveLine: true,
isHaveRightWidget: true, isHaveRightWidget: true,
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isStressFingerprint()))), rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isStressFingerprint()))),
Obx(() => CommonItem(
leftTitel: "是否是管理员".tr,
rightTitle: "",
isTipsImg: false,
isHaveRightWidget: true,
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))),
Container(height: 10.h), Container(height: 10.h),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
@ -210,6 +217,21 @@ class _CardDetailPageState extends State<CardDetailPage> with RouteAware {
); );
} }
//
CupertinoSwitch _isAdmin() {
return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: state.isAdministrator.value,
onChanged: (value) {
state.isAdministrator.value = value;
state.isDeletCard.value = false;
logic.senderAddICCard();
},
);
}
@override @override
void didChangeDependencies() { void didChangeDependencies() {
// TODO: implement didChangeDependencies // TODO: implement didChangeDependencies

View File

@ -14,6 +14,7 @@ class CardDetailState{
var sureBtnState = 0.obs;// 0() 1() var sureBtnState = 0.obs;// 0() 1()
var isDeletCard = true.obs;// var isDeletCard = true.obs;//
var isStressCard = false.obs;// var isStressCard = false.obs;//
var isAdministrator = false.obs;//
final typeNumber = "".obs;// final typeNumber = "".obs;//
final typeName = "".obs;// final typeName = "".obs;//
@ -44,6 +45,7 @@ class CardDetailState{
addTime.value = fingerprintItemData.value.createDate!; addTime.value = fingerprintItemData.value.createDate!;
isStressCard.value = fingerprintItemData.value.isCoerced! == 2 ? true : false; isStressCard.value = fingerprintItemData.value.isCoerced! == 2 ? true : false;
weekDay.value = fingerprintItemData.value.weekDay!; weekDay.value = fingerprintItemData.value.weekDay!;
isAdministrator.value = fingerprintItemData.value.cardRight! == 1 ? true : false;
} }
} }
} }

View File

@ -29,7 +29,7 @@ class CardListLogic extends BaseGetXController {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) { _replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
// () // ()
if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.isDeletCardData == true)) { if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddICCardBegin(reply); _replyAddICCardBegin(reply);
} }
@ -50,7 +50,6 @@ class CardListLogic extends BaseGetXController {
switch(status){ switch(status){
case 0x00: case 0x00:
// //
state.isDeletCardData = false;
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
deletICCardData(); deletICCardData();
break; break;
@ -71,9 +70,11 @@ class CardListLogic extends BaseGetXController {
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
cardNo:state.deletCardNo, cardNo:state.deletCardNo,
useCountLimit:0, useCountLimit:0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //
@ -244,9 +245,11 @@ class CardListLogic extends BaseGetXController {
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
cardNo:state.deletCardNo, cardNo:state.deletCardNo,
useCountLimit:0, useCountLimit:0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //
@ -321,13 +324,11 @@ class CardListLogic extends BaseGetXController {
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
if(state.isDeletAll == false){ if(state.isDeletAll == false){
showToast("删除成功".tr, something: (){ showToast("删除成功".tr, something: (){
state.isDeletCardData = false;
pageNo = 1; pageNo = 1;
getICCardListData(); getICCardListData();
}); });
}else{ }else{
showToast("重置成功".tr, something: (){ showToast("重置成功".tr, something: (){
state.isDeletCardData = false;
pageNo = 1; pageNo = 1;
getICCardListData(); getICCardListData();
}); });

View File

@ -66,11 +66,9 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
ShowTipView().showIosTipWithContentDialog("重置后,该锁的卡都将被删除哦,确认要重置吗?".tr, () async { ShowTipView().showIosTipWithContentDialog("重置后,该锁的卡都将被删除哦,确认要重置吗?".tr, () async {
state.isDeletCardData = true;
state.isDeletAll = true; state.isDeletAll = true;
state.deletKeyID = "1"; state.deletKeyID = "0";
state.deletUserID = "DeleteAll!@#"; state.deletCardNo = 0;
state.deletCardNo = 255;
logic.senderAddICCard(); logic.senderAddICCard();
}); });
// showDeletAlertDialog(context); // showDeletAlertDialog(context);
@ -138,12 +136,9 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
SlidableAction( SlidableAction(
onPressed: (BuildContext context){ onPressed: (BuildContext context){
ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async { ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async {
state.isDeletCardData = true;
state.isDeletAll = false; state.isDeletAll = false;
state.deletUserID = (await Storage.getUid())!;
state.deletKeyID = fingerprintItemData.cardId.toString(); state.deletKeyID = fingerprintItemData.cardId.toString();
state.deletCardNo = int.parse(fingerprintItemData.cardNumber!); state.deletCardNo = int.parse(fingerprintItemData.cardNumber!);
state.fingerprintDeletItem = fingerprintItemData;
logic.senderAddICCard(); logic.senderAddICCard();
}); });
}, },

View File

@ -7,14 +7,12 @@ class CardListState {
final lockId = 0.obs; final lockId = 0.obs;
// //
var isDeletCardData = false;
var isDeletAll = false; var isDeletAll = false;
var deletKeyID = ""; var deletKeyID = "0";
var deletUserID = "DeleteAll!@#";
var deletCardNo = 0; var deletCardNo = 0;
final fingerprintItemListData = <FingerprintItemData>[].obs; final fingerprintItemListData = <FingerprintItemData>[].obs;
var fingerprintDeletItem = FingerprintItemData(); // var fingerprintDeletItem = FingerprintItemData();
final TextEditingController searchController = TextEditingController(); final TextEditingController searchController = TextEditingController();
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,

View File

@ -71,7 +71,9 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:int.parse(state.fingerprintItemData.value.faceNumber!), faceNo:int.parse(state.fingerprintItemData.value.faceNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.faceRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:0, // isRound:0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), //
@ -118,7 +120,9 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:int.parse(state.fingerprintItemData.value.faceNumber!), faceNo:int.parse(state.fingerprintItemData.value.faceNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.faceRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:0, // isRound:0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), //
@ -170,7 +174,9 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:int.parse(state.fingerprintItemData.value.cardNumber!), cardNo:int.parse(state.fingerprintItemData.value.cardNumber!),
useCountLimit:0xff , useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.cardRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:0, // isRound:0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), //
@ -217,7 +223,9 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.fingerprintId.toString(), keyID:state.fingerprintItemData.value.fingerprintId.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!), fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate:1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.fingerRight,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:0, // isRound:0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), //
@ -267,7 +275,9 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.fingerprintId.toString(), keyID:state.fingerprintItemData.value.fingerprintId.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!), fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate:1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.fingerRight,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:0, // isRound:0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), //
@ -319,7 +329,9 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:int.parse(state.fingerprintItemData.value.cardNumber!), cardNo:int.parse(state.fingerprintItemData.value.cardNumber!),
useCountLimit:0xff , useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.cardRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:0, // isRound:0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.fingerprintItemData.value.weekDay!), //
@ -357,6 +369,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
startTime: 0, startTime: 0,
endTime: 0, endTime: 0,
fingerprintType: state.fingerprintItemData.value.fingerprintType! == 4 ? 4 : 2, fingerprintType: state.fingerprintItemData.value.fingerprintType! == 4 ? 4 : 2,
fingerRight: state.fingerprintItemData.value.fingerRight!,
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){ showToast("修改成功".tr, something: (){
@ -383,6 +396,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
startTime: 0, startTime: 0,
endTime: 0, endTime: 0,
cardType: 2,// 2: cardType: 2,// 2:
cardRight: state.fingerprintItemData.value.cardRight!,
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){ showToast("修改成功".tr, something: (){
@ -409,6 +423,7 @@ class OtherTypeKeyChangeDateLogic extends BaseGetXController{
faceName: state.fingerprintItemData.value.faceName!, faceName: state.fingerprintItemData.value.faceName!,
addType: "1", addType: "1",
isCoerced: state.fingerprintItemData.value.isCoerced!, isCoerced: state.fingerprintItemData.value.isCoerced!,
faceRight: state.fingerprintItemData.value.faceRight!,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () { showToast("修改成功", something: () {

View File

@ -73,7 +73,9 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:int.parse(state.fingerprintItemData.value.faceNumber!), faceNo:int.parse(state.fingerprintItemData.value.faceNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.faceRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:1, // isRound:1, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -120,7 +122,9 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:int.parse(state.fingerprintItemData.value.faceNumber!), faceNo:int.parse(state.fingerprintItemData.value.faceNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.faceRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:1, // isRound:1, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -172,7 +176,9 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:int.parse(state.fingerprintItemData.value.cardNumber!), cardNo:int.parse(state.fingerprintItemData.value.cardNumber!),
useCountLimit:0xff , useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.cardRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:1, // isRound:1, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -219,7 +225,9 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.fingerprintId.toString(), keyID:state.fingerprintItemData.value.fingerprintId.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!), fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate:1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.fingerRight,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:1, // isRound:1, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -269,7 +277,9 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.fingerprintId.toString(), keyID:state.fingerprintItemData.value.fingerprintId.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!), fingerNo:int.parse(state.fingerprintItemData.value.fingerprintNumber!),
useCountLimit:0xff, useCountLimit:0xffff,
operate:1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.fingerRight,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:1, // isRound:1, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -321,7 +331,9 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
keyID:state.fingerprintItemData.value.cardId!.toString(), keyID:state.fingerprintItemData.value.cardId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:int.parse(state.fingerprintItemData.value.cardNumber!), cardNo:int.parse(state.fingerprintItemData.value.cardNumber!),
useCountLimit:0xff , useCountLimit:0xffff,
operate: 1, // 0: 1 2: 3
isAdmin:state.fingerprintItemData.value.cardRight!,
isForce:state.fingerprintItemData.value.isCoerced, // isForce:state.fingerprintItemData.value.isCoerced, //
isRound:1, // isRound:1, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -359,6 +371,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
startTime: state.starTimeTimestamp.value, startTime: state.starTimeTimestamp.value,
endTime: state.endTimeTimestamp.value, endTime: state.endTimeTimestamp.value,
fingerprintType: state.fingerprintItemData.value.fingerprintType!, fingerprintType: state.fingerprintItemData.value.fingerprintType!,
fingerRight: state.fingerprintItemData.value.fingerRight!
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){ showToast("修改成功".tr, something: (){
@ -388,6 +401,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
startTime: state.starTimeTimestamp.value, startTime: state.starTimeTimestamp.value,
endTime: state.endTimeTimestamp.value, endTime: state.endTimeTimestamp.value,
cardType: state.fingerprintItemData.value.cardType!, cardType: state.fingerprintItemData.value.cardType!,
cardRight: state.fingerprintItemData.value.cardRight!,
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){ showToast("修改成功".tr, something: (){
@ -417,6 +431,7 @@ class OtherTypeKeyChangeValidityDateLogic extends BaseGetXController{
faceName: state.fingerprintItemData.value.faceName!, faceName: state.fingerprintItemData.value.faceName!,
addType: "1", addType: "1",
isCoerced: state.fingerprintItemData.value.isCoerced!, isCoerced: state.fingerprintItemData.value.isCoerced!,
faceRight: state.fingerprintItemData.value.faceRight!,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () { showToast("修改成功", something: () {

View File

@ -161,20 +161,20 @@ class _DoorLockLogPageState extends State<DoorLockLogPage> with RouteAware {
}, },
child: Stack( child: Stack(
children: [ children: [
timelineData.imagesUrl != null timelineData.imagesUrl!.isNotEmpty
? ?
// Image.network( Image.network(
// timelineData.imagesUrl!, timelineData.imagesUrl!,
// width: 260.w, width: 260.w,
// height: 260.h, height: 260.h,
// ) )
Image( // Image(
image: const AssetImage( // image: const AssetImage(
'images/main/icon_lockDetail_monitoringvoiceFrist.png'), // 'images/main/icon_lockDetail_monitoringvoiceFrist.png'),
width: 240.w, // width: 240.w,
height: 180.h, // height: 180.h,
fit: BoxFit.contain, // fit: BoxFit.contain,
) // )
: Container(), : Container(),
Positioned( Positioned(
top: 150.h, top: 150.h,

View File

@ -26,7 +26,7 @@ class AddFaceLogic extends BaseGetXController {
_replySubscription = _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) async { EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// //
if (reply is SenderAddFaceReply) { if (reply is SenderAddFaceReply && state.ifCurrentScreen.value == true) {
_replyAddFaceBegin(reply); _replyAddFaceBegin(reply);
} }
@ -44,27 +44,16 @@ class AddFaceLogic extends BaseGetXController {
Future<void> _replyAddFaceBegin(Reply reply) async { Future<void> _replyAddFaceBegin(Reply reply) async {
int status = reply.data[2]; int status = reply.data[2];
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
state.ifConnectScuess.value = true;
// //
state.maxRegCount.value = reply.data[10]; state.maxRegCount.value = reply.data[11];
// AppLog.log("人脸开始state.maxRegCount.value:${state.maxRegCount.value}"); // AppLog.log("人脸开始state.maxRegCount.value:${state.maxRegCount.value}");
break; break;
case 0x06: case 0x06:
// //
var weekStr = "00000000";
for (var day in state.weekDay.value) {
int index = day % 7; // 0
weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
}
// weekStr
weekStr = weekStr.split('').reversed.join('');
int weekRound = int.parse(weekStr, radix: 2);
var signKey = await Storage.getStringList(saveBlueSignKey); var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!); List<int> signKeyDataList = changeStringListToIntList(signKey!);
@ -78,11 +67,13 @@ class AddFaceLogic extends BaseGetXController {
IoSenderManage.senderAddFaceCommand( IoSenderManage.senderAddFaceCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:state.isAdministrator.value == "2" ? 254 : 0, faceNo:0,
useCountLimit:0xff, useCountLimit:0xffff,
isForce:state.isCoerced.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:weekRound, // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000, startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000, endDate: int.parse(state.endDate.value)~/1000,
startTime:DateTool().dateToHNString(state.effectiveDateTime.value), startTime:DateTool().dateToHNString(state.effectiveDateTime.value),
@ -132,10 +123,14 @@ class AddFaceLogic extends BaseGetXController {
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
if (state.faceNumber.value == (reply.data[6]).toString()) { var faceList = reply.data.sublist(reply.data.length - 2);
var faceNumber = listChangInt(faceList).toString();
// var faceNumber = listChangInt(reply.data.sublist(6, 7)).toString();
// if (state.faceNumber.value == (reply.data[6]).toString()) {
if (state.faceNumber.value == faceNumber) {
return; return;
} else { } else {
state.faceNumber.value = (reply.data[6]).toString(); state.faceNumber.value = faceNumber;
} }
addFaceData(); addFaceData();
break; break;
@ -158,14 +153,6 @@ class AddFaceLogic extends BaseGetXController {
(BluetoothConnectionState deviceConnectionState) async { (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) { if (deviceConnectionState == BluetoothConnectionState.connected) {
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
var weekStr = "00000000";
for (var day in state.weekDay.value) {
int index = day % 7; // 0
weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
}
// weekStr
weekStr = weekStr.split('').reversed.join('');
int weekRound = int.parse(weekStr, radix: 2);
var signKey = await Storage.getStringList(saveBlueSignKey); var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!); List<int> signKeyDataList = changeStringListToIntList(signKey!);
@ -179,11 +166,13 @@ class AddFaceLogic extends BaseGetXController {
IoSenderManage.senderAddFaceCommand( IoSenderManage.senderAddFaceCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:state.isAdministrator.value == "2" ? 254 : 0, faceNo:0,
useCountLimit:0xff, useCountLimit:0xffff,
isForce:state.isCoerced.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:weekRound, // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000, startDate: int.parse(state.startDate.value)~/1000,
endDate: int.parse(state.endDate.value)~/1000, endDate: int.parse(state.endDate.value)~/1000,
startTime:DateTool().dateToHNString(state.effectiveDateTime.value), startTime:DateTool().dateToHNString(state.effectiveDateTime.value),

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -7,6 +8,7 @@ import '../../../../../app_settings/app_colors.dart';
import '../../../../../tools/submitBtn.dart'; import '../../../../../tools/submitBtn.dart';
import '../../../../../tools/titleAppBar.dart'; import '../../../../../tools/titleAppBar.dart';
import '../../../../../translations/trans_lib.dart'; import '../../../../../translations/trans_lib.dart';
import '../../../../tools/appRouteObserver.dart';
class AddFacePage extends StatefulWidget { class AddFacePage extends StatefulWidget {
const AddFacePage({Key? key}) : super(key: key); const AddFacePage({Key? key}) : super(key: key);
@ -15,7 +17,7 @@ class AddFacePage extends StatefulWidget {
State<AddFacePage> createState() => _AddFacePageState(); State<AddFacePage> createState() => _AddFacePageState();
} }
class _AddFacePageState extends State<AddFacePage> { class _AddFacePageState extends State<AddFacePage> with RouteAware {
final logic = Get.put(AddFaceLogic()); final logic = Get.put(AddFaceLogic());
final state = Get.find<AddFaceLogic>().state; final state = Get.find<AddFaceLogic>().state;
@ -93,4 +95,52 @@ class _AddFacePageState extends State<AddFacePage> {
), ),
); );
} }
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override
void dispose() {
// TODO: implement dispose
///
AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose();
}
///
@override
void didPush() {
super.didPush();
state.ifCurrentScreen.value = true;
}
///
@override
void didPop() {
super.didPop();
logic.cancelBlueConnetctToastTimer();
state.ifCurrentScreen.value = false;
}
///
@override
void didPopNext() {
super.didPopNext();
state.ifCurrentScreen.value = true;
}
///
@override
void didPushNext() {
super.didPushNext();
logic.cancelBlueConnetctToastTimer();
state.ifCurrentScreen.value = false;
}
} }

View File

@ -40,6 +40,11 @@ class FaceDetailLogic extends BaseGetXController {
state.sureBtnState.value = 0; state.sureBtnState.value = 0;
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
dismissEasyLoading(); dismissEasyLoading();
if(state.isDeletFace.value == true){
deletFaceData();
}else{
editFaceData();
}
deletFaceData(); deletFaceData();
break; break;
case 0x06: case 0x06:
@ -58,7 +63,9 @@ class FaceDetailLogic extends BaseGetXController {
keyID:state.keyId.value.toString(), keyID:state.keyId.value.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:int.parse(state.typeNumber.value), faceNo:int.parse(state.typeNumber.value),
useCountLimit:state.isDeletFace.value == true ? 0 : 0xff, useCountLimit:0xffff,
operate:state.isDeletFace.value ? 2 : 1, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFace.value == true ? 1 : 0, // isForce:state.isStressFace.value == true ? 1 : 0, //
isRound:state.keyType.value == 4 ? 1: 0, // isRound:state.keyType.value == 4 ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -106,7 +113,9 @@ class FaceDetailLogic extends BaseGetXController {
keyID:state.keyId.value.toString(), keyID:state.keyId.value.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
faceNo:int.parse(state.typeNumber.value), faceNo:int.parse(state.typeNumber.value),
useCountLimit:state.isDeletFace.value == true ? 0 : 0xff, useCountLimit:0xffff,
operate:state.isDeletFace.value ? 2 : 1, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFace.value == true ? 1 : 0, // isForce:state.isStressFace.value == true ? 1 : 0, //
isRound:state.keyType.value == 4 ? 1: 0, // isRound:state.keyType.value == 4 ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -173,6 +182,7 @@ class FaceDetailLogic extends BaseGetXController {
faceName: state.changeNameController.text, faceName: state.changeNameController.text,
addType: "1", addType: "1",
isCoerced: state.isStressFace.value ? 2 : 1, isCoerced: state.isStressFace.value ? 2 : 1,
faceRight: state.isAdministrator.value ? 1 : 0,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () { showToast("修改成功", something: () {

View File

@ -174,7 +174,15 @@ class _FaceDetailPageState extends State<FaceDetailPage> with RouteAware {
rightTitle: "", rightTitle: "",
isTipsImg: false, isTipsImg: false,
isHaveRightWidget: true, isHaveRightWidget: true,
isHaveLine: true,
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isStressFace()))), rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isStressFace()))),
Obx(() => CommonItem(
leftTitel: "是否是管理员".tr,
rightTitle: "",
isTipsImg: false,
isHaveRightWidget: true,
rightWidget: SizedBox(
width: 60.w, height: 50.h, child: _isAdmin()))),
Container(height: 10.h), Container(height: 10.h),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
@ -223,6 +231,21 @@ class _FaceDetailPageState extends State<FaceDetailPage> with RouteAware {
); );
} }
//
CupertinoSwitch _isAdmin() {
return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: state.isAdministrator.value,
onChanged: (value) {
state.isAdministrator.value = value;
state.isDeletFace.value = false;
logic.senderAddFace();
},
);
}
@override @override
void didChangeDependencies() { void didChangeDependencies() {
// TODO: implement didChangeDependencies // TODO: implement didChangeDependencies

View File

@ -23,6 +23,7 @@ class FaceDetailState {
var sureBtnState = 0.obs; // 0() 1() var sureBtnState = 0.obs; // 0() 1()
var isDeletFace = true.obs;// var isDeletFace = true.obs;//
var isStressFace = false.obs;// var isStressFace = false.obs;//
var isAdministrator = false.obs;//
FaceDetailState() { FaceDetailState() {
Map map = Get.arguments; Map map = Get.arguments;
@ -40,5 +41,6 @@ class FaceDetailState {
addTime.value = faceItemData.value.createDate!; addTime.value = faceItemData.value.createDate!;
weekDay.value = faceItemData.value.cyclicConfig!; weekDay.value = faceItemData.value.cyclicConfig!;
isStressFace.value = faceItemData.value.isCoerced! == 2 ? true : false; isStressFace.value = faceItemData.value.isCoerced! == 2 ? true : false;
isAdministrator.value = faceItemData.value.faceRight! == 1 ? true : false;
} }
} }

View File

@ -1,11 +1,9 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_addFace.dart'; import 'package:star_lock/blue/io_protocol/io_addFace.dart';
import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart'; import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/main/lockDetail/face/faceList/faceList_state.dart'; import 'package:star_lock/main/lockDetail/face/faceList/faceList_state.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
@ -29,7 +27,7 @@ class FaceListLogic extends BaseGetXController {
_replySubscription = _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) { EventBusManager().eventBus!.on<Reply>().listen((reply) {
// () // ()
if ((reply is SenderAddFaceReply) && (state.isDeletFaceData == true)) { if ((reply is SenderAddFaceReply) && (state.ifCurrentScreen == true)) {
_replyAddFaceBegin(reply); _replyAddFaceBegin(reply);
} }
@ -51,7 +49,6 @@ class FaceListLogic extends BaseGetXController {
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
state.isDeletFaceData = false;
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
dismissEasyLoading(); dismissEasyLoading();
if (state.isDeletAll == false) { if (state.isDeletAll == false) {
@ -74,9 +71,11 @@ class FaceListLogic extends BaseGetXController {
IoSenderManage.senderAddFaceCommand( IoSenderManage.senderAddFaceCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
faceNo:state.deletFaceNo, faceNo:state.deletFaceNo,
useCountLimit:0, useCountLimit:0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //
@ -283,9 +282,11 @@ class FaceListLogic extends BaseGetXController {
IoSenderManage.senderAddFaceCommand( IoSenderManage.senderAddFaceCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
faceNo:state.deletFaceNo, faceNo:state.deletFaceNo,
useCountLimit:0, useCountLimit:0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //
@ -298,19 +299,6 @@ class FaceListLogic extends BaseGetXController {
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
token: getTokenList, token: getTokenList,
); );
// IoSenderManage.senderAddFaceCommand(
// keyID: state.deletKeyID,
// userID: state.deletUserID,
// faceNo: state.deletFaceNo,
// useCountLimit: 0,
// startTime: 0x11223344,
// endTime: 0x11223344,
// needAuthor: 1,
// publicKey: publicKeyDataList,
// privateKey: getPrivateKeyList,
// token: getTokenList,
// );
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) { } else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading(); dismissEasyLoading();
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
@ -348,7 +336,6 @@ class FaceListLogic extends BaseGetXController {
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功"); showToast("删除成功");
state.isDeletFaceData = false;
getFaceListData(); getFaceListData();
} }
} }
@ -366,7 +353,6 @@ class FaceListLogic extends BaseGetXController {
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("重置成功"); showToast("重置成功");
state.isDeletFaceData = false;
getFaceListData(); getFaceListData();
} }
} }

View File

@ -1,5 +1,6 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart'; import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart';
@ -9,8 +10,8 @@ import 'package:star_lock/tools/showTipView.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
import '../../../../tools/appRouteObserver.dart';
import '../../../../tools/noData.dart'; import '../../../../tools/noData.dart';
import '../../../../tools/showIosTipView.dart';
import '../../../../tools/storage.dart'; import '../../../../tools/storage.dart';
import '../../../../tools/submitBtn.dart'; import '../../../../tools/submitBtn.dart';
import '../../../../tools/titleAppBar.dart'; import '../../../../tools/titleAppBar.dart';
@ -24,7 +25,7 @@ class FaceListPage extends StatefulWidget {
State<FaceListPage> createState() => _FaceListPageState(); State<FaceListPage> createState() => _FaceListPageState();
} }
class _FaceListPageState extends State<FaceListPage> { class _FaceListPageState extends State<FaceListPage> with RouteAware {
final logic = Get.put(FaceListLogic()); final logic = Get.put(FaceListLogic());
final state = Get.find<FaceListLogic>().state; final state = Get.find<FaceListLogic>().state;
@ -47,11 +48,10 @@ class _FaceListPageState extends State<FaceListPage> {
if (isDemoMode == false) { if (isDemoMode == false) {
// showDeletAlertDialog(context); // showDeletAlertDialog(context);
ShowTipView().showIosTipWithContentDialog("重置后,该锁的人脸都将被删除哦,确认要重置吗?", () async { ShowTipView().showIosTipWithContentDialog("重置后,该锁的人脸都将被删除哦,确认要重置吗?", () async {
state.isDeletFaceData = true;
state.isDeletAll = true; state.isDeletAll = true;
state.deletKeyID = "1"; state.deletKeyID = "1";
state.deletUserID = "DeleteAll!@#"; state.deletFaceNo = 0;
state.deletFaceNo = 255;
logic.senderAddFace(); logic.senderAddFace();
}); });
} else { } else {
@ -144,12 +144,11 @@ class _FaceListPageState extends State<FaceListPage> {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
// : // :
state.deletKeyID = faceItemData.faceId.toString();
state.deletFaceNo = int.parse(faceItemData.faceNumber!);
ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async { ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async {
state.isDeletFaceData = true;
state.isDeletAll = false; state.isDeletAll = false;
state.deletUserID = (await Storage.getUid())!; state.deletKeyID = faceItemData.faceId.toString();
state.deletFaceNo = int.parse(faceItemData.faceNumber!);
logic.senderAddFace(); logic.senderAddFace();
}); });
// showIosTipViewDialog(context); // showIosTipViewDialog(context);
@ -263,36 +262,52 @@ class _FaceListPageState extends State<FaceListPage> {
); );
} }
// void showDeletAlertDialog(BuildContext context) { @override
// showCupertinoDialog( void didChangeDependencies() {
// context: context, // TODO: implement didChangeDependencies
// builder: (context) { super.didChangeDependencies();
// return CupertinoAlertDialog(
// title: const Text("提示"),
// content: const Text('重置后,该锁的人脸都将被删除哦,确认要重置吗?'),
// actions: [
// CupertinoDialogAction(
// child: Text(TranslationLoader.lanKeys!.cancel!.tr),
// onPressed: () {
// Navigator.pop(context);
// },
// ),
// CupertinoDialogAction(
// child: Text(TranslationLoader.lanKeys!.sure!.tr),
// onPressed: () {
// Navigator.pop(context);
// state.isDeletFaceData = true;
// state.isDeletAll = true;
// state.deletKeyID = "1";
// state.deletUserID = "DeleteAll!@#";
// state.deletFaceNo = 255;
// logic.senderAddFace();
// },
// ),
// ],
// );
// },
// );
// }
///
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override
void dispose() {
// TODO: implement 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;
}
///
@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;
}
} }

View File

@ -7,10 +7,8 @@ class FaceListState {
final lockId = 0.obs; final lockId = 0.obs;
// //
var isDeletFaceData = false;
var isDeletAll = false; var isDeletAll = false;
var deletKeyID = ""; var deletKeyID = "";
var deletUserID = "DeleteAll!@#";
var deletFaceNo = 0; var deletFaceNo = 0;
final faceItemListData = <FingerprintItemData>[].obs; final faceItemListData = <FingerprintItemData>[].obs;

View File

@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/app_settings/app_settings.dart';
@ -27,7 +26,7 @@ class AddFingerprintLogic extends BaseGetXController {
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async { _replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// //
if(reply is SenderAddFingerprintWithTimeCycleCoercionReply) { if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply); _replyAddFingerprintBegin(reply);
} }
@ -57,7 +56,7 @@ class AddFingerprintLogic extends BaseGetXController {
state.ifConnectScuess.value = true; state.ifConnectScuess.value = true;
// //
state.maxRegCount.value = reply.data[10]; state.maxRegCount.value = reply.data[11];
// AppLog.log("state.maxRegCount.value:${state.maxRegCount.value}"); // AppLog.log("state.maxRegCount.value:${state.maxRegCount.value}");
// state.fingerprintNumber.value = reply.data.last.toString(); // state.fingerprintNumber.value = reply.data.last.toString();
break; break;
@ -66,9 +65,6 @@ class AddFingerprintLogic extends BaseGetXController {
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var signKey = await Storage.getStringList(saveBlueSignKey); var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!); List<int> signKeyDataList = changeStringListToIntList(signKey!);
@ -76,21 +72,14 @@ class AddFingerprintLogic extends BaseGetXController {
var saveStrList = changeIntListToStringList(token); var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList); Storage.setStringList(saveBlueToken, saveStrList);
// var weekStr = "00000000";
// for (var day in state.weekDay.value) {
// int index = day % 7; // 0
// weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
// }
// // weekStr
// weekStr = weekStr.split('').reversed.join('');
// int weekRound = int.parse(weekStr, radix: 2);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:state.isAdministrator.value == "2" ? 254 : 0, fingerNo:0,
useCountLimit:0xff, useCountLimit:0xffff,
isForce:state.isCoerced.value == "1" ? 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), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000, startDate: int.parse(state.startDate.value)~/1000,
@ -153,17 +142,20 @@ class AddFingerprintLogic extends BaseGetXController {
Future<void> _replyAddFingerprintConfirmation(Reply reply) async { Future<void> _replyAddFingerprintConfirmation(Reply reply) async {
int status = reply.data[2]; int status = reply.data[2];
switch(status){ switch(status){
case 0x00: case 0x00:
// //
if(state.fingerprintNumber.value == (reply.data[6]).toString()){ // var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString();
var fingerprintList = reply.data.sublist(reply.data.length - 2);
var fingerprintNum = listChangInt(fingerprintList).toString();
if(state.fingerprintNumber.value == fingerprintNum){
return; return;
}else{ }else{
state.fingerprintNumber.value = (reply.data[6]).toString(); state.fingerprintNumber.value = fingerprintNum;
} }
// if(state.isCoerced.value == "1"){ // if(state.isCoerced.value == "1"){
// //
addFingerprintsData(); addFingerprintsData();
// }else{ // }else{
// // // //
@ -250,9 +242,11 @@ class AddFingerprintLogic extends BaseGetXController {
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:state.isAdministrator.value == "2" ? 254 : 0, fingerNo:0,
useCountLimit:0xff, useCountLimit:0xffff,
isForce:state.isCoerced.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), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
startDate: int.parse(state.startDate.value)~/1000, startDate: int.parse(state.startDate.value)~/1000,

View File

@ -96,7 +96,6 @@ class _AddFingerprintTypePageState extends State<AddFingerprintTypePage> with Si
TranslationLoader.lanKeys!.pleaseEnter!.tr, TranslationLoader.lanKeys!.pleaseEnter!.tr,
state.nameController), state.nameController),
keyTimeLimitWidget(), keyTimeLimitWidget(),
SizedBox(height: 10.h),
keyBottomWidget() keyBottomWidget()
], ],
), ),

View File

@ -3,7 +3,6 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart'; import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
@ -66,7 +65,9 @@ class FingerprintDetailLogic extends BaseGetXController{
keyID:state.keyId.value.toString(), keyID:state.keyId.value.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:int.parse(state.typeNumber.value), fingerNo:int.parse(state.typeNumber.value),
useCountLimit:state.isDeletFingerprint.value == true ? 0 : 0xff, useCountLimit:0xffff,
operate:state.isDeletFingerprint.value ? 2 : 1, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFingerprint.value == true ? 1 : 0, // isForce:state.isStressFingerprint.value == true ? 1 : 0, //
isRound:state.keyType.value == 4 ? 1: 0, // isRound:state.keyType.value == 4 ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -116,7 +117,9 @@ class FingerprintDetailLogic extends BaseGetXController{
keyID:state.keyId.value.toString(), keyID:state.keyId.value.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
fingerNo:int.parse(state.typeNumber.value), fingerNo:int.parse(state.typeNumber.value),
useCountLimit:state.isDeletFingerprint.value == true ? 0 : 0xff, useCountLimit:0xffff,
operate:state.isDeletFingerprint.value ? 2 : 1, // 0: 1 2: 3
isAdmin:state.isAdministrator.value == true ? 1 : 0,
isForce:state.isStressFingerprint.value == true ? 1 : 0, // isForce:state.isStressFingerprint.value == true ? 1 : 0, //
isRound:state.keyType.value == 4 ? 1: 0, // isRound:state.keyType.value == 4 ? 1: 0, //
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), //
@ -169,6 +172,7 @@ class FingerprintDetailLogic extends BaseGetXController{
startTime: int.parse(state.startDate.value), startTime: int.parse(state.startDate.value),
endTime: int.parse(state.endTime.value), endTime: int.parse(state.endTime.value),
fingerprintType: state.fingerprintItemData.value.fingerprintType!, fingerprintType: state.fingerprintItemData.value.fingerprintType!,
fingerRight: state.isAdministrator.value ? 1 : 0,
); );
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
showToast("修改成功".tr, something: (){ showToast("修改成功".tr, something: (){

View File

@ -167,8 +167,15 @@ class _FingerprintDetailPageState extends State<FingerprintDetailPage> with Rout
rightTitle: "", rightTitle: "",
isTipsImg: false, isTipsImg: false,
isHaveRightWidget: true, isHaveRightWidget: true,
isHaveLine: true,
rightWidget: SizedBox( rightWidget: SizedBox(
width: 60.w, height: 50.h, child: _isStressFingerprint()))), width: 60.w, height: 50.h, child: _isStressFingerprint()))),
Obx(() => CommonItem(
leftTitel: "是否是管理员".tr,
rightTitle: "",
isTipsImg: false,
isHaveRightWidget: true,
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))),
Container(height: 10.h), Container(height: 10.h),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
@ -192,6 +199,7 @@ class _FingerprintDetailPageState extends State<FingerprintDetailPage> with Rout
padding: EdgeInsets.only(top: 25.w, bottom: 25.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
onClick: () { onClick: () {
ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async { ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async {
state.isDeletFingerprint.value = true;
logic.senderAddFingerprint(); logic.senderAddFingerprint();
}); });
}), }),
@ -210,12 +218,28 @@ class _FingerprintDetailPageState extends State<FingerprintDetailPage> with Rout
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
state.isStressFingerprint.value = value; state.isStressFingerprint.value = value;
logic.editFingerprintsData(); state.isDeletFingerprint.value = false;
logic.senderAddFingerprint();
}); });
}, },
); );
} }
//
CupertinoSwitch _isAdmin() {
return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: state.isAdministrator.value,
onChanged: (value) {
state.isAdministrator.value = value;
state.isDeletFingerprint.value = false;
logic.senderAddFingerprint();
},
);
}
@override @override
void didChangeDependencies() { void didChangeDependencies() {
// TODO: implement didChangeDependencies // TODO: implement didChangeDependencies

View File

@ -25,6 +25,7 @@ class FingerprintDetailState{
var sureBtnState = 0.obs;// 0() 1() var sureBtnState = 0.obs;// 0() 1()
var isDeletFingerprint = true.obs;// var isDeletFingerprint = true.obs;//
final isStressFingerprint = false.obs; final isStressFingerprint = false.obs;
var isAdministrator = false.obs;//
FingerprintDetailState() { FingerprintDetailState() {
Map map = Get.arguments; Map map = Get.arguments;
@ -43,6 +44,7 @@ class FingerprintDetailState{
addTime.value = fingerprintItemData.value.createDate!; addTime.value = fingerprintItemData.value.createDate!;
isStressFingerprint.value = fingerprintItemData.value.isCoerced! == 2 ? true : false; isStressFingerprint.value = fingerprintItemData.value.isCoerced! == 2 ? true : false;
weekDay.value = fingerprintItemData.value.weekDay!; weekDay.value = fingerprintItemData.value.weekDay!;
isAdministrator.value = fingerprintItemData.value.fingerRight! == 1 ? true : false;
} }
} }
} }

View File

@ -77,12 +77,14 @@ class FingerprintItemData {
String? senderUsername; String? senderUsername;
List? weekDay; List? weekDay;
String? validTimeStr; String? validTimeStr;
int? fingerRight;
String? cardName; String? cardName;
String? cardNumber; String? cardNumber;
int? cardType; int? cardType;
int? cardId; int? cardId;
int? cardStatus; int? cardStatus;
int? cardRight;
int? faceId; int? faceId;
String? faceName; String? faceName;
@ -123,7 +125,9 @@ class FingerprintItemData {
this.cyclicConfig, this.cyclicConfig,
this.featureData, this.featureData,
this.faceRight, this.faceRight,
this.cardStatus}); this.cardStatus,
this.cardRight,
this.fingerRight});
FingerprintItemData.fromJson(Map<String, dynamic> json) { FingerprintItemData.fromJson(Map<String, dynamic> json) {
fingerprintStatus = json['fingerprintStatus']; fingerprintStatus = json['fingerprintStatus'];
@ -155,6 +159,8 @@ class FingerprintItemData {
featureData = json['featureData']; featureData = json['featureData'];
faceRight = json['faceRight']; faceRight = json['faceRight'];
cardStatus = json['cardStatus']; cardStatus = json['cardStatus'];
cardRight = json['cardRight'];
fingerRight = json['fingerRight'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -188,6 +194,8 @@ class FingerprintItemData {
data['featureData'] = featureData; data['featureData'] = featureData;
data['faceRight'] = faceRight; data['faceRight'] = faceRight;
data['cardStatus'] = cardStatus; data['cardStatus'] = cardStatus;
data['cardRight'] = cardRight;
data['fingerRight'] = fingerRight;
return data; return data;
} }
} }

View File

@ -28,7 +28,7 @@ class FingerprintListLogic extends BaseGetXController{
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) { _replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
// () // ()
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.isDeletFingerprintData == true)) { if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply); _replyAddFingerprintBegin(reply);
} }
@ -50,7 +50,6 @@ class FingerprintListLogic extends BaseGetXController{
switch(status){ switch(status){
case 0x00: case 0x00:
// //
state.isDeletFingerprintData = false;
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
dismissEasyLoading(); dismissEasyLoading();
deletAllFingerprintsData(); deletAllFingerprintsData();
@ -63,30 +62,17 @@ class FingerprintListLogic extends BaseGetXController{
var signKey = await Storage.getStringList(saveBlueSignKey); var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!); List<int> signKeyDataList = changeStringListToIntList(signKey!);
// var publicKey = await Storage.getStringList(saveBluePublicKey); var token = reply.data.sublist(5, 9);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!); var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
// IoSenderManage.senderAddFingerprintCommand(
// keyID:state.deletKeyID,
// userID:state.deletUserID,
// fingerNo:state.deletFingerNo,
// useCountLimit:0,
// startTime:0x11223344,
// endTime:0x11223344,
// needAuthor:1,
// signKey:signKeyDataList,
// privateKey:getPrivateKeyList,
// token: getTokenList,
// );
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
fingerNo:state.deletFingerNo, fingerNo:state.deletFingerNo,
useCountLimit:0, useCountLimit:0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //
@ -97,7 +83,7 @@ class FingerprintListLogic extends BaseGetXController{
needAuthor:1, needAuthor:1,
signKey:signKeyDataList, signKey:signKeyDataList,
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
token: getTokenList, token: token,
); );
break; break;
default: default:
@ -278,9 +264,11 @@ class FingerprintListLogic extends BaseGetXController{
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
fingerNo:state.deletFingerNo, fingerNo:state.deletFingerNo,
useCountLimit:0, useCountLimit:0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //
@ -293,19 +281,6 @@ class FingerprintListLogic extends BaseGetXController{
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
token: getTokenList, token: getTokenList,
); );
// IoSenderManage.senderAddFingerprintCommand(
// keyID:state.deletKeyID,
// userID:state.deletUserID,
// fingerNo:state.deletFingerNo,
// useCountLimit:0,
// startTime:0x11223344,
// endTime:0x11223344,
// needAuthor:1,
// signKey:signKeyDataList,
// privateKey:getPrivateKeyList,
// token: getTokenList,
// );
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) { } else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
dismissEasyLoading(); dismissEasyLoading();
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
@ -356,13 +331,11 @@ class FingerprintListLogic extends BaseGetXController{
if(entity.errorCode!.codeIsSuccessful){ if(entity.errorCode!.codeIsSuccessful){
if(state.isDeletAll == false){ if(state.isDeletAll == false){
showToast("删除成功".tr, something:(){ showToast("删除成功".tr, something:(){
state.isDeletFingerprintData = false;
pageNo = 1; pageNo = 1;
getFingerprintsListData(); getFingerprintsListData();
}); });
}else{ }else{
showToast("重置成功".tr, something:(){ showToast("重置成功".tr, something:(){
state.isDeletFingerprintData = false;
pageNo = 1; pageNo = 1;
getFingerprintsListData(); getFingerprintsListData();
}); });

View File

@ -69,11 +69,9 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
ShowTipView().showIosTipWithContentDialog("重置后,该锁的指纹都将被删除哦,确认要重置吗?".tr, () async { ShowTipView().showIosTipWithContentDialog("重置后,该锁的指纹都将被删除哦,确认要重置吗?".tr, () async {
state.isDeletFingerprintData = true;
state.isDeletAll = true; state.isDeletAll = true;
state.deletKeyID = "1"; state.deletKeyID = "1";
state.deletUserID = "DeleteAll!@#"; state.deletFingerNo = 0;
state.deletFingerNo = 255;
logic.senderAddFingerprint(); logic.senderAddFingerprint();
}); });
} else { } else {
@ -142,10 +140,9 @@ class _FingerprintListPageState extends State<FingerprintListPage> with RouteAwa
SlidableAction( SlidableAction(
onPressed: (BuildContext context){ onPressed: (BuildContext context){
ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async { ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async {
state.isDeletFingerprintData = true;
state.isDeletAll = false; state.isDeletAll = false;
state.deletKeyID = fingerprintItemData.fingerprintId.toString(); state.deletKeyID = fingerprintItemData.fingerprintId.toString();
state.deletUserID = (await Storage.getUid())!; state.deletFingerNo = int.parse(fingerprintItemData.faceNumber!);
logic.senderAddFingerprint(); logic.senderAddFingerprint();
}); });
}, },

View File

@ -8,10 +8,8 @@ class FingerprintListState{
final lockId = 0.obs; final lockId = 0.obs;
// //
var isDeletFingerprintData = false;
var isDeletAll = false; var isDeletAll = false;
var deletKeyID = ""; var deletKeyID = "0";
var deletUserID = "DeleteAll!@#";
var deletFingerNo = 0; var deletFingerNo = 0;
final fingerprintItemListData = <FingerprintItemData>[].obs; final fingerprintItemListData = <FingerprintItemData>[].obs;

View File

@ -144,6 +144,7 @@ class IrisDetailLogic extends BaseGetXController {
startTime: int.parse(state.starTime.value), startTime: int.parse(state.starTime.value),
endTime: int.parse(state.endTime.value), endTime: int.parse(state.endTime.value),
cardType: state.keyType.value, cardType: state.keyType.value,
cardRight: 0,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () { showToast("修改成功", something: () {

View File

@ -432,9 +432,12 @@ class LockDetailLogic extends BaseGetXController {
AppLog.log("从服务器获取联网token:${state.lockNetToken}"); AppLog.log("从服务器获取联网token:${state.lockNetToken}");
openDoorAction(); openDoorAction();
}else{ }else{
showToast("", something: (){ showToast("网络访问失败,请检查网络是否正常".tr, something: (){
state.openLockBtnState.value = 0; state.openLockBtnState.value = 0;
state.animationController!.forward();
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
state.lockNetToken = "0";
openDoorAction();
}); });
} }
} }

View File

@ -13,7 +13,7 @@ class LockDetailState {
late StreamSubscription<Reply> replySubscription; late StreamSubscription<Reply> replySubscription;
StreamSubscription? lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent; StreamSubscription? lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent;
String lockNetToken = ""; String lockNetToken = "0";
int differentialTime = 0; int differentialTime = 0;
int lockUserNo = 0; int lockUserNo = 0;
var senderUserId = 0; var senderUserId = 0;

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';

View File

@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsWithParameters.dart'; import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsWithParameters.dart';

View File

@ -1,15 +1,12 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_type.dart';
import '../../../../../blue/blue_manage.dart'; import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_protocol/io_changeAdministratorPassword.dart'; import '../../../../../blue/io_protocol/io_changeAdministratorPassword.dart';
import '../../../../../blue/io_protocol/io_readAdminPassword.dart'; import '../../../../../blue/io_protocol/io_readAdminPassword.dart';
import '../../../../../blue/io_protocol/io_senderCustomPasswords.dart';
import '../../../../../blue/io_reply.dart'; import '../../../../../blue/io_reply.dart';
import '../../../../../blue/io_tool/io_tool.dart'; import '../../../../../blue/io_tool/io_tool.dart';
import '../../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../../blue/io_tool/manager_event_bus.dart';

View File

@ -1,6 +1,5 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart';

View File

@ -3,7 +3,6 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsNoParameters.dart'; import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsNoParameters.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';

View File

@ -2,7 +2,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:network_info_plus/network_info_plus.dart'; import 'package:network_info_plus/network_info_plus.dart';

View File

@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/blue/io_protocol/io_getWifiList.dart'; import 'package:star_lock/blue/io_protocol/io_getWifiList.dart';

View File

@ -1,8 +1,6 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';

View File

@ -1,6 +1,5 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/talk/udp/udp_manage.dart'; import 'package:star_lock/talk/udp/udp_manage.dart';

View File

@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockSet/resetButton/resetButton_state.dart'; import 'package:star_lock/main/lockDetail/lockSet/resetButton/resetButton_state.dart';

View File

@ -143,6 +143,7 @@ class PalmDetailLogic extends BaseGetXController {
startTime: int.parse(state.starTime.value), startTime: int.parse(state.starTime.value),
endTime: int.parse(state.endTime.value), endTime: int.parse(state.endTime.value),
cardType: state.keyType.value, cardType: state.keyType.value,
cardRight: 0,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: () { showToast("修改成功", something: () {

View File

@ -25,7 +25,6 @@ class PasswordKeyDetailLogic extends BaseGetXController {
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async { _replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// //
AppLog.log("ifCurrentScreen:${state.ifCurrentScreen.value}");
if ((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) { if ((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) {
int status = reply.data[2]; int status = reply.data[2];
switch (status) { switch (status) {
@ -56,8 +55,10 @@ class PasswordKeyDetailLogic extends BaseGetXController {
keyID:state.itemData.value.keyboardPwdId!.toString(), keyID:state.itemData.value.keyboardPwdId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
pwdNo: state.itemData.value.pwdUserNo!, pwdNo: state.itemData.value.pwdUserNo!,
pwd: state.isDeletPasswordKey.value == true ? "000000" : state.inputPwdController.text, pwd: state.isDeletPasswordKey.value == true ? "0" : state.inputPwdController.text,
useCountLimit: state.isDeletPasswordKey.value == true ? 0 : 0xff, useCountLimit: 0xffff,
operate: state.isDeletPasswordKey.value == true ? 2 : 1,
isAdmin: state.isAdministrator.value == true ? 1 : 0,
startTime:state.itemData.value.startDate! ~/ 1000, startTime:state.itemData.value.startDate! ~/ 1000,
endTime:state.itemData.value.endDate! ~/ 1000, endTime:state.itemData.value.endDate! ~/ 1000,
needAuthor: 1, needAuthor: 1,
@ -102,7 +103,8 @@ class PasswordKeyDetailLogic extends BaseGetXController {
hoursStart: state.itemData.value.hoursStart!, hoursStart: state.itemData.value.hoursStart!,
hoursEnd: state.itemData.value.hoursEnd!, hoursEnd: state.itemData.value.hoursEnd!,
isCoerced: state.itemData.value.isCoerced!.toString(), isCoerced: state.itemData.value.isCoerced!.toString(),
keyboardPwdType: state.itemData.value.keyboardPwdType!); keyboardPwdType: state.itemData.value.keyboardPwdType!,
pwdRight: state.isAdministrator.value == true ? 1 : 0);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
Get.back(); Get.back();
showToast("修改成功".tr, something: (){ showToast("修改成功".tr, something: (){
@ -150,12 +152,15 @@ class PasswordKeyDetailLogic extends BaseGetXController {
// signKey: signKeyDataList, // signKey: signKeyDataList,
// privateKey: getPrivateKeyList, // privateKey: getPrivateKeyList,
// token: getTokenList); // token: getTokenList);
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID:state.itemData.value.keyboardPwdId!.toString(), keyID:state.itemData.value.keyboardPwdId!.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
pwdNo: state.itemData.value.pwdUserNo!, pwdNo: state.itemData.value.pwdUserNo!,
pwd: state.isDeletPasswordKey.value == true ? "000000" : state.inputPwdController.text, pwd: state.isDeletPasswordKey.value == true ? "0" : state.inputPwdController.text,
useCountLimit: state.isDeletPasswordKey.value == true ? 0 : 0xff, useCountLimit: 0xffff,
operate: state.isDeletPasswordKey.value == true ? 2 : 1,
isAdmin: state.isAdministrator.value == true ? 1 : 0,
startTime:state.itemData.value.startDate! ~/ 1000, startTime:state.itemData.value.startDate! ~/ 1000,
endTime:state.itemData.value.endDate! ~/ 1000, endTime:state.itemData.value.endDate! ~/ 1000,
needAuthor: 1, needAuthor: 1,

View File

@ -1,3 +1,4 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -113,6 +114,20 @@ class _PasswordKeyDetailPageState extends State<PasswordKeyDetailPage> with Rout
rightTitle: getSenderDate(state.itemData.value), rightTitle: getSenderDate(state.itemData.value),
action: () {}), action: () {}),
Container(height: 10.h), Container(height: 10.h),
Obx(() => Visibility(
visible: state.itemData.value.isCustom! == 1,
child: Column(
children: [
CommonItem(
leftTitel: "管理员".tr,
rightTitle: "",
isTipsImg: false,
isHaveRightWidget: true,
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isAdmin())),
Container(height: 10.h),
],
),
)),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr,
rightTitle: "", rightTitle: "",
@ -202,7 +217,6 @@ class _PasswordKeyDetailPageState extends State<PasswordKeyDetailPage> with Rout
onClick: () { onClick: () {
ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, (){ ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, (){
state.isDeletPasswordKey.value = true; state.isDeletPasswordKey.value = true;
state.ifCurrentScreen.value = true;
if(state.itemData.value.isCustom! == 1){ if(state.itemData.value.isCustom! == 1){
// //
logic.senderCustomPasswords(); logic.senderCustomPasswords();
@ -217,6 +231,21 @@ class _PasswordKeyDetailPageState extends State<PasswordKeyDetailPage> with Rout
)); ));
} }
//
CupertinoSwitch _isAdmin() {
return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: state.isAdministrator.value,
onChanged: (value) {
state.isAdministrator.value = value;
state.isDeletPasswordKey.value = false;
logic.senderCustomPasswords();
},
);
}
// //
String getSenderDate(PasswordKeyListItem indexEntity) { String getSenderDate(PasswordKeyListItem indexEntity) {
String senderDate = ''; String senderDate = '';
@ -257,7 +286,6 @@ class _PasswordKeyDetailPageState extends State<PasswordKeyDetailPage> with Rout
logic.updatePwdRequest(1); logic.updatePwdRequest(1);
}else{ }else{
// //
state.ifCurrentScreen.value = true;
logic.senderCustomPasswords(); logic.senderCustomPasswords();
} }
}, },

View File

@ -17,7 +17,8 @@ class PasswordKeyDetailState {
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0() 1() var sureBtnState = 0.obs;// 0() 1()
final passwordKeyNumber = "".obs;// final passwordKeyNumber = "".obs;//
var isDeletPasswordKey = true.obs;// var isDeletPasswordKey = true.obs;//
var isAdministrator = false.obs;//
PasswordKeyDetailState() { PasswordKeyDetailState() {
Map map = Get.arguments; Map map = Get.arguments;
@ -29,7 +30,7 @@ class PasswordKeyDetailState {
inputPwdController.text = itemData.value.keyboardPwd!; inputPwdController.text = itemData.value.keyboardPwd!;
keyId.value = itemData.value.keyboardPwdId!; keyId.value = itemData.value.keyboardPwdId!;
keyboardUserNo.value = itemData.value.pwdUserNo!; keyboardUserNo.value = itemData.value.pwdUserNo!;
isAdministrator.value = itemData.value.pwdRight! == 1 ? true : false;
// startDate.value = itemData.value.startDate!; // startDate.value = itemData.value.startDate!;
// endDate.value = itemData.value.endDate!; // endDate.value = itemData.value.endDate!;
// hoursStart.value = itemData.value.hoursStart!; // hoursStart.value = itemData.value.hoursStart!;

View File

@ -51,7 +51,9 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
userID:await Storage.getUid(), userID:await Storage.getUid(),
pwdNo: state.itemData.value.pwdUserNo!, pwdNo: state.itemData.value.pwdUserNo!,
pwd: state.itemData.value.keyboardPwd!.toString(), pwd: state.itemData.value.keyboardPwd!.toString(),
useCountLimit: 0xff, operate: 1,
isAdmin: 0,
useCountLimit: 0xffff,
startTime:state.itemData.value.startDate! ~/ 1000, startTime:state.itemData.value.startDate! ~/ 1000,
endTime:state.itemData.value.endDate! ~/ 1000, endTime:state.itemData.value.endDate! ~/ 1000,
needAuthor: 1, needAuthor: 1,
@ -95,7 +97,8 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
hoursStart: state.itemData.value.hoursStart!, hoursStart: state.itemData.value.hoursStart!,
hoursEnd: state.itemData.value.hoursEnd!, hoursEnd: state.itemData.value.hoursEnd!,
isCoerced: "1", isCoerced: "1",
keyboardPwdType: 3); keyboardPwdType: 3,
pwdRight: state.itemData.value.pwdRight!);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("修改成功", something: (){ showToast("修改成功", something: (){
eventBus.fire(GetPasswordListRefreshUI()); eventBus.fire(GetPasswordListRefreshUI());
@ -131,7 +134,9 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
userID:await Storage.getUid(), userID:await Storage.getUid(),
pwdNo: state.itemData.value.pwdUserNo!, pwdNo: state.itemData.value.pwdUserNo!,
pwd: state.itemData.value.keyboardPwd!.toString(), pwd: state.itemData.value.keyboardPwd!.toString(),
useCountLimit: 0xff, operate: 1,
isAdmin: state.itemData.value.pwdUserNo!,
useCountLimit: 0xffff,
startTime:state.itemData.value.startDate! ~/ 1000, startTime:state.itemData.value.startDate! ~/ 1000,
endTime:state.itemData.value.endDate! ~/ 1000, endTime:state.itemData.value.endDate! ~/ 1000,
needAuthor: 1, needAuthor: 1,

View File

@ -83,6 +83,7 @@ class PasswordKeyListItem {
int? hoursStart; int? hoursStart;
int? hoursEnd; int? hoursEnd;
int? pwdUserNo; int? pwdUserNo;
int? pwdRight;
PasswordKeyListItem( PasswordKeyListItem(
{this.apiUserId, {this.apiUserId,
@ -102,7 +103,8 @@ class PasswordKeyListItem {
this.isCoerced, this.isCoerced,
this.hoursStart, this.hoursStart,
this.hoursEnd, this.hoursEnd,
this.pwdUserNo}); this.pwdUserNo,
this.pwdRight});
PasswordKeyListItem.fromJson(Map<String, dynamic> json) { PasswordKeyListItem.fromJson(Map<String, dynamic> json) {
apiUserId = json['apiUserId']; apiUserId = json['apiUserId'];
@ -123,6 +125,7 @@ class PasswordKeyListItem {
hoursStart = json['hoursStart']; hoursStart = json['hoursStart'];
hoursEnd = json['hoursEnd']; hoursEnd = json['hoursEnd'];
pwdUserNo = json['pwdUserNo']; pwdUserNo = json['pwdUserNo'];
pwdRight = json['pwdRight'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -145,6 +148,7 @@ class PasswordKeyListItem {
data['hoursStart'] = hoursStart; data['hoursStart'] = hoursStart;
data['hoursEnd'] = hoursEnd; data['hoursEnd'] = hoursEnd;
data['pwdUserNo'] = pwdUserNo; data['pwdUserNo'] = pwdUserNo;
data['pwdRight'] = pwdRight;
return data; return data;
} }
} }

View File

@ -2,8 +2,6 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/io_type.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_state.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_state.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
@ -41,7 +39,6 @@ class PasswordKeyListLogic extends BaseGetXController {
switch(status){ switch(status){
case 0x00: case 0x00:
// //
state.isDeletPWDData = false;
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
if(state.isDeletAll){ if(state.isDeletAll){
resetPasswordKeyListRequest(); resetPasswordKeyListRequest();
@ -66,10 +63,12 @@ class PasswordKeyListLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
pwdNo:state.pwdNo, pwdNo:state.pwdNo,
pwd:"000000",//state.deletPWD, pwd:"0",//state.deletPWD,
useCountLimit: 0, operate: state.isDeletAll ? 3 : 2,
isAdmin: 0,
useCountLimit: 0xffff,
startTime:0x11223344, startTime:0x11223344,
endTime:0x11223344, endTime:0x11223344,
needAuthor: 1, needAuthor: 1,
@ -155,10 +154,12 @@ class PasswordKeyListLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID:state.deletKeyID, keyID:state.deletKeyID,
userID:state.deletUserID, userID:(await Storage.getUid())!,
pwdNo:state.pwdNo, pwdNo:state.pwdNo,
pwd:"000000",//state.deletPWD, pwd:"0",//state.deletPWD,
useCountLimit: 0, operate: state.isDeletAll ? 3 : 2,
isAdmin: 0,
useCountLimit: 0xffff,
startTime:0x11223344, startTime:0x11223344,
endTime:0x11223344, endTime:0x11223344,
needAuthor: 1, needAuthor: 1,

View File

@ -62,12 +62,11 @@ class _PasswordKeyListPageState extends State<PasswordKeyListPage> with RouteAwa
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
ShowTipView().showIosTipWithContentDialog('该锁的密码都将被删除'.tr, () { ShowTipView().showIosTipWithContentDialog('该锁的密码都将被删除'.tr, () {
state.isDeletPWDData = true;
state.isDeletAll = true; state.isDeletAll = true;
state.deletKeyID = "0"; state.deletKeyID = "0";
state.deletUserID = "DeleteAll!@#"; state.deletUserID = "0";
// state.deletPWD = ""; // state.deletPWD = "";
state.pwdNo = 255; state.pwdNo = 0;
logic.senderCustomPasswords(); logic.senderCustomPasswords();
}); });

View File

@ -14,7 +14,6 @@ class PasswordKeyListState {
var sureBtnState = 0.obs;// 0() 1() var sureBtnState = 0.obs;// 0() 1()
// //
var isDeletPWDData = false;
var isDeletAll = false; var isDeletAll = false;
var deletKeyID = ""; var deletKeyID = "";
var deletUserID = "DeleteAll!@#"; var deletUserID = "DeleteAll!@#";

View File

@ -4,6 +4,7 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/eventBusEventManage.dart'; import 'package:star_lock/tools/eventBusEventManage.dart';
@ -153,7 +154,8 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
keyboardPwdType:getKeyType, keyboardPwdType:getKeyType,
startDate:getEffectiveDateTime, startDate:getEffectiveDateTime,
endDate:getFailureDateTime, endDate:getFailureDateTime,
addType:'1'); addType:'1',
pwdRight:state.isAdministrator.value == true ? 1 : 0,);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.isSendSuccess.value = true; state.isSendSuccess.value = true;
state.sendSucceedType.value = state.widgetType.value; state.sendSucceedType.value = state.widgetType.value;
@ -205,23 +207,26 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async { _replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
// //
if (reply is SenderCustomPasswordsReply) { if ((reply is SenderCustomPasswordsReply) && (state.ifCurrentScreen.value == true)) {
var token = reply.data.sublist(5, 9);
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
int status = reply.data[2]; int status = reply.data[2];
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
state.sureBtnState.value = 0; state.sureBtnState.value = 0;
state.pwdNumber.value = (reply.data[9]); state.pwdNumber.value = listChangInt(reply.data.sublist(9, 11));
// AppLog.log("密码编号:${state.pwdNumber.value}");
dismissEasyLoading(); dismissEasyLoading();
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
addKeyboardPwdRequest(); addKeyboardPwdRequest();
break; break;
case 0x06: case 0x06:
// //
var token = reply.data.sublist(5, 9);
// AppLog.log("token:$token");
var saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
@ -231,9 +236,11 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: state.isAdministrator.value == true ? 254 : 0, pwdNo: 0,
pwd:state.pwdController.text, pwd:state.pwdController.text,
useCountLimit: 0xff, operate: 0,
isAdmin: state.isAdministrator.value == true ? 1 : 0,
useCountLimit: 0xffff,
startTime: DateTool().dateToTimestamp(state.customBeginTime.value, 1)~/1000, startTime: DateTool().dateToTimestamp(state.customBeginTime.value, 1)~/1000,
endTime: DateTool().dateToTimestamp(state.customEndTime.value, 1)~/1000, endTime: DateTool().dateToTimestamp(state.customEndTime.value, 1)~/1000,
needAuthor: 1, needAuthor: 1,
@ -312,11 +319,13 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: state.isAdministrator.value == true ? 254 : 0, pwdNo: 0,
pwd: state.pwdController.text, pwd:state.pwdController.text,
useCountLimit: 0xff, operate: 0,
startTime:state.isPermanent.value == false ? startDate ~/ 1000 : 0, isAdmin: state.isAdministrator.value == true ? 1 : 0,
endTime: state.isPermanent.value == false ? endDate ~/ 1000 : 0, useCountLimit: 0xffff,
startTime: DateTool().dateToTimestamp(state.customBeginTime.value, 1)~/1000,
endTime: DateTool().dateToTimestamp(state.customEndTime.value, 1)~/1000,
needAuthor: 1, needAuthor: 1,
isBeforeAddUser: false, isBeforeAddUser: false,
signKey: signKeyDataList, signKey: signKeyDataList,

View File

@ -5,6 +5,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.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/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart';
import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
@ -637,6 +638,7 @@ class _PasswordKeyPerpetualPageState extends State<PasswordKeyPerpetualPage>
value: state.isAdministrator.value, value: state.isAdministrator.value,
onChanged: (value) { onChanged: (value) {
state.isAdministrator.value = value; state.isAdministrator.value = value;
AppLog.log("isAdministrator:${state.isAdministrator.value}");
}, },
); );
} }

View File

@ -1,7 +1,4 @@
import 'dart:typed_data';
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';

View File

@ -119,9 +119,11 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: 254, pwdNo: 0,
pwd: state.adminPasswordTF.text, pwd: state.adminPasswordTF.text,
useCountLimit: 0xff, operate: 0,
isAdmin: 1,
useCountLimit: 0xffff,
startTime: 0x11223344, startTime: 0x11223344,
endTime: 0x11223344, endTime: 0x11223344,
needAuthor: 1, needAuthor: 1,
@ -256,9 +258,11 @@ class SaveLockLogic extends BaseGetXController {
IoSenderManage.senderCustomPasswordsCommand( IoSenderManage.senderCustomPasswordsCommand(
keyID: "1", keyID: "1",
userID: await Storage.getUid(), userID: await Storage.getUid(),
pwdNo: 254, pwdNo: 0,
pwd:state.adminPasswordTF.text, pwd: state.adminPasswordTF.text,
useCountLimit: 0xff, operate: 0,
isAdmin: 1,
useCountLimit: 0xffff,
startTime: 0x11223344, startTime: 0x11223344,
endTime: 0x11223344, endTime: 0x11223344,
needAuthor: 1, needAuthor: 1,

View File

@ -61,7 +61,9 @@ class ExpireCardLogic extends BaseGetXController {
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:state.deletExpireCardItemEntity.cardUserNo!, cardNo:state.deletExpireCardItemEntity.cardUserNo!,
useCountLimit:0xff, useCountLimit:0xffff,
operate: 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //
@ -110,7 +112,9 @@ class ExpireCardLogic extends BaseGetXController {
keyID:"1", keyID:"1",
userID:await Storage.getUid(), userID:await Storage.getUid(),
cardNo:state.deletExpireCardItemEntity.cardUserNo!, cardNo:state.deletExpireCardItemEntity.cardUserNo!,
useCountLimit:0xff, useCountLimit:0xffff,
operate: 2, // 0: 1 2: 3
isAdmin:0,
isForce:0, // isForce:0, //
isRound:0, // isRound:0, //
weekRound:0, // weekRound:0, //

View File

@ -74,6 +74,8 @@ class ExpireFingerprintLogic extends BaseGetXController {
signKey:signKeyDataList, signKey:signKeyDataList,
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
token: getTokenList, token: getTokenList,
isAdmin: 0,
operate: 0,
); );
break; break;
default: default:
@ -107,8 +109,6 @@ class ExpireFingerprintLogic extends BaseGetXController {
var token = await Storage.getStringList(saveBlueToken); var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!); List<int> getTokenList = changeStringListToIntList(token!);
String? userID = await Storage.getUid();
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:state.deletExpireFingerprintItemEntity.fingerprintId.toString(), keyID:state.deletExpireFingerprintItemEntity.fingerprintId.toString(),
userID:await Storage.getUid(), userID:await Storage.getUid(),
@ -125,6 +125,8 @@ class ExpireFingerprintLogic extends BaseGetXController {
signKey:signKeyDataList, signKey:signKeyDataList,
privateKey:getPrivateKeyList, privateKey:getPrivateKeyList,
token: getTokenList, token: getTokenList,
isAdmin: 0,
operate: 0,
); );
// IoSenderManage.senderAddFingerprintCommand( // IoSenderManage.senderAddFingerprintCommand(

View File

@ -452,6 +452,7 @@ class ApiProvider extends BaseProvider {
String startDate, String startDate,
String endDate, String endDate,
String addType, String addType,
int? pwdRight,
) => ) =>
post( post(
passwordKeyAddURL.toUrl, passwordKeyAddURL.toUrl,
@ -463,6 +464,7 @@ class ApiProvider extends BaseProvider {
'startDate': startDate, 'startDate': startDate,
'endDate': endDate, 'endDate': endDate,
'addType': addType, 'addType': addType,
'pwdRight': pwdRight
})); }));
// //
@ -487,7 +489,8 @@ class ApiProvider extends BaseProvider {
String isCoerced, String isCoerced,
int hoursStart, int hoursStart,
int hoursEnd, int hoursEnd,
int keyboardPwdType) => int keyboardPwdType,
int pwdRight) =>
post( post(
updatePasswordKeyURL.toUrl, updatePasswordKeyURL.toUrl,
jsonEncode({ jsonEncode({
@ -501,7 +504,8 @@ class ApiProvider extends BaseProvider {
'isCoerced': isCoerced, 'isCoerced': isCoerced,
'hoursStart': hoursStart, 'hoursStart': hoursStart,
'hoursEnd': hoursEnd, 'hoursEnd': hoursEnd,
"keyboardPwdType": keyboardPwdType "keyboardPwdType": keyboardPwdType,
"pwdRight": pwdRight
})); }));
Future<Response> clearOperationRecord(String lockId) => Future<Response> clearOperationRecord(String lockId) =>
@ -1122,7 +1126,8 @@ class ApiProvider extends BaseProvider {
String changeType, String changeType,
int startTime, int startTime,
int endTime, int endTime,
int fingerprintType) => int fingerprintType,
int fingerRight) =>
post( post(
editFingerprintURL.toUrl, editFingerprintURL.toUrl,
jsonEncode({ jsonEncode({
@ -1137,6 +1142,7 @@ class ApiProvider extends BaseProvider {
'startTime': startTime, 'startTime': startTime,
'endTime': endTime, 'endTime': endTime,
'fingerprintType': fingerprintType, 'fingerprintType': fingerprintType,
'fingerRight': fingerRight
})); }));
// //
@ -1241,7 +1247,8 @@ class ApiProvider extends BaseProvider {
List weekDay, List weekDay,
String faceName, String faceName,
String addType, String addType,
int isCoerced) => int isCoerced,
int faceRight) =>
post( post(
updateFaceUserInfoURL.toUrl, updateFaceUserInfoURL.toUrl,
jsonEncode({ jsonEncode({
@ -1256,6 +1263,7 @@ class ApiProvider extends BaseProvider {
'faceName': faceName, 'faceName': faceName,
'addType': addType, 'addType': addType,
"isCoerced": isCoerced, "isCoerced": isCoerced,
"faceRight": faceRight
})); }));
// //
@ -1333,6 +1341,7 @@ class ApiProvider extends BaseProvider {
int startTime, int startTime,
int endTime, int endTime,
int cardType, int cardType,
int cardRight,
) => ) =>
post( post(
editICCardURL.toUrl, editICCardURL.toUrl,
@ -1347,7 +1356,8 @@ class ApiProvider extends BaseProvider {
'changeType': changeType, 'changeType': changeType,
'startTime': startTime, 'startTime': startTime,
'endTime': endTime, 'endTime': endTime,
'cardType': cardType 'cardType': cardType,
'cardRight': cardRight
})); }));
// //

View File

@ -474,9 +474,10 @@ class ApiRepository {
required String startDate, required String startDate,
required String endDate, required String endDate,
required String addType, required String addType,
required int pwdRight,
}) async { }) async {
final res = await apiProvider.addKeyboardPwd(lockId, keyboardPwdName, final res = await apiProvider.addKeyboardPwd(lockId, keyboardPwdName,
keyboardPwd, keyboardPwdType, startDate, endDate, addType); keyboardPwd, keyboardPwdType, startDate, endDate, addType, pwdRight);
return PasswordKeyEntity.fromJson(res.body); return PasswordKeyEntity.fromJson(res.body);
} }
@ -502,7 +503,8 @@ class ApiRepository {
required String isCoerced, required String isCoerced,
required int hoursStart, required int hoursStart,
required int hoursEnd, required int hoursEnd,
required int keyboardPwdType}) async { required int keyboardPwdType,
required int pwdRight}) async {
final res = await apiProvider.updateKeyboardPwd( final res = await apiProvider.updateKeyboardPwd(
lockId, lockId,
keyboardPwdId, keyboardPwdId,
@ -514,7 +516,8 @@ class ApiRepository {
isCoerced, isCoerced,
hoursStart, hoursStart,
hoursEnd, hoursEnd,
keyboardPwdType); keyboardPwdType,
pwdRight);
return PasswordKeyEntity.fromJson(res.body); return PasswordKeyEntity.fromJson(res.body);
} }
@ -1296,7 +1299,8 @@ class ApiRepository {
required String changeType, required String changeType,
required int startTime, required int startTime,
required int endTime, required int endTime,
required int fingerprintType}) async { required int fingerprintType,
required int fingerRight}) async {
final res = await apiProvider.editFingerprintsData( final res = await apiProvider.editFingerprintsData(
fingerprintId, fingerprintId,
lockId, lockId,
@ -1308,7 +1312,8 @@ class ApiRepository {
changeType, changeType,
startTime, startTime,
endTime, endTime,
fingerprintType); fingerprintType,
fingerRight);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -1407,7 +1412,8 @@ class ApiRepository {
required List weekDay, required List weekDay,
required String faceName, required String faceName,
required String addType, required String addType,
required int isCoerced}) async { required int isCoerced,
required int faceRight}) async {
final res = await apiProvider.updateFaceValidity( final res = await apiProvider.updateFaceValidity(
faceId, faceId,
lockId, lockId,
@ -1419,7 +1425,8 @@ class ApiRepository {
weekDay, weekDay,
faceName, faceName,
addType, addType,
isCoerced); isCoerced,
faceRight);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
@ -1502,6 +1509,7 @@ class ApiRepository {
required int startTime, required int startTime,
required int endTime, required int endTime,
required int cardType, required int cardType,
required int cardRight,
}) async { }) async {
final res = await apiProvider.editICCardData( final res = await apiProvider.editICCardData(
lockId, lockId,
@ -1514,7 +1522,8 @@ class ApiRepository {
changeType, changeType,
startTime, startTime,
endTime, endTime,
cardType); cardType,
cardRight);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }

View File

@ -1,5 +1,3 @@
import 'package:extended_text_field/extended_text_field.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';