From 21dacd0bb3219f3d19bad1dd6aa0c424af4b6136 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Sat, 4 May 2024 18:16:08 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81=E6=98=AF=E5=90=A6=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=BC=80=E5=90=AF=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../value_added_services_record_logic.dart | 8 ++- .../value_added_services_record_page.dart | 67 ++++++++++++++++--- .../value_added_services_record_state.dart | 4 +- star_lock/lib/network/api.dart | 2 + star_lock/lib/network/api_provider.dart | 12 ++++ star_lock/lib/network/api_repository.dart | 28 +++++--- star_lock/lib/tools/showTipView.dart | 9 ++- 7 files changed, 101 insertions(+), 29 deletions(-) diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart index cfa16b0c..d1c9ec53 100644 --- a/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:get/get.dart'; -import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/buy_record_list_entity.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../network/api_repository.dart'; @@ -29,13 +29,15 @@ class ValueAddedServicesRecordLogic extends BaseGetXController { if (!load) { buyPageNo = 1; } - BuyRecordListEntity entity = await ApiRepository.to.getBuyRecordList( + AdvancedFunctionRecordEntity entity = + await ApiRepository.to.getBuyRecordList( type: type, recordType: 10, pageNo: buyPageNo, ); if (entity.errorCode!.codeIsSuccessful) { - state.buyRecordList.value = entity.data!.buyRecordlist!; + state.buyRecordList.value = entity.data!.recordList!; + state.buyRecordList.refresh(); } } diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart index e4831292..b60b9d39 100644 --- a/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart @@ -2,6 +2,7 @@ import 'package:easy_refresh/easy_refresh.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart'; import 'package:star_lock/tools/noData.dart'; import '../../../app_settings/app_colors.dart'; @@ -41,16 +42,16 @@ class _ValueAddedServicesRealNamePageState labelColor: AppColors.mainColor, unselectedLabelColor: AppColors.darkGrayTextColor, ), - Expanded( - child: TabBarView(children: [ - _PurchaseRecords( - getRecordList: logic.state.buyRecordList.value, - ), - _PurchaseRecords( - getRecordList: logic.state.useRecordList.value, - ), - ]), - ), + Obx(() => Expanded( + child: TabBarView(children: [ + _PurchaseRecords( + getRecordList: logic.state.buyRecordList.value, + ), + _PurchaseRecords( + getRecordList: logic.state.useRecordList.value, + ), + ]), + )), ], ), ), @@ -91,10 +92,54 @@ class _PurchaseRecordsState extends State<_PurchaseRecords> { ? ListView.builder( itemCount: widget.getRecordList.length, itemBuilder: (BuildContext context, int index) { - return const SizedBox(); + return _recordKeyItem(widget.getRecordList[index]); }) : NoData(), ); }); } + + Widget _recordKeyItem(RecordItem itemData) { + return Container( + color: Colors.white, + margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 10.h), + padding: + EdgeInsets.only(left: 20.w, right: 20.w, top: 16.h, bottom: 16.h), + child: Column( + children: [ + Row( + children: [ + Text( + itemData.createdAt!.length > 10 + ? itemData.createdAt!.substring(0, 10) + : itemData.createdAt!, + style: TextStyle( + fontSize: 24.sp, + color: AppColors.blackColor, + fontWeight: FontWeight.bold), + ), + Expanded(child: Container()), + Text('¥${itemData.amount}', + style: TextStyle( + fontSize: 24.sp, + color: AppColors.blackColor, + fontWeight: FontWeight.bold)), + ], + ), + SizedBox( + height: 8.h, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text('实名认证/${itemData.cloudauthCount}次', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 22.sp, color: AppColors.darkGrayTextColor)) + ], + ), + ], + ), + ); + } } diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart index 0ca96fbf..30b6f477 100644 --- a/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart @@ -2,6 +2,6 @@ import 'package:get/get.dart'; class ValueAddedServicesRecordState { int index = 0; - var buyRecordList = [].obs; - var useRecordList = [].obs; + var buyRecordList = [].obs; //购买记录列表 + var useRecordList = [].obs; //使用记录列表 } diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 4e1ab5c8..2984c656 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -227,4 +227,6 @@ abstract class Api { final String deleteLockCloudStorageURL = '/lockCloudStorage/delete'; //删除云存 final String getServiceUserPackageURL = '/v2/service/getUserPackage'; //获取增值服务用户余量包 + final String isFaceAuthenticationURL = + '/key/isFaceAuthentication'; //检测实名认证是否支持开启 } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 5788f097..e5f3c8fd 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -2016,6 +2016,18 @@ class ApiProvider extends BaseProvider { 'pageSize': pageSize, 'record_type': recordType, })); + + // 检测实名认证是否支持开启 + Future isFaceAuthentication( + int countryCode, + String account, + ) => + post( + isFaceAuthenticationURL.toUrl, + jsonEncode({ + 'countryCode': countryCode, + 'account': account, + })); } extension ExtensionString on String { diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index 59175b4d..b646272f 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -317,13 +317,11 @@ class ApiRepository { //锁电量更新 Future uploadElectricQuantity( - { - String? electricQuantity, - String? electricQuantityStandby, - String? lockId - }) async { - final res = - await apiProvider.uploadElectricQuantity(electricQuantity!, electricQuantityStandby!, lockId!); + {String? electricQuantity, + String? electricQuantityStandby, + String? lockId}) async { + final res = await apiProvider.uploadElectricQuantity( + electricQuantity!, electricQuantityStandby!, lockId!); return KeyOperationRecordEntity.fromJson(res.body); } @@ -465,8 +463,7 @@ class ApiRepository { } //自定义密码 - Future addPasswordKey( - { + Future addPasswordKey({ required String lockId, required String keyboardPwdName, required String keyboardPwd, @@ -2003,7 +2000,7 @@ class ApiRepository { } // 获取使用记录 - Future getBuyRecordList({ + Future getBuyRecordList({ required String type, required int pageNo, required int recordType, @@ -2011,7 +2008,7 @@ class ApiRepository { }) async { final res = await apiProvider.getBuyRecordList(type, recordType, pageNo, pageSize); - return BuyRecordListEntity.fromJson(res.body); + return AdvancedFunctionRecordEntity.fromJson(res.body); } // 获取购买记录 @@ -2047,4 +2044,13 @@ class ApiRepository { type, pageNo, recordType, pageSize); return AdvancedFunctionRecordEntity.fromJson(res.body); } + + // 检测实名认证是否支持开启 + Future isFaceAuthentication({ + required int countryCode, + required String account, + }) async { + final res = await apiProvider.isFaceAuthentication(countryCode, account); + return AdvancedFunctionRecordEntity.fromJson(res.body); + } } diff --git a/star_lock/lib/tools/showTipView.dart b/star_lock/lib/tools/showTipView.dart index 935f1804..24110458 100644 --- a/star_lock/lib/tools/showTipView.dart +++ b/star_lock/lib/tools/showTipView.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/tools/showTFView.dart'; import '../translations/trans_lib.dart'; @@ -132,13 +133,17 @@ class ShowTipView { title: Text(titleStr), actions: [ CupertinoDialogAction( - child: Text(TranslationLoader.lanKeys!.cancel!.tr), + child: Text( + '取消'.tr, + style: TextStyle(color: AppColors.mainColor), + ), onPressed: () { Get.back(); }, ), CupertinoDialogAction( - child: Text('购买'.tr), + child: + Text('购买'.tr, style: TextStyle(color: AppColors.mainColor)), onPressed: () { Get.back(); sureClick(); From 987fbe2ffa7427a9dc66b8c5d1ba1bb87901442a Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Sat, 4 May 2024 18:17:22 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat:=E4=BF=AE=E6=94=B9=E7=94=B5=E5=AD=90?= =?UTF-8?q?=E9=92=A5=E5=8C=99=E5=BE=AA=E7=8E=AF=E9=A1=B5=E9=9D=A2=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/sendElectronicKeyView_logic.dart | 47 +-- .../view/sendElectronicKeyView_page.dart | 372 +++++++++--------- .../view/sendElectronicKeyView_state.dart | 33 +- 3 files changed, 236 insertions(+), 216 deletions(-) diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart index 7be75621..5b05f199 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart @@ -40,21 +40,21 @@ class SendElectronicKeyViewLogic extends BaseGetXController { switch (type) { case '0': // 限时 - if (state.timeLimitBeginTime.value.isEmpty) { + if (state.timeLimitBeginTime.isEmpty) { showToast("请选择开始时间".tr); return; } - if (state.timeLimitEndTime.value.isEmpty) { + if (state.timeLimitEndTime.isEmpty) { showToast("请选择结束时间".tr); return; } typeValue = XSConstantMacro.keyTypeTime; startDate = DateTool() - .dateToTimestamp(state.timeLimitBeginTime.value, 1) + .dateToTimestamp(state.timeLimitBeginTime, 1) .toString(); endDate = DateTool() - .dateToTimestamp(state.timeLimitEndTime.value, 1) + .dateToTimestamp(state.timeLimitEndTime, 1) .toString(); startTime = "0"; endTime = "0"; @@ -73,20 +73,20 @@ class SendElectronicKeyViewLogic extends BaseGetXController { break; case '3': typeValue = XSConstantMacro.keyTypeLoop; - if (state.cycleBeginTime.value.isEmpty) { + if (state.cycleBeginTime.isEmpty) { showToast("请选择有效期".tr); return; } startDate = DateTool() - .dateToTimestamp(state.cycleBeginTime.value, 1) + .dateToTimestamp(state.cycleBeginTime, 1) .toString(); endDate = - DateTool().dateToTimestamp(state.cycleEndTime.value, 1).toString(); + DateTool().dateToTimestamp(state.cycleEndTime, 1).toString(); startTime = DateTool() - .dateToTimestamp(state.effectiveDateTime.value, 0) + .dateToTimestamp(state.effectiveDateTime, 0) .toString(); endTime = DateTool() - .dateToTimestamp(state.failureDateTime.value, 0) + .dateToTimestamp(state.failureDateTime, 0) .toString(); break; default: @@ -96,15 +96,15 @@ class SendElectronicKeyViewLogic extends BaseGetXController { String getKeyType = typeValue.toString(); var entity = await ApiRepository.to.sendElectronicKey( - createUser: state.isCreateUser.value == true ? "1" : "0", - countryCode: state.countryCode.value, + createUser: state.isCreateUser == true ? "1" : "0", + countryCode: state.countryCode, usernameType: isPhoneNumber(state.emailOrPhoneController.text) == true ? '1' : '2', endDate: int.parse(endDate), - faceAuthentication: state.isAuthentication.value == true ? '1' : '2', + faceAuthentication: state.isAuthentication == true ? '1' : '2', isCameraEnable: '2', - isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2', + isRemoteUnlock: state.isRemoteUnlock == true ? '1' : '2', keyNameForAdmin: state.keyNameController.text, keyRight: '0', keyType: getKeyType, @@ -118,13 +118,15 @@ class SendElectronicKeyViewLogic extends BaseGetXController { endTime: int.parse(endTime), isOnlyManageSelf: 0); if (entity.errorCode!.codeIsSuccessful) { - state.isSendSuccess.value = true; + state.isSendSuccess = true; resetData(); + update(); eventBus.fire(ElectronicKeyListRefreshUI()); } else { if (entity.errorCode == 425) { //用户未注册 - state.isCreateUser.value = true; + state.isCreateUser = true; + update(); ShowTipView().showIosTipWithContentDialog( '${"是否发送电子钥匙给未注册账号".tr}\n${state.emailOrPhoneController.text}', () { sendElectronicKeyRequest(); @@ -151,14 +153,15 @@ class SendElectronicKeyViewLogic extends BaseGetXController { state.keyNameController.text = ""; state.timeLimitBeginTime = DateTool() .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) - .obs; // 限时开始时间 + ; // 限时开始时间 state.timeLimitEndTime = DateTool() .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) - .obs; // 限时结束时间 - state.cycleBeginTime = "".obs; // 循环开始时间 - state.cycleEndTime = "".obs; // 循环结束时间 - state.effectiveDateTime = "".obs; // 生效时间 - state.failureDateTime = "".obs; // 失效时间 - state.weekdaysList = [].obs; + ; // 限时结束时间 + state.cycleBeginTime = ""; // 循环开始时间 + state.cycleEndTime = ""; // 循环结束时间 + state.effectiveDateTime = ""; // 生效时间 + state.failureDateTime = ""; // 失效时间 + state.weekdaysList = []; + update(); } } diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart index dc26f342..4cf17eb9 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart @@ -38,66 +38,64 @@ class _SendElectronicKeyViewState extends State tag: widget.type, init: SendElectronicKeyViewLogic(widget.type), builder: (SendElectronicKeyViewLogic logic) { - return Obx(() { - if (logic.state.isSendSuccess.value == true) { - return sendElectronicKeySucceed(logic); - } else { - switch (widget.type) { - case '0': - // 限时 - return SingleChildScrollView( - child: Column( - children: [ - keyInfoWidget(logic), - keyTimeWidget(logic), - remoteUnlockingWidget(logic), - keyRealNameWidget(logic), - keyBottomWidget(logic.state.timeLimitTips, logic) - ], - ), - ); - case '1': - // 永久 - return SingleChildScrollView( - child: Column( - children: [ - keyInfoWidget(logic), - remoteUnlockingWidget(logic), - keyRealNameWidget(logic), - keyBottomWidget(logic.state.permanentTips, logic) - ], - ), - ); - case '2': - // 单次 - return SingleChildScrollView( - child: Column( - children: [ - keyInfoWidget(logic), - remoteUnlockingWidget(logic), - keyRealNameWidget(logic), - keyBottomWidget(logic.state.onceLimitTips, logic) - ], - ), - ); - case '3': - // 循环 - return SingleChildScrollView( - child: Column( - children: [ - keyInfoWidget(logic), - keyPeriodValidityWidget(logic), - remoteUnlockingWidget(logic), - keyRealNameWidget(logic), - keyBottomWidget(logic.state.cycleLimitTips, logic) - ], - ), - ); - default: - return Container(); - } + if (logic.state.isSendSuccess == true) { + return sendElectronicKeySucceed(logic); + } else { + switch (widget.type) { + case '0': + // 限时 + return SingleChildScrollView( + child: Column( + children: [ + keyInfoWidget(logic), + keyTimeWidget(logic), + remoteUnlockingWidget(logic), + keyRealNameWidget(logic), + keyBottomWidget(logic.state.timeLimitTips, logic) + ], + ), + ); + case '1': + // 永久 + return SingleChildScrollView( + child: Column( + children: [ + keyInfoWidget(logic), + remoteUnlockingWidget(logic), + keyRealNameWidget(logic), + keyBottomWidget(logic.state.permanentTips, logic) + ], + ), + ); + case '2': + // 单次 + return SingleChildScrollView( + child: Column( + children: [ + keyInfoWidget(logic), + remoteUnlockingWidget(logic), + keyRealNameWidget(logic), + keyBottomWidget(logic.state.onceLimitTips, logic) + ], + ), + ); + case '3': + // 循环 + return SingleChildScrollView( + child: Column( + children: [ + keyInfoWidget(logic), + keyPeriodValidityWidget(logic), + remoteUnlockingWidget(logic), + keyRealNameWidget(logic), + keyBottomWidget(logic.state.cycleLimitTips, logic) + ], + ), + ); + default: + return Container(); } - }); + } }); } @@ -123,18 +121,19 @@ class _SendElectronicKeyViewState extends State isHaveRightWidget: true, isHaveDirection: true, rightWidget: Text( - '${logic.state.countryName.value} +${logic.state.countryCode.value}', + '${logic.state.countryName} +${logic.state.countryCode}', textAlign: TextAlign.end, style: - TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), + TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), ), action: () async { var result = await Navigator.pushNamed( context, Routers.selectCountryRegionPage); if (result != null) { result as Map; - logic.state.countryCode.value = result['code']; - logic.state.countryName.value = result['countryName']; + logic.state.countryCode = result['code']; + logic.state.countryName = result['countryName']; + logic.update(); } }, ), @@ -153,33 +152,39 @@ class _SendElectronicKeyViewState extends State Widget keyTimeWidget(SendElectronicKeyViewLogic logic) { return Column( children: [ - Obx(() => CommonItem( + CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, - rightTitle: logic.state.timeLimitBeginTime.value, + rightTitle: logic.state.timeLimitBeginTime, isHaveLine: true, isHaveDirection: true, action: () { PDuration selectDate = PDuration.parse( - DateTime.parse(logic.state.timeLimitBeginTime.value)); + DateTime.parse(logic.state.timeLimitBeginTime)); Pickers.showDatePicker(context, - selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { - logic.state.timeLimitBeginTime.value = - DateTool().getYMDHNDateString(p, 1); - }); - })), - Obx(() => CommonItem( + selectDate: selectDate, + mode: DateMode.YMDHM, + onConfirm: (p) { + logic.state.timeLimitBeginTime = + DateTool().getYMDHNDateString(p, 1); + logic.update(); + }); + }), + CommonItem( leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, - rightTitle: logic.state.timeLimitEndTime.value, + rightTitle: logic.state.timeLimitEndTime, isHaveDirection: true, action: () { PDuration selectDate = PDuration.parse( - DateTime.tryParse(logic.state.timeLimitEndTime.value)); + DateTime.tryParse(logic.state.timeLimitEndTime)); Pickers.showDatePicker(context, - selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { - logic.state.timeLimitEndTime.value = - DateTool().getYMDHNDateString(p, 1); - }); - })), + selectDate: selectDate, + mode: DateMode.YMDHM, + onConfirm: (p) { + logic.state.timeLimitEndTime = + DateTool().getYMDHNDateString(p, 1); + logic.update(); + }); + }), Container(height: 10.h), ], ); @@ -195,7 +200,8 @@ class _SendElectronicKeyViewState extends State isTipsImg: true, tipsImgAction: () { ShowTipView().showSureAlertDialog( - "人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。".tr); + "人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。" + .tr); }, isHaveRightWidget: true, rightWidget: SizedBox( @@ -209,30 +215,32 @@ class _SendElectronicKeyViewState extends State Widget keyPeriodValidityWidget(SendElectronicKeyViewLogic logic) { return Column( children: [ - Obx(() => CommonItem( + CommonItem( leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr, rightTitle: - "${logic.state.cycleBeginTime.value}\n${logic.state.cycleEndTime.value}", + "${logic.state.cycleBeginTime}\n${logic.state.cycleEndTime}", isHaveDirection: true, isHaveLine: true, action: () async { var result = - await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { + await Get.toNamed( + Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, - 'starDate': logic.state.cycleBeginTime.value, - 'endDate': logic.state.cycleEndTime.value, - 'starTime': logic.state.effectiveDateTime.value, - 'endTime': logic.state.failureDateTime.value + 'starDate': logic.state.cycleBeginTime, + 'endDate': logic.state.cycleEndTime, + 'starTime': logic.state.effectiveDateTime, + 'endTime': logic.state.failureDateTime }); if (result != null && result.isNotEmpty) { - logic.state.weekdaysList.value = result['validityValue']; - logic.state.cycleBeginTime.value = result['starDate']; - logic.state.cycleEndTime.value = result['endDate']; - logic.state.effectiveDateTime.value = result['starTime']; - logic.state.failureDateTime.value = result['endTime']; + logic.state.weekdaysList = result['validityValue']; + logic.state.cycleBeginTime = result['starDate']; + logic.state.cycleEndTime = result['endDate']; + logic.state.effectiveDateTime = result['starTime']; + logic.state.failureDateTime = result['endTime']; + logic.update(); } - })), - Obx(() => Visibility( + }), + Visibility( visible: logic.state.weekdaysList.isNotEmpty ? true : false, child: CommonItem( leftTitel: "有效日".tr, @@ -240,66 +248,74 @@ class _SendElectronicKeyViewState extends State isHaveDirection: true, isHaveLine: true, action: () async { - var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, + var result = await Get.toNamed( + Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, - 'starDate': logic.state.cycleBeginTime.value, - 'endDate': logic.state.cycleEndTime.value, - 'starTime': logic.state.effectiveDateTime.value, - 'endTime': logic.state.failureDateTime.value + 'starDate': logic.state.cycleBeginTime, + 'endDate': logic.state.cycleEndTime, + 'starTime': logic.state.effectiveDateTime, + 'endTime': logic.state.failureDateTime }); if (result != null && result.isNotEmpty) { - logic.state.weekdaysList.value = result['validityValue']; - logic.state.cycleBeginTime.value = result['starDate']; - logic.state.cycleEndTime.value = result['endDate']; - logic.state.effectiveDateTime.value = result['starTime']; - logic.state.failureDateTime.value = result['endTime']; + logic.state.weekdaysList = + result['validityValue']; + logic.state.cycleBeginTime = result['starDate']; + logic.state.cycleEndTime = result['endDate']; + logic.state.effectiveDateTime = + result['starTime']; + logic.state.failureDateTime = result['endTime']; + logic.update(); } - }))), - Obx(() => Visibility( - visible: logic.state.effectiveDateTime.value.isNotEmpty, + })), + Visibility( + visible: logic.state.effectiveDateTime.isNotEmpty, child: CommonItem( leftTitel: "有效时间".tr, rightTitle: - "${logic.state.effectiveDateTime.value}-${logic.state.failureDateTime.value}", + "${logic.state.effectiveDateTime}-${logic.state + .failureDateTime}", isHaveDirection: true, action: () async { - var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, + var result = await Get.toNamed( + Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, - 'starDate': logic.state.cycleBeginTime.value, - 'endDate': logic.state.cycleEndTime.value, - 'starTime': logic.state.effectiveDateTime.value, - 'endTime': logic.state.failureDateTime.value + 'starDate': logic.state.cycleBeginTime, + 'endDate': logic.state.cycleEndTime, + 'starTime': logic.state.effectiveDateTime, + 'endTime': logic.state.failureDateTime }); if (result != null && result.isNotEmpty) { - logic.state.weekdaysList.value = result['validityValue']; - logic.state.cycleBeginTime.value = result['starDate']; - logic.state.cycleEndTime.value = result['endDate']; - logic.state.effectiveDateTime.value = result['starTime']; - logic.state.failureDateTime.value = result['endTime']; + logic.state.weekdaysList = + result['validityValue']; + logic.state.cycleBeginTime = result['starDate']; + logic.state.cycleEndTime = result['endDate']; + logic.state.effectiveDateTime = + result['starTime']; + logic.state.failureDateTime = result['endTime']; + logic.update(); } - }))), + })), ], ); } - Widget keyBottomWidget( - String sendElectronicKeyTips, SendElectronicKeyViewLogic logic) { + Widget keyBottomWidget(String sendElectronicKeyTips, + SendElectronicKeyViewLogic logic) { return Column( children: [ Container( padding: EdgeInsets.all(20.w), child: Row( - // crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Text( - sendElectronicKeyTips, - textAlign: TextAlign.start, - style: TextStyle( - fontSize: 18.sp, color: AppColors.darkGrayTextColor), - )), + sendElectronicKeyTips, + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 18.sp, color: AppColors.darkGrayTextColor), + )), ], ), ), @@ -316,7 +332,6 @@ class _SendElectronicKeyViewState extends State }), Container( padding: EdgeInsets.only(right: 30.w), - // color: Colors.red, child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ @@ -333,7 +348,7 @@ class _SendElectronicKeyViewState extends State child: Text( TranslationLoader.lanKeys!.sendGroupKey!.tr, style: - TextStyle(color: AppColors.mainColor, fontSize: 22.sp), + TextStyle(color: AppColors.mainColor, fontSize: 22.sp), )), ], ), @@ -384,8 +399,9 @@ class _SendElectronicKeyViewState extends State SubmitBtn( btnName: '完成'.tr, onClick: () { - logic.state.isSendSuccess.value = false; + logic.state.isSendSuccess = false; logic.resetData(); + logic.update(); }), SizedBox( height: 10.h, @@ -442,16 +458,16 @@ class _SendElectronicKeyViewState extends State hintStyle: TextStyle(fontSize: 22.sp), focusedBorder: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), disabledBorder: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), enabledBorder: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), border: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), contentPadding: const EdgeInsets.symmetric(vertical: 0), ), style: TextStyle( @@ -463,32 +479,32 @@ class _SendElectronicKeyViewState extends State ), isHaveBtn ? Container( - width: 32.w, - height: 32.w, - decoration: const BoxDecoration( - color: Colors.white, - image: DecorationImage( - image: AssetImage('images/icon_addressBook.png'), - fit: BoxFit.fill), - ), - alignment: Alignment.center, - child: InkWell( - onTap: () async { - Contact? currentContact = - await logic.state.contactPicker.selectContact(); - logic.state.contact = currentContact!; - if (currentContact.phoneNumbers!.isNotEmpty) { - logic.state.emailOrPhoneController.text = currentContact - .phoneNumbers![0] - .replaceAll(RegExp(r"\s+\b|\b\s"), ""); - } - if (currentContact.fullName!.isNotEmpty) { - logic.state.keyNameController.text = - currentContact.fullName!; - } - }, - ), - ) + width: 32.w, + height: 32.w, + decoration: const BoxDecoration( + color: Colors.white, + image: DecorationImage( + image: AssetImage('images/icon_addressBook.png'), + fit: BoxFit.fill), + ), + alignment: Alignment.center, + child: InkWell( + onTap: () async { + Contact? currentContact = + await logic.state.contactPicker.selectContact(); + logic.state.contact = currentContact!; + if (currentContact.phoneNumbers!.isNotEmpty) { + logic.state.emailOrPhoneController.text = currentContact + .phoneNumbers![0] + .replaceAll(RegExp(r"\s+\b|\b\s"), ""); + } + if (currentContact.fullName!.isNotEmpty) { + logic.state.keyNameController.text = + currentContact.fullName!; + } + }, + ), + ) : Container() ], ), @@ -501,8 +517,8 @@ class _SendElectronicKeyViewState extends State visible: logic.state.isDemoMode ? false : (CommonDataManage().currentKeyInfo.lockSetting!.remoteUnlock == 1 - ? true - : false), + ? true + : false), child: Column( children: [ CommonItem( @@ -519,22 +535,22 @@ class _SendElectronicKeyViewState extends State } //isRemote true:远程开锁 false:实名认证 - CupertinoSwitch _remoteSwitch( - bool isRemote, SendElectronicKeyViewLogic logic) { + CupertinoSwitch _remoteSwitch(bool isRemote, + SendElectronicKeyViewLogic logic) { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, trackColor: CupertinoColors.systemGrey5, thumbColor: CupertinoColors.white, value: isRemote - ? logic.state.isRemoteUnlock.value - : logic.state.isAuthentication.value, + ? logic.state.isRemoteUnlock + : logic.state.isAuthentication, onChanged: (value) { if (isRemote) { - logic.state.isRemoteUnlock.value = !logic.state.isRemoteUnlock.value; + logic.state.isRemoteUnlock = !logic.state.isRemoteUnlock; } else { - logic.state.isAuthentication.value = - !logic.state.isAuthentication.value; - if (logic.state.isAuthentication.value) { + logic.state.isAuthentication = + !logic.state.isAuthentication; + if (logic.state.isAuthentication) { ShowTipView().showBuyTipWithContentAlert( titleStr: '实名认证为付费功能,请购买后再使用'.tr, sureClick: () { @@ -570,7 +586,7 @@ class _SendElectronicKeyViewState extends State TextButton( style: ButtonStyle( overlayColor: - MaterialStateProperty.all(Colors.white)), + MaterialStateProperty.all(Colors.white)), child: Text( '取消'.tr, style: TextStyle( @@ -594,14 +610,14 @@ class _SendElectronicKeyViewState extends State return widgetList; } - GestureDetector buildCenter3( - String imageName, String titleStr, int itemIndex) { + GestureDetector buildCenter3(String imageName, String titleStr, + int itemIndex) { return GestureDetector( child: Container( width: 120.w, // height: 64.h, margin: - EdgeInsets.only(top: 20.w, bottom: 20.w, left: 10.w, right: 10.w), + EdgeInsets.only(top: 20.w, bottom: 20.w, left: 10.w, right: 10.w), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -629,21 +645,21 @@ class _SendElectronicKeyViewState extends State Get.back(); switch (itemIndex) { case 0: - //微信好友 + //微信好友 String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; case 1: - //短信 + //短信 String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; case 2: - //邮件 + //邮件 Get.toNamed(Routers.sendEmailNotificationPage); break; case 3: - //更多 + //更多 String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart index 25334c57..741d6cca 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart @@ -3,34 +3,35 @@ import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart import 'package:get/get.dart'; import 'package:star_lock/tools/dateTool.dart'; - class SendElectronicKeyViewState { - TextEditingController emailOrPhoneController = TextEditingController(); //邮箱/手机号输入框 + TextEditingController emailOrPhoneController = + TextEditingController(); //邮箱/手机号输入框 TextEditingController keyNameController = TextEditingController(); //钥匙名输入框 final FlutterContactPicker contactPicker = FlutterContactPicker(); late Contact contact; - final isRemoteUnlock = false.obs; //是否允许远程开锁 - final isAuthentication = false.obs; //是否可以实名认证 + bool isRemoteUnlock = false; //是否允许远程开锁 + bool isAuthentication = false; //是否可以实名认证 - var timeLimitBeginTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时开始时间 - var timeLimitEndTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时结束时间 - var cycleBeginTime = "".obs;// 循环开始时间 - var cycleEndTime = "".obs;// 循环结束时间 - var effectiveDateTime = "".obs;// 生效时间 - var failureDateTime = "".obs;// 失效时间 - var weekdaysList = [].obs; + var timeLimitBeginTime = DateTool().dateToYMDHNString( + DateTime.now().millisecondsSinceEpoch.toString()); // 限时开始时间 + var timeLimitEndTime = DateTool().dateToYMDHNString( + DateTime.now().millisecondsSinceEpoch.toString()); // 限时结束时间 + var cycleBeginTime = ""; // 循环开始时间 + var cycleEndTime = ""; // 循环结束时间 + var effectiveDateTime = ""; // 生效时间 + var failureDateTime = ""; // 失效时间 + var weekdaysList = []; - var isSendSuccess = false.obs; - var countryName = '中国'.tr.obs; - var countryCode = '86'.obs; - var isCreateUser = false.obs; //用户未注册时传1 已注册传0 + var isSendSuccess = false; + var countryName = '中国'.tr; + var countryCode = '86'; + var isCreateUser = false; //用户未注册时传1 已注册传0 var isDemoMode = false; final timeLimitTips = '接收者在有效期内可以不限次数使用'; //限时 final permanentTips = '接收者可以使用此App开关锁'; //永久 final onceLimitTips = '单次钥匙有效期为1小时,只能使用一次'; //单次 final cycleLimitTips = '接收者可以在有效期内的固定时间段里,不限次数使用'; //循环 - } From 529cfdc08af8276f91a7a94f76351460ac29a47a Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Sat, 4 May 2024 18:29:23 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat:=E5=8E=BB=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/pubspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index 35322dc2..71d1dd87 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -170,7 +170,6 @@ dependencies: expandable: ^5.0.1 colorfilter_generator: ^0.0.8 file_picker: ^5.3.1 - extended_text_field: 13.1.0 dev_dependencies: From edb46d008048151ff8cb3a80190fadef8f277e82 Mon Sep 17 00:00:00 2001 From: anfe <448468458@qq.com> Date: Mon, 6 May 2024 09:16:44 +0800 Subject: [PATCH 4/6] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/login/login/starLock_login_logic.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/star_lock/lib/login/login/starLock_login_logic.dart b/star_lock/lib/login/login/starLock_login_logic.dart index b2e09441..8142990f 100644 --- a/star_lock/lib/login/login/starLock_login_logic.dart +++ b/star_lock/lib/login/login/starLock_login_logic.dart @@ -61,7 +61,7 @@ class StarLockLoginLogic extends BaseGetXController { username: state.emailOrPhone.value); if (entity.errorCode!.codeIsSuccessful) { Storage.saveLoginData(entity.data); - Storage.setBool(saveIsVip, entity.data!.isVip! == 0 ? false : true); + Storage.setBool(saveIsVip, entity.data!.isVip == 0 ? false : true); eventBus.fire(MineInfoChangeRefreshUI()); // Get.back(); // Get.toNamed(Routers.starLockMain); From bff61936e152389cce83a3c4df9d7e999b67d3b1 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 6 May 2024 09:56:41 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E8=8B=B1=E6=96=87=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index f56c79b8..ac183518 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -794,6 +794,6 @@ "实名认证":"Real-name authentication", "当前剩余数量":"Current surplus quantity", "购买":"Buy", - "实名认证为付费功能,请购买后再使用":"Real-name authentication is a paid function, please use it after purchase" - "密码不一致哦":"The passwords are inconsistent", + "实名认证为付费功能,请购买后再使用":"Real-name authentication is a paid function, please use it after purchase", + "密码不一致哦":"The passwords are inconsistent" } From 69c6c3e1dd09f02316a3c17b0f0360908d91434b Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 6 May 2024 14:51:18 +0800 Subject: [PATCH 6/6] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E6=98=AF=E5=90=A6=E6=94=AF=E6=8C=81=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81=E6=8E=A5=E5=8F=A3=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=202=EF=BC=8C=E5=8F=91=E9=80=81=E7=94=B5=E5=AD=90?= =?UTF-8?q?=E9=92=A5=E5=8C=99=E6=A0=B9=E6=8D=AE=E6=95=B0=E6=8D=AE=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=94=AE=E5=85=A5=E7=9C=9F=E5=AE=9E=E5=A7=93=E5=90=8D?= =?UTF-8?q?=E5=92=8C=E8=BA=AB=E4=BB=BD=E8=AF=81=E5=8F=B7=203=EF=BC=8C?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=94=81=E5=88=86=E7=BB=84=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=AB=98=E7=BA=A7=E5=8A=9F=E8=83=BD=E7=9B=B8?= =?UTF-8?q?=E5=BA=94=E6=9D=83=E9=99=90=E5=8F=8A=E5=BC=80=E9=80=9A=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 6 +- star_lock/images/lan/lan_keys.json | 6 +- star_lock/images/lan/lan_zh.json | 6 +- .../authorizedAdmin_logic.dart | 13 +- .../sendElectronicKey_logic.dart | 9 - .../sendElectronicKey_page.dart | 22 +- .../sendElectronicKey_state.dart | 13 +- .../view/sendElectronicKeyView_logic.dart | 88 +++++-- .../view/sendElectronicKeyView_page.dart | 227 +++++++++--------- .../view/sendElectronicKeyView_state.dart | 3 + .../groupEditLock/groupEditLock_logic.dart | 16 +- .../groupEditLock/groupEditLock_page.dart | 98 +++++--- .../groupEditLock/groupEditLock_state.dart | 11 +- .../lockGroupList/lockGroupList_page.dart | 47 ++-- star_lock/lib/network/api.dart | 3 +- star_lock/lib/network/api_provider.dart | 10 +- star_lock/lib/network/api_repository.dart | 12 +- 17 files changed, 331 insertions(+), 259 deletions(-) diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index ac183518..b5df7b69 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -795,5 +795,9 @@ "当前剩余数量":"Current surplus quantity", "购买":"Buy", "实名认证为付费功能,请购买后再使用":"Real-name authentication is a paid function, please use it after purchase", - "密码不一致哦":"The passwords are inconsistent" + "密码不一致哦":"The passwords are inconsistent", + "真实姓名":"Real name", + "身份证号":"ID number", + "请输入真实姓名":"Please enter your real name", + "请输入身份证号":"Please enter your ID number" } diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 64c7c078..fec4b6cc 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -822,5 +822,9 @@ "实名认证":"实名认证", "当前剩余数量":"当前剩余数量", "购买":"购买", - "实名认证为付费功能,请购买后再使用":"实名认证为付费功能,请购买后再使用" + "实名认证为付费功能,请购买后再使用":"实名认证为付费功能,请购买后再使用", + "真实姓名":"真实姓名", + "身份证号":"身份证号", + "请输入真实姓名":"请输入真实姓名", + "请输入身份证号":"请输入身份证号" } diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index 11104186..81e1482a 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -825,5 +825,9 @@ "实名认证":"实名认证", "当前剩余数量":"当前剩余数量", "购买":"购买", - "实名认证为付费功能,请购买后再使用":"实名认证为付费功能,请购买后再使用" + "实名认证为付费功能,请购买后再使用":"实名认证为付费功能,请购买后再使用", + "真实姓名":"真实姓名", + "身份证号":"身份证号", + "请输入真实姓名":"请输入真实姓名", + "请输入身份证号":"请输入身份证号" } diff --git a/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart b/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart index 3b5aadb4..bd9f3179 100644 --- a/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart +++ b/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart @@ -1,10 +1,8 @@ - import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; import 'package:star_lock/app_settings/app_settings.dart'; -import 'package:star_lock/blue/io_type.dart'; import 'package:star_lock/tools/dateTool.dart'; import '../../../../blue/blue_manage.dart'; @@ -117,7 +115,8 @@ class AuthorizedAdminLogic extends BaseGetXController { if (state.seletType.value == 0) { getKeyType = "2"; - startDate = DateTool().dateToTimestamp(state.beginDate.value, 1).toString(); + startDate = + DateTool().dateToTimestamp(state.beginDate.value, 1).toString(); endDate = DateTool().dateToTimestamp(state.endDate.value, 1).toString(); startTime = "0"; endTime = "0"; @@ -156,7 +155,9 @@ class AuthorizedAdminLogic extends BaseGetXController { weekDays: state.weekdaysList, startTime: int.parse(startTime), endTime: int.parse(endTime), - isOnlyManageSelf: state.onlyManageYouCreatesUser.value ? 1 : 0); + isOnlyManageSelf: state.onlyManageYouCreatesUser.value ? 1 : 0, + realName: '', + idCardNumber: ''); if (entity.errorCode!.codeIsSuccessful) { state.isCreateUser.value = false; state.isSendSuccess.value = true; @@ -169,7 +170,9 @@ class AuthorizedAdminLogic extends BaseGetXController { //用户未注册 state.isCreateUser.value = true; // _showDialog('${entity.errorMsg}'); - ShowTipView().showIosTipWithContentDialog('${"是否发送授权管理员给未注册账号".tr}\n${state.emailOrPhoneController.text}', (){ + ShowTipView().showIosTipWithContentDialog( + '${"是否发送授权管理员给未注册账号".tr}\n${state.emailOrPhoneController.text}', + () { sendElectronicKeyRequest(); }); } diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart index 67596417..eb7dfd98 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart @@ -1,14 +1,5 @@ -import 'package:get/get.dart'; -import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart'; -import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart'; -import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; -import 'package:star_lock/tools/commonDataManage.dart'; -import 'package:star_lock/tools/dateTool.dart'; -import 'package:star_lock/tools/eventBusEventManage.dart'; - -import '../../../../../tools/showTipView.dart'; class SendElectronicKeyLogic extends BaseGetXController { final SendElectronicKeyState state = SendElectronicKeyState(); diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart index cc3d2282..f47c378e 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_page.dart @@ -1,28 +1,11 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/app_settings/app_colors.dart'; -import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart'; -import 'package:star_lock/network/api_repository.dart'; -import 'package:star_lock/tools/baseGetXController.dart'; -import 'package:star_lock/tools/pickers/pickers.dart'; -import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; -import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; -import 'package:star_lock/tools/showTipView.dart'; -import 'package:star_lock/tools/storage.dart'; -import '../../../../../appRouters.dart'; import '../../../../../tools/CustomUnderlineTabIndicator.dart'; -import '../../../../../tools/NativeInteractionTool.dart'; -import '../../../../../tools/commonDataManage.dart'; -import '../../../../../tools/commonItem.dart'; -import '../../../../../tools/dateTool.dart'; -import '../../../../../tools/submitBtn.dart'; import '../../../../../tools/titleAppBar.dart'; import '../../../../../translations/trans_lib.dart'; @@ -107,8 +90,8 @@ class _SendElectronicKeyPageState extends State controller: state.tabController, children: _itemTabs .map((ItemView item) => SendElectronicKeyView( - type: item.type, - )) + type: item.type, + )) .toList()), ); } @@ -119,7 +102,6 @@ class _SendElectronicKeyPageState extends State ItemView(title: TranslationLoader.lanKeys!.once!.tr, type: "2"), ItemView(title: TranslationLoader.lanKeys!.circulation!.tr, type: "3"), ]; - } class ItemView { diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart index 87ac5feb..95940e3c 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart @@ -1,27 +1,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; -import 'package:get/get.dart'; - -import '../../../../../tools/dateTool.dart'; -import '../../../../lockMian/entity/lockListInfo_entity.dart'; class SendElectronicKeyState { - late TabController tabController; final FlutterContactPicker contactPicker = FlutterContactPicker(); late Contact contact; - final timeLimitTips = '接收者在有效期内可以不限次数使用'; //限时 final permanentTips = '接收者可以使用此App开关锁'; //永久 final onceLimitTips = '单次钥匙有效期为1小时,只能使用一次'; //单次 final cycleLimitTips = '接收者可以在有效期内的固定时间段里,不限次数使用'; //循环 - SendElectronicKeyState() { - // Map map = Get.arguments; - // if ((map["keyInfo"] != null)) { - // keyInfo.value = map["keyInfo"]; - // } - } + SendElectronicKeyState() {} } diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart index 5b05f199..57ad2da2 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart @@ -1,7 +1,9 @@ +import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; -import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/commonDataManage.dart'; @@ -50,12 +52,10 @@ class SendElectronicKeyViewLogic extends BaseGetXController { } typeValue = XSConstantMacro.keyTypeTime; - startDate = DateTool() - .dateToTimestamp(state.timeLimitBeginTime, 1) - .toString(); - endDate = DateTool() - .dateToTimestamp(state.timeLimitEndTime, 1) - .toString(); + startDate = + DateTool().dateToTimestamp(state.timeLimitBeginTime, 1).toString(); + endDate = + DateTool().dateToTimestamp(state.timeLimitEndTime, 1).toString(); startTime = "0"; endTime = "0"; @@ -77,17 +77,13 @@ class SendElectronicKeyViewLogic extends BaseGetXController { showToast("请选择有效期".tr); return; } - startDate = DateTool() - .dateToTimestamp(state.cycleBeginTime, 1) - .toString(); - endDate = - DateTool().dateToTimestamp(state.cycleEndTime, 1).toString(); - startTime = DateTool() - .dateToTimestamp(state.effectiveDateTime, 0) - .toString(); - endTime = DateTool() - .dateToTimestamp(state.failureDateTime, 0) - .toString(); + startDate = + DateTool().dateToTimestamp(state.cycleBeginTime, 1).toString(); + endDate = DateTool().dateToTimestamp(state.cycleEndTime, 1).toString(); + startTime = + DateTool().dateToTimestamp(state.effectiveDateTime, 0).toString(); + endTime = + DateTool().dateToTimestamp(state.failureDateTime, 0).toString(); break; default: typeValue = XSConstantMacro.keyTypeTime; @@ -116,7 +112,13 @@ class SendElectronicKeyViewLogic extends BaseGetXController { weekDays: state.weekdaysList, startTime: int.parse(startTime), endTime: int.parse(endTime), - isOnlyManageSelf: 0); + isOnlyManageSelf: 0, + realName: state.isRequireAuth.value == true + ? state.realNameController.text + : "", + idCardNumber: state.isRequireAuth.value == true + ? state.idCardController.text + : ""); if (entity.errorCode!.codeIsSuccessful) { state.isSendSuccess = true; resetData(); @@ -135,6 +137,24 @@ class SendElectronicKeyViewLogic extends BaseGetXController { } } + //检测实名认证是否支持开启 + Future keyCheckFace() async { + AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace( + countryCode: int.parse(state.countryCode), + account: state.emailOrPhoneController.text); + if (entity.errorCode!.codeIsSuccessful) { + ShowTipView().showBuyTipWithContentAlert( + titleStr: '实名认证为付费功能,请购买后再使用'.tr, + sureClick: () { + Get.toNamed(Routers.advancedFeaturesWebPage, + arguments: {'isShop': false}); + }); + } else if (entity.errorCode! == 431) { + //431代表改用户没有身份证信息,需要弹出输入身份证信息框 + state.isRequireAuth.value = true; + } + } + bool isPhoneNumber(String input) { // 手机号正则表达式,这里简化为11位数字 final RegExp phoneRegExp = RegExp(r'^\d{11}$'); @@ -148,15 +168,33 @@ class SendElectronicKeyViewLogic extends BaseGetXController { return emailRegExp.hasMatch(input); } + TextEditingController getCurrentController(int lineIndex) { + TextEditingController currentController = TextEditingController(); + switch (lineIndex) { + case 1: + currentController = state.emailOrPhoneController; + break; + case 2: + currentController = state.keyNameController; + break; + case 3: + currentController = state.realNameController; + break; + case 4: + currentController = state.idCardController; + break; + default: + } + return currentController; + } + void resetData() { state.emailOrPhoneController.text = ""; state.keyNameController.text = ""; - state.timeLimitBeginTime = DateTool() - .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) - ; // 限时开始时间 - state.timeLimitEndTime = DateTool() - .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) - ; // 限时结束时间 + state.timeLimitBeginTime = DateTool().dateToYMDHNString( + DateTime.now().millisecondsSinceEpoch.toString()); // 限时开始时间 + state.timeLimitEndTime = DateTool().dateToYMDHNString( + DateTime.now().millisecondsSinceEpoch.toString()); // 限时结束时间 state.cycleBeginTime = ""; // 循环开始时间 state.cycleEndTime = ""; // 循环结束时间 state.effectiveDateTime = ""; // 生效时间 diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart index 4cf17eb9..a52bcf78 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart @@ -17,7 +17,6 @@ import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; import 'package:star_lock/tools/showTipView.dart'; -import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/translations/trans_lib.dart'; @@ -34,6 +33,7 @@ class _SendElectronicKeyViewState extends State with AutomaticKeepAliveClientMixin { @override Widget build(BuildContext context) { + super.build(context); return GetBuilder( tag: widget.type, init: SendElectronicKeyViewLogic(widget.type), @@ -43,7 +43,7 @@ class _SendElectronicKeyViewState extends State } else { switch (widget.type) { case '0': - // 限时 + // 限时 return SingleChildScrollView( child: Column( children: [ @@ -56,7 +56,7 @@ class _SendElectronicKeyViewState extends State ), ); case '1': - // 永久 + // 永久 return SingleChildScrollView( child: Column( children: [ @@ -68,7 +68,7 @@ class _SendElectronicKeyViewState extends State ), ); case '2': - // 单次 + // 单次 return SingleChildScrollView( child: Column( children: [ @@ -80,7 +80,7 @@ class _SendElectronicKeyViewState extends State ), ); case '3': - // 循环 + // 循环 return SingleChildScrollView( child: Column( children: [ @@ -124,7 +124,7 @@ class _SendElectronicKeyViewState extends State '${logic.state.countryName} +${logic.state.countryCode}', textAlign: TextAlign.end, style: - TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), + TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), ), action: () async { var result = await Navigator.pushNamed( @@ -161,13 +161,11 @@ class _SendElectronicKeyViewState extends State PDuration selectDate = PDuration.parse( DateTime.parse(logic.state.timeLimitBeginTime)); Pickers.showDatePicker(context, - selectDate: selectDate, - mode: DateMode.YMDHM, - onConfirm: (p) { - logic.state.timeLimitBeginTime = - DateTool().getYMDHNDateString(p, 1); - logic.update(); - }); + selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { + logic.state.timeLimitBeginTime = + DateTool().getYMDHNDateString(p, 1); + logic.update(); + }); }), CommonItem( leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, @@ -177,13 +175,11 @@ class _SendElectronicKeyViewState extends State PDuration selectDate = PDuration.parse( DateTime.tryParse(logic.state.timeLimitEndTime)); Pickers.showDatePicker(context, - selectDate: selectDate, - mode: DateMode.YMDHM, - onConfirm: (p) { - logic.state.timeLimitEndTime = - DateTool().getYMDHNDateString(p, 1); - logic.update(); - }); + selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { + logic.state.timeLimitEndTime = + DateTool().getYMDHNDateString(p, 1); + logic.update(); + }); }), Container(height: 10.h), ], @@ -194,19 +190,37 @@ class _SendElectronicKeyViewState extends State Widget keyRealNameWidget(SendElectronicKeyViewLogic logic) { return Column( children: [ - CommonItem( - leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr, - rightTitle: "", - isTipsImg: true, - tipsImgAction: () { - ShowTipView().showSureAlertDialog( - "人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。" - .tr); - }, - isHaveRightWidget: true, - rightWidget: SizedBox( - width: 60.w, height: 50.h, child: _remoteSwitch(false, logic)), - ), + Obx(() => CommonItem( + leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr, + rightTitle: "", + isTipsImg: true, + isHaveLine: + logic.state.isRequireAuth.value == true ? true : false, + tipsImgAction: () { + ShowTipView().showSureAlertDialog( + "人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。".tr); + }, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 60.w, + height: 50.h, + child: _remoteSwitch(false, logic)), + )), + Obx(() => Visibility( + visible: logic.state.isRequireAuth.value, + child: CommonItem( + leftTitel: '真实姓名'.tr, + rightTitle: "", + isHaveRightWidget: true, + isHaveLine: true, + rightWidget: getTFWidget(false, '请输入真实姓名'.tr, 3, logic)))), + Obx(() => Visibility( + visible: logic.state.isRequireAuth.value, + child: CommonItem( + leftTitel: '身份证号'.tr, + rightTitle: "", + isHaveRightWidget: true, + rightWidget: getTFWidget(false, '请输入身份证号'.tr, 4, logic)))), ], ); } @@ -218,13 +232,12 @@ class _SendElectronicKeyViewState extends State CommonItem( leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr, rightTitle: - "${logic.state.cycleBeginTime}\n${logic.state.cycleEndTime}", + "${logic.state.cycleBeginTime}\n${logic.state.cycleEndTime}", isHaveDirection: true, isHaveLine: true, action: () async { var result = - await Get.toNamed( - Routers.seletKeyCyclicDatePage, arguments: { + await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, 'starDate': logic.state.cycleBeginTime, 'endDate': logic.state.cycleEndTime, @@ -248,8 +261,7 @@ class _SendElectronicKeyViewState extends State isHaveDirection: true, isHaveLine: true, action: () async { - var result = await Get.toNamed( - Routers.seletKeyCyclicDatePage, + var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, 'starDate': logic.state.cycleBeginTime, @@ -258,12 +270,10 @@ class _SendElectronicKeyViewState extends State 'endTime': logic.state.failureDateTime }); if (result != null && result.isNotEmpty) { - logic.state.weekdaysList = - result['validityValue']; + logic.state.weekdaysList = result['validityValue']; logic.state.cycleBeginTime = result['starDate']; logic.state.cycleEndTime = result['endDate']; - logic.state.effectiveDateTime = - result['starTime']; + logic.state.effectiveDateTime = result['starTime']; logic.state.failureDateTime = result['endTime']; logic.update(); } @@ -273,12 +283,10 @@ class _SendElectronicKeyViewState extends State child: CommonItem( leftTitel: "有效时间".tr, rightTitle: - "${logic.state.effectiveDateTime}-${logic.state - .failureDateTime}", + "${logic.state.effectiveDateTime}-${logic.state.failureDateTime}", isHaveDirection: true, action: () async { - var result = await Get.toNamed( - Routers.seletKeyCyclicDatePage, + var result = await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: { 'validityValue': logic.state.weekdaysList, 'starDate': logic.state.cycleBeginTime, @@ -287,12 +295,10 @@ class _SendElectronicKeyViewState extends State 'endTime': logic.state.failureDateTime }); if (result != null && result.isNotEmpty) { - logic.state.weekdaysList = - result['validityValue']; + logic.state.weekdaysList = result['validityValue']; logic.state.cycleBeginTime = result['starDate']; logic.state.cycleEndTime = result['endDate']; - logic.state.effectiveDateTime = - result['starTime']; + logic.state.effectiveDateTime = result['starTime']; logic.state.failureDateTime = result['endTime']; logic.update(); } @@ -301,8 +307,8 @@ class _SendElectronicKeyViewState extends State ); } - Widget keyBottomWidget(String sendElectronicKeyTips, - SendElectronicKeyViewLogic logic) { + Widget keyBottomWidget( + String sendElectronicKeyTips, SendElectronicKeyViewLogic logic) { return Column( children: [ Container( @@ -311,11 +317,11 @@ class _SendElectronicKeyViewState extends State children: [ Expanded( child: Text( - sendElectronicKeyTips, - textAlign: TextAlign.start, - style: TextStyle( - fontSize: 18.sp, color: AppColors.darkGrayTextColor), - )), + sendElectronicKeyTips, + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 18.sp, color: AppColors.darkGrayTextColor), + )), ], ), ), @@ -348,7 +354,7 @@ class _SendElectronicKeyViewState extends State child: Text( TranslationLoader.lanKeys!.sendGroupKey!.tr, style: - TextStyle(color: AppColors.mainColor, fontSize: 22.sp), + TextStyle(color: AppColors.mainColor, fontSize: 22.sp), )), ], ), @@ -440,9 +446,7 @@ class _SendElectronicKeyViewState extends State children: [ Expanded( child: TextField( - controller: lineIndex == 1 - ? logic.state.emailOrPhoneController - : logic.state.keyNameController, + controller: logic.getCurrentController(lineIndex), //输入框一行 maxLines: 1, inputFormatters: [ @@ -458,16 +462,16 @@ class _SendElectronicKeyViewState extends State hintStyle: TextStyle(fontSize: 22.sp), focusedBorder: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), disabledBorder: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), enabledBorder: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), border: const OutlineInputBorder( borderSide: - BorderSide(width: 0, color: Colors.transparent)), + BorderSide(width: 0, color: Colors.transparent)), contentPadding: const EdgeInsets.symmetric(vertical: 0), ), style: TextStyle( @@ -479,32 +483,32 @@ class _SendElectronicKeyViewState extends State ), isHaveBtn ? Container( - width: 32.w, - height: 32.w, - decoration: const BoxDecoration( - color: Colors.white, - image: DecorationImage( - image: AssetImage('images/icon_addressBook.png'), - fit: BoxFit.fill), - ), - alignment: Alignment.center, - child: InkWell( - onTap: () async { - Contact? currentContact = - await logic.state.contactPicker.selectContact(); - logic.state.contact = currentContact!; - if (currentContact.phoneNumbers!.isNotEmpty) { - logic.state.emailOrPhoneController.text = currentContact - .phoneNumbers![0] - .replaceAll(RegExp(r"\s+\b|\b\s"), ""); - } - if (currentContact.fullName!.isNotEmpty) { - logic.state.keyNameController.text = - currentContact.fullName!; - } - }, - ), - ) + width: 32.w, + height: 32.w, + decoration: const BoxDecoration( + color: Colors.white, + image: DecorationImage( + image: AssetImage('images/icon_addressBook.png'), + fit: BoxFit.fill), + ), + alignment: Alignment.center, + child: InkWell( + onTap: () async { + Contact? currentContact = + await logic.state.contactPicker.selectContact(); + logic.state.contact = currentContact!; + if (currentContact.phoneNumbers!.isNotEmpty) { + logic.state.emailOrPhoneController.text = currentContact + .phoneNumbers![0] + .replaceAll(RegExp(r"\s+\b|\b\s"), ""); + } + if (currentContact.fullName!.isNotEmpty) { + logic.state.keyNameController.text = + currentContact.fullName!; + } + }, + ), + ) : Container() ], ), @@ -517,8 +521,8 @@ class _SendElectronicKeyViewState extends State visible: logic.state.isDemoMode ? false : (CommonDataManage().currentKeyInfo.lockSetting!.remoteUnlock == 1 - ? true - : false), + ? true + : false), child: Column( children: [ CommonItem( @@ -535,28 +539,23 @@ class _SendElectronicKeyViewState extends State } //isRemote true:远程开锁 false:实名认证 - CupertinoSwitch _remoteSwitch(bool isRemote, - SendElectronicKeyViewLogic logic) { + CupertinoSwitch _remoteSwitch( + bool isRemote, SendElectronicKeyViewLogic logic) { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, trackColor: CupertinoColors.systemGrey5, thumbColor: CupertinoColors.white, - value: isRemote - ? logic.state.isRemoteUnlock - : logic.state.isAuthentication, + value: + isRemote ? logic.state.isRemoteUnlock : logic.state.isAuthentication, onChanged: (value) { if (isRemote) { logic.state.isRemoteUnlock = !logic.state.isRemoteUnlock; } else { - logic.state.isAuthentication = - !logic.state.isAuthentication; + logic.state.isAuthentication = !logic.state.isAuthentication; if (logic.state.isAuthentication) { - ShowTipView().showBuyTipWithContentAlert( - titleStr: '实名认证为付费功能,请购买后再使用'.tr, - sureClick: () { - Get.toNamed(Routers.advancedFeaturesWebPage, - arguments: {'isShop': false}); - }); + logic.keyCheckFace(); + } else { + logic.state.isRequireAuth.value = false; } } }, @@ -586,7 +585,7 @@ class _SendElectronicKeyViewState extends State TextButton( style: ButtonStyle( overlayColor: - MaterialStateProperty.all(Colors.white)), + MaterialStateProperty.all(Colors.white)), child: Text( '取消'.tr, style: TextStyle( @@ -610,14 +609,14 @@ class _SendElectronicKeyViewState extends State return widgetList; } - GestureDetector buildCenter3(String imageName, String titleStr, - int itemIndex) { + GestureDetector buildCenter3( + String imageName, String titleStr, int itemIndex) { return GestureDetector( child: Container( width: 120.w, // height: 64.h, margin: - EdgeInsets.only(top: 20.w, bottom: 20.w, left: 10.w, right: 10.w), + EdgeInsets.only(top: 20.w, bottom: 20.w, left: 10.w, right: 10.w), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -645,21 +644,21 @@ class _SendElectronicKeyViewState extends State Get.back(); switch (itemIndex) { case 0: - //微信好友 + //微信好友 String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; case 1: - //短信 + //短信 String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; case 2: - //邮件 + //邮件 Get.toNamed(Routers.sendEmailNotificationPage); break; case 3: - //更多 + //更多 String pwdShareStr = '您好,您的电子钥匙生成成功'.tr; NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); break; diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart index 741d6cca..a2262042 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart @@ -7,6 +7,8 @@ class SendElectronicKeyViewState { TextEditingController emailOrPhoneController = TextEditingController(); //邮箱/手机号输入框 TextEditingController keyNameController = TextEditingController(); //钥匙名输入框 + TextEditingController realNameController = TextEditingController(); //真实姓名输入框 + TextEditingController idCardController = TextEditingController(); //身份证号输入框 final FlutterContactPicker contactPicker = FlutterContactPicker(); late Contact contact; @@ -29,6 +31,7 @@ class SendElectronicKeyViewState { var countryCode = '86'; var isCreateUser = false; //用户未注册时传1 已注册传0 var isDemoMode = false; + var isRequireAuth = false.obs; //是否需要实名认证的必填项 final timeLimitTips = '接收者在有效期内可以不限次数使用'; //限时 final permanentTips = '接收者可以使用此App开关锁'; //永久 diff --git a/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_logic.dart b/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_logic.dart index 26bde2a1..d4c5f5e9 100644 --- a/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_logic.dart +++ b/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_logic.dart @@ -1,5 +1,5 @@ - import 'package:get/get.dart'; +import 'package:star_lock/tools/storage.dart'; import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; @@ -11,13 +11,12 @@ class GroupEditLockLogic extends BaseGetXController { //锁分组里面添加锁 Future lockGroupAddLock(List lockIds) async { - if(lockIds.isEmpty){ + if (lockIds.isEmpty) { showToast("请选择锁".tr); return; } var entity = await ApiRepository.to.lockGroupAddLock( - lockIds: lockIds, - groupId: state.selectGroupListItem.keyGroupId!); + lockIds: lockIds, groupId: state.selectGroupListItem.keyGroupId!); if (entity.errorCode!.codeIsSuccessful) { showToast("添加成功"); eventBus.fire(LockGroupEditGroupLockRefreshEvent()); @@ -28,7 +27,7 @@ class GroupEditLockLogic extends BaseGetXController { //锁分组里面添加锁 Future lockGroupDeletLock(List lockIds) async { - if(lockIds.isEmpty){ + if (lockIds.isEmpty) { showToast("请选择锁".tr); return; } @@ -41,4 +40,11 @@ class GroupEditLockLogic extends BaseGetXController { } } + @override + onReady() async { + super.onReady(); + + var isVip = await Storage.getBool(saveIsVip); + state.isVip.value = isVip ?? false; + } } diff --git a/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_page.dart b/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_page.dart index 06e35e21..659d7a91 100644 --- a/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_page.dart +++ b/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; +import 'package:star_lock/tools/advancedFunctionHandle.dart'; import 'package:star_lock/tools/noData.dart'; import '../../../../../../app_settings/app_colors.dart'; @@ -26,61 +27,78 @@ class _GroupEditLockPageState extends State { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( - barTitle: state.type == 0 ? TranslationLoader.lanKeys!.add!.tr : TranslationLoader.lanKeys!.delete!.tr, + barTitle: state.type == 0 + ? TranslationLoader.lanKeys!.add!.tr + : TranslationLoader.lanKeys!.delete!.tr, haveBack: true, backgroundColor: AppColors.mainColor), body: Column( children: [ + Obx(() => Visibility( + visible: state.isVip.value ? false : true, + child: AdvancedFunctionHandle() + .topTipsAdvancedFeatures('开通高级功能后才可以对锁进行管理'.tr))), Container( margin: EdgeInsets.all(15.w), child: Row( children: [ - Text(TranslationLoader.lanKeys!.selectTheLockToJoinTheGroup!.tr, style: TextStyle(fontSize: 25.sp)), + Text( + TranslationLoader + .lanKeys!.selectTheLockToJoinTheGroup!.tr, + style: TextStyle(fontSize: 25.sp)), ], ), ), Expanded(child: _buildMainUI()), - SubmitBtn(btnName: TranslationLoader.lanKeys!.sure!.tr, onClick: () async { - var idList = []; - for(int i = 0; i Visibility( + visible: state.isVip.value ? true : false, + child: SubmitBtn( + btnName: TranslationLoader.lanKeys!.sure!.tr, + onClick: () async { + var idList = []; + for (int i = 0; i < state.lockList.length; i++) { + LockListItem lockListItem = state.lockList[i]; + if (lockListItem.isChecked == true) { + idList.add(lockListItem.lockId); + } + } + if (state.type == 0) { + // 添加 + logic.lockGroupAddLock(idList); + } else if (state.type == 1) { + // 删除 + logic.lockGroupDeletLock(idList); + } + }))), SizedBox(height: 20.h) ], )); } - Widget _buildMainUI(){ + Widget _buildMainUI() { return state.lockList.isNotEmpty ? ListView.separated( - itemBuilder: (context, index) { - LockListItem itemData = state.lockList[index]; - return _listItemView(itemData); - }, - itemCount: state.lockList.length, - separatorBuilder: (BuildContext context, int index) { - return Divider( - height: 1.h, - color: AppColors.greyLineColor, - ); - }, - ) : NoData(); + itemBuilder: (context, index) { + LockListItem itemData = state.lockList[index]; + return _listItemView(itemData); + }, + itemCount: state.lockList.length, + separatorBuilder: (BuildContext context, int index) { + return Divider( + height: 1.h, + color: AppColors.greyLineColor, + ); + }, + ) + : NoData(); } Widget _listItemView(LockListItem itemData) { return GestureDetector( - onTap: (){ + onTap: () { + if (!state.isVip.value) { + return; + } setState(() { itemData.isChecked = !itemData.isChecked; }); @@ -92,9 +110,18 @@ class _GroupEditLockPageState extends State { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ - SizedBox(width: 20.w,), - Image.asset('images/icon_lockGroup_item.png', width: 36, height: 36, fit: BoxFit.fill,), - SizedBox(width: 10.w,), + SizedBox( + width: 20.w, + ), + Image.asset( + 'images/icon_lockGroup_item.png', + width: 36, + height: 36, + fit: BoxFit.fill, + ), + SizedBox( + width: 10.w, + ), Text( itemData.lockAlias ?? '', style: TextStyle(fontSize: 24.sp), @@ -113,5 +140,4 @@ class _GroupEditLockPageState extends State { ), ); } - } diff --git a/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_state.dart b/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_state.dart index dc2adaf3..fecdd772 100644 --- a/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_state.dart +++ b/star_lock/lib/mine/mineSet/lockGroup/groupEditLock/groupEditLock_state.dart @@ -1,24 +1,25 @@ - import 'package:get/get.dart'; import '../../../../main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; class GroupEditLockState { var lockList = []; - var type = 0;// 0添加 1删除 + var type = 0; // 0添加 1删除 var selectGroupListItem = GroupListItem(); var ungrouped = GroupListItem(); + var isVip = false.obs; + GroupEditLockState() { Map map = Get.arguments; type = map["type"]; selectGroupListItem = map["groupListItem"]; ungrouped = map["ungrouped"]; - if(type == 0){ + if (type == 0) { lockList = ungrouped.lockList!; - }else{ + } else { lockList = selectGroupListItem.lockList!; } - for(int i = 0; i { // 处理操作按钮的点击事件-添加锁分组 state.changeNameController.text = ""; // showCupertinoAlertDialog(context, true, 0); - ShowTipView().showTFViewAlertDialog(state.changeNameController, TranslationLoader.lanKeys!.createNewGroup!.tr, TranslationLoader.lanKeys!.pleaseEnter!.tr, (){ + ShowTipView().showTFViewAlertDialog( + state.changeNameController, + TranslationLoader.lanKeys!.createNewGroup!.tr, + TranslationLoader.lanKeys!.pleaseEnter!.tr, () { //发送编辑钥匙名称请求 if (state.changeNameController.text.isNotEmpty) { + Navigator.of(context).pop(); logic.addLockGroupRequest(); } else { - logic.showToast(TranslationLoader.lanKeys!.pleaseEnterAGroupName!.tr); + logic.showToast( + TranslationLoader.lanKeys!.pleaseEnterAGroupName!.tr); } }); }, @@ -57,7 +62,10 @@ class _LockGroupListPageState extends State { backgroundColor: AppColors.mainColor), body: Column( children: [ - Expanded(child: Obx(() => state.itemDataList.value.isEmpty ? NoData(): _buildMainUI())), + Expanded( + child: Obx(() => state.itemDataList.value.isEmpty + ? NoData() + : _buildMainUI())), ], ), ); @@ -81,7 +89,7 @@ class _LockGroupListPageState extends State { SizedBox( height: 40.h, child: Text( - '${TranslationLoader.lanKeys!.lockTrCount!.tr}:${state.lockNum.toString()}', + '${TranslationLoader.lanKeys!.lockTrCount!.tr}:${state.lockNum.toString()}', style: TextStyle( color: AppColors.darkGrayTextColor, fontSize: 20.sp), ), @@ -91,28 +99,32 @@ class _LockGroupListPageState extends State { ); } else { GroupListItem itemData = state.itemDataList.value[index]; - if(itemData.groupType == 0){ + if (itemData.groupType == 0) { state.ungrouped = itemData; } if (index < state.itemDataList.value.length) { return LeftSlideActions( key: Key(itemData.keyGroupId!.toString()), actionsWidth: itemData.groupType != 0 ? 200.w : 0, - actions: itemData.groupType != 0 ? [ - _buildEditBtn(itemData), - _buildDeleteBtn(itemData), - ] : [], + actions: itemData.groupType != 0 + ? [ + _buildEditBtn(itemData), + _buildDeleteBtn(itemData), + ] + : [], decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(1)), ), child: CommonItem( leftTitel: - '${itemData.keyGroupName}(${itemData.lockList?.length})', + '${itemData.keyGroupName}(${itemData.lockList?.length})', rightTitle: "", allHeight: 70.h, action: () { - - Get.toNamed(Routers.lockItemListPage, arguments: {'groupListItem': itemData, "ungrouped": state.ungrouped}); + Get.toNamed(Routers.lockItemListPage, arguments: { + 'groupListItem': itemData, + "ungrouped": state.ungrouped + }); }), ); } @@ -161,7 +173,7 @@ class _LockGroupListPageState extends State { onTap: () { // 省略: 弹出是否删除的确认对话框。 // showIosTipViewDialog(context, groupListItem); - ShowTipView().showIosTipWithContentDialog("分组下的锁将被移到未分组里".tr, (){ + ShowTipView().showIosTipWithContentDialog("分组下的锁将被移到未分组里".tr, () { logic.deleteLockGroupRequest(groupListItem.keyGroupId!); }); }, @@ -189,11 +201,15 @@ class _LockGroupListPageState extends State { state.changeNameController.text = groupListItem.keyGroupName!; // showCupertinoAlertDialog(context, false, groupListItem.keyGroupId!); - ShowTipView().showTFViewAlertDialog(state.changeNameController, TranslationLoader.lanKeys!.createNewGroup!.tr, TranslationLoader.lanKeys!.pleaseEnter!.tr, (){ + ShowTipView().showTFViewAlertDialog( + state.changeNameController, + TranslationLoader.lanKeys!.createNewGroup!.tr, + TranslationLoader.lanKeys!.pleaseEnter!.tr, () { if (state.changeNameController.text.isNotEmpty) { logic.editLockGroupRequest(groupListItem.keyGroupId!); } else { - logic.showToast(TranslationLoader.lanKeys!.pleaseEnterAGroupName!.tr); + logic.showToast( + TranslationLoader.lanKeys!.pleaseEnterAGroupName!.tr); } }); }, @@ -232,5 +248,4 @@ class _LockGroupListPageState extends State { // } // ); // } - } diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 2984c656..edf42cf7 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -227,6 +227,5 @@ abstract class Api { final String deleteLockCloudStorageURL = '/lockCloudStorage/delete'; //删除云存 final String getServiceUserPackageURL = '/v2/service/getUserPackage'; //获取增值服务用户余量包 - final String isFaceAuthenticationURL = - '/key/isFaceAuthentication'; //检测实名认证是否支持开启 + final String isFaceAuthenticationURL = '/key/checkFace'; //检测实名认证是否支持开启 } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 30042b35..4f297e38 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -142,7 +142,9 @@ class ApiProvider extends BaseProvider { List weekDays, int startTime, int endTime, - int isOnlyManageSelf) => + int isOnlyManageSelf, + String realName, + String idCardNumber) => post( sendElectronicKeyURL.toUrl, jsonEncode({ @@ -165,6 +167,8 @@ class ApiProvider extends BaseProvider { 'startTime': startTime, 'endTime': endTime, 'isOnlyManageSelf': isOnlyManageSelf, + 'realName': realName, + 'idCardNumber': idCardNumber })); Future uploadElectricQuantity( @@ -452,7 +456,7 @@ class ApiProvider extends BaseProvider { String startDate, String endDate, String addType, - int? pwdRight, + int? pwdRight, ) => post( passwordKeyAddURL.toUrl, @@ -2028,7 +2032,7 @@ class ApiProvider extends BaseProvider { })); // 检测实名认证是否支持开启 - Future isFaceAuthentication( + Future keyCheckFace( int countryCode, String account, ) => diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index f73f1915..d13d84fa 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -179,7 +179,9 @@ class ApiRepository { required List weekDays, required int startTime, required int endTime, - required int isOnlyManageSelf}) async { + required int isOnlyManageSelf, + required String realName, + required String idCardNumber}) async { final res = await apiProvider.sendElectronicKey( createUser, countryCode, @@ -199,7 +201,9 @@ class ApiRepository { weekDays, startTime, endTime, - isOnlyManageSelf); + isOnlyManageSelf, + realName, + idCardNumber); return AuthorizedAdminSendEntity.fromJson(res.body); } @@ -2055,11 +2059,11 @@ class ApiRepository { } // 检测实名认证是否支持开启 - Future isFaceAuthentication({ + Future keyCheckFace({ required int countryCode, required String account, }) async { - final res = await apiProvider.isFaceAuthentication(countryCode, account); + final res = await apiProvider.keyCheckFace(countryCode, account); return AdvancedFunctionRecordEntity.fromJson(res.body); } }