1,新增门锁日志页面类(未完成)

This commit is contained in:
Daisy 2024-01-09 14:05:18 +08:00
parent b107e19f69
commit 8d3b11d548
10 changed files with 921 additions and 460 deletions

View File

@ -9,6 +9,7 @@
"remoteControl":"RemoteControl",
"face":"face",
"operatingRecord":"Operating Record",
"doorLockLog":"Door lock log",
"number":"Number",
"additive":"Additive",
"addTime":"Add Time",

View File

@ -9,6 +9,7 @@
"remoteControl":"remoteControl",
"face":"face",
"operatingRecord":"operatingRecord",
"doorLockLog":"doorLockLog",
"number":"number",
"additive":"additive",
"addTime":"addTime",

View File

@ -9,6 +9,7 @@
"remoteControl":"遥控",
"face":"人脸",
"operatingRecord":"操作记录",
"doorLockLog":"门锁日志",
"number":"号",
"additive":"添加者",
"addTime":"添加时间",

View File

@ -1,6 +1,7 @@
import 'package:get/get.dart';
import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart';
import 'package:star_lock/login/register/starLock_register_binding.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_page.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_page.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart';
@ -408,6 +409,7 @@ abstract class Routers {
static const passwordKeyDetailChangeDatePage =
'/passwordKeyDetailChangeDatePage'; //
static const realTimePicturePage = '/realTimePicturePage'; //
static const doorLockLogPage = '/doorLockLogPage'; //
}
abstract class AppRouters {
@ -993,6 +995,7 @@ abstract class AppRouters {
page: () => const PasswordKeyDetailChangeDatePage()),
GetPage(
name: Routers.realTimePicturePage,
page: () => const RealTimePicturePage())
page: () => const RealTimePicturePage()),
GetPage(name: Routers.doorLockLogPage, page: () => const DoorLockLogPage())
];
}

View File

