This commit is contained in:
魏少阳 2024-04-28 15:00:20 +08:00
commit 95e51167bd
20 changed files with 894 additions and 234 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -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"
}

View File

@ -791,5 +791,14 @@
"全选":"全选",
"请选择要删除的视频":"请选择要删除的视频",
"请选择要下载的视频":"请选择要下载的视频",
"欢迎使用":"欢迎使用"
"欢迎使用":"欢迎使用",
"用户协议和隐私政策概要": "用户协议和隐私政策概要",
"协议概要": "协议概要",
"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读":"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读",
"《用户协议》":"《用户协议》",
"和":"和",
"《隐私政策》": "《隐私政策》",
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
"不同意":"不同意",
"同意":"同意"
}

View File

@ -794,5 +794,15 @@
"全选":"全选",
"请选择要删除的视频":"请选择要删除的视频",
"请选择要下载的视频":"请选择要下载的视频",
"欢迎使用":"欢迎使用"
"欢迎使用":"欢迎使用",
"用户协议和隐私政策概要": "用户协议和隐私政策概要",
"协议概要": "协议概要",
"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读":"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读",
"《用户协议》":"《用户协议》",
"和":"和",
"《隐私政策》": "《隐私政策》",
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
"不同意":"不同意",
"同意":"同意"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -127,25 +127,25 @@
/*
* App
*/
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {
NSLog(@"Receive one notification.");
// APNS
NSDictionary *aps = [userInfo valueForKey:@"aps"];
//
NSString *content = [aps valueForKey:@"alert"];
// badge
NSInteger badge = [[aps valueForKey:@"badge"] integerValue];
//
NSString *sound = [aps valueForKey:@"sound"];
// Extras
NSString *Extras = [userInfo valueForKey:@"Extras"]; //Extraskey
NSLog(@"content = [%@], badge = [%ld], sound = [%@], Extras = [%@]", content, (long)badge, sound, Extras);
// iOS badge 0
application.applicationIconBadgeNumber = 0;
//
// [CloudPushSDK handleReceiveRemoteNotification:userInfo];(Deprecated from v1.8.1)
[CloudPushSDK sendNotificationAck:userInfo];
}
//- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {
// NSLog(@"Receive one notification.");
// APNS
// NSDictionary *aps = [userInfo valueForKey:@"aps"];
// //
// NSString *content = [aps valueForKey:@"alert"];
// // badge
// NSInteger badge = [[aps valueForKey:@"badge"] integerValue];
// //
// NSString *sound = [aps valueForKey:@"sound"];
// // Extras
// NSString *Extras = [userInfo valueForKey:@"Extras"]; //Extraskey
// NSLog(@"content = [%@], badge = [%ld], sound = [%@], Extras = [%@]", content, (long)badge, sound, Extras);
// // iOS badge 0
// application.applicationIconBadgeNumber = 0;
// //
// // [CloudPushSDK handleReceiveRemoteNotification:userInfo];(Deprecated from v1.8.1)
// [CloudPushSDK sendNotificationAck:userInfo];
//}

View File

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

View File

