From 45cc0801e5c28938a7c7e8ffb34dc7b229f6de8e Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Fri, 3 Nov 2023 13:57:32 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=BA=E8=84=B8=E7=9B=B8=E5=85=B3=202=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=B6=88=E6=81=AF=E9=80=9A=E7=9F=A5=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 1 + star_lock/images/lan/lan_keys.json | 1 + star_lock/images/lan/lan_zh.json | 1 + star_lock/images/main/icon_main_addFace.png | Bin 0 -> 24895 bytes star_lock/lib/appRouters.dart | 10 +- star_lock/lib/app_settings/app_colors.dart | 4 +- .../lcokSet/lockSet/lockSet_page.dart | 10 + .../msgNotification/msgNotification_page.dart | 253 +++++++++++++++++ .../lockDetail/lockDetail_page.dart | 7 +- .../otherTypeKey/addFace/addFace_page.dart | 75 +++++ .../otherTypeAddKey_logic.dart | 6 + .../otherTypeKeyList_page.dart | 265 +++++++++++------- star_lock/lib/tools/commonItem.dart | 8 +- star_lock/lib/translations/lanKeyEntity.dart | 4 + 14 files changed, 530 insertions(+), 115 deletions(-) create mode 100644 star_lock/images/main/icon_main_addFace.png create mode 100644 star_lock/lib/main/lockDetail/lcokSet/msgNotification/msgNotification_page.dart create mode 100644 star_lock/lib/main/lockDetail/otherTypeKey/addFace/addFace_page.dart diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index c2e3d8e6..5bf5d871 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -7,6 +7,7 @@ "card":"Card", "fingerprint":"Fingerprint", "remoteControl":"RemoteControl", + "face":"face", "operatingRecord":"Operating Record", "number":"Number", "additive":"Additive", diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 945a186f..f85db14a 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -7,6 +7,7 @@ "card":"card", "fingerprint":"fingerprint", "remoteControl":"remoteControl", + "face":"face", "operatingRecord":"operatingRecord", "number":"number", "additive":"additive", diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index 567fc529..8a2b635f 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -7,6 +7,7 @@ "card":"卡", "fingerprint":"指纹", "remoteControl":"遥控", + "face":"人脸", "operatingRecord":"操作记录", "number":"号", "additive":"添加者", diff --git a/star_lock/images/main/icon_main_addFace.png b/star_lock/images/main/icon_main_addFace.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b7a96b4bac1480c624a4b3f48a0afdfe07c78d GIT binary patch literal 24895 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 z z5vpPR6WQ#8{(LMBOzL9`UM9?&NV0kFOCnoe;YkyNfuoTfstjO5`U>}UBr!<%Ce%=% z-PJAyHY4&a-%7(A0KI-jI{L&E%1G41i{Cp^UEY4{)v_zF1MbD;W$nW=CmX#!=B!Gl zR1T~CX%4RrMpLjhsZ2e=9m94XP3ez42ad;q3BDF6b;I8$RTiXmMSVR3YS4>r-s<6s zFxXKqcJ!2VeO;gCG|FZ6l!^j686ZUMXg~}GlLGy$q_rL>3G57l-J$a73z6(kIe%u+ zK<8VrfE`tcc>}Ks+O$bQMm(w*y1Z83un{2(Ogui>QWm7d`z9RE53F}8x`iRBijDq6uj!) zu{i(`!*m#6-`m~*yT(7Dw{W#O9zgd~RW?txx}gcD*2frvQZv|Gmx(Bnc~9oaJ%N6E zYg>|E--=N@?`gGdk%nb*}HYr{x|!Qyl-h0qrSo}zd^4vss?^Lg`q_XBjtI@%GVv4c(PqO zcLr$LMx9A5s?4kggYzh!Wd&QC8)a?nPT9QmPTAeijt2pGTXS~xkji%x*RS!Qx~a=| z602DevX{20%zh$EfAsFy9AFYVDZp+DTL5WSD#wjWua}jlJ|>AD(iNB)^hkHWuYrP^ z!ZH8=Ix!Ql1Ivl++gTlV_-bvU>A|2FP@|^w#TEqsW6K_lJ;m z_QYCou8Kh<$oqj<9Z)*aB)0=^FX_dE-aQ-#rWaQtgMcK(rM&a<4+_fy>;lJ)mmuoU z9@}NJmPUE3hcg+LV-W1u;_oU`*N{>fMpV7xOUj4y$r4|XWDhrDa zw;6-jCAD`LK<2uZJW>JF)|borUYYL-wYynNHyKG*}J z@vw^t$|8<#GI_5_$qBNjw zi^nu7RR>wl&v*gs0u$x<4c40M0Cer0|<^Kn5!72dQUwE?s0000 const OpenDoorDirectionPage()), GetPage( name: Routers.catEyeWorkModePage, - page: () => const CatEyeWorkModePage()) + page: () => const CatEyeWorkModePage()), + GetPage( + name: Routers.msgNotificationPage, + page: () => const MsgNotificationPage()), + GetPage(name: Routers.addFaceTipPage, page: () => const AddFaceTipPage()) ]; } diff --git a/star_lock/lib/app_settings/app_colors.dart b/star_lock/lib/app_settings/app_colors.dart index 7b87d4c8..eb871936 100644 --- a/star_lock/lib/app_settings/app_colors.dart +++ b/star_lock/lib/app_settings/app_colors.dart @@ -123,5 +123,7 @@ class AppColors { static const toBeReceiveBgColor = Color.fromRGBO(246, 203, 203, 1); //待接收红色背景 static const expireTextBgColor = Color.fromRGBO(253, 166, 8, 1); //即将到期时间字体背景色 static const blueTextTipsColor = Color.fromRGBO(0, 113, 255, 1); //蓝色字体tips - static const blueViewBgColor = Color.fromRGBO(223, 237, 254, 1); //蓝色背景板 + static const blueViewBgColor = + Color.fromRGBO(223, 237, 254, 1); //蓝色背景板 139 148 176 + static const msgNoticeTextColor = Color.fromRGBO(139, 148, 176, 1); //消息通知字体颜色 } diff --git a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart index 31774b6c..b199374a 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart @@ -281,6 +281,16 @@ class _LockSetPageState extends State with RouteAware { Get.toNamed(Routers.faceUnlockPage); })), // ), + Visibility( + visible: true, + child: CommonItem( + leftTitel: '消息通知', + rightTitle: "", + isHaveLine: true, + isHaveDirection: true, + action: () { + Get.toNamed(Routers.msgNotificationPage); + })), Visibility( visible: true, child: CommonItem( diff --git a/star_lock/lib/main/lockDetail/lcokSet/msgNotification/msgNotification_page.dart b/star_lock/lib/main/lockDetail/lcokSet/msgNotification/msgNotification_page.dart new file mode 100644 index 00000000..5ba9d195 --- /dev/null +++ b/star_lock/lib/main/lockDetail/lcokSet/msgNotification/msgNotification_page.dart @@ -0,0 +1,253 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:star_lock/tools/custom_bottom_sheet.dart'; + +import '../../../../app_settings/app_colors.dart'; +import '../../../../tools/commonItem.dart'; +import '../../../../tools/titleAppBar.dart'; + +class MsgNotificationPage extends StatefulWidget { + const MsgNotificationPage({Key? key}) : super(key: key); + + @override + State createState() => _MsgNotificationPageState(); +} + +class _MsgNotificationPageState extends State { + bool faceOn = false; //面容开锁 + bool autoBright = false; //自动亮屏 + String senseDistance = '远距离'; //感应距离 + String antiMisoperation = '关闭'; //防误开 + List senseDistanceList = ['远距离', '近距离']; + List antiMisoperationList = ['关闭', '5秒', '10秒', '15秒', '30秒', '60秒']; + + //高亮样式 + final TextStyle titleStyle = TextStyle( + color: Colors.black, fontSize: 24.sp, fontWeight: FontWeight.w500); + //默认样式 + final TextStyle subTipsStyle = + TextStyle(color: AppColors.placeholderTextColor, fontSize: 22.sp); + + late InlineSpan tipsPreviewSpan = TextSpan(children: [ + TextSpan(text: '添加和使用面容开锁时:\n', style: titleStyle), + TextSpan( + text: + '\n1、请尽量保持单人在门前操作;\n2、请站立在门锁正前方约0.5~0.8米,面向门锁;\n3、请保持脸部无遮挡,露出五官;\n4、面容识别异常时,可触摸数字键盘任意按键,手动重启人脸识别。', + style: subTipsStyle), + ]); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: TitleAppBar( + barTitle: '消息通知', + haveBack: true, + backgroundColor: AppColors.mainColor), + body: Column( + children: [ + Container( + alignment: Alignment.centerLeft, + margin: EdgeInsets.only(left: 40.w, top: 40.h, bottom: 30.h), + child: Text( + '门锁通知', + style: TextStyle( + color: AppColors.msgNoticeTextColor, fontSize: 24.sp), + ), + ), + CommonItem( + leftTitel: '回家开门', + rightTitle: "已启用", + isHaveLine: false, + isHaveDirection: true, + ), + SizedBox( + height: 20.h, + ), + CommonItem( + leftTitel: '离家开门', + rightTitle: "", + isHaveLine: false, + isHaveRightWidget: true, + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _switch(2))), + SizedBox( + height: 20.h, + ), + CommonItem( + leftTitel: '关门', + rightTitle: "", + isHaveLine: false, + isHaveRightWidget: true, + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _switch(2))), + SizedBox( + height: 20.h, + ), + CommonItem( + leftTitel: '异常', + rightTitle: "已启用", + isHaveLine: true, + isHaveDirection: true, + ), + SizedBox( + height: 30.h, + ), + Container( + alignment: Alignment.centerLeft, + margin: EdgeInsets.only(left: 40.w, top: 40.h, bottom: 30.h), + child: Text( + '门铃通知', + style: TextStyle( + color: AppColors.msgNoticeTextColor, fontSize: 24.sp), + ), + ), + CommonItem( + leftTitel: '有人按门铃', + rightTitle: "", + isHaveLine: false, + isHaveRightWidget: true, + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _switch(2))), + SizedBox( + height: 30.h, + ), + Container( + alignment: Alignment.centerLeft, + margin: EdgeInsets.only(left: 40.w, top: 40.h, bottom: 30.h), + child: Text( + '猫眼通知', + style: TextStyle( + color: AppColors.msgNoticeTextColor, fontSize: 24.sp), + ), + ), + CommonItem( + leftTitel: '有人出现在门口', + rightTitle: "", + isHaveLine: false, + isHaveRightWidget: true, + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _switch(2))), + ], + )); + } + + Widget _buildSubTitleItem( + String leftStr, String subTitle, String rightStr, Function()? action) { + return GestureDetector( + onTap: action, + child: Container( + margin: EdgeInsets.only(left: 20.sp, right: 20.sp, top: 20.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox( + width: 20.w, + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + alignment: Alignment.centerLeft, + child: Text( + leftStr, + style: TextStyle(fontSize: 24.sp, color: Colors.black), + ), + ), + SizedBox( + height: 10.h, + ), + Container( + alignment: Alignment.centerLeft, + child: Text( + subTitle, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 20.sp, color: AppColors.btnDisableColor), + ), + ) + ], + )), + SizedBox( + width: 20.w, + ), + Text( + rightStr, + style: TextStyle( + fontSize: 22.sp, color: AppColors.darkGrayTextColor), + ), + SizedBox( + width: 10.w, + ), + Image.asset( + 'images/icon_right_grey.png', + width: 12.w, + height: 21.w, + ) + ], + ), + ), + ); + } + + Widget _buildTipsView() { + return Container( + width: ScreenUtil().screenWidth - 40.w, + margin: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 10.h), + decoration: BoxDecoration( + color: AppColors.mainBackgroundColor, + borderRadius: BorderRadius.circular(10.0), + ), + child: Padding( + padding: + EdgeInsets.only(left: 20.w, top: 30.h, bottom: 40.h, right: 15.w), + child: RichText(text: tipsPreviewSpan)), + ); + } + + CupertinoSwitch _switch(int getIndex) { + return CupertinoSwitch( + activeColor: CupertinoColors.activeBlue, + trackColor: CupertinoColors.systemGrey5, + thumbColor: CupertinoColors.white, + value: getIndex == 1 ? faceOn : autoBright, + onChanged: (value) { + setState(() { + if (getIndex == 1) { + faceOn = value; + } else { + autoBright = value; + } + }); + }, + ); + } + + Future _openBottomItemSheet( + List bottomItemList, int clickIndex) async { + showModalBottomSheet( + context: context, + shape: RoundedRectangleBorder( + borderRadius: BorderRadiusDirectional.circular(10)), + builder: (BuildContext context) { + return AlertBottomWidget( + topTitle: '', + items: bottomItemList, + chooseCallback: (value) { + if (clickIndex == 0) { + //感应距离 + senseDistance = senseDistanceList[value]; + } else if (clickIndex == 1) { + //防误开 + antiMisoperation = antiMisoperationList[value]; + } + + setState(() {}); + }, + ); + }); + } +} diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart index bcb8a342..bda8dd6e 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -364,9 +364,10 @@ class _LockDetailPageState extends State if (state.keyInfos.value.lockFeature!.d3Face == 1) { showWidgetArr.add( bottomItem('images/main/icon_face.png', '人脸', () { - // Navigator.pushNamed(context, Routers.otherTypeKeyListPage, - // arguments: 1); - // Toast.show(msg: "功能暂未开放"); + Get.toNamed(Routers.otherTypeKeyListPage, arguments: { + "lockId": widget.lockListInfoItemEntity.lockId, + "fromType": 3 + }); // Toast.show(msg: "功能暂未开放"); // tokNative('flutter_videoTalk_to_ios', // arguments: {'videoTalk': 'videoTalk'}).then((result) { diff --git a/star_lock/lib/main/lockDetail/otherTypeKey/addFace/addFace_page.dart b/star_lock/lib/main/lockDetail/otherTypeKey/addFace/addFace_page.dart new file mode 100644 index 00000000..4bee1fa4 --- /dev/null +++ b/star_lock/lib/main/lockDetail/otherTypeKey/addFace/addFace_page.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../../appRouters.dart'; +import '../../../../../app_settings/app_colors.dart'; +import '../../../../../tools/submitBtn.dart'; +import '../../../../../tools/titleAppBar.dart'; +import '../../../../../translations/trans_lib.dart'; + +class AddFaceTipPage extends StatefulWidget { + const AddFaceTipPage({Key? key}) : super(key: key); + + @override + State createState() => _AddFaceTipPageState(); +} + +class _AddFaceTipPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.addLock!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), + body: ListView( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 50.h, + ), + Image.asset( + 'images/main/icon_main_addFace.png', + width: 100.w, + height: 457.h, + fit: BoxFit.fitHeight, + ), + SizedBox( + height: 60.h, + ), + Container( + padding: EdgeInsets.only(left: 20.w, right: 20.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: Text( + "请单人正对门锁,距离一个成年人手臂长度(约0.6米).\n保持脸部无遮挡,露出五官", + // TranslationLoader.lanKeys!.lightTouchScreenTip!.tr, + textAlign: TextAlign.center, + maxLines: null, + style: + TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), + ), + ), + ], + ), + ), + SizedBox( + height: 120.h, + ), + Container( + padding: EdgeInsets.only(left: 20.w, right: 20.w), + child: SubmitBtn( + btnName: "开始添加", //TranslationLoader.lanKeys!.next!.tr, + borderRadius: 20.w, + onClick: () {}), + ), + ], + ), + ); + } +} diff --git a/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeAddKey/otherTypeAddKey_logic.dart b/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeAddKey/otherTypeAddKey_logic.dart index 2371827b..6550e17e 100644 --- a/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeAddKey/otherTypeAddKey_logic.dart +++ b/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeAddKey/otherTypeAddKey_logic.dart @@ -157,6 +157,12 @@ class OtherTypeAddKeyLogic extends BaseGetXController { case 2: // 遥控 + break; + + case 3: + // 人脸 + Get.toNamed(Routers.addFaceTipPage); + break; default: break; diff --git a/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart b/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart index 024a9b2c..690ab991 100644 --- a/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart +++ b/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart @@ -43,10 +43,10 @@ class _OtherTypeKeyListPageState extends State { style: TextStyle(color: Colors.white, fontSize: 24.sp), ), onPressed: () async { - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); - if(isDemoMode == false){ + var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + if (isDemoMode == false) { showDeletAlertDialog(context); - }else{ + } else { // Get.toNamed(Routers.seletLockTypePage); Toast.show(msg: "演示模式"); } @@ -62,14 +62,16 @@ class _OtherTypeKeyListPageState extends State { ), Expanded(child: _buildMainUI(state.fromType.value)), AddBottomWhiteBtn( - btnName: '${TranslationLoader.lanKeys!.add!.tr}${getAppBarTitle(state.fromType.value)}', + btnName: + '${TranslationLoader.lanKeys!.add!.tr}${getAppBarTitle(state.fromType.value)}', onClick: () async { - var data = await Get.toNamed(Routers.otherTypeKeyManagePage, arguments: { + var data = + await Get.toNamed(Routers.otherTypeKeyManagePage, arguments: { "lockId": state.lockId.value, "keyType": state.fromType.value, "fromType": 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入 }); - if(data != null) { + if (data != null) { switch (state.fromType.value) { case 0: // 卡 @@ -80,7 +82,11 @@ class _OtherTypeKeyListPageState extends State { logic.getFingerprintsListData(); break; case 2: - // 遥控 + // 遥控 + + break; + case 3: + // 人脸 break; default: @@ -109,6 +115,9 @@ class _OtherTypeKeyListPageState extends State { case 2: title = TranslationLoader.lanKeys!.remoteControl!.tr; break; + case 3: + title = TranslationLoader.lanKeys!.face!.tr; + break; default: break; } @@ -126,13 +135,13 @@ class _OtherTypeKeyListPageState extends State { maxLines: 1, controller: state.searchController, autofocus: false, - onChanged: (value){ + onChanged: (value) { print("onChanged:$value"); }, - onEditingComplete: (){ + onEditingComplete: () { print("onEditingComplete:"); }, - onSubmitted: (value){ + onSubmitted: (value) { switch (state.fromType.value) { case 0: // 卡 @@ -143,17 +152,21 @@ class _OtherTypeKeyListPageState extends State { logic.getFingerprintsListData(); break; case 2: - // 遥控 + // 遥控 + + break; + case 3: + // 人脸 break; default: break; } - }, decoration: InputDecoration( //输入里面输入文字内边距设置 - contentPadding: const EdgeInsets.only(top: 12.0, left: -19.0, right: -15.0, bottom: 8.0), + contentPadding: const EdgeInsets.only( + top: 12.0, left: -19.0, right: -15.0, bottom: 8.0), hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr, hintStyle: TextStyle(fontSize: 22.sp, height: 3.0), //不需要输入框下划线 @@ -186,96 +199,130 @@ class _OtherTypeKeyListPageState extends State { // typeImgName = 'images/icon_card.png'; // } - return Obx(() => state.fingerprintItemListData.value.isNotEmpty ? ListView.separated( - itemCount: state.fingerprintItemListData.value.length, - itemBuilder: (c, index) { - FingerprintItemData fingerprintItemData = state.fingerprintItemListData.value[index]; - switch (state.fromType.value) { - case 0: - // 卡 - if (index < state.fingerprintItemListData.value.length) { - return LeftSlideActions( - key: Key(fingerprintItemData.cardName!), - actionsWidth: 60, - actions: [ - _buildDeleteBtn(fingerprintItemData.cardId.toString()), - ], - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(1)), - ), - child: _keyItem('images/icon_card.png', fingerprintItemData.cardName!, fingerprintItemData.cardType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () async { - var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: { - "fingerprintItemData": fingerprintItemData, - "type": type, - }); - if(data != null) { - logic.getICCardListData(); + return Obx(() => state.fingerprintItemListData.value.isNotEmpty + ? ListView.separated( + itemCount: state.fingerprintItemListData.value.length, + itemBuilder: (c, index) { + FingerprintItemData fingerprintItemData = + state.fingerprintItemListData.value[index]; + switch (state.fromType.value) { + case 0: + // 卡 + if (index < state.fingerprintItemListData.value.length) { + return LeftSlideActions( + key: Key(fingerprintItemData.cardName!), + actionsWidth: 60, + actions: [ + _buildDeleteBtn(fingerprintItemData.cardId.toString()), + ], + decoration: const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(1)), + ), + child: _keyItem( + 'images/icon_card.png', + fingerprintItemData.cardName!, + fingerprintItemData.cardType! == 1 + ? "永久" + : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", + () async { + var data = await Get.toNamed( + Routers.otherTypeKeyDetailPage, + arguments: { + "fingerprintItemData": fingerprintItemData, + "type": type, + }); + if (data != null) { + logic.getICCardListData(); + } + }), + ); } - }), - ); - } - return const SizedBox.shrink(); + return const SizedBox.shrink(); - return _keyItem('images/icon_card.png', fingerprintItemData.cardName!, fingerprintItemData.cardType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () async { - var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: { - "fingerprintItemData": fingerprintItemData, - "type": type, - }); - if(data != null) { - logic.getICCardListData(); - } - }); - break; - case 1: - // 指纹 - if (index < state.fingerprintItemListData.value.length) { - return LeftSlideActions( - key: Key(fingerprintItemData.fingerprintName!), - actionsWidth: 60, - actions: [ - _buildDeleteBtn(fingerprintItemData.fingerprintId.toString()), - ], - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(1)), - ), - child: _keyItem('images/icon_fingerprint.png', fingerprintItemData.fingerprintName!, fingerprintItemData.fingerprintType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () async { - var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: { - "fingerprintItemData": fingerprintItemData, - "type": type, + return _keyItem( + 'images/icon_card.png', + fingerprintItemData.cardName!, + fingerprintItemData.cardType! == 1 + ? "永久" + : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", + () async { + var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, + arguments: { + "fingerprintItemData": fingerprintItemData, + "type": type, + }); + if (data != null) { + logic.getICCardListData(); + } }); - if(data != null) { - logic.getFingerprintsListData(); + break; + case 1: + // 指纹 + if (index < state.fingerprintItemListData.value.length) { + return LeftSlideActions( + key: Key(fingerprintItemData.fingerprintName!), + actionsWidth: 60, + actions: [ + _buildDeleteBtn( + fingerprintItemData.fingerprintId.toString()), + ], + decoration: const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(1)), + ), + child: _keyItem( + 'images/icon_fingerprint.png', + fingerprintItemData.fingerprintName!, + fingerprintItemData.fingerprintType! == 1 + ? "永久" + : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", + () async { + var data = await Get.toNamed( + Routers.otherTypeKeyDetailPage, + arguments: { + "fingerprintItemData": fingerprintItemData, + "type": type, + }); + if (data != null) { + logic.getFingerprintsListData(); + } + }), + ); } - }), - ); - } - return const SizedBox.shrink(); + return const SizedBox.shrink(); - return _keyItem('images/icon_fingerprint.png', fingerprintItemData.fingerprintName!, fingerprintItemData.fingerprintType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () async { - var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: { - "fingerprintItemData": fingerprintItemData, - "type": type, - }); - if(data != null) { - logic.getFingerprintsListData(); + return _keyItem( + 'images/icon_fingerprint.png', + fingerprintItemData.fingerprintName!, + fingerprintItemData.fingerprintType! == 1 + ? "永久" + : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", + () async { + var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, + arguments: { + "fingerprintItemData": fingerprintItemData, + "type": type, + }); + if (data != null) { + logic.getFingerprintsListData(); + } + }); + break; + case 2: + // 遥控 + + break; + default: + break; } - }); - break; - case 2: - // 遥控 - - break; - default: - break; - } - }, - separatorBuilder: (BuildContext context, int index) { - return const Divider( - height: 1, - color: AppColors.greyLineColor, - ); - }, - ) :const NoData()); + }, + separatorBuilder: (BuildContext context, int index) { + return const Divider( + height: 1, + color: AppColors.greyLineColor, + ); + }, + ) + : const NoData()); } Widget _buildDeleteBtn(String idStr) { @@ -338,7 +385,8 @@ class _OtherTypeKeyListPageState extends State { ); } - Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String showTime, Function() action) { + Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String showTime, + Function() action) { return GestureDetector( onTap: action, child: Container( @@ -361,7 +409,9 @@ class _OtherTypeKeyListPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor)), + Text(lockTypeTitle, + style: TextStyle( + fontSize: 24.sp, color: AppColors.blackColor)), ], ), SizedBox(height: 5.h), @@ -369,7 +419,10 @@ class _OtherTypeKeyListPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text(showTime, style: TextStyle(fontSize: 18.sp, color: AppColors.placeholderTextColor)), + Text(showTime, + style: TextStyle( + fontSize: 18.sp, + color: AppColors.placeholderTextColor)), ], ), ), @@ -385,8 +438,8 @@ class _OtherTypeKeyListPageState extends State { } void showDeletAlertDialog( - BuildContext context, - ) { + BuildContext context, + ) { showCupertinoDialog( context: context, builder: (context) { @@ -406,18 +459,18 @@ class _OtherTypeKeyListPageState extends State { Navigator.pop(context); switch (state.fromType.value) { case 0: - // 卡 + // 卡 state.isDeletICCardData = true; logic.senderAddICCard("1", "DeleteAll!@#", 255); break; case 1: - // 指纹 - // logic.deletAllFingerprintsData(); + // 指纹 + // logic.deletAllFingerprintsData(); state.isDeletFingerprintData = true; logic.senderAddFingerprint("1", "DeleteAll!@#", 255); break; case 2: - // 遥控 + // 遥控 break; default: diff --git a/star_lock/lib/tools/commonItem.dart b/star_lock/lib/tools/commonItem.dart index ad1ce621..bfb58446 100644 --- a/star_lock/lib/tools/commonItem.dart +++ b/star_lock/lib/tools/commonItem.dart @@ -36,14 +36,14 @@ class CommonItem extends StatelessWidget { Container( height: allHeight ?? 60.h, color: Colors.white, - padding: EdgeInsets.only(left: 20.w, right: 10.w), // , top: 20.w, bottom: 20.w + padding: EdgeInsets.only( + left: 20.w, right: 10.w), // , top: 20.w, bottom: 20.w child: Row( children: [ SizedBox(width: 20.w), SizedBox( - width: isHaveRightWidget! ? 100.w : 300.w, - child: Text(leftTitel!, style: TextStyle(fontSize: 22.sp)) - ), + // width: isHaveRightWidget! ? 100.w : 300.w, + child: Text(leftTitel!, style: TextStyle(fontSize: 22.sp))), SizedBox(width: 6.w), isTipsImg == true ? Image.asset( diff --git a/star_lock/lib/translations/lanKeyEntity.dart b/star_lock/lib/translations/lanKeyEntity.dart index dc8b3478..a3431236 100644 --- a/star_lock/lib/translations/lanKeyEntity.dart +++ b/star_lock/lib/translations/lanKeyEntity.dart @@ -8,6 +8,7 @@ class LanKeyEntity { this.card, this.fingerprint, this.remoteControl, + this.face, this.operatingRecord, this.number, this.additive, @@ -415,6 +416,7 @@ class LanKeyEntity { card = json['card']; fingerprint = json['fingerprint']; remoteControl = json['remoteControl']; + face = json['face']; operatingRecord = json['operatingRecord']; number = json['number']; additive = json['additive']; @@ -850,6 +852,7 @@ class LanKeyEntity { String? card; String? fingerprint; String? remoteControl; + String? face; String? operatingRecord; String? number; String? additive; @@ -1275,6 +1278,7 @@ class LanKeyEntity { map['card'] = card; map['fingerprint'] = fingerprint; map['remoteControl'] = remoteControl; + map['face'] = face; map['operatingRecord'] = operatingRecord; map['number'] = number; map['additive'] = additive;