@ -0,0 +1,280 @@
import 'dart:async';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart';
import 'package:star_lock/main/lockDetail/lockOperatingRecord/lockOperatingRecordGetLastRecordTime_entity.dart';
import 'package:star_lock/tools/toast.dart';
import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_referEventRecordTime.dart';
import '../../../blue/io_reply.dart';
import '../../../blue/io_tool/io_tool.dart';
import '../../../blue/io_tool/manager_event_bus.dart';
import '../../../blue/sender_manage.dart';
import '../../../network/api_repository.dart';
import '../../../tools/baseGetXController.dart';
import '../../../tools/storage.dart';
import '../electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart';
class DoorLockLogLogic extends BaseGetXController {
DoorLockLogState state = DoorLockLogState();
//
late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() {
_replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((reply) {
// if(reply is SenderReferEventRecordNumberReply) {
// _replyReferEventRecordNumber(reply);
// }
if (reply is SenderReferEventRecordTimeReply) {
_replyReferEventRecordTime(reply);
}
});
}
//
// Future<void> _replyReferEventRecordNumber(Reply reply) async {
// int status = reply.data[2];
// switch(status){
// case 0x00:
// //
// print("${reply.commandType}数据解析成功");
// // _getLockStatus();
// break;
// case 0x06:
// //
// print("${reply.commandType}需要鉴权");
//
// break;
// case 0x07:
// //
// print("${reply.commandType}用户无权限");
//
// break;
// case 0x09:
// //
// print("${reply.commandType}权限校验错误");
//
// break;
// default:
// //
// print("${reply.commandType}失败");
//
// break;
// }
// }
//
Future<void> _replyReferEventRecordTime(Reply reply) async {
int status = reply.data[2];
switch (status) {
case 0x00:
//
print("${reply.commandType}数据解析成功");
if (reply.data[5] > 0) {
reply.data.removeRange(0, 6);
// 8
var getList = splitList(reply.data, 8);
print("getList:$getList");
var uploadList = [];
for (int i = 0; i < getList.length; i++) {
var indexList = getList[i];
print("indexList:$indexList");
var indexMap = {};
indexMap["seq"] = indexList[0].toString();
indexMap["user"] = indexList[3].toString();
indexMap["pwd"] = indexList[2].toString();
indexMap["success"] = "1";
indexMap["type"] = indexList[1].toString();
int value = ((0xff & indexList[(4)]) << 24 |
(0xff & indexList[5]) << 16 |
(0xff & indexList[6]) << 8 |
(0xFF & indexList[7]));
// indexMap["date"] = DateTool().dateToYMDHNSString("$value");
// print("value${DateTool().dateToYMDHNSString("$value")}");
indexMap["date"] = "${value * 1000}";
uploadList.add(indexMap);
}
lockRecordUploadData(uploadList);
// print("reply.data:${reply.data} getList:$getList}");
}
break;
case 0x06:
//
print("${reply.commandType}需要鉴权");
break;
case 0x07:
//
print("${reply.commandType}用户无权限");
break;
case 0x09:
//
print("${reply.commandType}权限校验错误");
break;
default:
//
print("${reply.commandType}失败");
break;
}
}
// ()
// Future<void> senderReferEventRecordNumber() async {
// BlueManage().bludSendData(BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName, (DeviceConnectionState state) async {
// if (state == DeviceConnectionState.connected) {
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
// var token = await Storage.getStringList(saveBlueToken);
// List<int> getTokenList = changeStringListToIntList(token!);
//
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
//
// IoSenderManage.senderReferEventRecordNumberCommand(
// keyID:BlueManage().connectDeviceName,
// userID:await Storage.getUid(),
// logsCount:20,
// logsNo:1,
// token:getTokenList,
// needAuthor:1,
// publicKey:getPublicKeyList,
// privateKey:getPrivateKeyList,
// );
// }
// });
// }
// ()
Future<void> senderReferEventRecordTime(int time) async {
BlueManage().bludSendData(BlueManage().connectDeviceName,
(DeviceConnectionState state) async {
if (state == DeviceConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
EasyLoading.show();
IoSenderManage.senderReferEventRecordTimeCommand(
keyID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
logsCount: 20,
// time:DateTime.now().millisecondsSinceEpoch~/1000,
time: time,
token: getTokenList,
needAuthor: 1,
publicKey: getPublicKeyList,
privateKey: getPrivateKeyList,
);
}
});
}
//
void mockNetworkDataRequest() async {
KeyOperationRecordEntity entity = await ApiRepository.to.lockRecordList(
'',
"",
'0',
state.keyInfos.value.lockId.toString(),
'1',
'1',
'20',
'',
'',
'',
'',
'',
'',
'');
if (entity.errorCode!.codeIsSuccessful) {
print("操作记录列表成功:${entity.data?.itemList}");
state.lockOperatingRecordListData.value = entity.data!.itemList!;
} else {}
}
//
void getLockRecordLastUploadDataTime() async {
LockOperatingRecordGetLastRecordTimeEntity entity = await ApiRepository.to
.getLockRecordLastUploadDataTime(
lockId: state.keyInfos.value.lockId.toString());
if (entity.errorCode!.codeIsSuccessful) {
senderReferEventRecordTime(entity.data!.operateDate! ~/ 1000);
}
}
//
void lockRecordUploadData(List list) async {
KeyOperationRecordEntity entity = await ApiRepository.to
.lockRecordUploadData(
lockId: state.keyInfos.value.lockId.toString(), records: list);
if (entity.errorCode!.codeIsSuccessful) {
mockNetworkDataRequest();
}
}
//
void clearOperationRecordRequest() async {
KeyOperationRecordEntity entity =
await ApiRepository.to.clearOperationRecord('28');
if (entity.errorCode!.codeIsSuccessful) {
Toast.show(msg: "清除数据成功");
}
}
@override
Future<void> onReady() async {
// TODO: implement onReady
super.onReady();
print("onReady()");
//
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_initReplySubscription();
mockNetworkDataRequest();
}
}
@override
Future<void> onInit() async {
// TODO: implement onInit
super.onInit();
print("onInit()");
//
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
getLockRecordLastUploadDataTime();
// senderReferEventRecordTime();
// senderReferEventRecordNumber();
}
}
@override
Future<void> onClose() async {
// TODO: implement onClose
super.onClose();
//
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
_replySubscription.cancel();
}
}
}

View File

@ -0,0 +1,142 @@
import 'package:flutter/material.dart';
import 'package:flutter_advanced_calendar/flutter_advanced_calendar.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart';
import '../../../app_settings/app_colors.dart';
import '../../../tools/custom_bottom_sheet.dart';
import '../../../tools/noData.dart';
import '../../../tools/storage.dart';
import '../../../tools/titleAppBar.dart';
import '../../../tools/toast.dart';
import '../../../translations/trans_lib.dart';
class DoorLockLogPage extends StatefulWidget {
const DoorLockLogPage({Key? key}) : super(key: key);
@override
State<DoorLockLogPage> createState() => _DoorLockLogPageState();
}
class _DoorLockLogPageState extends State<DoorLockLogPage> {
final logic = Get.put(DoorLockLogLogic());
final state = Get.find<DoorLockLogLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.mainBackgroundColor,
appBar: TitleAppBar(
barTitle: TranslationLoader.lanKeys!.doorLockLog!.tr,
haveBack: true,
backgroundColor: AppColors.mainColor,
actionsList: [
IconButton(
icon: Image.asset(
'images/icon_bar_more.png',
height: 30.h,
width: 10.w,
),
onPressed: () async {
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
// JhPopMenus.showLinePop(context, clickCallback: (index, selText) {
// print('选中index: $index');
// print('选中text: $selText');
// if (index == 0) {
// logic.mockNetworkDataRequest();
// } else if (index == 1) {
// logic.clearOperationRecordRequest();
// }
// }, listData: [
// {'text': '读取记录'},
// {'text': '清空记录'},
// {'text': '导出记录'},
// ]);
_openModalBottomSheet();
} else {
// Get.toNamed(Routers.seletLockTypePage);
Toast.show(msg: "演示模式");
}
},
),
],
),
body: SingleChildScrollView(
child: Column(
children: [
AdvancedCalendar(
controller: state.calendarControllerCustom,
events: state.events,
weekLineHeight: 50.0.h,
startWeekDay: 1,
innerDot: true,
keepLineSize: true,
calendarTextStyle: TextStyle(
fontSize: 22.sp,
fontWeight: FontWeight.w500,
height: 1.3125,
letterSpacing: 0,
),
headerStyle: TextStyle(
fontSize: 22.sp,
fontWeight: FontWeight.w500,
height: 1.3125,
letterSpacing: 0,
),
),
],
),
),
);
}
String getTypeIcon(int type) {
String title = 'images/controls_user.png';
switch (type) {
case 1:
//
title = 'images/controls_user.png';
break;
case 4:
//
title = 'images/icon_password.png';
break;
case 7:
// ic卡
title = 'images/icon_card.png';
break;
case 8:
//
title = 'images/icon_fingerprint.png';
break;
default:
break;
}
return title;
}
Future _openModalBottomSheet() async {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadiusDirectional.circular(10)),
builder: (BuildContext context) {
return AlertBottomWidget(
topTitle: '',
items: const ['读取记录', '清空记录', '导出记录'],
chooseCallback: (value) {
int getSelectIndex = value;
if (getSelectIndex == 0) {
logic.mockNetworkDataRequest();
} else if (getSelectIndex == 1) {
logic.clearOperationRecordRequest();
}
},
);
});
}
}