@ -1,8 +1,8 @@
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';
@ -16,7 +16,8 @@ import 'lockList_logic.dart';
class LockListPage extends StatefulWidget {
final LockListInfoGroupEntity lockListInfoGroupEntity;
const LockListPage({Key? key, required this.lockListInfoGroupEntity}) : super(key: key);
const LockListPage({Key? key, required this.lockListInfoGroupEntity})
: super(key: key);
@override
State<LockListPage> createState() => _LockListPageState();
@ -30,57 +31,38 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
@override
Widget build(BuildContext context) {
if(widget.lockListInfoGroupEntity.pageNo == 1){
if (widget.lockListInfoGroupEntity.pageNo == 1) {
groupDataList = <GroupList>[];
}
groupDataList.addAll(widget.lockListInfoGroupEntity.groupList as Iterable<GroupList>);
groupDataList.addAll(
widget.lockListInfoGroupEntity.groupList as Iterable<GroupList>);
return 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,
);
});
return Scaffold(
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 _buildListView(BuildContext context, List itemList) {
// return ListView.separated(
// itemCount: itemList.length,
// itemBuilder: (context, index) {
// GroupList itemData = itemList[index];
// return _buildLockExpandedList(context, index, itemData);
// },
// shrinkWrap: true,
// separatorBuilder: (context, index) {
// return const Divider(
// height: 1,
// color: AppColors.greyLineColor,
// );
// });
// }
//
Widget _buildLockExpandedList(context, index, GroupList itemData) {
List lockItemList = itemData.lockList ?? [];
return LockListGroupPage(
onTap: () {
// selectGroupIdList.add(index);
// clickIndex = index;
//
if (itemData.isChecked) {
}else{
}
} else {}
setState(() {});
},
typeImgList: const [],
@ -88,25 +70,25 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
child: ListView.separated(
itemCount: lockItemList.length,
shrinkWrap: true,
physics:const NeverScrollableScrollPhysics(),
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){
if (lockItemList.length == index + 1) {
isLast = true;
}
return Slidable(
key:ValueKey(keyInfo.keyId),
key: ValueKey(keyInfo.keyId),
endActionPane: ActionPane(
extentRatio: 0.2,
motion: const ScrollMotion(),
children: [
SlidableAction(
onPressed: (BuildContext context){
onPressed: (BuildContext context) {
state.lockListInfoItemEntity = keyInfo;
logic.deleyLockLogicOfRoles();
},
@ -118,15 +100,22 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
],
),
child: lockInfoListItem(keyInfo, isLast, () {
if((keyInfo.keyType == XSConstantMacro.keyTypeTime || keyInfo.keyType == XSConstantMacro.keyTypeLoop) && (keyInfo.keyStatus == XSConstantMacro.keyStatusWaitIneffective)){
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)){
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)){
if ((keyInfo.keyType == XSConstantMacro.keyTypeTime ||
keyInfo.keyType == XSConstantMacro.keyTypeLoop) &&
(keyInfo.keyStatus == XSConstantMacro.keyStatusExpired)) {
logic.showToast("您的钥匙已过期".tr);
return;
}
@ -137,40 +126,28 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
});
}),
);
// return lockInfoListItem(keyInfo, isLast, () {
// if((keyInfo.keyType == XSConstantMacro.keyTypeTime || keyInfo.keyType == XSConstantMacro.keyTypeLoop) && (keyInfo.keyStatus == XSConstantMacro.keyStatusWaitIneffective)){
// logic.showToast("您的钥匙未生效");
// // return;
// }
// if((keyInfo.keyType == XSConstantMacro.keyTypeTime || keyInfo.keyType == XSConstantMacro.keyTypeLoop) && (keyInfo.keyStatus == XSConstantMacro.keyStatusFrozen)){
// logic.showToast("您的钥匙已冻结");
// // return;
// }
// if((keyInfo.keyType == XSConstantMacro.keyTypeTime || keyInfo.keyType == XSConstantMacro.keyTypeLoop) && (keyInfo.keyStatus == XSConstantMacro.keyStatusExpired)){
// logic.showToast("您的钥匙已过期");
// // return;
// }
// Get.toNamed(Routers.lockDetailMainPage, arguments: {
// // "lockMainEntity": widget.lockMainEntity,
// "keyInfo": keyInfo,
// "isOnlyOneData": false,
// });
// });
}),
);
}
Widget lockInfoListItem(LockListInfoItemEntity keyInfo, bool isLast, Function() action) {
Widget lockInfoListItem(
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),
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,
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(
@ -190,7 +167,11 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
Text(
keyInfo.lockAlias!,
style: TextStyle(
fontSize: 24.sp, fontWeight: FontWeight.w500, color: keyInfo.passageMode == 1 ? AppColors.openPassageModeColor : AppColors.darkGrayTextColor),
fontSize: 24.sp,
fontWeight: FontWeight.w500,
color: keyInfo.passageMode == 1
? AppColors.openPassageModeColor
: AppColors.darkGrayTextColor),
),
],
),
@ -213,7 +194,7 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
SizedBox(height: 5.h),
Visibility(
visible: keyInfo.passageMode == 1 ? true : false,
child:Row(
child: Row(
children: [
SizedBox(width: 30.w),
Container(
@ -222,42 +203,55 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
borderRadius: BorderRadius.circular(5.w),
color: AppColors.openPassageModeColor,
),
child: Text("常开模式开启".tr, style: TextStyle(fontSize: 18.sp, color: AppColors.appBarIconColor)),
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(
child: Row(
children: [
SizedBox(width: 30.w),
Text(
"远程开锁".tr, style: TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor),
"远程开锁".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))
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(
// 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)
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)
),
),
],
)),
@ -329,5 +323,4 @@ class _LockListPageState extends State<LockListPage> with RouteAware {
// BlueManage().stopScan();
state.ifCurrentScreen.value = false;
}
}

