1,新增面容开锁相关界面

2,新增猫眼工作模式相关界面
3,新增开门方向设置界面
4,新增电机功率设置页面
5,部分图片补充
This commit is contained in:
Daisy 2023-11-02 16:12:36 +08:00
parent 481994581a
commit 624eaf258b
23 changed files with 824 additions and 149 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1004 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
star_lock/ios/Runner/img/bg.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
star_lock/ios/Runner/img/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
star_lock/ios/Runner/img/test.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart';
import 'package:star_lock/login/register/starLock_register_binding.dart';
@ -7,6 +8,10 @@ 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/massSendLockGroupList_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/openDoorDirection/openDoorDirection_page.dart';
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_main_page.dart';
import 'package:star_lock/mine/about/webviewShow_page.dart';
import 'package:star_lock/mine/mine/safeVerify/safeVerify_page.dart';
@ -337,6 +342,10 @@ abstract class Routers {
static const demoModeLockDetailPage = '/DemoModeLockDetailPage'; //
static const demoModeLockSetPage = '/DemoModeLockSetPage'; //
static const addLockSeletCountryPage = '/AddLockSeletCountryPage'; //
static const faceUnlockPage = '/faceUnlockPage'; //
static const motorPowerPage = '/motorPowerPage'; //
static const openDoorDirectionPage = '/openDoorDirectionPage'; //
static const catEyeWorkModePage = '/catEyeWorkModePage'; //
}
abstract class AppRouters {
@ -830,8 +839,22 @@ abstract class AppRouters {
name: Routers.minePersonInfoViewSafetyProblemPage,
page: () => const MinePersonInfoViewSafetyProblemPage()),
GetPage(name: Routers.webviewShowPage, page: () => const WebviewShowPage()),
GetPage(name: Routers.demoModeLockSetPage, page: () => const DemoModeLockSetPage()),
GetPage(name: Routers.demoModeLockDetailPage, page: () => const DemoModeLockDetailPage()),
GetPage(name: Routers.addLockSeletCountryPage, page: () => const AddLockSeletCountryPage()),
GetPage(
name: Routers.demoModeLockSetPage,
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())
];
}

View File

@ -122,4 +122,6 @@ class AppColors {
static const btnDisableColor = Color.fromRGBO(178, 178, 178, 1); //
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); //
}

View File

@ -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);
}
}

View File

@ -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(() {});
},
);
});
}
}

View File

