合并代码
@ -7,6 +7,7 @@
|
|||||||
"card":"Card",
|
"card":"Card",
|
||||||
"fingerprint":"Fingerprint",
|
"fingerprint":"Fingerprint",
|
||||||
"remoteControl":"RemoteControl",
|
"remoteControl":"RemoteControl",
|
||||||
|
"face":"face",
|
||||||
"operatingRecord":"Operating Record",
|
"operatingRecord":"Operating Record",
|
||||||
"number":"Number",
|
"number":"Number",
|
||||||
"additive":"Additive",
|
"additive":"Additive",
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
"card":"card",
|
"card":"card",
|
||||||
"fingerprint":"fingerprint",
|
"fingerprint":"fingerprint",
|
||||||
"remoteControl":"remoteControl",
|
"remoteControl":"remoteControl",
|
||||||
|
"face":"face",
|
||||||
"operatingRecord":"operatingRecord",
|
"operatingRecord":"operatingRecord",
|
||||||
"number":"number",
|
"number":"number",
|
||||||
"additive":"additive",
|
"additive":"additive",
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
"card":"卡",
|
"card":"卡",
|
||||||
"fingerprint":"指纹",
|
"fingerprint":"指纹",
|
||||||
"remoteControl":"遥控",
|
"remoteControl":"遥控",
|
||||||
|
"face":"人脸",
|
||||||
"operatingRecord":"操作记录",
|
"operatingRecord":"操作记录",
|
||||||
"number":"号",
|
"number":"号",
|
||||||
"additive":"添加者",
|
"additive":"添加者",
|
||||||
|
|||||||
BIN
star_lock/images/main/icon_main_addFace.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
star_lock/images/mine/icon_mine_blueSelect.png
Normal file
|
After Width: | Height: | Size: 1004 B |
BIN
star_lock/images/mine/icon_mine_openDoorDir.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
@ -36,6 +36,7 @@
|
|||||||
self.window.rootViewController = VC;
|
self.window.rootViewController = VC;
|
||||||
[self.window makeKeyAndVisible];
|
[self.window makeKeyAndVisible];
|
||||||
|
|
||||||
|
//关闭可视对讲功能 需打开时再解注释
|
||||||
[self initSound];
|
[self initSound];
|
||||||
_udp = [[UdpHelper alloc] init];
|
_udp = [[UdpHelper alloc] init];
|
||||||
[_udp Open];
|
[_udp Open];
|
||||||
|
|||||||
BIN
star_lock/ios/Runner/img/bg.jpg
Executable file
|
After Width: | Height: | Size: 47 KiB |
BIN
star_lock/ios/Runner/img/logo.png
Executable file
|
After Width: | Height: | Size: 262 KiB |
BIN
star_lock/ios/Runner/img/logo2.png
Executable file
|
After Width: | Height: | Size: 47 KiB |
BIN
star_lock/ios/Runner/img/logo3.png
Executable file
|
After Width: | Height: | Size: 19 KiB |
BIN
star_lock/ios/Runner/img/swicth_add_off.png
Executable file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
star_lock/ios/Runner/img/swicth_add_on.png
Executable file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
star_lock/ios/Runner/img/swicth_minus_off.png
Executable file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
star_lock/ios/Runner/img/swicth_minus_on.png
Executable file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
star_lock/ios/Runner/img/swicth_off.png
Executable file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
star_lock/ios/Runner/img/swicth_on.png
Executable file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
star_lock/ios/Runner/img/test.jpg
Executable file
|
After Width: | Height: | Size: 158 KiB |
BIN
star_lock/ios/Runner/img/thumb_on.png
Executable file
|
After Width: | Height: | Size: 3.8 KiB |
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart';
|
import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart';
|
||||||
import 'package:star_lock/login/register/starLock_register_binding.dart';
|
import 'package:star_lock/login/register/starLock_register_binding.dart';
|
||||||
@ -5,7 +6,13 @@ import 'package:star_lock/login/register/starLock_register_binding.dart';
|
|||||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_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';
|
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart';
|
||||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_page.dart';
|
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_page.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/lcokSet/catEyeWorkMode/catEyeWorkMode_page.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/lcokSet/faceUnlock/faceUnlock_page.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/lcokSet/motorPower/motorPower_page.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/lcokSet/msgNotification/msgNotification_page.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/lcokSet/openDoorDirection/openDoorDirection_page.dart';
|
||||||
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_main_page.dart';
|
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_main_page.dart';
|
||||||
|
import 'package:star_lock/main/lockDetail/otherTypeKey/addFace/addFace_page.dart';
|
||||||
import 'package:star_lock/mine/about/webviewShow_page.dart';
|
import 'package:star_lock/mine/about/webviewShow_page.dart';
|
||||||
import 'package:star_lock/mine/mine/safeVerify/safeVerify_page.dart';
|
import 'package:star_lock/mine/mine/safeVerify/safeVerify_page.dart';
|
||||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart';
|
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart';
|
||||||
@ -335,6 +342,12 @@ abstract class Routers {
|
|||||||
static const demoModeLockDetailPage = '/DemoModeLockDetailPage'; // 演示模式锁详情页
|
static const demoModeLockDetailPage = '/DemoModeLockDetailPage'; // 演示模式锁详情页
|
||||||
static const demoModeLockSetPage = '/DemoModeLockSetPage'; // 演示模式锁设置页
|
static const demoModeLockSetPage = '/DemoModeLockSetPage'; // 演示模式锁设置页
|
||||||
static const addLockSeletCountryPage = '/AddLockSeletCountryPage'; // 演示模式锁设置页
|
static const addLockSeletCountryPage = '/AddLockSeletCountryPage'; // 演示模式锁设置页
|
||||||
|
static const faceUnlockPage = '/faceUnlockPage'; //面容开锁设置
|
||||||
|
static const motorPowerPage = '/motorPowerPage'; //电机功率设置
|
||||||
|
static const openDoorDirectionPage = '/openDoorDirectionPage'; //开门方向设置
|
||||||
|
static const catEyeWorkModePage = '/catEyeWorkModePage'; //猫眼工作模式
|
||||||
|
static const msgNotificationPage = '/msgNotificationPage'; //消息通知
|
||||||
|
static const addFaceTipPage = '/addFaceTipPage'; //添加人脸
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class AppRouters {
|
abstract class AppRouters {
|
||||||
@ -828,8 +841,26 @@ abstract class AppRouters {
|
|||||||
name: Routers.minePersonInfoViewSafetyProblemPage,
|
name: Routers.minePersonInfoViewSafetyProblemPage,
|
||||||
page: () => const MinePersonInfoViewSafetyProblemPage()),
|
page: () => const MinePersonInfoViewSafetyProblemPage()),
|
||||||
GetPage(name: Routers.webviewShowPage, page: () => const WebviewShowPage()),
|
GetPage(name: Routers.webviewShowPage, page: () => const WebviewShowPage()),
|
||||||
GetPage(name: Routers.demoModeLockSetPage, page: () => const DemoModeLockSetPage()),
|
GetPage(
|
||||||
GetPage(name: Routers.demoModeLockDetailPage, page: () => const DemoModeLockDetailPage()),
|
name: Routers.demoModeLockSetPage,
|
||||||
GetPage(name: Routers.addLockSeletCountryPage, page: () => const AddLockSeletCountryPage()),
|
page: () => const DemoModeLockSetPage()),
|
||||||
|
GetPage(
|
||||||
|
name: Routers.demoModeLockDetailPage,
|
||||||
|
page: () => const DemoModeLockDetailPage()),
|
||||||
|
GetPage(
|
||||||
|
name: Routers.addLockSeletCountryPage,
|
||||||
|
page: () => const AddLockSeletCountryPage()),
|
||||||
|
GetPage(name: Routers.faceUnlockPage, page: () => const FaceUnlockPage()),
|
||||||
|
GetPage(name: Routers.motorPowerPage, page: () => const MotorPowerPage()),
|
||||||
|
GetPage(
|
||||||
|
name: Routers.openDoorDirectionPage,
|
||||||
|
page: () => const OpenDoorDirectionPage()),
|
||||||
|
GetPage(
|
||||||
|
name: Routers.catEyeWorkModePage,
|
||||||
|
page: () => const CatEyeWorkModePage()),
|
||||||
|
GetPage(
|
||||||
|
name: Routers.msgNotificationPage,
|
||||||
|
page: () => const MsgNotificationPage()),
|
||||||
|
GetPage(name: Routers.addFaceTipPage, page: () => const AddFaceTipPage())
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -122,4 +122,8 @@ class AppColors {
|
|||||||
static const btnDisableColor = Color.fromRGBO(178, 178, 178, 1); //按钮不可用灰色
|
static const btnDisableColor = Color.fromRGBO(178, 178, 178, 1); //按钮不可用灰色
|
||||||
static const toBeReceiveBgColor = Color.fromRGBO(246, 203, 203, 1); //待接收红色背景
|
static const toBeReceiveBgColor = Color.fromRGBO(246, 203, 203, 1); //待接收红色背景
|
||||||
static const expireTextBgColor = Color.fromRGBO(253, 166, 8, 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); //蓝色背景板 139 148 176
|
||||||
|
static const msgNoticeTextColor = Color.fromRGBO(139, 148, 176, 1); //消息通知字体颜色
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,125 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
|
||||||
|
import '../../../../app_settings/app_colors.dart';
|
||||||
|
import '../../../../tools/titleAppBar.dart';
|
||||||
|
|
||||||
|
class CatEyeWorkModePage extends StatefulWidget {
|
||||||
|
const CatEyeWorkModePage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<CatEyeWorkModePage> createState() => _CatEyeWorkModePageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _CatEyeWorkModePageState extends State<CatEyeWorkModePage> {
|
||||||
|
bool isCheck = false;
|
||||||
|
List boolList = [true, false, false, false];
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
appBar: TitleAppBar(
|
||||||
|
barTitle: '猫眼工作模式',
|
||||||
|
haveBack: true,
|
||||||
|
backgroundColor: AppColors.mainColor),
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 30.h,
|
||||||
|
),
|
||||||
|
_buildTipsView(
|
||||||
|
'省电模式:\n',
|
||||||
|
'适合门口较为安全的环境。\n仅发生特定事件才录像,并可查看实时画面。\n一般情况下,满电可使用7-8个月',
|
||||||
|
0,
|
||||||
|
boolList[0]),
|
||||||
|
SizedBox(
|
||||||
|
height: 30.h,
|
||||||
|
),
|
||||||
|
_buildTipsView(
|
||||||
|
'逗留抓拍模式:\n',
|
||||||
|
'有人逗留或发生特定事件才录像,可随时查看\n实时画面。\n一般情况下,满电可使用5~6个月。',
|
||||||
|
1,
|
||||||
|
boolList[1]),
|
||||||
|
SizedBox(
|
||||||
|
height: 30.h,
|
||||||
|
),
|
||||||
|
_buildTipsView(
|
||||||
|
'实时监控模式:\n',
|
||||||
|
'适合门口人员复杂、较不安全的环境。\n有人出现就录像,可随时查看实时画面。\n一般情况下,满电可使用2~4个月。',
|
||||||
|
2,
|
||||||
|
boolList[2]),
|
||||||
|
SizedBox(
|
||||||
|
height: 30.h,
|
||||||
|
),
|
||||||
|
_buildTipsView('自定义模式:\n', '根据您家门口实际情况设置录像和实时画面功能。\n可使用时长由具体设置决定。',
|
||||||
|
3, boolList[3])
|
||||||
|
],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTipsView(
|
||||||
|
String titleStr, String subTitle, int clickIndex, bool isClick) {
|
||||||
|
return GestureDetector(
|
||||||
|
child: Container(
|
||||||
|
width: ScreenUtil().screenWidth - 40.w,
|
||||||
|
margin: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 10.h),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: isClick
|
||||||
|
? AppColors.blueViewBgColor
|
||||||
|
: AppColors.greyBackgroundColor,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(left: 20.w, top: 30.h, bottom: 30.h),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
isClick
|
||||||
|
? Image.asset(
|
||||||
|
'images/mine/icon_mine_blueSelect.png',
|
||||||
|
width: 20.w,
|
||||||
|
height: 14.w,
|
||||||
|
)
|
||||||
|
: SizedBox(
|
||||||
|
width: 20.w,
|
||||||
|
height: 14.w,
|
||||||
|
),
|
||||||
|
SizedBox(width: 20.w),
|
||||||
|
_buildRichText(titleStr, subTitle, isClick),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
for (int i = 0; i < boolList.length; i++) {
|
||||||
|
if (clickIndex == i) {
|
||||||
|
boolList[clickIndex] = true;
|
||||||
|
} else {
|
||||||
|
boolList[i] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildRichText(String titleStr, String subTitle, bool isClick) {
|
||||||
|
//高亮样式
|
||||||
|
final TextStyle titleStyle = TextStyle(
|
||||||
|
color: isClick ? AppColors.blueTextTipsColor : Colors.black,
|
||||||
|
fontSize: 24.sp,
|
||||||
|
fontWeight: FontWeight.w500);
|
||||||
|
//默认样式
|
||||||
|
final TextStyle subTipsStyle = TextStyle(
|
||||||
|
color: isClick
|
||||||
|
? AppColors.blueTextTipsColor
|
||||||
|
: AppColors.placeholderTextColor,
|
||||||
|
fontSize: 20.sp);
|
||||||
|
|
||||||
|
late InlineSpan tipsPreviewSpan = TextSpan(children: [
|
||||||
|
TextSpan(text: titleStr, style: titleStyle),
|
||||||
|
TextSpan(text: subTitle, style: subTipsStyle),
|
||||||
|
]);
|
||||||
|
return RichText(text: tipsPreviewSpan);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,204 @@
|
|||||||
|
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 FaceUnlockPage extends StatefulWidget {
|
||||||
|
const FaceUnlockPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<FaceUnlockPage> createState() => _FaceUnlockPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _FaceUnlockPageState extends State<FaceUnlockPage> {
|
||||||
|
bool faceOn = false; //面容开锁
|
||||||
|
bool autoBright = false; //自动亮屏
|
||||||
|
String senseDistance = '远距离'; //感应距离
|
||||||
|
String antiMisoperation = '关闭'; //防误开
|
||||||
|
List<String> senseDistanceList = ['远距离', '近距离'];
|
||||||
|
List<String> 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: [
|
||||||
|
CommonItem(
|
||||||
|
leftTitel: '面容开锁',
|
||||||
|
rightTitle: "",
|
||||||
|
isHaveLine: true,
|
||||||
|
isHaveRightWidget: true,
|
||||||
|
rightWidget:
|
||||||
|
SizedBox(width: 60.w, height: 50.h, child: _switch(1))),
|
||||||
|
CommonItem(
|
||||||
|
leftTitel: '自动亮屏',
|
||||||
|
rightTitle: "",
|
||||||
|
isHaveLine: true,
|
||||||
|
isHaveRightWidget: true,
|
||||||
|
rightWidget:
|
||||||
|
SizedBox(width: 60.w, height: 50.h, child: _switch(2))),
|
||||||
|
_buildSubTitleItem(
|
||||||
|
'感应距离', '感应到门前约1.5米有人时,将自动启动面部识别开锁。', senseDistance, () {
|
||||||
|
_openBottomItemSheet(senseDistanceList, 0);
|
||||||
|
}),
|
||||||
|
SizedBox(
|
||||||
|
height: 30.h,
|
||||||
|
),
|
||||||
|
_buildSubTitleItem('防误开', '防误开已关闭,关门后仍可使用面容开锁', antiMisoperation,
|
||||||
|
() {
|
||||||
|
_openBottomItemSheet(antiMisoperationList, 1);
|
||||||
|
}),
|
||||||
|
Expanded(
|
||||||
|
child: SizedBox(
|
||||||
|
height: 30.h,
|
||||||
|
)),
|
||||||
|
_buildTipsView(),
|
||||||
|
SizedBox(
|
||||||
|
height: 60.h,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
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<String> 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(() {});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -27,6 +27,8 @@ class LockSetPage extends StatefulWidget {
|
|||||||
class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
||||||
final logic = Get.put(LockSetLogic());
|
final logic = Get.put(LockSetLogic());
|
||||||
final state = Get.find<LockSetLogic>().state;
|
final state = Get.find<LockSetLogic>().state;
|
||||||
|
bool isClick1 = false;
|
||||||
|
bool isClick2 = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -53,7 +55,8 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
children: [
|
children: [
|
||||||
// 基本信息
|
// 基本信息
|
||||||
CommonItem(
|
CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.basicInformation!.tr,
|
leftTitel:
|
||||||
|
TranslationLoader.lanKeys!.basicInformation!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: false,
|
isHaveLine: false,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
@ -65,10 +68,12 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
SizedBox(height: 10.h),
|
SizedBox(height: 10.h),
|
||||||
// 门磁
|
// 门磁
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.lockFeature.value.doorStatus == 1 ? true : false,
|
visible: state.lockFeature.value.doorStatus == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel:
|
leftTitel:
|
||||||
TranslationLoader.lanKeys!.doorMagnetic!.tr,
|
TranslationLoader.lanKeys!.doorMagnetic!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
@ -78,10 +83,12 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
}))),
|
}))),
|
||||||
// 无线键盘
|
// 无线键盘
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.lockFeature.value.wirelessKeyboard == 1 ? true : false,
|
visible: state.lockFeature.value.wirelessKeyboard == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel:
|
leftTitel:
|
||||||
TranslationLoader.lanKeys!.wirelessKeyboard!.tr,
|
TranslationLoader.lanKeys!.wirelessKeyboard!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
@ -91,7 +98,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
}))),
|
}))),
|
||||||
// 照明
|
// 照明
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.lockFeature.value.lightingTime == 1 ? true : false,
|
visible: state.lockFeature.value.lightingTime == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: '照明',
|
leftTitel: '照明',
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
@ -114,10 +123,14 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
SizedBox(height: 10.h),
|
SizedBox(height: 10.h),
|
||||||
// 自动闭锁
|
// 自动闭锁
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.lockFeature.value.autoLock == 1 ? true : false,
|
visible:
|
||||||
|
state.lockFeature.value.autoLock == 1 ? true : false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.automaticBlocking!.tr,
|
leftTitel:
|
||||||
rightTitle: (state.lockSettingInfo.value.autoLock ?? 0) > 0
|
TranslationLoader.lanKeys!.automaticBlocking!.tr,
|
||||||
|
rightTitle: (state.lockSettingInfo.value.autoLock ??
|
||||||
|
0) >
|
||||||
|
0
|
||||||
? "${state.lockSetInfoData.value.lockSettingInfo!.autoLockSecond ?? 0}s"
|
? "${state.lockSetInfoData.value.lockSettingInfo!.autoLockSecond ?? 0}s"
|
||||||
: TranslationLoader.lanKeys!.closed!.tr,
|
: TranslationLoader.lanKeys!.closed!.tr,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
@ -127,15 +140,17 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
// ? "${state.lockSetInfoData.value.lockSetting!.autoLockSecond ?? 0}s"
|
// ? "${state.lockSetInfoData.value.lockSetting!.autoLockSecond ?? 0}s"
|
||||||
// : TranslationLoader.lanKeys!.closed!.tr),
|
// : TranslationLoader.lanKeys!.closed!.tr),
|
||||||
action: () {
|
action: () {
|
||||||
Get.toNamed(Routers.automaticBlockingPage, arguments: {
|
Get.toNamed(Routers.automaticBlockingPage,
|
||||||
'lockSetInfoData': state.lockSetInfoData.value
|
arguments: {
|
||||||
});
|
'lockSetInfoData': state.lockSetInfoData.value
|
||||||
|
});
|
||||||
}))),
|
}))),
|
||||||
// 锁声音
|
// 锁声音
|
||||||
Obx(() {
|
Obx(() {
|
||||||
var titleStr = "";
|
var titleStr = "";
|
||||||
if ((state.lockSettingInfo.value.lockSound ?? 0) == 1) {
|
if ((state.lockSettingInfo.value.lockSound ?? 0) == 1) {
|
||||||
switch (state.lockSettingInfo.value.lockSoundVolume ?? 0) {
|
switch (
|
||||||
|
state.lockSettingInfo.value.lockSoundVolume ?? 0) {
|
||||||
case 1:
|
case 1:
|
||||||
titleStr = TranslationLoader.lanKeys!.low!.tr;
|
titleStr = TranslationLoader.lanKeys!.low!.tr;
|
||||||
break;
|
break;
|
||||||
@ -156,7 +171,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
titleStr = TranslationLoader.lanKeys!.closed!.tr;
|
titleStr = TranslationLoader.lanKeys!.closed!.tr;
|
||||||
}
|
}
|
||||||
return Visibility(
|
return Visibility(
|
||||||
visible: state.lockFeature.value.lockSound == 1 ? true : false,
|
visible: state.lockFeature.value.lockSound == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.lockSound!.tr,
|
leftTitel: TranslationLoader.lanKeys!.lockSound!.tr,
|
||||||
rightTitle: titleStr,
|
rightTitle: titleStr,
|
||||||
@ -170,12 +187,16 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
}),
|
}),
|
||||||
// 防撬报警
|
// 防撬报警
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.lockFeature.value.antiPrySwitch == 1 ? true : false,
|
visible: state.lockFeature.value.antiPrySwitch == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel:
|
leftTitel:
|
||||||
TranslationLoader.lanKeys!.burglarAlarm!.tr,
|
TranslationLoader.lanKeys!.burglarAlarm!.tr,
|
||||||
rightTitle:
|
rightTitle:
|
||||||
(state.lockSettingInfo.value.antiPrySwitch ?? 0) == 1
|
(state.lockSettingInfo.value.antiPrySwitch ??
|
||||||
|
0) ==
|
||||||
|
1
|
||||||
? TranslationLoader.lanKeys!.opened!.tr
|
? TranslationLoader.lanKeys!.opened!.tr
|
||||||
: TranslationLoader.lanKeys!.closed!.tr,
|
: TranslationLoader.lanKeys!.closed!.tr,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
@ -191,38 +212,52 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
visible: state.lockFeature.value.passageMode == 1 ? true : false,
|
visible: state.lockFeature.value.passageMode == 1 ? true : false,
|
||||||
// visible:true,
|
// visible:true,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.normallyOpenMode!.tr,
|
leftTitel:
|
||||||
rightTitle: (state.lockSettingInfo.value.passageMode ?? 0) == 1
|
TranslationLoader.lanKeys!.normallyOpenMode!.tr,
|
||||||
|
rightTitle:
|
||||||
|
(state.lockSettingInfo.value.passageMode ?? 0) ==
|
||||||
|
1
|
||||||
? TranslationLoader.lanKeys!.opened!.tr
|
? TranslationLoader.lanKeys!.opened!.tr
|
||||||
: TranslationLoader.lanKeys!.closed!.tr,
|
: TranslationLoader.lanKeys!.closed!.tr,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Get.toNamed(Routers.normallyOpenModePage, arguments: {
|
Get.toNamed(Routers.normallyOpenModePage,
|
||||||
'lockSetInfoData': state.lockSetInfoData.value
|
arguments: {
|
||||||
});
|
'lockSetInfoData': state.lockSetInfoData.value
|
||||||
|
});
|
||||||
}))),
|
}))),
|
||||||
// 远程开锁
|
// 远程开锁
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.lockFeature.value.remoteUnlock == 1 ? true : false,
|
visible: state.lockFeature.value.remoteUnlock == 1
|
||||||
child: CommonItem(leftTitel:
|
? true
|
||||||
TranslationLoader.lanKeys!.remoteUnlocking!.tr,
|
: false,
|
||||||
rightTitle: (state.lockSettingInfo.value.remoteUnlock ?? 0) == 1
|
child: CommonItem(
|
||||||
|
leftTitel:
|
||||||
|
TranslationLoader.lanKeys!.remoteUnlocking!.tr,
|
||||||
|
rightTitle:
|
||||||
|
(state.lockSettingInfo.value.remoteUnlock ?? 0) ==
|
||||||
|
1
|
||||||
? TranslationLoader.lanKeys!.opened!.tr
|
? TranslationLoader.lanKeys!.opened!.tr
|
||||||
: TranslationLoader.lanKeys!.closed!.tr,
|
: TranslationLoader.lanKeys!.closed!.tr,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Get.toNamed(Routers.remoteUnlockingPage, arguments: {
|
Get.toNamed(Routers.remoteUnlockingPage,
|
||||||
'lockSetInfoData': state.lockSetInfoData.value
|
arguments: {
|
||||||
});
|
'lockSetInfoData': state.lockSetInfoData.value
|
||||||
|
});
|
||||||
}))),
|
}))),
|
||||||
// 重置键
|
// 重置键
|
||||||
Obx(() => Visibility(
|
Obx(() => Visibility(
|
||||||
visible: state.lockFeature.value.resetSwitch == 1 ? true : false,
|
visible: state.lockFeature.value.resetSwitch == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.resetButton!.tr,
|
leftTitel: TranslationLoader.lanKeys!.resetButton!.tr,
|
||||||
rightTitle: (state.lockSettingInfo.value.resetSwitch ?? 0) == 1
|
rightTitle:
|
||||||
|
(state.lockSettingInfo.value.resetSwitch ?? 0) ==
|
||||||
|
1
|
||||||
? TranslationLoader.lanKeys!.opened!.tr
|
? TranslationLoader.lanKeys!.opened!.tr
|
||||||
: TranslationLoader.lanKeys!.closed!.tr,
|
: TranslationLoader.lanKeys!.closed!.tr,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
@ -241,55 +276,55 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
leftTitel: '面容开锁',
|
leftTitel: '面容开锁',
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveRightWidget: true,
|
isHaveDirection: true,
|
||||||
rightWidget: SizedBox(
|
action: () {
|
||||||
width: 60.w, child: _otherUnHaveDoneSwitch()))),
|
Get.toNamed(Routers.faceUnlockPage);
|
||||||
|
})),
|
||||||
// ),
|
// ),
|
||||||
|
|
||||||
// Obx(() =>
|
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: true,
|
visible: true,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: '自动亮屏',
|
leftTitel: '消息通知',
|
||||||
rightTitle: "",
|
|
||||||
isHaveLine: true,
|
|
||||||
isHaveRightWidget: true,
|
|
||||||
rightWidget: SizedBox(
|
|
||||||
width: 60.w, child: _otherUnHaveDoneSwitch()))),
|
|
||||||
// ),
|
|
||||||
// Obx(() =>
|
|
||||||
Visibility(
|
|
||||||
visible: true,
|
|
||||||
child: CommonItem(
|
|
||||||
leftTitel: '逗留警告',
|
|
||||||
rightTitle: "",
|
|
||||||
isHaveLine: true,
|
|
||||||
isHaveRightWidget: true,
|
|
||||||
rightWidget: SizedBox(
|
|
||||||
width: 60.w, child: _otherUnHaveDoneSwitch()))),
|
|
||||||
// ),
|
|
||||||
// Obx(() =>
|
|
||||||
Visibility(
|
|
||||||
visible: true,
|
|
||||||
child: CommonItem(
|
|
||||||
leftTitel: '异常警告',
|
|
||||||
rightTitle: "",
|
|
||||||
isHaveLine: true,
|
|
||||||
isHaveRightWidget: true,
|
|
||||||
rightWidget: SizedBox(
|
|
||||||
width: 60.w, child: _otherUnHaveDoneSwitch()))),
|
|
||||||
// ),
|
|
||||||
// Obx(() =>
|
|
||||||
Visibility(
|
|
||||||
visible: true,
|
|
||||||
child: CommonItem(
|
|
||||||
leftTitel: '感应距离',
|
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Toast.show(msg: "功能暂未开放");
|
Get.toNamed(Routers.msgNotificationPage);
|
||||||
})),
|
})),
|
||||||
|
Visibility(
|
||||||
|
visible: true,
|
||||||
|
child: CommonItem(
|
||||||
|
leftTitel: '猫眼工作模式',
|
||||||
|
rightTitle: "",
|
||||||
|
isHaveLine: true,
|
||||||
|
isHaveDirection: true,
|
||||||
|
action: () {
|
||||||
|
Get.toNamed(Routers.catEyeWorkModePage);
|
||||||
|
})),
|
||||||
|
// Obx(() =>
|
||||||
|
//自动亮屏已包括至面容开锁模块
|
||||||
|
// Visibility(
|
||||||
|
// visible: true,
|
||||||
|
// child: CommonItem(
|
||||||
|
// leftTitel: '自动亮屏',
|
||||||
|
// rightTitle: "",
|
||||||
|
// isHaveLine: true,
|
||||||
|
// isHaveDirection: true,
|
||||||
|
// action: () {})),
|
||||||
|
// ),
|
||||||
|
|
||||||
|
// Obx(() =>
|
||||||
|
//感应距离已包括至面容开锁模块
|
||||||
|
// Visibility(
|
||||||
|
// visible: true,
|
||||||
|
// child: CommonItem(
|
||||||
|
// leftTitel: '感应距离',
|
||||||
|
// rightTitle: "",
|
||||||
|
// isHaveLine: true,
|
||||||
|
// isHaveDirection: true,
|
||||||
|
// action: () {
|
||||||
|
// Toast.show(msg: "功能暂未开放");
|
||||||
|
// })),
|
||||||
// ),
|
// ),
|
||||||
// Obx(() =>
|
// Obx(() =>
|
||||||
Visibility(
|
Visibility(
|
||||||
@ -300,7 +335,8 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
action: () {
|
action: () {
|
||||||
Toast.show(msg: "功能暂未开放");
|
// Toast.show(msg: "功能暂未开放");
|
||||||
|
Get.toNamed(Routers.openDoorDirectionPage);
|
||||||
})),
|
})),
|
||||||
// ),
|
// ),
|
||||||
// Obx(() =>
|
// Obx(() =>
|
||||||
@ -312,9 +348,31 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Toast.show(msg: "功能暂未开放");
|
// Toast.show(msg: "功能暂未开放");
|
||||||
|
Get.toNamed(Routers.motorPowerPage);
|
||||||
})),
|
})),
|
||||||
// ),
|
// ),
|
||||||
|
// Obx(() =>
|
||||||
|
Visibility(
|
||||||
|
visible: true,
|
||||||
|
child: CommonItem(
|
||||||
|
leftTitel: '逗留警告',
|
||||||
|
rightTitle: "",
|
||||||
|
isHaveLine: true,
|
||||||
|
isHaveRightWidget: true,
|
||||||
|
rightWidget: _otherToDoSwitch(0),
|
||||||
|
)),
|
||||||
|
// ),
|
||||||
|
// Obx(() =>
|
||||||
|
Visibility(
|
||||||
|
visible: true,
|
||||||
|
child: CommonItem(
|
||||||
|
leftTitel: '异常警告',
|
||||||
|
rightTitle: "",
|
||||||
|
isHaveLine: true,
|
||||||
|
isHaveRightWidget: true,
|
||||||
|
rightWidget: _otherToDoSwitch(1))),
|
||||||
|
// ),
|
||||||
SizedBox(height: 10.h),
|
SizedBox(height: 10.h),
|
||||||
//-----新增至此
|
//-----新增至此
|
||||||
// 标记房态
|
// 标记房态
|
||||||
@ -327,9 +385,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
}
|
}
|
||||||
return Visibility(
|
return Visibility(
|
||||||
visible: state.lockStatus.value.roomStatus == 1 ? true : false,
|
visible: state.lockStatus.value.roomStatus == 1 ? true : false,
|
||||||
// visible: true,
|
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.markedHouseState!.tr,
|
leftTitel:
|
||||||
|
TranslationLoader.lanKeys!.markedHouseState!.tr,
|
||||||
rightTitle: title,
|
rightTitle: title,
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
@ -340,11 +398,14 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
}));
|
}));
|
||||||
}),
|
}),
|
||||||
// 考勤
|
// 考勤
|
||||||
Obx(() =>
|
Obx(
|
||||||
Visibility(
|
() => Visibility(
|
||||||
visible: state.lockFeature.value.attendance == 1 ? true : false,
|
visible: state.lockFeature.value.attendance == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.checkingIn!.tr,
|
leftTitel:
|
||||||
|
TranslationLoader.lanKeys!.checkingIn!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
@ -352,11 +413,14 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
width: 60.w, child: _openCheckInSwitch()))),
|
width: 60.w, child: _openCheckInSwitch()))),
|
||||||
),
|
),
|
||||||
// 开锁提醒
|
// 开锁提醒
|
||||||
Obx(() =>
|
Obx(
|
||||||
Visibility(
|
() => Visibility(
|
||||||
visible: state.lockFeature.value.unlockReminder == 1 ? true : false,
|
visible: state.lockFeature.value.unlockReminder == 1
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.unlockReminder!.tr,
|
leftTitel:
|
||||||
|
TranslationLoader.lanKeys!.unlockReminder!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: false,
|
isHaveLine: false,
|
||||||
isHaveRightWidget: true,
|
isHaveRightWidget: true,
|
||||||
@ -365,10 +429,13 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
),
|
),
|
||||||
SizedBox(height: 10.h),
|
SizedBox(height: 10.h),
|
||||||
// wifi配网
|
// wifi配网
|
||||||
Obx(() =>
|
Obx(
|
||||||
Visibility(
|
() => Visibility(
|
||||||
visible: state.lockFeature.value.wifi == 1 ? true : false,
|
visible:
|
||||||
child: CommonItem(leftTitel: TranslationLoader.lanKeys!.wifiDistributionNetwork!.tr,
|
state.lockFeature.value.wifi == 1 ? true : false,
|
||||||
|
child: CommonItem(
|
||||||
|
leftTitel: TranslationLoader
|
||||||
|
.lanKeys!.wifiDistributionNetwork!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
@ -378,46 +445,46 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
),
|
),
|
||||||
// Obx(() =>
|
// Obx(() =>
|
||||||
// 锁时间
|
// 锁时间
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: true,
|
visible: true,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.lockTime!.tr,
|
leftTitel: TranslationLoader.lanKeys!.lockTime!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Get.toNamed(Routers.lockTimePage, arguments: {
|
Get.toNamed(Routers.lockTimePage, arguments: {
|
||||||
'lockSetInfoData': state.lockSetInfoData.value
|
'lockSetInfoData': state.lockSetInfoData.value
|
||||||
});
|
});
|
||||||
})),
|
})),
|
||||||
// ),
|
// ),
|
||||||
// Obx(() =>
|
// Obx(() =>
|
||||||
// 诊断
|
// 诊断
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: true,
|
visible: true,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.diagnose!.tr,
|
leftTitel: TranslationLoader.lanKeys!.diagnose!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Get.toNamed(Routers.diagnosePage, arguments: {
|
Get.toNamed(Routers.diagnosePage, arguments: {
|
||||||
'lockSetInfoData': state.lockSetInfoData.value
|
'lockSetInfoData': state.lockSetInfoData.value
|
||||||
});
|
});
|
||||||
})),
|
})),
|
||||||
// ),
|
// ),
|
||||||
// Obx(() =>
|
// Obx(() =>
|
||||||
// 上传数据
|
// 上传数据
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: true,
|
visible: true,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel: TranslationLoader.lanKeys!.uploadData!.tr,
|
leftTitel: TranslationLoader.lanKeys!.uploadData!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: true,
|
isHaveLine: true,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Get.toNamed(Routers.uploadDataPage);
|
Get.toNamed(Routers.uploadDataPage);
|
||||||
})),
|
})),
|
||||||
// ),
|
// ),
|
||||||
// Obx(() =>
|
// Obx(() =>
|
||||||
// Visibility(
|
// Visibility(
|
||||||
@ -434,17 +501,17 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
// ),
|
// ),
|
||||||
// Obx(() =>
|
// Obx(() =>
|
||||||
// 锁升级
|
// 锁升级
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: true,
|
visible: true,
|
||||||
child: CommonItem(
|
child: CommonItem(
|
||||||
leftTitel:
|
leftTitel:
|
||||||
TranslationLoader.lanKeys!.lockEscalation!.tr,
|
TranslationLoader.lanKeys!.lockEscalation!.tr,
|
||||||
rightTitle: "",
|
rightTitle: "",
|
||||||
isHaveLine: false,
|
isHaveLine: false,
|
||||||
isHaveDirection: true,
|
isHaveDirection: true,
|
||||||
action: () {
|
action: () {
|
||||||
Get.toNamed(Routers.lockEscalationPage);
|
Get.toNamed(Routers.lockEscalationPage);
|
||||||
})),
|
})),
|
||||||
// ),
|
// ),
|
||||||
SizedBox(height: 30.h),
|
SizedBox(height: 30.h),
|
||||||
Container(
|
Container(
|
||||||
@ -468,8 +535,10 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget rightText(String rightTitle){
|
Widget rightText(String rightTitle) {
|
||||||
return Text(rightTitle ?? "", textAlign: TextAlign.end, style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor));
|
return Text(rightTitle ?? "",
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
CupertinoSwitch _openCheckInSwitch() {
|
CupertinoSwitch _openCheckInSwitch() {
|
||||||
@ -517,6 +586,24 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CupertinoSwitch _otherToDoSwitch(int clickIndex) {
|
||||||
|
return CupertinoSwitch(
|
||||||
|
activeColor: CupertinoColors.activeBlue,
|
||||||
|
trackColor: CupertinoColors.systemGrey5,
|
||||||
|
thumbColor: CupertinoColors.white,
|
||||||
|
value: clickIndex == 0 ? isClick1 : isClick2,
|
||||||
|
onChanged: (value) {
|
||||||
|
setState(() {
|
||||||
|
if (clickIndex == 0) {
|
||||||
|
isClick1 = value;
|
||||||
|
} else {
|
||||||
|
isClick2 = value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//确认弹窗
|
//确认弹窗
|
||||||
void showCupertinoAlertDialog(widgetContext) {
|
void showCupertinoAlertDialog(widgetContext) {
|
||||||
showCupertinoDialog(
|
showCupertinoDialog(
|
||||||
@ -547,10 +634,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void showDeletAlertDialog(
|
void showDeletAlertDialog(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
) {
|
) {
|
||||||
// showDialog(
|
// showDialog(
|
||||||
// context: context,
|
// context: context,
|
||||||
// builder: (BuildContext context) {
|
// builder: (BuildContext context) {
|
||||||
@ -632,7 +718,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
|
|||||||
Toast.show(msg: "请输入登录密码");
|
Toast.show(msg: "请输入登录密码");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logic.checkLoginPassword((){
|
logic.checkLoginPassword(() {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@ -0,0 +1,112 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
|
||||||
|
import '../../../../app_settings/app_colors.dart';
|
||||||
|
import '../../../../tools/titleAppBar.dart';
|
||||||
|
|
||||||
|
class MotorPowerPage extends StatefulWidget {
|
||||||
|
const MotorPowerPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<MotorPowerPage> createState() => _MotorPowerPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MotorPowerPageState extends State<MotorPowerPage> {
|
||||||
|
bool isCheck = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
appBar: TitleAppBar(
|
||||||
|
barTitle: '电机功率设置',
|
||||||
|
haveBack: true,
|
||||||
|
backgroundColor: AppColors.mainColor),
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 40.h,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(left: 40.w),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Text(
|
||||||
|
'请根据门锁实际情况,请谨慎选择电机功率:',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 24.sp,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 40.h,
|
||||||
|
),
|
||||||
|
_buildTipsView('小功率:\n', '耗电少', isCheck),
|
||||||
|
SizedBox(
|
||||||
|
height: 20.h,
|
||||||
|
),
|
||||||
|
_buildTipsView('大功率:\n',
|
||||||
|
'如果开锁时锁舌不能正常收回,或需要带动\n天地钩,建议选择大功率。此时耗电将会\n增加。', !isCheck)
|
||||||
|
],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTipsView(String titleStr, String subTitle, bool isClick) {
|
||||||
|
return GestureDetector(
|
||||||
|
child: Container(
|
||||||
|
width: ScreenUtil().screenWidth - 40.w,
|
||||||
|
margin: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 10.h),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: isClick
|
||||||
|
? AppColors.blueViewBgColor
|
||||||
|
: AppColors.greyBackgroundColor,
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: 20.w, top: 30.h, bottom: 30.h, right: 15.w),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
isClick
|
||||||
|
? Image.asset(
|
||||||
|
'images/mine/icon_mine_blueSelect.png',
|
||||||
|
width: 20.w,
|
||||||
|
height: 14.w,
|
||||||
|
)
|
||||||
|
: SizedBox(
|
||||||
|
width: 20.w,
|
||||||
|
height: 14.w,
|
||||||
|
),
|
||||||
|
SizedBox(width: 20.w),
|
||||||
|
_buildRichText(titleStr, subTitle, isClick),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
isCheck = !isCheck;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildRichText(String titleStr, String subTitle, bool isClick) {
|
||||||
|
//高亮样式
|
||||||
|
final TextStyle titleStyle = TextStyle(
|
||||||
|
color: isClick ? AppColors.blueTextTipsColor : Colors.black,
|
||||||
|
fontSize: 24.sp,
|
||||||
|
fontWeight: FontWeight.w500);
|
||||||
|
//默认样式
|
||||||
|
final TextStyle subTipsStyle = TextStyle(
|
||||||
|
color: isClick
|
||||||
|
? AppColors.blueTextTipsColor
|
||||||
|
: AppColors.placeholderTextColor,
|
||||||
|
fontSize: 20.sp);
|
||||||
|
|
||||||
|
late InlineSpan tipsPreviewSpan = TextSpan(children: [
|
||||||
|
TextSpan(text: titleStr, style: titleStyle),
|
||||||
|
TextSpan(text: subTitle, style: subTipsStyle),
|
||||||
|
]);
|
||||||
|
return RichText(text: tipsPreviewSpan);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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<MsgNotificationPage> createState() => _MsgNotificationPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MsgNotificationPageState extends State<MsgNotificationPage> {
|
||||||
|
bool faceOn = false; //面容开锁
|
||||||
|
bool autoBright = false; //自动亮屏
|
||||||
|
String senseDistance = '远距离'; //感应距离
|
||||||
|
String antiMisoperation = '关闭'; //防误开
|
||||||
|
List<String> senseDistanceList = ['远距离', '近距离'];
|
||||||
|
List<String> 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<String> 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(() {});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
|
||||||
|
import '../../../../app_settings/app_colors.dart';
|
||||||
|
import '../../../../tools/titleAppBar.dart';
|
||||||
|
|
||||||
|
class OpenDoorDirectionPage extends StatefulWidget {
|
||||||
|
const OpenDoorDirectionPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<OpenDoorDirectionPage> createState() => _OpenDoorDirectionPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _OpenDoorDirectionPageState extends State<OpenDoorDirectionPage> {
|
||||||
|
bool isCheck = false;
|
||||||
|
int selectIndex = 0;
|
||||||
|
int _selectGroupValue = 1; //默认选中的单选框的值
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
appBar: TitleAppBar(
|
||||||
|
barTitle: '开门方向设置',
|
||||||
|
haveBack: true,
|
||||||
|
backgroundColor: AppColors.mainColor),
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 60.h,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(left: 40.w),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Text(
|
||||||
|
'请谨慎选择您家的开门方向(如果选择错误,将无法正常开关门):',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 24.sp,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
'images/mine/icon_mine_openDoorDir.png',
|
||||||
|
width: 500.w,
|
||||||
|
height: 300,
|
||||||
|
),
|
||||||
|
_buildRadioGroupRowWidget(),
|
||||||
|
SizedBox(
|
||||||
|
height: 60.h,
|
||||||
|
),
|
||||||
|
_buildTipsView(
|
||||||
|
'判断方法:\n',
|
||||||
|
'人站在屋外,面向入户门。\n如果门的合页或门轴在左边,则门是左开;\n如果门的合页或门轴在右边,则门是右开。\n如果设置错误,将无法正常开关门。\n建议由安装或维修人员操作。',
|
||||||
|
false)
|
||||||
|
],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
//单选框选择
|
||||||
|
Row _buildRadioGroupRowWidget() {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 60.w,
|
||||||
|
),
|
||||||
|
_colorfulCheckBox(1),
|
||||||
|
Text(
|
||||||
|
"左开",
|
||||||
|
style: TextStyle(fontSize: 24.sp),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 200.w,
|
||||||
|
),
|
||||||
|
_colorfulCheckBox(2),
|
||||||
|
Text(
|
||||||
|
'右开',
|
||||||
|
style: TextStyle(fontSize: 24.sp),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Radio _colorfulCheckBox(int selectIndex) {
|
||||||
|
return Radio(
|
||||||
|
value: selectIndex,
|
||||||
|
onChanged: (value) {
|
||||||
|
// print(value);
|
||||||
|
_selectGroupValue = value;
|
||||||
|
|
||||||
|
setState(() {});
|
||||||
|
},
|
||||||
|
groupValue: _selectGroupValue,
|
||||||
|
activeColor: AppColors.mainColor,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTipsView(String titleStr, String subTitle, bool isClick) {
|
||||||
|
return Container(
|
||||||
|
margin: EdgeInsets.only(left: 40.w),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: _buildRichText(titleStr, subTitle, false),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildRichText(String titleStr, String subTitle, bool isClick) {
|
||||||
|
//高亮样式
|
||||||
|
final TextStyle titleStyle = TextStyle(
|
||||||
|
color: isClick ? AppColors.blueTextTipsColor : Colors.black,
|
||||||
|
fontSize: 24.sp,
|
||||||
|
fontWeight: FontWeight.w500);
|
||||||
|
//默认样式
|
||||||
|
final TextStyle subTipsStyle = TextStyle(
|
||||||
|
color: isClick
|
||||||
|
? AppColors.blueTextTipsColor
|
||||||
|
: AppColors.placeholderTextColor,
|
||||||
|
fontSize: 22.sp);
|
||||||
|
|
||||||
|
late InlineSpan tipsPreviewSpan = TextSpan(children: [
|
||||||
|
TextSpan(text: titleStr, style: titleStyle),
|
||||||
|
TextSpan(text: subTitle, style: subTipsStyle),
|
||||||
|
]);
|
||||||
|
return RichText(text: tipsPreviewSpan);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -364,13 +364,15 @@ class _LockDetailPageState extends State<LockDetailPage>
|
|||||||
if (state.keyInfos.value.lockFeature!.d3Face == 1) {
|
if (state.keyInfos.value.lockFeature!.d3Face == 1) {
|
||||||
showWidgetArr.add(
|
showWidgetArr.add(
|
||||||
bottomItem('images/main/icon_face.png', '人脸', () {
|
bottomItem('images/main/icon_face.png', '人脸', () {
|
||||||
// Navigator.pushNamed(context, Routers.otherTypeKeyListPage,
|
Get.toNamed(Routers.otherTypeKeyListPage, arguments: {
|
||||||
// arguments: 1);
|
"lockId": widget.lockListInfoItemEntity.lockId,
|
||||||
// Toast.show(msg: "功能暂未开放");
|
"fromType": 3
|
||||||
tokNative('flutter_videoTalk_to_ios',
|
}); // Toast.show(msg: "功能暂未开放");
|
||||||
arguments: {'videoTalk': 'videoTalk'}).then((result) {
|
|
||||||
print('$result');
|
// tokNative('flutter_videoTalk_to_ios',
|
||||||
});
|
// arguments: {'videoTalk': 'videoTalk'}).then((result) {
|
||||||
|
// print('$result');
|
||||||
|
// });
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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<AddFaceTipPage> createState() => _AddFaceTipPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AddFaceTipPageState extends State<AddFaceTipPage> {
|
||||||
|
@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: () {}),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -157,6 +157,12 @@ class OtherTypeAddKeyLogic extends BaseGetXController {
|
|||||||
case 2:
|
case 2:
|
||||||
// 遥控
|
// 遥控
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
// 人脸
|
||||||
|
Get.toNamed(Routers.addFaceTipPage);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -43,10 +43,10 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
style: TextStyle(color: Colors.white, fontSize: 24.sp),
|
style: TextStyle(color: Colors.white, fontSize: 24.sp),
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||||
if(isDemoMode == false){
|
if (isDemoMode == false) {
|
||||||
showDeletAlertDialog(context);
|
showDeletAlertDialog(context);
|
||||||
}else{
|
} else {
|
||||||
// Get.toNamed(Routers.seletLockTypePage);
|
// Get.toNamed(Routers.seletLockTypePage);
|
||||||
Toast.show(msg: "演示模式");
|
Toast.show(msg: "演示模式");
|
||||||
}
|
}
|
||||||
@ -62,14 +62,16 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
),
|
),
|
||||||
Expanded(child: _buildMainUI(state.fromType.value)),
|
Expanded(child: _buildMainUI(state.fromType.value)),
|
||||||
AddBottomWhiteBtn(
|
AddBottomWhiteBtn(
|
||||||
btnName: '${TranslationLoader.lanKeys!.add!.tr}${getAppBarTitle(state.fromType.value)}',
|
btnName:
|
||||||
|
'${TranslationLoader.lanKeys!.add!.tr}${getAppBarTitle(state.fromType.value)}',
|
||||||
onClick: () async {
|
onClick: () async {
|
||||||
var data = await Get.toNamed(Routers.otherTypeKeyManagePage, arguments: {
|
var data =
|
||||||
|
await Get.toNamed(Routers.otherTypeKeyManagePage, arguments: {
|
||||||
"lockId": state.lockId.value,
|
"lockId": state.lockId.value,
|
||||||
"keyType": state.fromType.value,
|
"keyType": state.fromType.value,
|
||||||
"fromType": 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入
|
"fromType": 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入
|
||||||
});
|
});
|
||||||
if(data != null) {
|
if (data != null) {
|
||||||
switch (state.fromType.value) {
|
switch (state.fromType.value) {
|
||||||
case 0:
|
case 0:
|
||||||
// 卡
|
// 卡
|
||||||
@ -80,7 +82,11 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
logic.getFingerprintsListData();
|
logic.getFingerprintsListData();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// 遥控
|
// 遥控
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
// 人脸
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -109,6 +115,9 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
case 2:
|
case 2:
|
||||||
title = TranslationLoader.lanKeys!.remoteControl!.tr;
|
title = TranslationLoader.lanKeys!.remoteControl!.tr;
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
title = TranslationLoader.lanKeys!.face!.tr;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -126,13 +135,13 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
controller: state.searchController,
|
controller: state.searchController,
|
||||||
autofocus: false,
|
autofocus: false,
|
||||||
onChanged: (value){
|
onChanged: (value) {
|
||||||
print("onChanged:$value");
|
print("onChanged:$value");
|
||||||
},
|
},
|
||||||
onEditingComplete: (){
|
onEditingComplete: () {
|
||||||
print("onEditingComplete:");
|
print("onEditingComplete:");
|
||||||
},
|
},
|
||||||
onSubmitted: (value){
|
onSubmitted: (value) {
|
||||||
switch (state.fromType.value) {
|
switch (state.fromType.value) {
|
||||||
case 0:
|
case 0:
|
||||||
// 卡
|
// 卡
|
||||||
@ -143,17 +152,21 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
logic.getFingerprintsListData();
|
logic.getFingerprintsListData();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// 遥控
|
// 遥控
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
// 人脸
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
decoration: InputDecoration(
|
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,
|
hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr,
|
||||||
hintStyle: TextStyle(fontSize: 22.sp, height: 3.0),
|
hintStyle: TextStyle(fontSize: 22.sp, height: 3.0),
|
||||||
//不需要输入框下划线
|
//不需要输入框下划线
|
||||||
@ -186,96 +199,130 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
// typeImgName = 'images/icon_card.png';
|
// typeImgName = 'images/icon_card.png';
|
||||||
// }
|
// }
|
||||||
|
|
||||||
return Obx(() => state.fingerprintItemListData.value.isNotEmpty ? ListView.separated(
|
return Obx(() => state.fingerprintItemListData.value.isNotEmpty
|
||||||
itemCount: state.fingerprintItemListData.value.length,
|
? ListView.separated(
|
||||||
itemBuilder: (c, index) {
|
itemCount: state.fingerprintItemListData.value.length,
|
||||||
FingerprintItemData fingerprintItemData = state.fingerprintItemListData.value[index];
|
itemBuilder: (c, index) {
|
||||||
switch (state.fromType.value) {
|
FingerprintItemData fingerprintItemData =
|
||||||
case 0:
|
state.fingerprintItemListData.value[index];
|
||||||
// 卡
|
switch (state.fromType.value) {
|
||||||
if (index < state.fingerprintItemListData.value.length) {
|
case 0:
|
||||||
return LeftSlideActions(
|
// 卡
|
||||||
key: Key(fingerprintItemData.cardName!),
|
if (index < state.fingerprintItemListData.value.length) {
|
||||||
actionsWidth: 60,
|
return LeftSlideActions(
|
||||||
actions: [
|
key: Key(fingerprintItemData.cardName!),
|
||||||
_buildDeleteBtn(fingerprintItemData.cardId.toString()),
|
actionsWidth: 60,
|
||||||
],
|
actions: [
|
||||||
decoration: const BoxDecoration(
|
_buildDeleteBtn(fingerprintItemData.cardId.toString()),
|
||||||
borderRadius: BorderRadius.all(Radius.circular(1)),
|
],
|
||||||
),
|
decoration: const BoxDecoration(
|
||||||
child: _keyItem('images/icon_card.png', fingerprintItemData.cardName!, fingerprintItemData.cardType! == 1 ? "永久" : "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}", () async {
|
borderRadius: BorderRadius.all(Radius.circular(1)),
|
||||||
var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: {
|
),
|
||||||
"fingerprintItemData": fingerprintItemData,
|
child: _keyItem(
|
||||||
"type": type,
|
'images/icon_card.png',
|
||||||
});
|
fingerprintItemData.cardName!,
|
||||||
if(data != null) {
|
fingerprintItemData.cardType! == 1
|
||||||
logic.getICCardListData();
|
? "永久"
|
||||||
|
: "${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 {
|
return _keyItem(
|
||||||
var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: {
|
'images/icon_card.png',
|
||||||
"fingerprintItemData": fingerprintItemData,
|
fingerprintItemData.cardName!,
|
||||||
"type": type,
|
fingerprintItemData.cardType! == 1
|
||||||
});
|
? "永久"
|
||||||
if(data != null) {
|
: "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}",
|
||||||
logic.getICCardListData();
|
() async {
|
||||||
}
|
var data = await Get.toNamed(Routers.otherTypeKeyDetailPage,
|
||||||
});
|
arguments: {
|
||||||
break;
|
"fingerprintItemData": fingerprintItemData,
|
||||||
case 1:
|
"type": type,
|
||||||
// 指纹
|
});
|
||||||
if (index < state.fingerprintItemListData.value.length) {
|
if (data != null) {
|
||||||
return LeftSlideActions(
|
logic.getICCardListData();
|
||||||
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) {
|
break;
|
||||||
logic.getFingerprintsListData();
|
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 {
|
return _keyItem(
|
||||||
var data = await Get.toNamed(Routers.otherTypeKeyDetailPage, arguments: {
|
'images/icon_fingerprint.png',
|
||||||
"fingerprintItemData": fingerprintItemData,
|
fingerprintItemData.fingerprintName!,
|
||||||
"type": type,
|
fingerprintItemData.fingerprintType! == 1
|
||||||
});
|
? "永久"
|
||||||
if(data != null) {
|
: "${DateTool().dateToYMDHNString(fingerprintItemData.startDate.toString())} - ${DateTool().dateToYMDHNString(fingerprintItemData.endDate.toString())}",
|
||||||
logic.getFingerprintsListData();
|
() 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;
|
separatorBuilder: (BuildContext context, int index) {
|
||||||
case 2:
|
return const Divider(
|
||||||
// 遥控
|
height: 1,
|
||||||
|
color: AppColors.greyLineColor,
|
||||||
break;
|
);
|
||||||
default:
|
},
|
||||||
break;
|
)
|
||||||
}
|
: const NoData());
|
||||||
},
|
|
||||||
separatorBuilder: (BuildContext context, int index) {
|
|
||||||
return const Divider(
|
|
||||||
height: 1,
|
|
||||||
color: AppColors.greyLineColor,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
) :const NoData());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildDeleteBtn(String idStr) {
|
Widget _buildDeleteBtn(String idStr) {
|
||||||
@ -338,7 +385,8 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String showTime, Function() action) {
|
Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String showTime,
|
||||||
|
Function() action) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: action,
|
onTap: action,
|
||||||
child: Container(
|
child: Container(
|
||||||
@ -361,7 +409,9 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: [
|
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),
|
SizedBox(height: 5.h),
|
||||||
@ -369,7 +419,10 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
children: [
|
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<OtherTypeKeyListPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void showDeletAlertDialog(
|
void showDeletAlertDialog(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
) {
|
) {
|
||||||
showCupertinoDialog(
|
showCupertinoDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
@ -406,18 +459,18 @@ class _OtherTypeKeyListPageState extends State<OtherTypeKeyListPage> {
|
|||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
switch (state.fromType.value) {
|
switch (state.fromType.value) {
|
||||||
case 0:
|
case 0:
|
||||||
// 卡
|
// 卡
|
||||||
state.isDeletICCardData = true;
|
state.isDeletICCardData = true;
|
||||||
logic.senderAddICCard("1", "DeleteAll!@#", 255);
|
logic.senderAddICCard("1", "DeleteAll!@#", 255);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// 指纹
|
// 指纹
|
||||||
// logic.deletAllFingerprintsData();
|
// logic.deletAllFingerprintsData();
|
||||||
state.isDeletFingerprintData = true;
|
state.isDeletFingerprintData = true;
|
||||||
logic.senderAddFingerprint("1", "DeleteAll!@#", 255);
|
logic.senderAddFingerprint("1", "DeleteAll!@#", 255);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// 遥控
|
// 遥控
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -36,7 +36,8 @@ class CommonItem extends StatelessWidget {
|
|||||||
Container(
|
Container(
|
||||||
height: allHeight ?? 60.h,
|
height: allHeight ?? 60.h,
|
||||||
color: Colors.white,
|
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(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
SizedBox(width: 20.w),
|
SizedBox(width: 20.w),
|
||||||
|
|||||||
@ -8,6 +8,7 @@ class LanKeyEntity {
|
|||||||
this.card,
|
this.card,
|
||||||
this.fingerprint,
|
this.fingerprint,
|
||||||
this.remoteControl,
|
this.remoteControl,
|
||||||
|
this.face,
|
||||||
this.operatingRecord,
|
this.operatingRecord,
|
||||||
this.number,
|
this.number,
|
||||||
this.additive,
|
this.additive,
|
||||||
@ -415,6 +416,7 @@ class LanKeyEntity {
|
|||||||
card = json['card'];
|
card = json['card'];
|
||||||
fingerprint = json['fingerprint'];
|
fingerprint = json['fingerprint'];
|
||||||
remoteControl = json['remoteControl'];
|
remoteControl = json['remoteControl'];
|
||||||
|
face = json['face'];
|
||||||
operatingRecord = json['operatingRecord'];
|
operatingRecord = json['operatingRecord'];
|
||||||
number = json['number'];
|
number = json['number'];
|
||||||
additive = json['additive'];
|
additive = json['additive'];
|
||||||
@ -850,6 +852,7 @@ class LanKeyEntity {
|
|||||||
String? card;
|
String? card;
|
||||||
String? fingerprint;
|
String? fingerprint;
|
||||||
String? remoteControl;
|
String? remoteControl;
|
||||||
|
String? face;
|
||||||
String? operatingRecord;
|
String? operatingRecord;
|
||||||
String? number;
|
String? number;
|
||||||
String? additive;
|
String? additive;
|
||||||
@ -1275,6 +1278,7 @@ class LanKeyEntity {
|
|||||||
map['card'] = card;
|
map['card'] = card;
|
||||||
map['fingerprint'] = fingerprint;
|
map['fingerprint'] = fingerprint;
|
||||||
map['remoteControl'] = remoteControl;
|
map['remoteControl'] = remoteControl;
|
||||||
|
map['face'] = face;
|
||||||
map['operatingRecord'] = operatingRecord;
|
map['operatingRecord'] = operatingRecord;
|
||||||
map['number'] = number;
|
map['number'] = number;
|
||||||
map['additive'] = additive;
|
map['additive'] = additive;
|
||||||
|
|||||||