View 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;
}
}

View File

@ -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';
@ -118,6 +119,10 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
Widget getDataReturnUI(int type) {
Widget returnWidget;
if (type == 1) {
type = F.sw(defaultCall: () => 1, xhjCall: () => 2);
}
switch (type) {
case 0:
//
@ -134,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();

View File

@ -41,35 +41,31 @@ class _StarLockMainXHJPageState extends State<StarLockMainXHJPage>
builder: (LockMainXHJLogic logic) {
return Scaffold(
backgroundColor: const Color(0xFFF5F5F5),
floatingActionButton: FloatingActionButton(
shape: const CircleBorder(),
onPressed: () {
logic.openEquipment();
},
backgroundColor: AppColors.mainColor,
tooltip: TranslationLoader.lanKeys!.device!.tr,
child: const Icon(
Icons.key,
color: AppColors.darkGrayTextColor,
),
),
body: SafeArea(
bottom: false,
child: Stack(
children: [
pageView(
widget: StarLockMainPage(
showAppBar: false,
showDrawer: false,
),
logic: logic,
index: 0,
),
pageView(
widget: LockMallPage(
showAppBar: false,
),
logic: logic,
index: 0,
index: 1,
),
pageView(
widget: MessageListPage(
showAppBar: false,
),
logic: logic,
index: 1,
index: 2,
),
pageView(
widget: MinePersonInfoPage(
@ -77,7 +73,7 @@ class _StarLockMainXHJPageState extends State<StarLockMainXHJPage>
showAbout: true,
),
logic: logic,
index: 2,
index: 3,
),
],
),
@ -97,18 +93,25 @@ class _StarLockMainXHJPageState extends State<StarLockMainXHJPage>
top: false,
child: Row(
children: [
navigationBarItem(Icons.shopping_cart, '商城'.tr, logic, 0,
() {
navigationBarItem(
Icons.key,
TranslationLoader.lanKeys!.device!.tr,
logic,
0, () {
logic.setIndex(0);
}),
navigationBarItem(Icons.message,
TranslationLoader.lanKeys!.message!.tr, logic, 1, () {
navigationBarItem(Icons.shopping_cart, '商城'.tr, logic, 1,
() {
logic.setIndex(1);
}),
navigationBarItem(Icons.account_circle, '我的'.tr, logic, 2,
() {
navigationBarItem(Icons.message,
TranslationLoader.lanKeys!.message!.tr, logic, 2, () {
logic.setIndex(2);
}),
navigationBarItem(Icons.account_circle, '我的'.tr, logic, 3,
() {
logic.setIndex(3);
}),
],
),
),

View File

@ -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"];
//

View File

@ -1,7 +1,9 @@
import 'dart:async';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import '../../tools/baseGetXController.dart';
@ -12,6 +14,16 @@ import 'starLockMine_state.dart';
class StarLockMineLogic extends BaseGetXController {
final StarLockMineState state = StarLockMineState();
//
Future<void> getUserInfoRequest() async {
MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo();
if (entity.errorCode!.codeIsSuccessful) {
state.mineInfoData.value = entity.data!;
state.isVip.value = state.mineInfoData.value.isVip! == 0 ? false : true;
AppLog.log('isVip: ${state.isVip.value}');
}
}
//
Future<void> userLogoutRequest() async {
LoginEntity entity = await ApiRepository.to.userLogout(deviceld: '');
@ -22,7 +34,8 @@ class StarLockMineLogic extends BaseGetXController {
StreamSubscription? _mineInfoChangeRefreshUIEvent;
void _mineInfoChangeRefreshUIAction() {
// eventBus
_mineInfoChangeRefreshUIEvent = eventBus.on<MineInfoChangeRefreshUI>().listen((event) {
_mineInfoChangeRefreshUIEvent =
eventBus.on<MineInfoChangeRefreshUI>().listen((event) {
getMineInfoData();
});
}

View File

@ -24,6 +24,12 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
final logic = Get.put(StarLockMineLogic());
final state = Get.find<StarLockMineLogic>().state;
@override
initState() {
super.initState();
logic.getUserInfoRequest();
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -57,19 +63,19 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
fit: BoxFit.fill,
),
Center(
child: Column(
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120.h,
),
GestureDetector(
onTap: () {
// Navigator.pushNamed(context, Routers.starLockLoginPage);
Get.back();
Get.toNamed(Routers.minePersonInfoPage);
},
child: Obx(() => Container(
child: Column(
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120.h,
),
GestureDetector(
onTap: () {
// Navigator.pushNamed(context, Routers.starLockLoginPage);
Get.back();
Get.toNamed(Routers.minePersonInfoPage);
},
child: Obx(() => Container(
width: 105.w,
height: 105.w,
// decoration: BoxDecoration(
@ -78,7 +84,11 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
// ),
child: ClipRRect(
borderRadius: BorderRadius.circular(52.5.w),
child: CustomNetworkImage(url:state.userHeadUrl.value??"", defaultUrl: 'images/controls_user.png', width:105.w, height:105.h),
child: CustomNetworkImage(
url: state.userHeadUrl.value ?? "",
defaultUrl: 'images/controls_user.png',
width: 105.w,
height: 105.h),
),
// state.headUrl().isNotEmpty ?
// Image(image: NetworkImage(state.loginData.value.data!.headUrl!)) :
@ -87,27 +97,42 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
// width: 60.w,
// height: 60.w)
)),
),
SizedBox(
height: 20.h,
),
Obx(() => Text(state.userNickName.value.isNotEmpty ? state.userNickName.value : (state.userMobile.value.isNotEmpty ? state.userMobile.value : state.userEmail.value),
),
SizedBox(
height: 20.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text(
state.userNickName.value.isNotEmpty
? state.userNickName.value
: (state.userMobile.value.isNotEmpty
? state.userMobile.value
: state.userEmail.value),
style: TextStyle(
fontSize: 22.sp,
color: Colors.white,
))),
SizedBox(
height: 10.h,
width: 5.w,
),
Obx(() => Text(
"${TranslationLoader.lanKeys!.accountNumber!.tr}:${state.userMobile.value.isNotEmpty ? state.userMobile.value : state.userEmail.value}",
style: TextStyle(
fontSize: 18.sp,
color: Colors.white,
fontWeight: FontWeight.w500))),
Obx(() => !state.isVip.value
? Image.asset(
'images/mine/icon_mine_noPlus.png',
width: 20.w,
height: 20.w,
)
: Image.asset(
'images/mine/icon_mine_isPlus.png',
width: 20.w,
height: 20.w,
)),
],
),
),
)
],
),
),
],
),
);

View File

@ -1,11 +1,14 @@
import 'package:get/get.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
class StarLockMineState {
// final loginData = LoginData().obs;
final mineInfoData = MinePersonInfoData().obs;
var userNickName = "".obs;
var userMobile = "".obs;
var userEmail = "".obs;
var userHeadUrl = "".obs;
var isVip = false.obs;
void onClose() {}
}

View File

@ -37,6 +37,7 @@ class MinePersonInfoData {
int? countryId;
String? email;
String? countryName;
int? isVip;
MinePersonInfoData(
{this.mobile,
@ -47,7 +48,8 @@ class MinePersonInfoData {
this.accountName,
this.countryId,
this.email,
this.countryName});
this.countryName,
this.isVip});
MinePersonInfoData.fromJson(Map<String, dynamic> json) {
mobile = json['mobile'];
@ -59,6 +61,7 @@ class MinePersonInfoData {
countryId = json['countryId'];
email = json['email'];
countryName = json['countryName'];
isVip = json['isVip'];
}
Map<String, dynamic> toJson() {
@ -72,6 +75,7 @@ class MinePersonInfoData {
data['countryId'] = countryId;
data['email'] = email;
data['countryName'] = countryName;
data['isVip'] = isVip;
return data;
}
}

View File

@ -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(