@ -27,6 +27,8 @@ class LockSetPage extends StatefulWidget {
class _LockSetPageState extends State<LockSetPage> with RouteAware {
final logic = Get.put(LockSetLogic());
final state = Get.find<LockSetLogic>().state;
bool isClick1 = false;
bool isClick2 = false;
@override
void initState() {
@ -53,7 +55,8 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
children: [
//
CommonItem(
leftTitel: TranslationLoader.lanKeys!.basicInformation!.tr,
leftTitel:
TranslationLoader.lanKeys!.basicInformation!.tr,
rightTitle: "",
isHaveLine: false,
isHaveDirection: true,
@ -65,10 +68,12 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
SizedBox(height: 10.h),
//
Obx(() => Visibility(
visible: state.lockFeature.value.doorStatus == 1 ? true : false,
visible: state.lockFeature.value.doorStatus == 1
? true
: false,
child: CommonItem(
leftTitel:
TranslationLoader.lanKeys!.doorMagnetic!.tr,
TranslationLoader.lanKeys!.doorMagnetic!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
@ -78,10 +83,12 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
}))),
// 线
Obx(() => Visibility(
visible: state.lockFeature.value.wirelessKeyboard == 1 ? true : false,
visible: state.lockFeature.value.wirelessKeyboard == 1
? true
: false,
child: CommonItem(
leftTitel:
TranslationLoader.lanKeys!.wirelessKeyboard!.tr,
TranslationLoader.lanKeys!.wirelessKeyboard!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
@ -91,7 +98,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
}))),
//
Obx(() => Visibility(
visible: state.lockFeature.value.lightingTime == 1 ? true : false,
visible: state.lockFeature.value.lightingTime == 1
? true
: false,
child: CommonItem(
leftTitel: '照明',
rightTitle: "",
@ -114,10 +123,14 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
SizedBox(height: 10.h),
//
Obx(() => Visibility(
visible: state.lockFeature.value.autoLock == 1 ? true : false,
visible:
state.lockFeature.value.autoLock == 1 ? true : false,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.automaticBlocking!.tr,
rightTitle: (state.lockSettingInfo.value.autoLock ?? 0) > 0
leftTitel:
TranslationLoader.lanKeys!.automaticBlocking!.tr,
rightTitle: (state.lockSettingInfo.value.autoLock ??
0) >
0
? "${state.lockSetInfoData.value.lockSettingInfo!.autoLockSecond ?? 0}s"
: TranslationLoader.lanKeys!.closed!.tr,
isHaveLine: true,
@ -127,15 +140,17 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
// ? "${state.lockSetInfoData.value.lockSetting!.autoLockSecond ?? 0}s"
// : TranslationLoader.lanKeys!.closed!.tr),
action: () {
Get.toNamed(Routers.automaticBlockingPage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
Get.toNamed(Routers.automaticBlockingPage,
arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
}))),
//
Obx(() {
var titleStr = "";
if ((state.lockSettingInfo.value.lockSound ?? 0) == 1) {
switch (state.lockSettingInfo.value.lockSoundVolume ?? 0) {
switch (
state.lockSettingInfo.value.lockSoundVolume ?? 0) {
case 1:
titleStr = TranslationLoader.lanKeys!.low!.tr;
break;
@ -156,7 +171,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
titleStr = TranslationLoader.lanKeys!.closed!.tr;
}
return Visibility(
visible: state.lockFeature.value.lockSound == 1 ? true : false,
visible: state.lockFeature.value.lockSound == 1
? true
: false,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.lockSound!.tr,
rightTitle: titleStr,
@ -170,12 +187,16 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
}),
//
Obx(() => Visibility(
visible: state.lockFeature.value.antiPrySwitch == 1 ? true : false,
visible: state.lockFeature.value.antiPrySwitch == 1
? true
: false,
child: CommonItem(
leftTitel:
TranslationLoader.lanKeys!.burglarAlarm!.tr,
rightTitle:
(state.lockSettingInfo.value.antiPrySwitch ?? 0) == 1
(state.lockSettingInfo.value.antiPrySwitch ??
0) ==
1
? TranslationLoader.lanKeys!.opened!.tr
: TranslationLoader.lanKeys!.closed!.tr,
isHaveLine: true,
@ -189,40 +210,54 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
//
Obx(() => Visibility(
// visible: state.lockFeature.value.passageMode == 1 ? true : false,
visible:true,
visible: true,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.normallyOpenMode!.tr,
rightTitle: (state.lockSettingInfo.value.passageMode ?? 0) == 1
leftTitel:
TranslationLoader.lanKeys!.normallyOpenMode!.tr,
rightTitle:
(state.lockSettingInfo.value.passageMode ?? 0) ==
1
? TranslationLoader.lanKeys!.opened!.tr
: TranslationLoader.lanKeys!.closed!.tr,
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.normallyOpenModePage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
Get.toNamed(Routers.normallyOpenModePage,
arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
}))),
//
Obx(() => Visibility(
visible: state.lockFeature.value.remoteUnlock == 1 ? true : false,
child: CommonItem(leftTitel:
TranslationLoader.lanKeys!.remoteUnlocking!.tr,
rightTitle: (state.lockSettingInfo.value.remoteUnlock ?? 0) == 1
visible: state.lockFeature.value.remoteUnlock == 1
? true
: false,
child: CommonItem(
leftTitel:
TranslationLoader.lanKeys!.remoteUnlocking!.tr,
rightTitle:
(state.lockSettingInfo.value.remoteUnlock ?? 0) ==
1
? TranslationLoader.lanKeys!.opened!.tr
: TranslationLoader.lanKeys!.closed!.tr,
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.remoteUnlockingPage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
Get.toNamed(Routers.remoteUnlockingPage,
arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
}))),
//
Obx(() => Visibility(
visible: state.lockFeature.value.resetSwitch == 1 ? true : false,
visible: state.lockFeature.value.resetSwitch == 1
? true
: false,
child: CommonItem(
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!.closed!.tr,
isHaveLine: true,
@ -241,55 +276,45 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
leftTitel: '面容开锁',
rightTitle: "",
isHaveLine: true,
isHaveRightWidget: true,
rightWidget: SizedBox(
width: 60.w, child: _otherUnHaveDoneSwitch()))),
isHaveDirection: true,
action: () {
Get.toNamed(Routers.faceUnlockPage);
})),
// ),
// 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: "",
isHaveLine: true,
isHaveRightWidget: true,
rightWidget: SizedBox(
width: 60.w, child: _otherUnHaveDoneSwitch()))),
// ),
// Obx(() =>
Visibility(
visible: true,
child: CommonItem(
leftTitel: '感应距离',
leftTitel: '猫眼工作模式',
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
action: () {
Toast.show(msg: "功能暂未开放");
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(() =>
Visibility(
@ -300,7 +325,8 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
isHaveDirection: true,
isHaveLine: true,
action: () {
Toast.show(msg: "功能暂未开放");
// Toast.show(msg: "功能暂未开放");
Get.toNamed(Routers.openDoorDirectionPage);
})),
// ),
// Obx(() =>
@ -312,9 +338,31 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
isHaveLine: true,
isHaveDirection: true,
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),
//-----
//
@ -326,22 +374,29 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
title = TranslationLoader.lanKeys!.leisure!.tr;
}
return Visibility(
visible: state.lockStatus.value.roomStatus == 1 ? true : false,
visible: state.lockStatus.value.roomStatus == 1
? true
: false,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.markedHouseState!.tr,
leftTitel:
TranslationLoader.lanKeys!.markedHouseState!.tr,
rightTitle: title,
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.markedHouseStatePage, arguments: state.lockSetInfoData.value);
Get.toNamed(Routers.markedHouseStatePage,
arguments: state.lockSetInfoData.value);
}));
}),
//
Obx(() =>
Visibility(
visible: state.lockFeature.value.attendance == 1 ? true : false,
Obx(
() => Visibility(
visible: state.lockFeature.value.attendance == 1
? true
: false,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.checkingIn!.tr,
leftTitel:
TranslationLoader.lanKeys!.checkingIn!.tr,
rightTitle: "",
isHaveLine: true,
isHaveRightWidget: true,
@ -349,11 +404,14 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
width: 60.w, child: _openCheckInSwitch()))),
),
//
Obx(() =>
Visibility(
visible: state.lockFeature.value.unlockReminder == 1 ? true : false,
Obx(
() => Visibility(
visible: state.lockFeature.value.unlockReminder == 1
? true
: false,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.unlockReminder!.tr,
leftTitel:
TranslationLoader.lanKeys!.unlockReminder!.tr,
rightTitle: "",
isHaveLine: false,
isHaveRightWidget: true,
@ -362,10 +420,13 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
),
SizedBox(height: 10.h),
// wifi配网
Obx(() =>
Visibility(
visible: state.lockFeature.value.wifi == 1 ? true : false,
child: CommonItem(leftTitel: TranslationLoader.lanKeys!.wifiDistributionNetwork!.tr,
Obx(
() => Visibility(
visible:
state.lockFeature.value.wifi == 1 ? true : false,
child: CommonItem(
leftTitel: TranslationLoader
.lanKeys!.wifiDistributionNetwork!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
@ -375,46 +436,46 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
),
// Obx(() =>
//
Visibility(
visible: true,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.lockTime!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.lockTimePage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
})),
Visibility(
visible: true,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.lockTime!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.lockTimePage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
})),
// ),
// Obx(() =>
//
Visibility(
visible: true,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.diagnose!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.diagnosePage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
})),
Visibility(
visible: true,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.diagnose!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.diagnosePage, arguments: {
'lockSetInfoData': state.lockSetInfoData.value
});
})),
// ),
// Obx(() =>
//
Visibility(
visible: true,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.uploadData!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.uploadDataPage);
})),
Visibility(
visible: true,
child: CommonItem(
leftTitel: TranslationLoader.lanKeys!.uploadData!.tr,
rightTitle: "",
isHaveLine: true,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.uploadDataPage);
})),
// ),
// Obx(() =>
// Visibility(
@ -431,17 +492,17 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
// ),
// Obx(() =>
//
Visibility(
visible: true,
child: CommonItem(
leftTitel:
TranslationLoader.lanKeys!.lockEscalation!.tr,
rightTitle: "",
isHaveLine: false,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.lockEscalationPage);
})),
Visibility(
visible: true,
child: CommonItem(
leftTitel:
TranslationLoader.lanKeys!.lockEscalation!.tr,
rightTitle: "",
isHaveLine: false,
isHaveDirection: true,
action: () {
Get.toNamed(Routers.lockEscalationPage);
})),
// ),
SizedBox(height: 30.h),
Container(
@ -465,8 +526,10 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
));
}
Widget rightText(String rightTitle){
return Text(rightTitle ?? "", textAlign: TextAlign.end, style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor));
Widget rightText(String rightTitle) {
return Text(rightTitle ?? "",
textAlign: TextAlign.end,
style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor));
}
CupertinoSwitch _openCheckInSwitch() {
@ -474,7 +537,8 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: ((state.lockSettingInfo.value.attendance ?? 0) == 1) ? true : false,
value:
((state.lockSettingInfo.value.attendance ?? 0) == 1) ? true : false,
onChanged: (value) {
setState(() {
int isOnStr;
@ -501,10 +565,12 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white,
value: (state.lockSettingInfo.value.unlockReminder ?? 0) == 1 ? true : false,
value:
(state.lockSettingInfo.value.unlockReminder ?? 0) == 1 ? true : false,
onChanged: (value) {
setState(() {
state.isLockPickingReminder.value = state.isLockPickingReminder.value == 1 ? 2 : 1;
state.isLockPickingReminder.value =
state.isLockPickingReminder.value == 1 ? 2 : 1;
logic.setLockPickingReminder();
});
},
@ -523,6 +589,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) {
showCupertinoDialog(
@ -553,10 +637,9 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
);
}
void showDeletAlertDialog(
BuildContext context,
) {
BuildContext context,
) {
// showDialog(
// context: context,
// builder: (BuildContext context) {
@ -638,7 +721,7 @@ class _LockSetPageState extends State<LockSetPage> with RouteAware {
Toast.show(msg: "请输入登录密码");
return;
}
logic.checkLoginPassword((){
logic.checkLoginPassword(() {
Navigator.pop(context);
});
},

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -367,10 +367,11 @@ class _LockDetailPageState extends State<LockDetailPage>
// Navigator.pushNamed(context, Routers.otherTypeKeyListPage,
// arguments: 1);
// Toast.show(msg: "功能暂未开放");
tokNative('flutter_videoTalk_to_ios',
arguments: {'videoTalk': 'videoTalk'}).then((result) {
print('$result');
});
// tokNative('flutter_videoTalk_to_ios',
// arguments: {'videoTalk': 'videoTalk'}).then((result) {
// print('$result');
// });
}),
);
}