Merge branch 'master' of gitee.com:starlock-cn/app-starlock
This commit is contained in:
commit
817b515637
BIN
star_lock/images/icon_lock_circle.png
Normal file
BIN
star_lock/images/icon_lock_circle.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.5 KiB |
@ -792,5 +792,14 @@
|
||||
"全选":"Select all",
|
||||
"请选择要删除的视频":"Please select the video you want to delete",
|
||||
"请选择要下载的视频":"Please select the video you want to download",
|
||||
"欢迎使用":"Welcome to use"
|
||||
"欢迎使用":"Welcome to use",
|
||||
"用户协议和隐私政策概要": "Summary of User Agreement and Privacy Policy",
|
||||
"协议概要": "Protocol Summary",
|
||||
"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读":"Thank you for using this application. We attach great importance to your personal information and privacy protection. Before using this product, please read it carefully",
|
||||
"《用户协议》":"《User Agreement》",
|
||||
"和":"and",
|
||||
"《隐私政策》": "《Privacy Policy》",
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "The entire content of. By clicking \"Agree\", you agree and accept all terms. If you choose not to agree, you will not be able to use our products and services and will exit the application.",
|
||||
"不同意":"Disagree",
|
||||
"同意":"agree"
|
||||
}
|
||||
|
||||
@ -791,5 +791,14 @@
|
||||
"全选":"全选",
|
||||
"请选择要删除的视频":"请选择要删除的视频",
|
||||
"请选择要下载的视频":"请选择要下载的视频",
|
||||
"欢迎使用":"欢迎使用"
|
||||
"欢迎使用":"欢迎使用",
|
||||
"用户协议和隐私政策概要": "用户协议和隐私政策概要",
|
||||
"协议概要": "协议概要",
|
||||
"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读":"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读",
|
||||
"《用户协议》":"《用户协议》",
|
||||
"和":"和",
|
||||
"《隐私政策》": "《隐私政策》",
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
|
||||
"不同意":"不同意",
|
||||
"同意":"同意"
|
||||
}
|
||||
|
||||
@ -794,5 +794,15 @@
|
||||
"全选":"全选",
|
||||
"请选择要删除的视频":"请选择要删除的视频",
|
||||
"请选择要下载的视频":"请选择要下载的视频",
|
||||
"欢迎使用":"欢迎使用"
|
||||
"欢迎使用":"欢迎使用",
|
||||
"用户协议和隐私政策概要": "用户协议和隐私政策概要",
|
||||
"协议概要": "协议概要",
|
||||
"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读":"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读",
|
||||
"《用户协议》":"《用户协议》",
|
||||
"和":"和",
|
||||
"《隐私政策》": "《隐私政策》",
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
|
||||
"不同意":"不同意",
|
||||
"同意":"同意"
|
||||
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ class AppLog {
|
||||
static bool _onlyError = false;
|
||||
|
||||
static showLog({required bool printLog, bool? onlyError}){
|
||||
_printLog = printLog ?? false;
|
||||
_printLog = printLog;
|
||||
_onlyError = onlyError ?? false;
|
||||
}
|
||||
static log(String msg,{bool? error}){
|
||||
|
||||
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
|
||||
import '../../../appRouters.dart';
|
||||
import '../../../app_settings/app_colors.dart';
|
||||
@ -37,17 +38,6 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
|
||||
widget.lockListInfoGroupEntity.groupList as Iterable<GroupList>);
|
||||
|
||||
return Scaffold(
|
||||
floatingActionButton: FloatingActionButton(
|
||||
shape: const CircleBorder(),
|
||||
onPressed: () {
|
||||
Get.toNamed(Routers.addLockPage);
|
||||
},
|
||||
backgroundColor: AppColors.mainColor,
|
||||
child: const Icon(
|
||||
Icons.add,
|
||||
color: AppColors.darkGrayTextColor,
|
||||
),
|
||||
),
|
||||
body: ListView.separated(
|
||||
itemCount: groupDataList.length,
|
||||
itemBuilder: (context, index) {
|
||||
@ -70,8 +60,6 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
|
||||
List lockItemList = itemData.lockList ?? [];
|
||||
return LockListGroupPage(
|
||||
onTap: () {
|
||||
// selectGroupIdList.add(index);
|
||||
// clickIndex = index;
|
||||
//是否选中组
|
||||
if (itemData.isChecked) {
|
||||
} else {}
|
||||
|
||||
507
star_lock/lib/main/lockMian/lockList/lockList_xhj_page.dart
Normal file
507
star_lock/lib/main/lockMian/lockList/lockList_xhj_page.dart
Normal file
@ -0,0 +1,507 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
|
||||
import '../../../appRouters.dart';
|
||||
import '../../../app_settings/app_colors.dart';
|
||||
import '../../../common/XSConstantMacro/XSConstantMacro.dart';
|
||||
import '../../../tools/appRouteObserver.dart';
|
||||
import '../../../tools/dateTool.dart';
|
||||
import '../entity/lockListInfo_entity.dart';
|
||||
import 'lockListGroup_page.dart';
|
||||
import 'lockList_logic.dart';
|
||||
|
||||
class LockListXHJPage extends StatefulWidget {
|
||||
final LockListInfoGroupEntity lockListInfoGroupEntity;
|
||||
|
||||
const LockListXHJPage({Key? key, required this.lockListInfoGroupEntity})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
State<LockListXHJPage> createState() => _LockListXHJPageState();
|
||||
}
|
||||
|
||||
class _LockListXHJPageState extends State<LockListXHJPage> with RouteAware {
|
||||
final logic = Get.put(LockListLogic());
|
||||
final state = Get.find<LockListLogic>().state;
|
||||
|
||||
var groupDataList = <GroupList>[];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (widget.lockListInfoGroupEntity.pageNo == 1) {
|
||||
groupDataList = <GroupList>[];
|
||||
}
|
||||
groupDataList.addAll(
|
||||
widget.lockListInfoGroupEntity.groupList as Iterable<GroupList>);
|
||||
|
||||
return Scaffold(
|
||||
floatingActionButton: FloatingActionButton(
|
||||
shape: const CircleBorder(),
|
||||
onPressed: () {
|
||||
Get.toNamed(Routers.selectLockTypePage);
|
||||
},
|
||||
backgroundColor: AppColors.mainColor,
|
||||
child: const Icon(
|
||||
Icons.add,
|
||||
color: AppColors.darkGrayTextColor,
|
||||
),
|
||||
),
|
||||
body: ListView.separated(
|
||||
itemCount: groupDataList.length,
|
||||
itemBuilder: (context, index) {
|
||||
GroupList itemData = groupDataList[index];
|
||||
return _buildLockExpandedList(context, index, itemData);
|
||||
},
|
||||
shrinkWrap: true,
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
separatorBuilder: (context, index) {
|
||||
return const Divider(
|
||||
height: 1,
|
||||
color: AppColors.greyLineColor,
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
//设备多层级列表
|
||||
Widget _buildLockExpandedList(context, index, GroupList itemData) {
|
||||
List lockItemList = itemData.lockList ?? [];
|
||||
return LockListGroupPage(
|
||||
onTap: () {
|
||||
//是否选中组
|
||||
if (itemData.isChecked) {
|
||||
} else {}
|
||||
setState(() {});
|
||||
},
|
||||
typeImgList: const [],
|
||||
groupItem: itemData,
|
||||
child: ListView.separated(
|
||||
itemCount: lockItemList.length,
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
separatorBuilder: (context, index) {
|
||||
return const Divider(height: 1, color: AppColors.greyLineColor);
|
||||
},
|
||||
itemBuilder: (c, index) {
|
||||
LockListInfoItemEntity keyInfo = lockItemList[index];
|
||||
bool isLast = false;
|
||||
if (lockItemList.length == index + 1) {
|
||||
isLast = true;
|
||||
}
|
||||
|
||||
return Slidable(
|
||||
key: ValueKey(keyInfo.keyId),
|
||||
endActionPane: ActionPane(
|
||||
extentRatio: 0.2,
|
||||
motion: const ScrollMotion(),
|
||||
children: [
|
||||
SlidableAction(
|
||||
onPressed: (BuildContext context) {
|
||||
state.lockListInfoItemEntity = keyInfo;
|
||||
logic.deleyLockLogicOfRoles();
|
||||
},
|
||||
backgroundColor: Colors.red,
|
||||
foregroundColor: Colors.white,
|
||||
label: '删除'.tr,
|
||||
padding: EdgeInsets.only(left: 5.w, right: 5.w),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: lockInfoListItem(keyInfo, isLast, () {
|
||||
if ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
|
||||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
|
||||
(keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusWaitIneffective)) {
|
||||
logic.showToast("您的钥匙未生效".tr);
|
||||
return;
|
||||
}
|
||||
if ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
|
||||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
|
||||
(keyInfo.keyStatus == XSConstantMacro.keyStatusFrozen)) {
|
||||
logic.showToast("您的钥匙已冻结".tr);
|
||||
return;
|
||||
}
|
||||
if ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
|
||||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
|
||||
(keyInfo.keyStatus == XSConstantMacro.keyStatusExpired)) {
|
||||
logic.showToast("您的钥匙已过期".tr);
|
||||
return;
|
||||
}
|
||||
Get.toNamed(Routers.lockDetailMainPage, arguments: {
|
||||
// "lockMainEntity": widget.lockMainEntity,
|
||||
"keyInfo": keyInfo,
|
||||
"isOnlyOneData": false,
|
||||
});
|
||||
}),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
Widget lockInfoListItem(
|
||||
LockListInfoItemEntity keyInfo, bool isLast, Function() action) {
|
||||
return F.sw(
|
||||
defaultCall: () => _defaultLockInfoListItem(keyInfo, isLast, action),
|
||||
xhjCall: () => _xhjLockInfoListItem(keyInfo, isLast, action));
|
||||
}
|
||||
|
||||
Widget _defaultLockInfoListItem(
|
||||
LockListInfoItemEntity keyInfo, bool isLast, Function() action) {
|
||||
return GestureDetector(
|
||||
onTap: action,
|
||||
child: Container(
|
||||
// height: 122.h,
|
||||
margin: isLast
|
||||
? EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w, bottom: 20.w)
|
||||
: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w),
|
||||
decoration: BoxDecoration(
|
||||
color: ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
|
||||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
|
||||
(keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusWaitIneffective ||
|
||||
keyInfo.keyStatus == XSConstantMacro.keyStatusFrozen ||
|
||||
keyInfo.keyStatus == XSConstantMacro.keyStatusExpired))
|
||||
? AppColors.greyBackgroundColor
|
||||
: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20.w),
|
||||
),
|
||||
child: Column(
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
SizedBox(width: 30.w),
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
keyInfo.lockAlias!,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: keyInfo.passageMode == 1
|
||||
? AppColors.openPassageModeColor
|
||||
: AppColors.darkGrayTextColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(width: 20.w),
|
||||
Image.asset(
|
||||
logic.showElectricIcon(keyInfo.electricQuantity!),
|
||||
width: 30.w,
|
||||
height: 24.w,
|
||||
),
|
||||
SizedBox(width: 2.w),
|
||||
Text(
|
||||
"${keyInfo.electricQuantity!}%",
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
SizedBox(width: 30.w),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 5.h),
|
||||
Visibility(
|
||||
visible: keyInfo.passageMode == 1 ? true : false,
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(width: 30.w),
|
||||
Container(
|
||||
padding: EdgeInsets.only(right: 5.w, left: 5.w),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5.w),
|
||||
color: AppColors.openPassageModeColor,
|
||||
),
|
||||
child: Text("常开模式开启".tr,
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: AppColors.appBarIconColor)),
|
||||
),
|
||||
],
|
||||
)),
|
||||
SizedBox(height: 5.h),
|
||||
Visibility(
|
||||
visible: keyInfo.lockSetting!.remoteUnlock == 1 ? true : false,
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(width: 30.w),
|
||||
Text(
|
||||
"远程开锁".tr,
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
],
|
||||
)),
|
||||
SizedBox(height: 20.h),
|
||||
Visibility(
|
||||
visible: ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
|
||||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
|
||||
(keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusWaitIneffective ||
|
||||
keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusFrozen ||
|
||||
keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusExpired))
|
||||
? true
|
||||
: false,
|
||||
// visible: true,
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(width: 30.w),
|
||||
Container(
|
||||
padding: EdgeInsets.only(right: 5.w, left: 5.w),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5.w),
|
||||
color:
|
||||
DateTool().compareTimeIsOvertime(keyInfo.endDate!)
|
||||
? AppColors.listTimeYellowColor
|
||||
: AppColors.mainColor,
|
||||
),
|
||||
child: Text(logic.getKeyEffective(keyInfo),
|
||||
style: TextStyle(fontSize: 18.sp, color: Colors.white)
|
||||
// child: Text(logic.compareTimeIsOvertime(keyInfo.endDate!) ? "已过期" : "余${logic.compareTimeGetDaysFromNow(keyInfo.endDate!)}天", style: TextStyle(fontSize: 18.sp, color: Colors.white)
|
||||
),
|
||||
),
|
||||
],
|
||||
)),
|
||||
SizedBox(height: 5.h),
|
||||
Row(
|
||||
children: [
|
||||
SizedBox(width: 30.w),
|
||||
Text(
|
||||
"${logic.getUseKeyTypeStr(keyInfo.startDate, keyInfo.endDate, keyInfo.keyType)}/${keyInfo.isLockOwner == 1 ? '超级管理员'.tr : (keyInfo.keyRight == 1 ? "授权管理员".tr : "普通用户".tr)}",
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 20.h),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _xhjLockInfoListItem(
|
||||
LockListInfoItemEntity keyInfo, bool isLast, Function() action) {
|
||||
return GestureDetector(
|
||||
onTap: action,
|
||||
child: Container(
|
||||
// height: 122.h,
|
||||
margin: isLast
|
||||
? EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w, bottom: 20.w)
|
||||
: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w),
|
||||
decoration: BoxDecoration(
|
||||
color: ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
|
||||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
|
||||
(keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusWaitIneffective ||
|
||||
keyInfo.keyStatus == XSConstantMacro.keyStatusFrozen ||
|
||||
keyInfo.keyStatus == XSConstantMacro.keyStatusExpired))
|
||||
? AppColors.greyBackgroundColor
|
||||
: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20.w),
|
||||
),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 30.w, vertical: 20.h),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Image.asset(
|
||||
'images/icon_lock_circle.png',
|
||||
width: 32.r,
|
||||
height: 32.r,
|
||||
color: AppColors.mainColor,
|
||||
),
|
||||
SizedBox(
|
||||
width: 8.w,
|
||||
),
|
||||
Expanded(
|
||||
child: Text(keyInfo.lockAlias!,
|
||||
style: TextStyle(
|
||||
fontSize: 32.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: keyInfo.passageMode == 1
|
||||
? AppColors.openPassageModeColor
|
||||
: AppColors.darkGrayTextColor,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
maxLines: 1),
|
||||
),
|
||||
Text(
|
||||
logic.getUseKeyTypeStr(
|
||||
keyInfo.startDate, keyInfo.endDate, keyInfo.keyType),
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
)
|
||||
],
|
||||
),
|
||||
Visibility(
|
||||
visible: keyInfo.passageMode == 1 ? true : false,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 5.h),
|
||||
child: Row(
|
||||
children: [
|
||||
Container(
|
||||
padding: EdgeInsets.only(right: 5.w, left: 5.w),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5.w),
|
||||
color: AppColors.openPassageModeColor,
|
||||
),
|
||||
child: Text("常开模式开启".tr,
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: AppColors.appBarIconColor)),
|
||||
),
|
||||
],
|
||||
),
|
||||
)),
|
||||
Visibility(
|
||||
visible:
|
||||
keyInfo.lockSetting!.remoteUnlock == 1 ? true : false,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 5.h),
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
"远程开锁".tr,
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
)),
|
||||
SizedBox(height: 20.h),
|
||||
Visibility(
|
||||
visible: ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
|
||||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
|
||||
(keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusWaitIneffective ||
|
||||
keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusFrozen ||
|
||||
keyInfo.keyStatus ==
|
||||
XSConstantMacro.keyStatusExpired))
|
||||
? true
|
||||
: false,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 20.h),
|
||||
child: Row(
|
||||
children: [
|
||||
Container(
|
||||
padding: EdgeInsets.only(right: 5.w, left: 5.w),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5.w),
|
||||
color: DateTool()
|
||||
.compareTimeIsOvertime(keyInfo.endDate!)
|
||||
? AppColors.listTimeYellowColor
|
||||
: AppColors.mainColor,
|
||||
),
|
||||
child: Text(logic.getKeyEffective(keyInfo),
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: Colors.white)
|
||||
// child: Text(logic.compareTimeIsOvertime(keyInfo.endDate!) ? "已过期" : "余${logic.compareTimeGetDaysFromNow(keyInfo.endDate!)}天", style: TextStyle(fontSize: 18.sp, color: Colors.white)
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)),
|
||||
SizedBox(height: 5.h),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Text(
|
||||
keyInfo.isLockOwner == 1
|
||||
? '超级管理员'.tr
|
||||
: (keyInfo.keyRight == 1 ? "授权管理员".tr : "普通用户".tr),
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
),
|
||||
Image.asset(
|
||||
logic.showElectricIcon(keyInfo.electricQuantity!),
|
||||
width: 30.w,
|
||||
height: 24.w,
|
||||
),
|
||||
SizedBox(width: 2.w),
|
||||
Text(
|
||||
"${keyInfo.electricQuantity!}%",
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
Text(
|
||||
keyInfo.hwVersion ?? "",
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 从上级界面进入 当前界面即将出现
|
||||
@override
|
||||
void didPush() {
|
||||
super.didPush();
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 返回上一个界面 当前界面即将消失
|
||||
@override
|
||||
void didPop() {
|
||||
super.didPop();
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
|
||||
// BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
|
||||
/// 从下级返回 当前界面即将出现
|
||||
@override
|
||||
void didPopNext() {
|
||||
super.didPopNext();
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 进入下级界面 当前界面即将消失
|
||||
@override
|
||||
void didPushNext() {
|
||||
super.didPushNext();
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
|
||||
// BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@ import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/app_settings/app_colors.dart';
|
||||
import 'package:star_lock/main/lockMian/lockList/lockList_xhj_page.dart';
|
||||
import 'package:star_lock/tools/noData.dart';
|
||||
import 'package:star_lock/tools/submitBtn.dart';
|
||||
|
||||
@ -138,8 +139,11 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
case 2:
|
||||
// 有多条数据
|
||||
Storage.setBool(ifIsDemoModeOrNot, false);
|
||||
returnWidget = LockListPage(
|
||||
lockListInfoGroupEntity: state.lockListInfoGroupEntity.value);
|
||||
returnWidget = F.sw(
|
||||
defaultCall: () => LockListPage(
|
||||
lockListInfoGroupEntity: state.lockListInfoGroupEntity.value),
|
||||
xhjCall: () => LockListXHJPage(
|
||||
lockListInfoGroupEntity: state.lockListInfoGroupEntity.value));
|
||||
break;
|
||||
default:
|
||||
returnWidget = NoData();
|
||||
|
||||
@ -5,8 +5,8 @@ class AddLockState {
|
||||
var lockTypeImg = 'images/lockType/addLock_touchScreen.png'.obs; //不同类型锁图片更换
|
||||
|
||||
AddLockState() {
|
||||
Map map = Get.arguments;
|
||||
if (map.isNotEmpty) {
|
||||
Map? map = Get.arguments;
|
||||
if (map is Map && map.isNotEmpty) {
|
||||
if (map["getLockType"] != null) {
|
||||
getLockType.value = map["getLockType"];
|
||||
//保险箱锁
|
||||
|
||||
@ -6,7 +6,9 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/app_settings/app_colors.dart';
|
||||
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
import 'package:star_lock/tools/storage.dart';
|
||||
|
||||
import '../versionUndate/versionUndateTool.dart';
|
||||
@ -37,7 +39,6 @@ class AppFirstEnterHandle {
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -49,75 +50,150 @@ class AppFirstEnterHandle {
|
||||
builder: (context) {
|
||||
return PopScope(
|
||||
canPop: false,
|
||||
child: CupertinoAlertDialog(
|
||||
title: const Text('用户协议和隐私政策概要\n'),
|
||||
content: Text.rich(
|
||||
TextSpan(
|
||||
text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读',
|
||||
style: const TextStyle(fontSize: 16.0),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: '《用户协议》',
|
||||
style: const TextStyle(
|
||||
color: Colors.blue,
|
||||
decoration: TextDecoration.underline),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () {
|
||||
// 处理用户协议点击事件
|
||||
Get.toNamed(Routers.webviewShowPage, arguments: {
|
||||
"url": XSConstantMacro.userAgreementURL,
|
||||
"title": '用户协议'
|
||||
});
|
||||
},
|
||||
),
|
||||
const TextSpan(text: '和'),
|
||||
TextSpan(
|
||||
text: '《隐私政策》',
|
||||
style: const TextStyle(
|
||||
color: Colors.blue,
|
||||
decoration: TextDecoration.underline),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () {
|
||||
// 处理隐私政策点击事件
|
||||
Get.toNamed(Routers.webviewShowPage, arguments: {
|
||||
"url": XSConstantMacro.privacyPolicyURL,
|
||||
"title": '隐私政策'
|
||||
});
|
||||
},
|
||||
),
|
||||
const TextSpan(
|
||||
text:
|
||||
'的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。'),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: const Text(
|
||||
'不同意',
|
||||
style: TextStyle(color: Colors.black),
|
||||
),
|
||||
onPressed: () {
|
||||
_exitApp();
|
||||
},
|
||||
),
|
||||
CupertinoDialogAction(
|
||||
child: const Text(
|
||||
'同意',
|
||||
style: TextStyle(color: Colors.blue),
|
||||
),
|
||||
onPressed: () {
|
||||
Storage.setString(isAgreePrivacy, isAgreePrivacy);
|
||||
Navigator.of(context).pop();
|
||||
getAppFirstEnter(context, isShowUpdateVersion);
|
||||
},
|
||||
),
|
||||
],
|
||||
));
|
||||
child: F.sw(
|
||||
defaultCall: () => _defaultPrivacyAgreementAlert(context),
|
||||
xhjCall: () => _xhjPrivacyAgreementAlert(context)));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
//默认布局
|
||||
Widget _defaultPrivacyAgreementAlert(BuildContext context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: Text('${'用户协议和隐私政策概要'.tr}\n'),
|
||||
content: Text.rich(
|
||||
TextSpan(
|
||||
text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr,
|
||||
style: const TextStyle(fontSize: 16.0),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: '《用户协议》'.tr,
|
||||
style: const TextStyle(
|
||||
color: Colors.blue, decoration: TextDecoration.underline),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () {
|
||||
// 处理用户协议点击事件
|
||||
Get.toNamed(Routers.webviewShowPage, arguments: {
|
||||
"url": XSConstantMacro.userAgreementURL,
|
||||
"title": '用户协议'.tr
|
||||
});
|
||||
},
|
||||
),
|
||||
TextSpan(text: '和'.tr),
|
||||
TextSpan(
|
||||
text: '《隐私政策》'.tr,
|
||||
style: const TextStyle(
|
||||
color: Colors.blue, decoration: TextDecoration.underline),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () {
|
||||
// 处理隐私政策点击事件
|
||||
Get.toNamed(Routers.webviewShowPage, arguments: {
|
||||
"url": XSConstantMacro.privacyPolicyURL,
|
||||
"title": '隐私政策'.tr
|
||||
});
|
||||
},
|
||||
),
|
||||
TextSpan(
|
||||
text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。'
|
||||
.tr),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: Text(
|
||||
'不同意'.tr,
|
||||
style: TextStyle(color: Colors.black),
|
||||
),
|
||||
onPressed: () {
|
||||
_exitApp();
|
||||
},
|
||||
),
|
||||
CupertinoDialogAction(
|
||||
child: Text(
|
||||
'同意'.tr,
|
||||
style: TextStyle(color: Colors.blue),
|
||||
),
|
||||
onPressed: () {
|
||||
Storage.setString(isAgreePrivacy, isAgreePrivacy);
|
||||
Navigator.of(context).pop();
|
||||
getAppFirstEnter(context, isShowUpdateVersion);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
//xhj 布局
|
||||
Widget _xhjPrivacyAgreementAlert(BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text('协议概要'.tr),
|
||||
backgroundColor: Colors.white,
|
||||
content: Text.rich(
|
||||
TextSpan(
|
||||
text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr,
|
||||
style: const TextStyle(fontSize: 16.0),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: '《用户协议》'.tr,
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor,
|
||||
),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () {
|
||||
// 处理用户协议点击事件
|
||||
Get.toNamed(Routers.webviewShowPage, arguments: {
|
||||
"url": XSConstantMacro.userAgreementURL,
|
||||
"title": '用户协议'.tr
|
||||
});
|
||||
},
|
||||
),
|
||||
TextSpan(text: '和'.tr),
|
||||
TextSpan(
|
||||
text: '《隐私政策》'.tr,
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor,
|
||||
),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () {
|
||||
// 处理隐私政策点击事件
|
||||
Get.toNamed(Routers.webviewShowPage, arguments: {
|
||||
"url": XSConstantMacro.privacyPolicyURL,
|
||||
"title": '隐私政策'.tr
|
||||
});
|
||||
},
|
||||
),
|
||||
TextSpan(
|
||||
text: '的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。'
|
||||
.tr),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: Text(
|
||||
'不同意'.tr,
|
||||
style: TextStyle(color: Colors.black),
|
||||
),
|
||||
onPressed: () {
|
||||
_exitApp();
|
||||
},
|
||||
),
|
||||
CupertinoDialogAction(
|
||||
child: Text(
|
||||
'同意'.tr,
|
||||
style: TextStyle(color: AppColors.mainColor),
|
||||
),
|
||||
onPressed: () {
|
||||
Storage.setString(isAgreePrivacy, isAgreePrivacy);
|
||||
Navigator.of(context).pop();
|
||||
getAppFirstEnter(context, isShowUpdateVersion);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
//位置权限弹窗
|
||||
void showPositionAlert(BuildContext widgetContext) {
|
||||
showCupertinoDialog(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user