View File

@ -0,0 +1,21 @@
import 'package:flutter_advanced_calendar/flutter_advanced_calendar.dart';
import 'package:get/get.dart';
import '../../lockMian/entity/lockListInfo_entity.dart';
import '../electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart';
class DoorLockLogState {
final keyInfos = LockListInfoItemEntity().obs;
final lockOperatingRecordListData = <KeyRecordDataItem>[].obs;
final calendarControllerToday = AdvancedCalendarController.today();
final calendarControllerCustom =
AdvancedCalendarController(DateTime(2024, 01, 09));
final events = <DateTime>[
DateTime.now(),
DateTime(2024, 10, 10),
];
DoorLockLogState() {
keyInfos.value = Get.arguments["keyInfo"];
}
}

View File

@ -92,7 +92,7 @@ class _LockDetailPageState extends State<LockDetailPage>
),
Obx(() => Visibility(
visible: state.iSClosedUnlockSuccessfulPopup.value,
// visible: true,
// visible: true,
child: GestureDetector(
onTap: () {
state.iSClosedUnlockSuccessfulPopup.value = false;
@ -434,7 +434,9 @@ class _LockDetailPageState extends State<LockDetailPage>
//
bottomItem('images/main/icon_main_operatingRecord.png',
TranslationLoader.lanKeys!.operatingRecord!.tr, () {
Get.toNamed(Routers.lockOperatingRecordPage,
// Get.toNamed(Routers.lockOperatingRecordPage,
// arguments: {"keyInfo": widget.lockListInfoItemEntity});
Get.toNamed(Routers.doorLockLogPage,
arguments: {"keyInfo": widget.lockListInfoItemEntity});
}),
//
@ -561,12 +563,14 @@ class _LockDetailPageState extends State<LockDetailPage>
alignment: Alignment.center,
children: [
Image.asset(
state.iSOpenLock.value == true ? 'images/main/unlocked_bg.png' : 'images/main/locked_bg.png',
state.iSOpenLock.value == true
? 'images/main/unlocked_bg.png'
: 'images/main/locked_bg.png',
width: 358.w,
height: 348.h,
),
Positioned(
top: (1.sh - ScreenUtil().statusBarHeight * 2)/ 2,
top: (1.sh - ScreenUtil().statusBarHeight * 2) / 2,
child: Column(
children: [
Text(

View File

@ -1,457 +1,458 @@
class LanKeyEntity {
LanKeyEntity(
{this.starLock,
this.clickUnlockAndHoldDownClose,
this.checkingIn,
this.electronicKey,
this.password,
this.card,
this.fingerprint,
this.remoteControl,
this.face,
this.operatingRecord,
this.number,
this.additive,
this.addTime,
this.reset,
this.sendKey,
this.timeLimit,
this.permanent,
this.once,
this.circulation,
this.receiver,
this.pleaseEnterNumberOrEmail,
this.name,
this.enterYourName,
this.effectiveTime,
this.failureTime,
this.effectiveDate,
this.failureDate,
this.monday,
this.tuesday,
this.wednesday,
this.thursday,
this.friday,
this.saturday,
this.sunday,
this.mondayShort,
this.tuesdayShort,
this.wednesdayShort,
this.thursdayShort,
this.fridayShort,
this.saturdayShort,
this.sundayShort,
this.realNameAuthentication,
this.sendKeyBottomTip,
this.send,
this.periodValidity,
this.sendGroupKey,
this.lock,
this.pleaseAdd,
this.pleaseSelet,
this.remoteUnlockingAllowed,
this.pleaseEnter,
this.getPassword,
this.custom,
this.clearAll,
this.recursiveDevice,
this.pleaseNameYourPassword,
this.pleaseEnterDigitsNumber,
this.getPasswordTip1,
this.getPasswordTip2,
this.getPasswordTip3,
this.getPasswordTip4,
this.getPasswordTip5,
this.getPasswordTip6,
this.getTip,
this.addTip,
this.sender,
this.senderTime,
this.keyDetail,
this.detail,
this.delete,
this.passwordDetail,
this.share,
this.amend,
this.sure,
this.cancel,
this.add,
this.accountNumber,
this.volumeAuthorizationLock,
this.authorizedAdminTip,
this.lockOperatingRecordTip,
this.rankingList,
this.earlyArrivalList,
this.lateList,
this.hardWorkingList,
this.basicInformation,
this.wirelessKeyboard,
this.doorMagnetic,
this.remoteUnlocking,
this.automaticBlocking,
this.normallyOpenMode,
this.automaticUnLock,
this.automaticUnLockTip,
this.lockSound,
this.burglarAlarm,
this.resetButton,
this.lockTime,
this.diagnose,
this.uploadData,
this.importOtherLockData,
this.lockEscalation,
this.markedHouseState,
this.unlockReminder,
this.unlockQRCode,
this.lockNumber,
this.electricQuantity,
this.lockName,
this.lockGrouping,
this.selectGroup,
this.createNewGroup,
this.adminOpenLockPassword,
this.update,
this.updateElectricQuantityTip,
this.adminOpenLockPasswordTip,
this.updateLockAdminPassword,
this.whenScreenFlashesClickNext,
this.theScreenNeverFlickered,
this.enterNumberOrPressSet,
this.theLocationOfTheSetKeyWillBeDifferent,
this.pressAndHoldTheResetButtonTwoSeconds,
this.nearbyEquipment,
this.noData,
this.doorMagneticListTopTip,
this.remoteUnlockingPageTip,
this.currentMode,
this.delayTime,
this.automaticBlockingTip,
this.time,
this.normallyOpen,
this.date,
this.begin,
this.end,
this.allDay,
this.save,
this.normallyOpenModeTip,
this.pleaseSeletLockVolume,
this.lockSoundTip,
this.low,
this.lower,
this.medium,
this.high,
this.higher,
this.burglarAlarmTip,
this.resetButtonTip1,
this.resetButtonTip2,
this.calibrationTime,
this.setTheDSTMode,
this.diagnoseTip,
this.uploading,
this.uploadDataTip,
this.importOtherLockDataTip,
this.haveNewVersion,
this.currentVersion,
this.newVersion,
this.upgrade,
this.leisure,
this.checkedIn,
this.company,
this.staff,
this.work,
this.workday,
this.holidays,
this.punchingMode,
this.whetherTheEmployeeHasAKey,
this.selectKey,
this.officeHours,
this.closingTime,
this.thisWeek,
this.singleDayWeekend,
this.twoDaysOff,
this.oddOrEvenDaysOff,
this.year,
this.month,
this.libertyDay,
this.coverDate,
this.addedHoliday,
this.startDate,
this.accessDate,
this.mustFillIn,
this.endDate,
this.dailyCharts,
this.monthlyLeaderboard,
this.noAttendanceRecord,
this.everyoneIsVeryMotivated,
this.workingHoursWereNotReleased,
this.beLate,
this.leaveEarly,
this.noCardPunched,
this.holidayInfo,
this.lanEnglish,
this.lanChinese,
this.multilingual,
this.addLock,
this.lockAddress,
this.selectLockType,
this.videoIntercomDoorLock,
this.NFCPassiveLock,
this.addDevice,
this.gateway,
this.message,
this.supportStaff,
this.set,
this.moreServices,
this.moreSet,
this.prompTone,
this.touchUnlock,
this.pushNotification,
this.lockUserManagement,
this.ownedKey,
this.authorityManagement,
this.associatedDevice,
this.associatedName,
this.device,
this.authorizedAdmin,
this.addAuthorizedAdmin,
this.lockGroup,
this.transferSmartLock,
this.selectiveLock,
this.recipientInformation,
this.transferGateway,
this.multiLanguage,
this.lockScreen,
this.closed,
this.opened,
this.close,
this.open,
this.hideInvalidUnlockPermissions,
this.appUnlockRequiresMobilePhoneAccessToTheLock,
this.valueAddedServices,
this.about,
this.userAgreement,
this.privacyPolicy,
this.personalInformationCollectionList,
this.applicationPermissionDescription,
this.thirdPartyInformationSharingList,
this.logout,
this.deleteAccount,
this.personalInformation,
this.avatar,
this.nickName,
this.changeNickName,
this.modifyAccount,
this.resetPasswords,
this.safetyProblem,
this.modifyAccountTip,
this.pleaseEnterAccountNumber,
this.pleaseEnterNewAccountNumber,
this.changeIphoneTip,
this.changeEmailTip,
this.goBind,
this.originalPassword,
this.newPassword,
this.surePassword,
this.safetyProblemTip,
this.problemOne,
this.problemTwo,
this.problemThree,
this.pleaseEnterYourAnswer,
this.aboutToExpire,
this.deAuthorize,
this.changeName,
this.designation,
this.state,
this.wifiName,
this.networkMAC,
this.gatewayUpgrade,
this.gatewayConnectionLock,
this.strongSignal,
this.mediumSignal,
this.averageSignal,
this.weakSignal,
this.selectGatewayType,
this.addGateway,
this.turnThePowerBackOn,
this.indicatorLight,
this.seletGatewayTypeNextTip,
this.selectGateway,
this.gatewayConfigurationWifiTip,
this.wifiPassward,
this.pleaseEnterTheWiFiPassword,
this.gatewayName,
this.pleaseEnterGatewayName,
this.wifiMAC,
this.ipAddress,
this.subnetMask,
this.defaultGateway,
this.automaticallyGetTheDNSServerAddress,
this.preferredDNS,
this.alternativeDNS,
this.noStaticIPIsUsed,
this.allLock,
this.searchAllLockType,
this.doorLock,
this.padlock,
this.safeLock,
this.intelligentLockCore,
this.itelligentAccessControl,
this.parkingLock,
this.bicycleLock,
this.longRangeControl,
this.lightTouchScreen,
this.lightTouchScreenTip,
this.next,
this.nearbyLock,
this.addSuccessfullyPleaseRename,
this.whenAddingLockThePhoneMustBeNextToTheLock,
this.login,
this.register,
this.forgetPassword,
this.readAndAgree,
this.verificationCode,
this.registerPasswordTip,
this.iphone,
this.email,
this.mobileNumber,
this.countryAndRegion,
this.selet,
this.businessCooperation,
this.officialWebsite,
this.computerWebVersion,
this.hotelSystem,
this.manualWebVersion,
this.introduce,
this.note,
this.mail,
this.advancedFunction,
this.pushMessage,
this.recordsRetention,
this.smsBuyTip,
this.emailBuyTip,
this.currentRemainingQuantity,
this.buy,
this.customSMSTemplate,
this.customMailTemplate,
this.record,
this.buyRealNameTip,
this.buyRealNameSeletYouWantBuyTip,
this.forTheFirstTime,
this.onceDay,
this.weekOnce,
this.monthOnce,
this.currentState,
this.onTrial,
this.haveNotOpened,
this.advancedFeaturesAndBenefitsContent,
this.smsTemplate,
this.emailTemplate,
this.cardIssuingtool,
this.titleForBuyingAdvancedFeatures,
this.tipsForBuyingAdvancedFeatures,
this.freeTrial,
this.openNow,
this.buySMS,
this.buyMail,
this.buyRealNameAuthenticationTimes,
this.enablingAdvancedFeatures,
this.chooseAPackage,
this.modeOfPayment,
this.alipay,
this.goToPay,
this.customTemplatesTip,
this.haveOpened,
this.unHaveOpenedTip1,
this.unHaveOpenedTip2,
this.freeTrialKeywords,
this.goToTheOpen,
this.creatingANewTemplate,
this.type,
this.templateContent,
this.preview,
this.hello,
this.yourRoomIs,
this.roomName,
this.theCodeToOpenTheDoorIs,
this.templateTip1,
this.templateTip2,
this.templateTip3,
this.expectedNotoCount,
this.templateTip4,
this.and,
this.willBeReplacedWithTheActualValue,
this.downloadLink,
this.lockScreenTip,
this.hideInvalidUnlockPermissionsTip,
this.appUnlockRequiresMobilePhoneAccessToTheLockTip,
this.checkAll,
this.getVerificationCode,
this.configuringWiFi,
this.pleaseEnterWifiName,
this.wifiPwd,
this.pleaseEnterWifiPwd,
this.wifiDistributionNetwork,
this.attendanceRecord,
this.edit,
this.stressFingerprint,
this.effectiveDay,
this.whetherTheEmployeeHasPassword,
this.whetherTheEmployeeHasCard,
this.whetherTheEmployeeHasFingerprint,
this.seletPassword,
this.seletCard,
this.seletFingerprint,
this.getKey,
this.getCard,
this.getFingerprint,
this.safeVerify,
this.deleteAccountTips,
this.humanFace,
this.monitoring,
this.videoLog,
this.messageReminding,
this.superAdmin,
this.normalUser,
this.gatewayDevice,
this.illumination,
this.doorOpener,
this.faceUnlocks,
this.catEyeSet,
this.openingDirectionSet,
this.motorPowerSetting,
this.bluetoothBroadcast,
this.whetherInternetRequiredWhenUnlocking,
this.selectTheLockToJoinTheGroup,
this.lockTrCount,
this.xiaomiIOTPlatform,
this.connectBlueErrorTip,
this.pleaseEnterAGroupName,
this.hint,
this.areYouSureYouWantToDeleteIt,
this.faceUnlocksSet,
this.automaticBrighteningScreen,
this.sensingDistance,
this.sensingDistanceTip,
this.preventWrongOpening,
this.preventWrongOpeningTip,
this.remote,
this.closeRange,
this.addAndUseFaceWhenUnlocking,
this.addAndUseFaceWhenUnlockingTip,
this.second,
this.motorPowerSettingTip,
this.miniwatt,
this.miniwattTip,
this.highPower,
this.highPowerTip,
this.openingDirectionSetTip,
this.openLeft,
this.openRight,
this.judgmentMethod,
this.judgmentMethodContent,
this.stressPassword,
this.stressCard,
});
LanKeyEntity({
this.starLock,
this.clickUnlockAndHoldDownClose,
this.checkingIn,
this.electronicKey,
this.password,
this.card,
this.fingerprint,
this.remoteControl,
this.face,
this.operatingRecord,
this.doorLockLog,
this.number,
this.additive,
this.addTime,
this.reset,
this.sendKey,
this.timeLimit,
this.permanent,
this.once,
this.circulation,
this.receiver,
this.pleaseEnterNumberOrEmail,
this.name,
this.enterYourName,
this.effectiveTime,
this.failureTime,
this.effectiveDate,
this.failureDate,
this.monday,
this.tuesday,
this.wednesday,
this.thursday,
this.friday,
this.saturday,
this.sunday,
this.mondayShort,
this.tuesdayShort,
this.wednesdayShort,
this.thursdayShort,
this.fridayShort,
this.saturdayShort,
this.sundayShort,
this.realNameAuthentication,
this.sendKeyBottomTip,
this.send,
this.periodValidity,
this.sendGroupKey,
this.lock,
this.pleaseAdd,
this.pleaseSelet,
this.remoteUnlockingAllowed,
this.pleaseEnter,
this.getPassword,
this.custom,
this.clearAll,
this.recursiveDevice,
this.pleaseNameYourPassword,
this.pleaseEnterDigitsNumber,
this.getPasswordTip1,
this.getPasswordTip2,
this.getPasswordTip3,
this.getPasswordTip4,
this.getPasswordTip5,
this.getPasswordTip6,
this.getTip,
this.addTip,
this.sender,
this.senderTime,
this.keyDetail,
this.detail,
this.delete,
this.passwordDetail,
this.share,
this.amend,
this.sure,
this.cancel,
this.add,
this.accountNumber,
this.volumeAuthorizationLock,
this.authorizedAdminTip,
this.lockOperatingRecordTip,
this.rankingList,
this.earlyArrivalList,
this.lateList,
this.hardWorkingList,
this.basicInformation,
this.wirelessKeyboard,
this.doorMagnetic,
this.remoteUnlocking,
this.automaticBlocking,
this.normallyOpenMode,
this.automaticUnLock,
this.automaticUnLockTip,
this.lockSound,
this.burglarAlarm,
this.resetButton,
this.lockTime,
this.diagnose,
this.uploadData,
this.importOtherLockData,
this.lockEscalation,
this.markedHouseState,
this.unlockReminder,
this.unlockQRCode,
this.lockNumber,
this.electricQuantity,
this.lockName,
this.lockGrouping,
this.selectGroup,
this.createNewGroup,
this.adminOpenLockPassword,
this.update,
this.updateElectricQuantityTip,
this.adminOpenLockPasswordTip,
this.updateLockAdminPassword,
this.whenScreenFlashesClickNext,
this.theScreenNeverFlickered,
this.enterNumberOrPressSet,
this.theLocationOfTheSetKeyWillBeDifferent,
this.pressAndHoldTheResetButtonTwoSeconds,
this.nearbyEquipment,
this.noData,
this.doorMagneticListTopTip,
this.remoteUnlockingPageTip,
this.currentMode,
this.delayTime,
this.automaticBlockingTip,
this.time,
this.normallyOpen,
this.date,
this.begin,
this.end,
this.allDay,
this.save,
this.normallyOpenModeTip,
this.pleaseSeletLockVolume,
this.lockSoundTip,
this.low,
this.lower,
this.medium,
this.high,
this.higher,
this.burglarAlarmTip,
this.resetButtonTip1,
this.resetButtonTip2,
this.calibrationTime,
this.setTheDSTMode,
this.diagnoseTip,
this.uploading,
this.uploadDataTip,
this.importOtherLockDataTip,
this.haveNewVersion,
this.currentVersion,
this.newVersion,
this.upgrade,
this.leisure,
this.checkedIn,
this.company,
this.staff,
this.work,
this.workday,
this.holidays,
this.punchingMode,
this.whetherTheEmployeeHasAKey,
this.selectKey,
this.officeHours,
this.closingTime,
this.thisWeek,
this.singleDayWeekend,
this.twoDaysOff,
this.oddOrEvenDaysOff,
this.year,
this.month,
this.libertyDay,
this.coverDate,
this.addedHoliday,
this.startDate,
this.accessDate,
this.mustFillIn,
this.endDate,
this.dailyCharts,
this.monthlyLeaderboard,
this.noAttendanceRecord,
this.everyoneIsVeryMotivated,
this.workingHoursWereNotReleased,
this.beLate,
this.leaveEarly,
this.noCardPunched,
this.holidayInfo,
this.lanEnglish,
this.lanChinese,
this.multilingual,
this.addLock,
this.lockAddress,
this.selectLockType,
this.videoIntercomDoorLock,
this.NFCPassiveLock,
this.addDevice,
this.gateway,
this.message,
this.supportStaff,
this.set,
this.moreServices,
this.moreSet,
this.prompTone,
this.touchUnlock,
this.pushNotification,
this.lockUserManagement,
this.ownedKey,
this.authorityManagement,
this.associatedDevice,
this.associatedName,
this.device,
this.authorizedAdmin,
this.addAuthorizedAdmin,
this.lockGroup,
this.transferSmartLock,
this.selectiveLock,
this.recipientInformation,
this.transferGateway,
this.multiLanguage,
this.lockScreen,
this.closed,
this.opened,
this.close,
this.open,
this.hideInvalidUnlockPermissions,
this.appUnlockRequiresMobilePhoneAccessToTheLock,
this.valueAddedServices,
this.about,
this.userAgreement,
this.privacyPolicy,
this.personalInformationCollectionList,
this.applicationPermissionDescription,
this.thirdPartyInformationSharingList,
this.logout,
this.deleteAccount,
this.personalInformation,
this.avatar,
this.nickName,
this.changeNickName,
this.modifyAccount,
this.resetPasswords,
this.safetyProblem,
this.modifyAccountTip,
this.pleaseEnterAccountNumber,
this.pleaseEnterNewAccountNumber,
this.changeIphoneTip,
this.changeEmailTip,
this.goBind,
this.originalPassword,
this.newPassword,
this.surePassword,
this.safetyProblemTip,
this.problemOne,
this.problemTwo,
this.problemThree,
this.pleaseEnterYourAnswer,
this.aboutToExpire,
this.deAuthorize,
this.changeName,
this.designation,
this.state,
this.wifiName,
this.networkMAC,
this.gatewayUpgrade,
this.gatewayConnectionLock,
this.strongSignal,
this.mediumSignal,
this.averageSignal,
this.weakSignal,
this.selectGatewayType,
this.addGateway,
this.turnThePowerBackOn,
this.indicatorLight,
this.seletGatewayTypeNextTip,
this.selectGateway,
this.gatewayConfigurationWifiTip,
this.wifiPassward,
this.pleaseEnterTheWiFiPassword,
this.gatewayName,
this.pleaseEnterGatewayName,
this.wifiMAC,
this.ipAddress,
this.subnetMask,
this.defaultGateway,
this.automaticallyGetTheDNSServerAddress,
this.preferredDNS,
this.alternativeDNS,
this.noStaticIPIsUsed,
this.allLock,
this.searchAllLockType,
this.doorLock,
this.padlock,
this.safeLock,
this.intelligentLockCore,
this.itelligentAccessControl,
this.parkingLock,
this.bicycleLock,
this.longRangeControl,
this.lightTouchScreen,
this.lightTouchScreenTip,
this.next,
this.nearbyLock,
this.addSuccessfullyPleaseRename,
this.whenAddingLockThePhoneMustBeNextToTheLock,
this.login,
this.register,
this.forgetPassword,
this.readAndAgree,
this.verificationCode,
this.registerPasswordTip,
this.iphone,
this.email,
this.mobileNumber,
this.countryAndRegion,
this.selet,
this.businessCooperation,
this.officialWebsite,
this.computerWebVersion,
this.hotelSystem,
this.manualWebVersion,
this.introduce,
this.note,
this.mail,
this.advancedFunction,
this.pushMessage,
this.recordsRetention,
this.smsBuyTip,
this.emailBuyTip,
this.currentRemainingQuantity,
this.buy,
this.customSMSTemplate,
this.customMailTemplate,
this.record,
this.buyRealNameTip,
this.buyRealNameSeletYouWantBuyTip,
this.forTheFirstTime,
this.onceDay,
this.weekOnce,
this.monthOnce,
this.currentState,
this.onTrial,
this.haveNotOpened,
this.advancedFeaturesAndBenefitsContent,
this.smsTemplate,
this.emailTemplate,
this.cardIssuingtool,
this.titleForBuyingAdvancedFeatures,
this.tipsForBuyingAdvancedFeatures,
this.freeTrial,
this.openNow,
this.buySMS,
this.buyMail,
this.buyRealNameAuthenticationTimes,
this.enablingAdvancedFeatures,
this.chooseAPackage,
this.modeOfPayment,
this.alipay,
this.goToPay,
this.customTemplatesTip,
this.haveOpened,
this.unHaveOpenedTip1,
this.unHaveOpenedTip2,
this.freeTrialKeywords,
this.goToTheOpen,
this.creatingANewTemplate,
this.type,
this.templateContent,
this.preview,
this.hello,
this.yourRoomIs,
this.roomName,
this.theCodeToOpenTheDoorIs,
this.templateTip1,
this.templateTip2,
this.templateTip3,
this.expectedNotoCount,
this.templateTip4,
this.and,
this.willBeReplacedWithTheActualValue,
this.downloadLink,
this.lockScreenTip,
this.hideInvalidUnlockPermissionsTip,
this.appUnlockRequiresMobilePhoneAccessToTheLockTip,
this.checkAll,
this.getVerificationCode,
this.configuringWiFi,
this.pleaseEnterWifiName,
this.wifiPwd,
this.pleaseEnterWifiPwd,
this.wifiDistributionNetwork,
this.attendanceRecord,
this.edit,
this.stressFingerprint,
this.effectiveDay,
this.whetherTheEmployeeHasPassword,
this.whetherTheEmployeeHasCard,
this.whetherTheEmployeeHasFingerprint,
this.seletPassword,
this.seletCard,
this.seletFingerprint,
this.getKey,
this.getCard,
this.getFingerprint,
this.safeVerify,
this.deleteAccountTips,
this.humanFace,
this.monitoring,
this.videoLog,
this.messageReminding,
this.superAdmin,
this.normalUser,
this.gatewayDevice,
this.illumination,
this.doorOpener,
this.faceUnlocks,
this.catEyeSet,
this.openingDirectionSet,
this.motorPowerSetting,
this.bluetoothBroadcast,
this.whetherInternetRequiredWhenUnlocking,
this.selectTheLockToJoinTheGroup,
this.lockTrCount,
this.xiaomiIOTPlatform,
this.connectBlueErrorTip,
this.pleaseEnterAGroupName,
this.hint,
this.areYouSureYouWantToDeleteIt,
this.faceUnlocksSet,
this.automaticBrighteningScreen,
this.sensingDistance,
this.sensingDistanceTip,
this.preventWrongOpening,
this.preventWrongOpeningTip,
this.remote,
this.closeRange,
this.addAndUseFaceWhenUnlocking,
this.addAndUseFaceWhenUnlockingTip,
this.second,
this.motorPowerSettingTip,
this.miniwatt,
this.miniwattTip,
this.highPower,
this.highPowerTip,
this.openingDirectionSetTip,
this.openLeft,
this.openRight,
this.judgmentMethod,
this.judgmentMethodContent,
this.stressPassword,
this.stressCard,
});
LanKeyEntity.fromJson(dynamic json) {
starLock = json['starLock'];
@ -464,6 +465,7 @@ class LanKeyEntity {
remoteControl = json['remoteControl'];
face = json['face'];
operatingRecord = json['operatingRecord'];
doorLockLog = json['doorLockLog'];
number = json['number'];
additive = json['additive'];
addTime = json['addTime'];
@ -905,7 +907,8 @@ class LanKeyEntity {
openingDirectionSet = json['openingDirectionSet'];
motorPowerSetting = json['motorPowerSetting'];
bluetoothBroadcast = json['bluetoothBroadcast'];
whetherInternetRequiredWhenUnlocking = json['whetherInternetRequiredWhenUnlocking'];
whetherInternetRequiredWhenUnlocking =
json['whetherInternetRequiredWhenUnlocking'];
selectTheLockToJoinTheGroup = json['selectTheLockToJoinTheGroup'];
lockTrCount = json['lockTrCount'];
xiaomiIOTPlatform = json['xiaomiIOTPlatform'];
@ -950,6 +953,7 @@ class LanKeyEntity {
String? remoteControl;
String? face;
String? operatingRecord;
String? doorLockLog;
String? number;
String? additive;
String? addTime;
@ -1426,6 +1430,7 @@ class LanKeyEntity {
map['remoteControl'] = remoteControl;
map['face'] = face;
map['operatingRecord'] = operatingRecord;
map['doorLockLog'] = doorLockLog;
map['number'] = number;
map['additive'] = additive;
map['addTime'] = addTime;
@ -1864,7 +1869,8 @@ class LanKeyEntity {
map['openingDirectionSet'] = openingDirectionSet;
map['motorPowerSetting'] = motorPowerSetting;
map['bluetoothBroadcast'] = bluetoothBroadcast;
map['whetherInternetRequiredWhenUnlocking'] = whetherInternetRequiredWhenUnlocking;
map['whetherInternetRequiredWhenUnlocking'] =
whetherInternetRequiredWhenUnlocking;
map['selectTheLockToJoinTheGroup'] = selectTheLockToJoinTheGroup;
map['lockTrCount'] = lockTrCount;
map['xiaomiIOTPlatform'] = xiaomiIOTPlatform;

View File

@ -134,6 +134,8 @@ dependencies:
flutter_voice_processor: ^1.1.0
#监听网络连接状态
connectivity_plus: ^5.0.2
flutter_advanced_calendar: ^1.4.1
dev_dependencies:
flutter_test:
sdk: flutter