From 12ecefa5d838d949e61f12714b3e7ef055d2f563 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Wed, 11 Oct 2023 18:24:52 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=E3=80=81=E9=82=AE=E7=AE=B1=E9=80=BB=E8=BE=91=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E5=8F=8A=E8=AF=B7=E6=B1=82=E5=A4=84=E7=90=86=202?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7/=E9=82=AE=E7=AE=B1=203=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E5=AE=89=E5=85=A8=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=204=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E5=B7=B2=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E5=AE=89=E5=85=A8=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=205=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=AE=BE=E7=BD=AE=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=206=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E8=A7=A3=E7=BB=91=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7Token=207=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=A7=A3=E7=BB=91=E9=82=AE=E7=AE=B1Token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_zh.json | 2 +- star_lock/ios/Podfile.lock | 6 + star_lock/ios/Runner/Info.plist | 2 +- star_lock/lib/appRouters.dart | 29 +-- .../minePersonInfo/minePersonInfo_state.dart | 11 -- .../minePersonInfoAvatar/cropImageRoute.dart | 1 + .../mineUnbindPhoneOrEmail_entity.dart | 43 +++++ ...dart => mineUnbindPhoneOrEmail_logic.dart} | 43 +++-- ....dart => mineUnbindPhoneOrEmail_page.dart} | 33 ++-- ...dart => mineUnbindPhoneOrEmail_state.dart} | 39 ++-- .../minePersonInfoEditAccountNext_state.dart | 7 +- ...c.dart => mineBindPhoneOrEmail_logic.dart} | 24 +-- ...ge.dart => mineBindPhoneOrEmail_page.dart} | 30 ++-- ...e.dart => mineBindPhoneOrEmail_state.dart} | 8 +- .../minePersonInfo_entity.dart | 8 +- .../minePersonInfo_logic.dart | 3 +- .../minePersonInfo_page.dart | 120 +++++++------ .../minePersonInfo_state.dart | 19 ++ .../minePersonInfoResetPassword_logic.dart | 1 - .../minePersonInfoResetPassword_page.dart | 14 +- .../minePersonInfoResetPassword_state.dart | 2 - ...minePersonInfoSetSafetyProblem_entity.dart | 133 ++++++++++++++ .../minePersonInfoSetSafetyProblem_logic.dart | 69 +++++++ .../minePersonInfoSetSafetyProblem_page.dart | 170 ++++++++++-------- .../minePersonInfoSetSafetyProblem_state.dart | 47 +++++ ...inePersonInfoViewSafetyProblem_entity.dart | 57 ++++++ ...minePersonInfoViewSafetyProblem_logic.dart | 34 ++++ .../minePersonInfoViewSafetyProblem_page.dart | 114 ++++++++++++ ...minePersonInfoViewSafetyProblem_state.dart | 16 ++ star_lock/lib/network/api.dart | 13 +- star_lock/lib/network/api_provider.dart | 55 ++++-- star_lock/lib/network/api_provider_base.dart | 2 +- star_lock/lib/network/api_repository.dart | 64 +++++-- star_lock/lib/tools/custom_bottom_sheet.dart | 117 ++++++++++++ star_lock/lib/tools/tf_input_haveBorder.dart | 8 +- star_lock/pubspec.yaml | 7 +- 36 files changed, 1077 insertions(+), 274 deletions(-) delete mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoAvatar/cropImageRoute.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart rename star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/{minePersonInfoEditAccount_logic.dart => mineUnbindPhoneOrEmail_logic.dart} (57%) rename star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/{minePersonInfoEditAccount_page.dart => mineUnbindPhoneOrEmail_page.dart} (79%) rename star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/{minePersonInfoEditAccount_state.dart => mineUnbindPhoneOrEmail_state.dart} (56%) rename star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/{minePersonInfoEmail_logic.dart => mineBindPhoneOrEmail_logic.dart} (74%) rename star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/{minePersonInfoEmail_page.dart => mineBindPhoneOrEmail_page.dart} (80%) rename star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/{minePersonInfoEmail_state.dart => mineBindPhoneOrEmail_state.dart} (86%) rename star_lock/lib/mine/minePersonInfo/{minePersonInfo => minePersonInfoPage}/minePersonInfo_entity.dart (90%) rename star_lock/lib/mine/minePersonInfo/{minePersonInfo => minePersonInfoPage}/minePersonInfo_logic.dart (81%) rename star_lock/lib/mine/minePersonInfo/{minePersonInfo => minePersonInfoPage}/minePersonInfo_page.dart (66%) create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_entity.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_entity.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_page.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_state.dart create mode 100644 star_lock/lib/tools/custom_bottom_sheet.dart diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index 883b8253..6ba9b604 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -247,7 +247,7 @@ "modifyAccount":"修改账号", "resetPasswords":"重置密码", "safetyProblem":"安全问题", - "modifyAccountTip":"为了你的账号安全,修改账号前请先使用账号密码验证", + "modifyAccountTip":"为了你的账号安全,修改账号前请先使用验证码验证", "pleaseEnterAccountNumber":"请输入账号", "pleaseEnterNewAccountNumber":"请输入新账号", "changeIphoneTip":"找回密码和登录新设备时,可通过绑定的手机验证", diff --git a/star_lock/ios/Podfile.lock b/star_lock/ios/Podfile.lock index 0c27c598..fe983598 100644 --- a/star_lock/ios/Podfile.lock +++ b/star_lock/ios/Podfile.lock @@ -12,6 +12,8 @@ PODS: - AMapFoundation (1.8.2) - AMapLocation (2.10.0): - AMapFoundation (>= 1.8.0) + - camera_avfoundation (0.0.1): + - Flutter - device_info_plus (0.0.1): - Flutter - Flutter (1.0.0) @@ -62,6 +64,7 @@ DEPENDENCIES: - aj_captcha_flutter (from `.symlinks/plugins/aj_captcha_flutter/ios`) - amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`) - amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`) + - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - Flutter (from `Flutter`) - flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`) @@ -95,6 +98,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/amap_flutter_location/ios" amap_flutter_map: :path: ".symlinks/plugins/amap_flutter_map/ios" + camera_avfoundation: + :path: ".symlinks/plugins/camera_avfoundation/ios" device_info_plus: :path: ".symlinks/plugins/device_info_plus/ios" Flutter: @@ -131,6 +136,7 @@ SPEC CHECKSUMS: amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033 + camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907 diff --git a/star_lock/ios/Runner/Info.plist b/star_lock/ios/Runner/Info.plist index 9300b494..af4195e3 100644 --- a/star_lock/ios/Runner/Info.plist +++ b/star_lock/ios/Runner/Info.plist @@ -36,7 +36,7 @@ NSBluetoothPeripheralUsageDescription The app uses bluetooth to find, connect and transfer data between different devices NSCameraUsageDescription - 这是你的自拍照 + 照片 NSContactsUsageDescription Reason we need access to the contact list NSLocationAlwaysAndWhenInUseUsageDescription diff --git a/star_lock/lib/appRouters.dart b/star_lock/lib/appRouters.dart index d68f1e09..02a8a7ba 100644 --- a/star_lock/lib/appRouters.dart +++ b/star_lock/lib/appRouters.dart @@ -9,7 +9,8 @@ import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/ma import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_page.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_main_page.dart'; import 'package:star_lock/mine/mine/safeVerify/safeVerify_page.dart'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_page.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/addAuthorizedAdministrator_page.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorDetails/adminDetailChangeDate_page.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetails_page.dart'; @@ -109,8 +110,8 @@ import 'mine/gateway/gatewayList/gatewayList_page.dart'; import 'mine/message/messageList_page.dart'; import 'mine/mine/starLockMine_page.dart'; import 'mine/mineMultiLanguage/mineMultiLanguage_page.dart'; -import 'mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart'; -import 'mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart'; +import 'mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart'; +import 'mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_page.dart'; import 'mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_page.dart'; import 'mine/minePersonInfo/minePersonInfoEditIphone/minePersonInfoEditIphone_page.dart'; import 'mine/minePersonInfo/minePersonInfoEditName/minePersonInfoEditName_page.dart'; @@ -237,8 +238,8 @@ abstract class Routers { static const minePersonInfoPage = '/MinePersonInfoPage'; // 我的信息 static const minePersonInfoEditNamePage = '/MinePersonInfoEditNamePage'; // 我的信息编辑昵称 - static const minePersonInfoEditAccountPage = - '/MinePersonInfoEditAccountPage'; // 我的信息修改账号 + static const mineUnbindPhoneOrEmailPage = + '/MineUnbindPhoneOrEmailPage'; // 我的信息修改账号-解绑 static const minePersonInfoEditAccountNextPage = '/MinePersonInfoEditAccountNextPage'; // 我的信息修改账号下一页 static const minePersonInfoEditIphonePage = @@ -247,8 +248,9 @@ abstract class Routers { '/MinePersonInfoResetPasswordPage'; // 我的信息重置密码 static const minePersonInfoSetSafetyProblemPage = '/MinePersonInfoSetSafetyProblemPage'; // 我的信息设置安全问题 - static const minePersonInfoEditEmailPage = - '/MinePersonInfoEditEmailPage'; //我的信息-邮箱 + static const minePersonInfoViewSafetyProblemPage = + '/MinePersonInfoViewSafetyProblemPage'; // 查看我的安全问题 + static const mineBindPhoneOrEmailPage = '/MineBindPhoneOrEmailPage'; //我的信息-邮箱 static const gatewayListPage = '/GatewayListPage'; // 我的-网关 static const gatewayDetailPage = '/GatewayDetailPage'; // 我的-网关详情 @@ -616,8 +618,8 @@ abstract class AppRouters { page: () => const MinePersonInfoEditNamePage(), ), GetPage( - name: Routers.minePersonInfoEditAccountPage, - page: () => const MinePersonInfoEditAccountPage(), + name: Routers.mineUnbindPhoneOrEmailPage, + page: () => const MineUnbindPhoneOrEmailPage(), ), GetPage( name: Routers.minePersonInfoEditIphonePage, @@ -749,8 +751,8 @@ abstract class AppRouters { name: Routers.selectGetewayListPage, page: () => const SelectGetewayListPage()), GetPage( - name: Routers.minePersonInfoEditEmailPage, - page: () => const MinePersonInfoEditEmailPage()), + name: Routers.mineBindPhoneOrEmailPage, + page: () => const MineBindPhoneOrEmailPage()), GetPage( name: Routers.addAuthorizedAdministratorPage, page: () => const AddAuthorizedAdministratorPage()), @@ -815,6 +817,9 @@ abstract class AppRouters { GetPage( name: Routers.expireLockChangeDatePage, page: () => const ExpireLockChangeDatePage()), - GetPage(name: Routers.safeVerifyPage, page: () => const SafeVerifyPage()) + GetPage(name: Routers.safeVerifyPage, page: () => const SafeVerifyPage()), + GetPage( + name: Routers.minePersonInfoViewSafetyProblemPage, + page: () => const MinePersonInfoViewSafetyProblemPage()) ]; } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart deleted file mode 100644 index d124c4eb..00000000 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:get/get.dart'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart'; - -class MinePersonInfoState { - final mineInfoData = MinePersonInfoData().obs; - - var nickname = ''.obs; //昵称 - var mobileStr = ''.obs; //手机号 - var emailStr = ''.obs; //邮箱 - var countryStr = ''.obs; //国家/地区 -} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoAvatar/cropImageRoute.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoAvatar/cropImageRoute.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoAvatar/cropImageRoute.dart @@ -0,0 +1 @@ + diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart new file mode 100644 index 00000000..0f3134be --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart @@ -0,0 +1,43 @@ +class MineUnbindPhoneOrEmailEntity { + int? errorCode; + String? description; + String? errorMsg; + Data? data; + + MineUnbindPhoneOrEmailEntity( + {this.errorCode, this.description, this.errorMsg, this.data}); + + MineUnbindPhoneOrEmailEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + data = json['data'] != null ? Data.fromJson(json['data']) : null; + } + + Map toJson() { + final Map data = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + if (this.data != null) { + data['data'] = this.data!.toJson(); + } + return data; + } +} + +class Data { + String? token; + + Data({this.token}); + + Data.fromJson(Map json) { + token = json['token']; + } + + Map toJson() { + final Map data = {}; + data['token'] = token; + return data; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_logic.dart similarity index 57% rename from star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_logic.dart index 9e5e0e65..4a2ad98a 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_logic.dart @@ -4,14 +4,13 @@ import 'package:get/get_core/src/get_main.dart'; import 'package:get/get_navigation/src/extension_navigation.dart'; import 'package:get/get_utils/get_utils.dart'; import 'package:star_lock/appRouters.dart'; -import 'package:star_lock/login/login/entity/LoginEntity.dart'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_state.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; -import 'package:star_lock/tools/toast.dart'; -class MineInfoEditAccountLogic extends BaseGetXController { - final MineInfoEditAccountState state = MineInfoEditAccountState(); +class MineUnbindPhoneOrEmailLogic extends BaseGetXController { + final MineUnbindPhoneOrEmailState state = MineUnbindPhoneOrEmailState(); late Timer _timer; void _startTimer() { @@ -33,8 +32,8 @@ class MineInfoEditAccountLogic extends BaseGetXController { //获取验证码请求 void sendValidationCode() async { var entity = await ApiRepository.to.getValidationCodeAuth( - state.countryCode.value, - state.loginData.value.mobile!, + '', + '', state.channel.value, state.codeType.value, state.uniqueid.value, @@ -44,14 +43,29 @@ class MineInfoEditAccountLogic extends BaseGetXController { } else {} } - //删除账号请求 - Future deleteAccountRequest() async { - LoginEntity entity = await ApiRepository.to - .deleteAccount("", "", state.verificationCode.value); + //获取解绑手机号Token + Future unbindPhoneTokenRequest() async { + MineUnbindPhoneOrEmailEntity entity = + await ApiRepository.to.unbindPhoneToken(state.verificationCode.value); if (entity.errorCode!.codeIsSuccessful) { - Toast.show(msg: '验证成功,账号已删除'); - //删除账号成功, - Get.offNamedUntil(Routers.starLockLoginPage, (route) => false); + state.unbindToken.value = entity.data!.token!; + Get.toNamed(Routers.mineBindPhoneOrEmailPage, arguments: { + "isFrom": state.channel.value, + "unbindToken": state.unbindToken.value + }); + } + } + + //获取解绑邮箱Token + Future unbindEmailTokenRequest() async { + MineUnbindPhoneOrEmailEntity entity = + await ApiRepository.to.unbindEmailToken(state.verificationCode.value); + if (entity.errorCode!.codeIsSuccessful) { + state.unbindToken.value = entity.data!.token!; + Get.toNamed(Routers.mineBindPhoneOrEmailPage, arguments: { + "isFrom": state.channel.value, + "unbindToken": state.unbindToken.value + }); } } @@ -78,7 +92,6 @@ class MineInfoEditAccountLogic extends BaseGetXController { @override void onInit() { super.onInit(); - state.initLoginData(); } @override diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_page.dart similarity index 79% rename from star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_page.dart index 2d73ea6c..c9d0c9d5 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_logic.dart'; import 'package:star_lock/tools/tf_input_haveBorder.dart'; import '../../../../appRouters.dart'; @@ -10,18 +10,17 @@ import '../../../../tools/submitBtn.dart'; import '../../../../tools/titleAppBar.dart'; import '../../../../translations/trans_lib.dart'; -class MinePersonInfoEditAccountPage extends StatefulWidget { - const MinePersonInfoEditAccountPage({Key? key}) : super(key: key); +class MineUnbindPhoneOrEmailPage extends StatefulWidget { + const MineUnbindPhoneOrEmailPage({Key? key}) : super(key: key); @override - State createState() => - _MinePersonInfoEditAccountPageState(); + State createState() => + _MineUnbindPhoneOrEmailState(); } -class _MinePersonInfoEditAccountPageState - extends State { - final logic = Get.put(MineInfoEditAccountLogic()); - final state = Get.find().state; +class _MineUnbindPhoneOrEmailState extends State { + final logic = Get.put(MineUnbindPhoneOrEmailLogic()); + final state = Get.find().state; @override Widget build(BuildContext context) { @@ -46,6 +45,9 @@ class _MinePersonInfoEditAccountPageState left: 30.w, right: 30.w, top: 20.h, bottom: 10.h), child: TFInputHaveBorder( controller: state.codeController, + onChangeAction: () { + logic.checkNext(state.codeController); + }, label: "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}", rightSlot: GestureDetector( @@ -68,13 +70,16 @@ class _MinePersonInfoEditAccountPageState }, )))), SizedBox(height: 50.w), - SubmitBtn( + Obx(() => SubmitBtn( btnName: TranslationLoader.lanKeys!.next!.tr, + isDisabled: state.canSub.value, onClick: () { - Navigator.pushNamed( - context, Routers.minePersonInfoEditAccountNextPage, - arguments: {'isFrom': '1'}); - }), + if (state.channel.value == '1') { + logic.unbindPhoneTokenRequest(); + } else { + logic.unbindEmailTokenRequest(); + } + })), SizedBox(height: 50.w), Row( mainAxisAlignment: MainAxisAlignment.end, diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_state.dart similarity index 56% rename from star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_state.dart index f8710490..2a03136b 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_state.dart @@ -1,22 +1,20 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:star_lock/login/login/entity/LoginData.dart'; -import 'package:star_lock/login/seletCountryRegion/common/index.dart'; -import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/translations/trans_lib.dart'; -class MineInfoEditAccountState { +class MineUnbindPhoneOrEmailState { final TextEditingController codeController = TextEditingController(); static int currentTimeMillis() { return DateTime.now().millisecondsSinceEpoch; } - var countryCode = '+86'.obs; - var countryId = '9'.obs; - var codeType = '4'.obs; //1注册,2找回密码,3绑定手机号,4解绑(换绑),5删除账号,6 绑定邮箱 + var countryCode = ''.obs; + var codeType = '4'.obs; //1注册,2找回密码,3绑定手机号,4解绑手机(换绑),5删除账号,6 绑定邮箱,7解绑邮箱(换绑) var channel = '1'.obs; //短信通道 1 短信,2 邮箱 + var unbindToken = ''.obs; //解绑Token var uniqueid = 'B748F838-94EE-4BDB-A0E6-7B2D16849792'.obs; + var mobileOrEmailStr = ''.obs; var verificationCode = ''.obs; var xWidth = ''.obs; // 滑动验证码滑动位置 var canSub = false.obs; @@ -29,27 +27,16 @@ class MineInfoEditAccountState { var totalSeconds = 120; var currentSecond = 120; - final loginData = LoginData().obs; - - ///本地存储 登录信息 - void saveLoginData(LoginData? data) async { - print("saveLoginData:${data!.mobile}"); - await Storage.setString('userLoginData', jsonEncode(data)); - loginData.value = data; - } - - ///初始化本地数据 - void initLoginData() async { - final data = await Storage.getString('userLoginData'); - print("getLoginData:$data"); - if (data != null && data.isNotEmpty) { - loginData.value = LoginData.fromJson(jsonDecode(data)); - } - } - - MineInfoEditAccountState() { + MineUnbindPhoneOrEmailState() { Map map = Get.arguments; channel.value = map["isFrom"]; + if (channel.value == "1") { + mobileOrEmailStr.value = map['mobile']; + codeType.value = '4'; + } else { + mobileOrEmailStr.value = map['email']; + codeType.value = '7'; + } resetResend(); } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart index 72d5164c..de66eb55 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart @@ -15,7 +15,7 @@ class PersonInfoEditAccountState { var countryCode = '+86'.obs; var countryId = '9'.obs; - var codeType = '3'.obs; //1注册,2找回密码,3绑定手机号,4解绑(换绑),5删除账号,6 绑定邮箱 + var codeType = '3'.obs; ////1注册,2找回密码,3绑定手机号,4解绑手机(换绑),5删除账号,6 绑定邮箱,7解绑邮箱(换绑) var channel = '1'.obs; //短信通道 1 短信,2 邮箱 var uniqueid = 'B748F838-94EE-4BDB-A0E6-7B2D16849792'.obs; var newAccountStr = ''.obs; @@ -53,6 +53,11 @@ class PersonInfoEditAccountState { PersonInfoEditAccountState() { Map map = Get.arguments; channel.value = map["isFrom"]; + if (channel.value == "1") { + codeType.value = '3'; + } else { + codeType.value = '6'; + } resetResend(); } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_logic.dart similarity index 74% rename from star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_logic.dart index 7023c995..801061ff 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_logic.dart @@ -2,14 +2,16 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; +import 'package:star_lock/appRouters.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_state.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/toast.dart'; -class MinePersonInfoEmailLogic extends BaseGetXController { - final MinePersonInfoEmailState state = MinePersonInfoEmailState(); +class MineBindPhoneOrEmailLogic extends BaseGetXController { + final MineBindPhoneOrEmailState state = MineBindPhoneOrEmailState(); late Timer _timer; void _startTimer() { @@ -31,7 +33,7 @@ class MinePersonInfoEmailLogic extends BaseGetXController { //获取验证码请求 void sendValidationCode() async { var entity = await ApiRepository.to.getValidationCodeAuth( - state.countryCode.value, + state.channel.value == '1' ? state.countryCode.value : '', state.inputAccount.value, state.channel.value, state.codeType.value, @@ -45,23 +47,25 @@ class MinePersonInfoEmailLogic extends BaseGetXController { //绑定邮箱请求 Future bindEmailRequest() async { PasswordKeyListEntity entity = await ApiRepository.to.bindEmail( - state.inputAccount.value, '', state.verificationCode.value, ''); + state.inputAccount.value, + state.verificationCode.value, + state.unbindToken.value); if (entity.errorCode!.codeIsSuccessful) { Toast.show(msg: '邮箱绑定成功'); - Get.back(); + Get.until((route) => route.settings.name == Routers.minePersonInfoPage); } } //绑定手机请求 Future bindMobileRequest() async { - PasswordKeyListEntity entity = await ApiRepository.to.changeAccount( + PasswordKeyListEntity entity = await ApiRepository.to.bindPhone( state.countryCode.value, state.inputAccount.value, - state.uniqueid.value, - state.verificationCode.value); + state.verificationCode.value, + state.unbindToken.value); if (entity.errorCode!.codeIsSuccessful) { Toast.show(msg: '手机绑定成功'); - Get.back(); + Get.until((route) => route.settings.name == Routers.minePersonInfoPage); } } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart similarity index 80% rename from star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart index 8caa6eed..169bc5c0 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart @@ -2,7 +2,7 @@ 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/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_logic.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/submitBtn.dart'; @@ -10,25 +10,26 @@ import '../../../tools/tf_loginInput.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; -class MinePersonInfoEditEmailPage extends StatefulWidget { - const MinePersonInfoEditEmailPage({Key? key}) : super(key: key); +class MineBindPhoneOrEmailPage extends StatefulWidget { + const MineBindPhoneOrEmailPage({Key? key}) : super(key: key); @override - State createState() => - _MinePersonInfoEditEmailPageState(); + State createState() => + _MineBindPhoneOrEmailPageState(); } -class _MinePersonInfoEditEmailPageState - extends State { - final logic = Get.put(MinePersonInfoEmailLogic()); - final state = Get.find().state; +class _MineBindPhoneOrEmailPageState extends State { + final logic = Get.put(MineBindPhoneOrEmailLogic()); + final state = Get.find().state; @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( - barTitle: TranslationLoader.lanKeys!.email!.tr, + barTitle: state.channel.value == "1" + ? TranslationLoader.lanKeys!.mobileNumber!.tr + : TranslationLoader.lanKeys!.email!.tr, haveBack: true, backgroundColor: AppColors.mainColor), body: Container( @@ -39,7 +40,9 @@ class _MinePersonInfoEditEmailPageState width: 1.sw, padding: EdgeInsets.only(top: 5.h, bottom: 5.h), child: Text( - TranslationLoader.lanKeys!.changeEmailTip!.tr, + state.channel.value == '1' + ? TranslationLoader.lanKeys!.changeIphoneTip!.tr + : TranslationLoader.lanKeys!.changeEmailTip!.tr, style: TextStyle(fontSize: 20.sp), )), LoginInput( @@ -49,8 +52,9 @@ class _MinePersonInfoEditEmailPageState logic.checkNext(state.accountController); }, leftWidget: const SizedBox(), - hintText: - "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.email!.tr}", + hintText: state.channel.value == '1' + ? "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.mobileNumber!.tr}" + : "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.email!.tr}", inputFormatters: [ LengthLimitingTextInputFormatter(20), ]), diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_state.dart similarity index 86% rename from star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_state.dart index f5f9f202..ba522c32 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_state.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:star_lock/translations/trans_lib.dart'; -class MinePersonInfoEmailState { +class MineBindPhoneOrEmailState { final TextEditingController accountController = TextEditingController(); final TextEditingController codeController = TextEditingController(); @@ -12,7 +12,7 @@ class MinePersonInfoEmailState { var countryCode = '+86'.obs; var countryId = '9'.obs; - var codeType = '4'.obs; //1注册,2找回密码,3绑定手机号,4解绑(换绑),5删除账号,6 绑定邮箱 + var codeType = '4'.obs; //1注册,2找回密码,3绑定手机号,4解绑手机(换绑),5删除账号,6 绑定邮箱,7解绑邮箱(换绑) var channel = '1'.obs; //短信通道 1 短信,2 邮箱 var uniqueid = 'B748F838-94EE-4BDB-A0E6-7B2D16849792'.obs; var verificationCode = ''.obs; @@ -20,6 +20,7 @@ class MinePersonInfoEmailState { var canSub = false.obs; var date = currentTimeMillis().toString().obs; var inputAccount = ''.obs; //新账号 + var unbindToken = ''.obs; //解绑的Token var accountIsOK = false.obs; bool get codeIsOK => verificationCode.value.isNotEmpty; @@ -29,8 +30,9 @@ class MinePersonInfoEmailState { var totalSeconds = 120; var currentSecond = 120; - MinePersonInfoEmailState() { + MineBindPhoneOrEmailState() { Map map = Get.arguments; + unbindToken.value = map["unbindToken"]; channel.value = map["isFrom"]; //短信通道 1 短信,2 邮箱 //短信类型 1注册,2找回密码,3绑定手机号,4解绑(换绑),5删除账号,6 绑定邮箱 diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart similarity index 90% rename from star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart index 6d031ea4..6064eb8f 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart @@ -30,7 +30,7 @@ class MinePersonInfoEntity { class MinePersonInfoData { String? mobile; String? uid; - bool? isSecurityQuestionSetted; + int? haveSafeAnswer; String? nickname; String? headUrl; String? accountName; @@ -41,7 +41,7 @@ class MinePersonInfoData { MinePersonInfoData( {this.mobile, this.uid, - this.isSecurityQuestionSetted, + this.haveSafeAnswer, this.nickname, this.headUrl, this.accountName, @@ -52,7 +52,7 @@ class MinePersonInfoData { MinePersonInfoData.fromJson(Map json) { mobile = json['mobile']; uid = json['uid']; - isSecurityQuestionSetted = json['isSecurityQuestionSetted']; + haveSafeAnswer = json['haveSafeAnswer']; nickname = json['nickname']; headUrl = json['headUrl']; accountName = json['accountName']; @@ -65,7 +65,7 @@ class MinePersonInfoData { final Map data = {}; data['mobile'] = mobile; data['uid'] = uid; - data['isSecurityQuestionSetted'] = isSecurityQuestionSetted; + data['haveSafeAnswer'] = haveSafeAnswer; data['nickname'] = nickname; data['headUrl'] = headUrl; data['accountName'] = accountName; diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart similarity index 81% rename from star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart index f23969af..e837241e 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart'; import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; @@ -14,6 +14,7 @@ class MinePersonInfoLogic extends BaseGetXController { state.mobileStr.value = entity.data!.mobile!; state.emailStr.value = entity.data!.email!; state.countryStr.value = entity.data!.countryName!; + state.haveSafeAnswer.value = entity.data!.haveSafeAnswer!; } } } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart similarity index 66% rename from star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart rename to star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart index 3bf46f28..f83cb65f 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart @@ -1,10 +1,12 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:star_lock/app_settings/app_colors.dart'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart'; -import 'package:star_lock/tools/seletImgTool.dart'; - +import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart'; +import 'package:star_lock/tools/custom_bottom_sheet.dart'; import '../../../appRouters.dart'; import '../../../tools/commonItem.dart'; import '../../../tools/titleAppBar.dart'; @@ -45,14 +47,13 @@ class _MinePersonInfoPageState extends State { isHaveLine: true, isHaveDirection: true, isHaveRightWidget: true, - rightWidget: Container(), - /* - Container( - width: 75.w, - height: 75.h, - child: Image.asset( - 'images/mine/icon_mine_main_defaultAvatar.png')), - */ + rightWidget: SizedBox( + width: 75.w, + height: 75.h, + child: state.image != null + ? Image.file(state.image as File) + : Image.asset('images/controls_user.png'), + ), action: () { _openModalBottomSheet(); }, @@ -79,18 +80,17 @@ class _MinePersonInfoPageState extends State { //有手机号 则去修改手机号 否则去绑定新的手机号 isFrom:1 短信,2 邮箱 if (state.mobileStr.value.isNotEmpty) { Navigator.pushNamed( - context, Routers.minePersonInfoEditAccountPage, + context, Routers.mineUnbindPhoneOrEmailPage, arguments: { 'mobile': state.mobileStr.value, 'isFrom': '1' }); } else { Navigator.pushNamed( - context, Routers.minePersonInfoEditEmailPage, - arguments: { - 'mobile': state.mobileStr.value, - 'isFrom': '1' - }); + context, Routers.mineBindPhoneOrEmailPage, arguments: { + 'mobile': state.mobileStr.value, + 'isFrom': '1' + }); } })), Obx(() => CommonItem( @@ -104,18 +104,17 @@ class _MinePersonInfoPageState extends State { //有邮箱 则去修改邮箱 否则去绑定新的邮箱 isFrom:1 短信,2 邮箱 if (state.emailStr.value.isNotEmpty) { Navigator.pushNamed( - context, Routers.minePersonInfoEditAccountPage, + context, Routers.mineUnbindPhoneOrEmailPage, arguments: { 'isFrom': '2', 'email': state.emailStr.value }); } else { Navigator.pushNamed( - context, Routers.minePersonInfoEditEmailPage, - arguments: { - 'isFrom': '2', - 'email': state.emailStr.value - }); + context, Routers.mineBindPhoneOrEmailPage, arguments: { + 'isFrom': '2', + 'email': state.emailStr.value + }); } })), CommonItem( @@ -133,8 +132,14 @@ class _MinePersonInfoPageState extends State { isHaveLine: true, isHaveDirection: true, action: () { - Navigator.pushNamed( - context, Routers.minePersonInfoSetSafetyProblemPage); + if (state.haveSafeAnswer.value == 0) { + Navigator.pushNamed( + context, Routers.minePersonInfoSetSafetyProblemPage) + .then((value) => logic.getUserInfoRequest()); + } else { + Navigator.pushNamed( + context, Routers.minePersonInfoViewSafetyProblemPage); + } }), Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr, @@ -146,38 +151,45 @@ class _MinePersonInfoPageState extends State { } Future _openModalBottomSheet() async { - final option = await showModalBottomSheet( + showModalBottomSheet( context: context, + shape: RoundedRectangleBorder( + borderRadius: BorderRadiusDirectional.circular(10)), builder: (BuildContext context) { - return Container( - height: 200.0, - child: Column( - children: [ - ListTile( - title: Text('拍照', textAlign: TextAlign.center), - onTap: () { - SeletImageTool().getCameraImage((imgStr) { - print("111111$imgStr"); - }); - }, - ), - ListTile( - title: Text('从相册选择', textAlign: TextAlign.center), - onTap: () { - SeletImageTool().getImage((imgStr) { - print("111111$imgStr"); - }); - }, - ), - ListTile( - title: Text('取消', textAlign: TextAlign.center), - onTap: () { - Navigator.pop(context, '取消'); - }, - ), - ], - ), + return AlertBottomWidget( + topTitle: '', + items: const ['拍照', '从相册选择'], + chooseCallback: (value) { + int getSelectIndex = value; + if (getSelectIndex == 0) { + //拍照选项 + selectCamera(); + } else if (getSelectIndex == 1) { + selectImage(); + } + }, ); }); } + + ///拍摄照片 + selectCamera() async { + XFile? photo = await state.imagePicker.pickImage( + source: ImageSource.camera, preferredCameraDevice: CameraDevice.rear); + if (photo != null) { + state.image = photo; + setState(() {}); + } + } + + ///从相册选取 + selectImage() async { + XFile? image = await state.imagePicker.pickImage( + source: ImageSource.gallery, + maxHeight: 250, + maxWidth: 250, + ); + if (image != null) state.image = image; + setState(() {}); + } } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart new file mode 100644 index 00000000..6d5661a2 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart @@ -0,0 +1,19 @@ +import 'package:get/get.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart'; + +class MinePersonInfoState { + final mineInfoData = MinePersonInfoData().obs; + + var nickname = ''.obs; //昵称 + var mobileStr = ''.obs; //手机号 + var emailStr = ''.obs; //邮箱 + var countryStr = ''.obs; //国家/地区 + var haveSafeAnswer = 0.obs; //是否已设置安全问题 + + // ImagePicker获取内容后返回的对象是XFile + XFile? image; + List? imageList; +// 使用ImagePicker前必须先实例化 + final ImagePicker imagePicker = ImagePicker(); +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart index 11be7803..75082d5a 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart @@ -41,6 +41,5 @@ class MinePersonInfoResetPasswordLogic extends BaseGetXController { void _resetCanSub() { state.canSub.value = state.oldPwdIsOK && state.newPwdIsOK; - print("22222:${state.canSub.value}"); } } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_page.dart index 7598fafc..2d450d8a 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_page.dart @@ -38,6 +38,9 @@ class _MinePersonInfoResetPasswordPageState children: [ LoginInput( controller: state.oldPwdController, + onchangeAction: (textStr) { + logic.changeInput(state.oldPwdController); + }, isPwd: true, leftWidget: Text( "${TranslationLoader.lanKeys!.originalPassword!.tr} ", @@ -49,6 +52,9 @@ class _MinePersonInfoResetPasswordPageState ]), LoginInput( controller: state.newPwdController, + onchangeAction: (textStr) { + logic.changeInput(state.newPwdController); + }, isPwd: true, leftWidget: Text( "${TranslationLoader.lanKeys!.newPassword!.tr} ", @@ -60,6 +66,9 @@ class _MinePersonInfoResetPasswordPageState ]), LoginInput( controller: state.surePwdController, + onchangeAction: (textStr) { + logic.changeInput(state.surePwdController); + }, isPwd: true, // isHaveLeftWidget: false, leftWidget: Text( @@ -82,8 +91,11 @@ class _MinePersonInfoResetPasswordPageState btnName: TranslationLoader.lanKeys!.save!.tr, fontSize: 30.sp, borderRadius: 20.w, + isDisabled: state.canSub.value, padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: () {})), + onClick: () { + logic.changePasswordRequest(); + })), SizedBox(height: 40.w), Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_state.dart index bfb97b83..ab2a419b 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_state.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_state.dart @@ -20,7 +20,5 @@ class MinePersonInfoResetPasswordState { bool get newPwdIsOK => newPwd.value.isNotEmpty && (newPwd.value == surePwd.value); - var canResend = false.obs; - void onClose() {} } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_entity.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_entity.dart new file mode 100644 index 00000000..6473aa87 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_entity.dart @@ -0,0 +1,133 @@ +class MineSetSafetyProblemEntity { + int? errorCode; + String? description; + String? errorMsg; + Data? data; + + MineSetSafetyProblemEntity( + {this.errorCode, this.description, this.errorMsg, this.data}); + + MineSetSafetyProblemEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + data = json['data'] != null ? Data.fromJson(json['data']) : null; + } + + Map toJson() { + final Map data = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + if (this.data != null) { + data['data'] = this.data!.toJson(); + } + return data; + } +} + +class Data { + List? firstList; + List? secondList; + List? thirdList; + + Data({this.firstList, this.secondList, this.thirdList}); + + Data.fromJson(Map json) { + if (json['firstList'] != null) { + firstList = []; + json['firstList'].forEach((v) { + firstList!.add(SafetyProblemData.fromJson(v)); + }); + } + if (json['secondList'] != null) { + secondList = []; + json['secondList'].forEach((v) { + secondList!.add(SafetyProblemData.fromJson(v)); + }); + } + if (json['thirdList'] != null) { + thirdList = []; + json['thirdList'].forEach((v) { + thirdList!.add(SafetyProblemData.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = {}; + if (firstList != null) { + data['firstList'] = firstList!.map((v) => v.toJson()).toList(); + } + if (secondList != null) { + data['secondList'] = secondList!.map((v) => v.toJson()).toList(); + } + if (thirdList != null) { + data['thirdList'] = thirdList!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class SafetyProblemData { + int? questionId; + String? question; + String? answer; + + SafetyProblemData({this.questionId, this.question}); + + SafetyProblemData.fromJson(Map json) { + questionId = json['questionId']; + question = json['question']; + answer = json['answer']; + } + + Map toJson() { + final Map data = {}; + data['questionId'] = questionId; + data['question'] = question; + data['answer'] = answer; + + return data; + } +} + +class SafetyProblemData2 { + int? questionId; + String? question; + String? answer; + + SafetyProblemData2({this.questionId, this.question}); + + SafetyProblemData2.fromJson(Map json) { + questionId = json['questionId']; + question = json['question']; + } + + Map toJson() { + final Map data = {}; + data['questionId'] = questionId; + data['question'] = question; + return data; + } +} + +class SafetyProblemData3 { + int? questionId; + String? question; + String? answer; + + SafetyProblemData3({this.questionId, this.question}); + + SafetyProblemData3.fromJson(Map json) { + questionId = json['questionId']; + question = json['question']; + } + + Map toJson() { + final Map data = {}; + data['questionId'] = questionId; + data['question'] = question; + return data; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_logic.dart index e69de29b..69bfaa75 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_logic.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_logic.dart @@ -0,0 +1,69 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:get/get.dart'; +import 'package:get/get_utils/get_utils.dart'; +import 'package:star_lock/appRouters.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart'; +import 'package:star_lock/tools/toast.dart'; +import 'package:star_lock/translations/trans_lib.dart'; +import '../../../../network/api_repository.dart'; +import '../../../../tools/baseGetXController.dart'; + +class MineSetSafetyProblemLogic extends BaseGetXController { + final MineSetSafetyProblemState state = MineSetSafetyProblemState(); + //用户信息 + Future getQuestionListRequest() async { + var entity = + await ApiRepository.to.getQuestionList("", state.countryCode.value); + if (entity.errorCode!.codeIsSuccessful) { + state.firstProblemList.value = entity.data!.firstList!; + state.secondProblemList.value = entity.data!.secondList!; + state.thirdProblemList.value = entity.data!.thirdList!; + } + } + + //设置安全信息 + Future setSafeAnswerRequest() async { + var entity = + await ApiRepository.to.setSafeAnswer(state.questionAndAnswerList); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: '操作成功'); + Get.until((route) => route.settings.name == Routers.minePersonInfoPage); + } + } + + void checkNext(TextEditingController controller) { + changeInput(controller); + } + + void changeInput(TextEditingController controller) { + if (controller == state.fristAnswerController) { + state.firstAnswerStr.value = controller.text; + } + if (controller == state.secondAnswerController) { + state.secondAnswerStr.value = controller.text; + } + if (controller == state.thirdAnswerController) { + state.thirdAnswerStr.value = controller.text; + } + _resetCanSub(); + } + + void _resetCanSub() { + state.canSub.value = state.answerIsOK && + state.firstProblemStr.value != + TranslationLoader.lanKeys!.problemOne!.tr && + state.secondProblemStr.value != + TranslationLoader.lanKeys!.problemTwo!.tr && + state.thirdProblemStr.value != + TranslationLoader.lanKeys!.problemThree!.tr; + } + + @override + void onInit() { + super.onInit(); + state.fristAnswerController.text = state.firstAnswerStr.value; + state.secondAnswerController.text = state.secondAnswerStr.value; + state.thirdAnswerController.text = state.thirdAnswerStr.value; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart index 0c00e267..36257526 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_entity.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_logic.dart'; +import 'package:star_lock/tools/custom_bottom_sheet.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/commonItem.dart'; @@ -18,9 +21,15 @@ class MinePersonInfoSetSafetyProblemPage extends StatefulWidget { class _MinePersonInfoSetSafetyProblemPageState extends State { - final _fristEditingController = TextEditingController(); - final _secondEditingController = TextEditingController(); - final _thirdEditingController = TextEditingController(); + final logic = Get.put(MineSetSafetyProblemLogic()); + final state = Get.find().state; + + @override + void initState() { + super.initState(); + + logic.getQuestionListRequest(); + } @override Widget build(BuildContext context) { @@ -40,33 +49,61 @@ class _MinePersonInfoSetSafetyProblemPageState TranslationLoader.lanKeys!.safetyProblemTip!.tr, style: TextStyle(fontSize: 18.sp), )), - _safityProblemItem(TranslationLoader.lanKeys!.problemOne!.tr, "", - _fristEditingController, () { - _seletProblemBottomSheet(); - }), + Obx(() => _safityProblemItem( + state.firstProblemStr.value, + state.firstAnswerStr.value, + state.fristAnswerController, () { + _selectProblemBottomSheet(state.firstProblemList, 1); + })), SizedBox(height: 10.h), - _safityProblemItem(TranslationLoader.lanKeys!.problemTwo!.tr, "", - _secondEditingController, () { - _seletProblemBottomSheet(); - }), + Obx(() => _safityProblemItem( + state.secondProblemStr.value, + state.secondAnswerStr.value, + state.secondAnswerController, () { + _selectProblemBottomSheet(state.secondProblemList, 2); + })), SizedBox(height: 10.h), - _safityProblemItem(TranslationLoader.lanKeys!.problemThree!.tr, "", - _thirdEditingController, () { - _seletProblemBottomSheet(); - }), + Obx(() => _safityProblemItem( + state.thirdProblemStr.value, + state.thirdAnswerStr.value, + state.thirdAnswerController, () { + _selectProblemBottomSheet(state.thirdProblemList, 3); + })), SizedBox( height: 50.h, ), - Container( - padding: EdgeInsets.only(left: 20.w, right: 20.w), - child: SubmitBtn( - btnName: TranslationLoader.lanKeys!.sure!.tr, - // borderRadius: 20.w, - // fontSize: 32.sp, - // margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 20.w), - // padding: EdgeInsets.only(top: 20.w, bottom: 20.w), - onClick: () {}), - ), + Obx(() => Container( + padding: EdgeInsets.only(left: 20.w, right: 20.w), + child: SubmitBtn( + btnName: TranslationLoader.lanKeys!.sure!.tr, + isDisabled: state.canSub.value, + onClick: () { + //state.questionAndAnswerList + for (int i = 0; i < 3; i++) { + if (i == 0) { + SafetyProblemData data = SafetyProblemData(); + data.question = state.firstProblemStr.value; + data.answer = state.firstAnswerStr.value; + data.questionId = state.firstQuestionId.value; + state.questionAndAnswerList.add(data); + } else if (i == 1) { + SafetyProblemData data = SafetyProblemData(); + data.question = state.secondProblemStr.value; + data.answer = state.secondAnswerStr.value; + data.questionId = state.secondQuestionId.value; + state.questionAndAnswerList.add(data); + } else if (i == 2) { + SafetyProblemData data = SafetyProblemData(); + data.question = state.thirdProblemStr.value; + data.answer = state.thirdAnswerStr.value; + data.questionId = state.thirdQuestionId.value; + state.questionAndAnswerList.add(data); + } + } + //设置安全信息接口 + logic.setSafeAnswerRequest(); + }), + )), ], )); } @@ -88,6 +125,9 @@ class _MinePersonInfoSetSafetyProblemPageState //输入框一行 maxLines: 1, controller: controller, + onChanged: (value) { + logic.checkNext(controller); + }, autofocus: false, decoration: InputDecoration( //输入里面输入文字内边距设置 @@ -104,58 +144,38 @@ class _MinePersonInfoSetSafetyProblemPageState ); } - Future _seletProblemBottomSheet() async { - final option = await showModalBottomSheet( + Future _selectProblemBottomSheet(List dataList, int problemIndex) async { + List getProblemList = []; + for (int i = 0; i < dataList.length; i++) { + SafetyProblemData data = dataList[i]; + getProblemList.add(data.question!); + } + showModalBottomSheet( context: context, + shape: RoundedRectangleBorder( + borderRadius: BorderRadiusDirectional.circular(10)), builder: (BuildContext context) { - return Container( - height: 400.0.h, - child: ListView( - children: [ - ListTile( - title: Text( - '你第一次乘坐飞机取得是哪个城市?', - textAlign: TextAlign.center, - style: TextStyle(fontSize: 22.sp), - ), - onTap: () { - Navigator.of(context).pop(true); - }, - ), - const Divider( - color: AppColors.greyLineColor, - height: 1, - ), - ListTile( - title: Text( - '你的QQ号码是多少', - textAlign: TextAlign.center, - style: TextStyle(fontSize: 22.sp), - ), - onTap: () { - Navigator.of(context).pop(true); - }, - ), - const Divider( - color: AppColors.greyLineColor, - height: 1, - ), - ListTile( - title: Text( - '你的第一个宠物叫什么名字', - textAlign: TextAlign.center, - style: TextStyle(fontSize: 22.sp), - ), - onTap: () { - Navigator.of(context).pop(true); - }, - ), - const Divider( - color: AppColors.greyLineColor, - height: 1, - ), - ], - ), + return AlertBottomWidget( + topTitle: '选择问题', + items: getProblemList, + chooseCallback: (value) { + int getSelectIndex = value; + String getSelectProblem = getProblemList[getSelectIndex]; + SafetyProblemData data = dataList[getSelectIndex]; + if (problemIndex == 1) { + // SafetyProblemData data = dataList[getSelectIndex]; + state.firstProblemStr.value = getSelectProblem; + state.firstQuestionId.value = data.questionId!; + } else if (problemIndex == 2) { + // SafetyProblemData data = dataList[getSelectIndex]; + state.secondProblemStr.value = getSelectProblem; + state.secondQuestionId.value = data.questionId!; + } else if (problemIndex == 3) { + // SafetyProblemData data = dataList[getSelectIndex]; + state.thirdProblemStr.value = getSelectProblem; + state.thirdQuestionId.value = data.questionId!; + } + }, ); }); } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart index e69de29b..31c64336 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/translations/trans_lib.dart'; + +class MineSetSafetyProblemState { + final TextEditingController fristAnswerController = TextEditingController(); + final TextEditingController secondAnswerController = TextEditingController(); + final TextEditingController thirdAnswerController = TextEditingController(); + + var firstProblemList = [].obs; + var secondProblemList = [].obs; + var thirdProblemList = [].obs; + + var firstProblemStr = TranslationLoader.lanKeys!.problemOne!.tr.obs; + var secondProblemStr = TranslationLoader.lanKeys!.problemTwo!.tr.obs; + var thirdProblemStr = TranslationLoader.lanKeys!.problemThree!.tr.obs; + + var firstQuestionId = 0.obs; + var secondQuestionId = 0.obs; + var thirdQuestionId = 0.obs; + + var firstAnswerStr = ''.obs; + var secondAnswerStr = ''.obs; + var thirdAnswerStr = ''.obs; + var countryCode = ''.obs; + + var questionAndAnswerList = [].obs; + + bool get answerIsOK => + firstAnswerStr.value.isNotEmpty && + secondAnswerStr.value.isNotEmpty && + thirdAnswerStr.value.isNotEmpty; + var canSub = false.obs; + + MineSetSafetyProblemState() { + Map map = Get.arguments; + firstProblemStr.value = map["firstProblemStr"]; + secondProblemStr.value = map["secondProblemStr"]; + thirdProblemStr.value = map["thirdProblemStr"]; + firstAnswerStr.value = map["firstAnswerStr"]; + secondAnswerStr.value = map["secondAnswerStr"]; + thirdAnswerStr.value = map["thirdAnswerStr"]; + firstQuestionId.value = map["firstQuestionId"]; + secondQuestionId.value = map["secondQuestionId"]; + thirdQuestionId.value = map["thirdQuestionId"]; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_entity.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_entity.dart new file mode 100644 index 00000000..cdef8da2 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_entity.dart @@ -0,0 +1,57 @@ +class MineViewSafetyProblemEntity { + int? errorCode; + String? description; + String? errorMsg; + List? dataList; + + MineViewSafetyProblemEntity( + {this.errorCode, this.description, this.errorMsg, this.dataList}); + + MineViewSafetyProblemEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + if (json['data'] != null) { + dataList = []; + json['data'].forEach((v) { + dataList!.add(SafetyProblemData.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + if (dataList != null) { + data['data'] = dataList!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class SafetyProblemData { + int? questionId; + String? answer; + int? uid; + String? question; + + SafetyProblemData({this.questionId, this.answer, this.uid, this.question}); + + SafetyProblemData.fromJson(Map json) { + questionId = json['questionId']; + answer = json['answer']; + uid = json['uid']; + question = json['question']; + } + + Map toJson() { + final Map data = {}; + data['questionId'] = questionId; + data['answer'] = answer; + data['uid'] = uid; + data['question'] = question; + return data; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_logic.dart new file mode 100644 index 00000000..315681ee --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_logic.dart @@ -0,0 +1,34 @@ +import 'dart:async'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_entity.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_state.dart'; + +import '../../../../network/api_repository.dart'; +import '../../../../tools/baseGetXController.dart'; + +class MineViewSafetyProblemLogic extends BaseGetXController { + final MineViewSafetyProblemState state = MineViewSafetyProblemState(); + + //获取已设置的安全信息 + Future getOwnQuestionListRequest() async { + MineViewSafetyProblemEntity entity = + await ApiRepository.to.getOwnQuestionList(); + if (entity.errorCode!.codeIsSuccessful) { + if (entity.dataList != null) { + SafetyProblemData safeData1 = entity.dataList![0]; + state.firstProblemStr.value = safeData1.question!; + state.firstAnswerStr.value = safeData1.answer!; + state.firstQuestionId.value = safeData1.questionId!; + + SafetyProblemData safeData2 = entity.dataList![1]; + state.secondProblemStr.value = safeData2.question!; + state.secondAnswerStr.value = safeData2.answer!; + state.secondQuestionId.value = safeData2.questionId!; + + SafetyProblemData safeData3 = entity.dataList![2]; + state.thirdProblemStr.value = safeData3.question!; + state.thirdAnswerStr.value = safeData3.answer!; + state.thirdQuestionId.value = safeData3.questionId!; + } + } + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_page.dart new file mode 100644 index 00000000..84206a8d --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_page.dart @@ -0,0 +1,114 @@ +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/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_logic.dart'; + +import '../../../app_settings/app_colors.dart'; +import '../../../tools/commonItem.dart'; +import '../../../tools/titleAppBar.dart'; +import '../../../translations/trans_lib.dart'; + +class MinePersonInfoViewSafetyProblemPage extends StatefulWidget { + const MinePersonInfoViewSafetyProblemPage({Key? key}) : super(key: key); + + @override + State createState() => + _MinePersonInfoViewSafetyProblemPageState(); +} + +class _MinePersonInfoViewSafetyProblemPageState + extends State { + final logic = Get.put(MineViewSafetyProblemLogic()); + final state = Get.find().state; + + @override + void initState() { + super.initState(); + + logic.getOwnQuestionListRequest(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.safetyProblem!.tr, + haveBack: true, + actionsList: [ + TextButton( + onPressed: () { + Navigator.pushNamed( + context, Routers.minePersonInfoSetSafetyProblemPage, + arguments: { + 'firstProblemStr': state.firstProblemStr.value, + 'secondProblemStr': state.secondProblemStr.value, + 'thirdProblemStr': state.thirdProblemStr.value, + 'firstAnswerStr': state.firstAnswerStr.value, + 'secondAnswerStr': state.secondAnswerStr.value, + 'thirdAnswerStr': state.thirdAnswerStr.value, + 'firstQuestionId': state.firstQuestionId.value, + 'secondQuestionId': state.secondQuestionId.value, + 'thirdQuestionId': state.thirdQuestionId.value, + }); + }, + child: Text( + TranslationLoader.lanKeys!.amend!.tr, + style: TextStyle(color: Colors.white, fontSize: 24.sp), + )) + ], + backgroundColor: AppColors.mainColor), + body: ListView( + children: [ + Container( + width: 1.sw, + color: AppColors.greyBackgroundColor, + padding: EdgeInsets.all(20.h), + child: Text( + TranslationLoader.lanKeys!.safetyProblemTip!.tr, + style: TextStyle(fontSize: 18.sp), + )), + Obx(() => _safityProblemItem( + state.firstProblemStr.value, state.firstAnswerStr.value)), + SizedBox(height: 10.h), + Obx(() => _safityProblemItem( + state.secondProblemStr.value, state.secondAnswerStr.value)), + SizedBox(height: 10.h), + Obx(() => _safityProblemItem( + state.thirdProblemStr.value, state.thirdAnswerStr.value)) + ], + )); + } + + Widget _safityProblemItem(String problemTitle, String answerTitle) { + return Column( + children: [ + CommonItem( + leftTitel: problemTitle, + rightTitle: "", + isHaveLine: true, + isHaveDirection: true), + Container( + color: Colors.white, + padding: EdgeInsets.only(left: 35.w), + child: TextField( + //输入框一行 + maxLines: 1, + enabled: false, + autofocus: false, + decoration: InputDecoration( + //输入里面输入文字内边距设置 + // contentPadding: const EdgeInsets.only(top: 8.0, left: -19.0, right: -15.0, bottom: 8.0), + // labelText: label, + hintText: answerTitle, + //不需要输入框下划线 + border: InputBorder.none, + hintStyle: TextStyle(fontSize: 22.sp)), + obscureText: false, + ), + ) + ], + ); + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_state.dart new file mode 100644 index 00000000..e9018b15 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_state.dart @@ -0,0 +1,16 @@ +import 'package:get/get.dart'; +import 'package:star_lock/translations/trans_lib.dart'; + +class MineViewSafetyProblemState { + var firstProblemStr = TranslationLoader.lanKeys!.problemOne!.tr.obs; + var secondProblemStr = TranslationLoader.lanKeys!.problemTwo!.tr.obs; + var thirdProblemStr = TranslationLoader.lanKeys!.problemThree!.tr.obs; + + var firstAnswerStr = ''.obs; + var secondAnswerStr = ''.obs; + var thirdAnswerStr = ''.obs; + + var firstQuestionId = 0.obs; + var secondQuestionId = 0.obs; + var thirdQuestionId = 0.obs; +} diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index bc2f2729..22ae9020 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -126,7 +126,16 @@ abstract class Api { final String getValidationCodeAuthURL = '/user/sendValidationCodeAuth'; //登录后使用,免图片滑动验证 final String updateUserInfoURL = '/user/updateUserInfo'; //更新个人信息-昵称/头像 - final String changeAccountURL = '/user/changeAccount'; //修改账号 - final String bindEmailURL = '/user/bindEmail'; //绑定邮箱 + // final String changeAccountURL = '/user/changeAccount'; //修改账号 + final String bindEmailURL = '/user/bindEmail'; //修改绑定邮箱 + final String bindPhoneURL = '/user/bindPhone'; //修改绑定手机号 final String changePasswordURL = '/user/changePassword'; //修改密码 + final String getQuestionListURL = '/safeAnswer/getQuestionList'; //获取安全信息列表 + final String getOwnQuestionListURL = + '/safeAnswer/getOwnQuestionList'; //获取已设置的安全信息 + final String setSafeAnswerURL = '/safeAnswer/set'; //设置安全信息 + final String getUpTokenURL = + '/user/getUpToken'; //上传头像 先获取upToken 再调用updateUserInfo + final String unbindPhoneTokenURL = '/user/unbindPhoneToken'; //获取解绑手机号Token + final String unbindEmailTokenURL = '/user/unbindEmailToken'; //获取解绑邮箱Token } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 11f28c35..1c1f61e0 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -1171,28 +1171,27 @@ class ApiProvider extends BaseProvider { Future updateUserInfo(String nickname) => post(updateUserInfoURL.toUrl, jsonEncode({'nickname': nickname})); - //修改账号 - Future changeAccount(String countryCode, String newAccount, - String uniqueid, String verificationCode) => + //修改绑定手机号 + Future bindPhone(String countryCode, String account, + String verificationCode, String unbindToken) => post( - changeAccountURL.toUrl, + bindPhoneURL.toUrl, jsonEncode({ 'countryCode': countryCode, - 'newAccount': newAccount, - 'uniqueid': uniqueid, - 'verificationCode': verificationCode + 'account': account, + 'verificationCode': verificationCode, + 'unbindToken': unbindToken })); - //绑定邮箱 - Future bindEmail(String email, String uniqueid, - String verificationCode, String operatorUid) => + //修改绑定邮箱 + Future bindEmail( + String email, String verificationCode, String unbindToken) => post( bindEmailURL.toUrl, jsonEncode({ 'email': email, - 'uniqueid': uniqueid, 'verificationCode': verificationCode, - 'operatorUid': operatorUid + 'unbindToken': unbindToken })); //修改密码 @@ -1206,6 +1205,38 @@ class ApiProvider extends BaseProvider { "oldPassword": oldPassword, 'operatorUid': operatorUid })); + + //获取安全信息列表 + Future getQuestionList(String operatorUid, String countryCode) => + post( + getQuestionListURL.toUrl, + jsonEncode({ + "operatorUid": operatorUid, + 'countryCode': countryCode, + })); + + //获取已设置的安全信息 + Future getOwnQuestionList() => + post(getOwnQuestionListURL.toUrl, jsonEncode({})); + + //设置安全信息 + Future setSafeAnswer(List questionAndAnswerList) => post( + setSafeAnswerURL.toUrl, + jsonEncode({"questionAndAnswerList": questionAndAnswerList})); + + //上传头像 先获取upToken 再调用updateUserInfo + Future getUpToken(String type) => + post(setSafeAnswerURL.toUrl, jsonEncode({"type": type})); + + //获取解绑手机号Token + Future unbindPhoneToken(String verificationCode) => post( + unbindPhoneTokenURL.toUrl, + jsonEncode({"verificationCode": verificationCode})); + + //获取解绑邮箱Token + Future unbindEmailToken(String verificationCode) => post( + unbindEmailTokenURL.toUrl, + jsonEncode({"verificationCode": verificationCode})); } extension ExtensionString on String { diff --git a/star_lock/lib/network/api_provider_base.dart b/star_lock/lib/network/api_provider_base.dart index 9dfe773f..648e868d 100644 --- a/star_lock/lib/network/api_provider_base.dart +++ b/star_lock/lib/network/api_provider_base.dart @@ -71,7 +71,7 @@ class BaseProvider extends GetConnect with Api { break; case 421: case 422: - case 430: + case 430: //与葛工约定弹出ErrorMsg Toast.show(msg: T["errorMsg"]); break; case 425: diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index 0cc09316..e04bd44f 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -7,7 +7,10 @@ import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/ma import 'package:star_lock/main/lockDetail/lcokSet/basicInformation/basicInformation/KeyDetailEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart'; -import 'package:star_lock/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/mineUnbindPhoneOrEmail_entity.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_entity.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoViewSafetyProblem/minePersonInfoViewSafetyProblem_entity.dart'; import 'package:star_lock/mine/mineSet/appUnlockNeedMobileNetworkingLock/selectLockListEntity.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetailEntity.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/authorizedAdminListEntity.dart'; @@ -1165,19 +1168,19 @@ class ApiRepository { return PasswordKeyListEntity.fromJson(res.body); } - //修改账号 - Future changeAccount(String countryCode, - String newAccount, String uniqueid, String verificationCode) async { - final res = await apiProvider.changeAccount( - countryCode, newAccount, uniqueid, verificationCode); + //修改绑定手机号 + Future bindPhone(String countryCode, String account, + String verificationCode, String unbindToken) async { + final res = await apiProvider.bindPhone( + countryCode, account, verificationCode, unbindToken); return PasswordKeyListEntity.fromJson(res.body); } - //绑定邮箱 - Future bindEmail(String email, String uniqueid, - String verificationCode, String operatorUid) async { - final res = await apiProvider.bindEmail( - email, uniqueid, verificationCode, operatorUid); + //修改绑定邮箱 + Future bindEmail( + String email, String verificationCode, String unbindToken) async { + final res = + await apiProvider.bindEmail(email, verificationCode, unbindToken); return PasswordKeyListEntity.fromJson(res.body); } @@ -1188,4 +1191,43 @@ class ApiRepository { date, newPassword, oldPassword, operatorUid); return LoginEntity.fromJson(res.body); } + + //获取安全信息列表 + Future getQuestionList( + String operatorUid, String countryCode) async { + final res = await apiProvider.getQuestionList(operatorUid, countryCode); + return MineSetSafetyProblemEntity.fromJson(res.body); + } + + //获取已设置的安全信息 + Future getOwnQuestionList() async { + final res = await apiProvider.getOwnQuestionList(); + return MineViewSafetyProblemEntity.fromJson(res.body); + } + + //设置安全信息 + Future setSafeAnswer(List questionAndAnswerList) async { + final res = await apiProvider.setSafeAnswer(questionAndAnswerList); + return LoginEntity.fromJson(res.body); + } + + //上传头像 先获取upToken 再调用updateUserInfo + Future getUpToken(String type) async { + final res = await apiProvider.getUpToken(type); + return LoginEntity.fromJson(res.body); + } + + //获取解绑手机号Token + Future unbindPhoneToken( + String verificationCode) async { + final res = await apiProvider.unbindPhoneToken(verificationCode); + return MineUnbindPhoneOrEmailEntity.fromJson(res.body); + } + + //获取解绑邮箱Token + Future unbindEmailToken( + String verificationCode) async { + final res = await apiProvider.unbindEmailToken(verificationCode); + return MineUnbindPhoneOrEmailEntity.fromJson(res.body); + } } diff --git a/star_lock/lib/tools/custom_bottom_sheet.dart b/star_lock/lib/tools/custom_bottom_sheet.dart new file mode 100644 index 00000000..ea76d2f9 --- /dev/null +++ b/star_lock/lib/tools/custom_bottom_sheet.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; + +class AlertBottomWidget extends StatelessWidget { + List items; + ValueChanged chooseCallback; + String topTitle; + + AlertBottomWidget( + {Key? key, + required this.items, + required this.chooseCallback, + required this.topTitle}) + : super(key: key); + + List itemsWidget(context) { + List list = []; + + if (topTitle.isNotEmpty) { + list.add(Container( + padding: const EdgeInsets.only(top: 18, bottom: 18), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + topTitle, + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.w500, + fontSize: ScreenUtil().setSp(24)), + ), + // const SizedBox( + // height: 4, + // ), + // Text( + // subTitle, + // style: TextStyle( + // color: AppColors.darkGrayTextColor, + // fontSize: ScreenUtil().setSp(24)), + // ) + ], + ), + )); + + list.add( + Container( + color: AppColors.greyBackgroundColor, + height: 8, + ), + ); + } + + for (int i = 0; i < items.length; i++) { + list.add( + SizedBox( + width: ScreenUtil().screenWidth, + child: TextButton( + style: ButtonStyle( + overlayColor: MaterialStateProperty.all(Colors.white)), + child: Text( + items[i], + style: TextStyle( + color: Colors.black, fontSize: ScreenUtil().setSp(22)), + ), + onPressed: () { + Navigator.pop(context); + chooseCallback(i); + }, + ), + ), + ); + list.add(const Divider( + height: 1, + )); + } + + list.add( + Container( + color: AppColors.greyBackgroundColor, + height: 8, + ), + ); + + list.add(SizedBox( + width: ScreenUtil().screenWidth, + child: TextButton( + style: ButtonStyle( + overlayColor: MaterialStateProperty.all(Colors.white)), + child: Text( + '取消', + style: + TextStyle(color: Colors.black, fontSize: ScreenUtil().setSp(24)), + ), + onPressed: () { + Navigator.pop(context); + }, + ), + )); + return list; + } + + @override + Widget build(BuildContext context) { + return Container( + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: itemsWidget(context), + ), + ); + } +} diff --git a/star_lock/lib/tools/tf_input_haveBorder.dart b/star_lock/lib/tools/tf_input_haveBorder.dart index ae88d61b..cdb6fad4 100644 --- a/star_lock/lib/tools/tf_input_haveBorder.dart +++ b/star_lock/lib/tools/tf_input_haveBorder.dart @@ -17,6 +17,7 @@ class TFInputHaveBorder extends StatelessWidget { String? label; bool? isPwd; Widget? rightSlot; + Function()? onChangeAction; TFInputHaveBorder( {Key? key, required this.controller, @@ -27,6 +28,7 @@ class TFInputHaveBorder extends StatelessWidget { this.keyboardType, this.background, this.hintText, + this.onChangeAction, this.leftImg}) : super(key: key); @@ -114,7 +116,11 @@ class TFInputHaveBorder extends StatelessWidget { ), ), obscureText: false, - onChanged: (String value) {}, + onChanged: (String value) { + if (onChangeAction != null) { + onChangeAction!(); + } + }, ), rightSlot ?? const SizedBox(width: 0, height: 0) ], diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index 39a98c4a..197db058 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -67,8 +67,11 @@ dependencies: flutter_pickers: ^2.1.9 #万年历 syncfusion_flutter_datepicker: ^22.1.38 - #图片选择 - image_picker: ^1.0.1 + #使用相机及相册 + image_picker: ^1.0.4 + crop_your_image: ^0.7.5 + camera: ^0.10.5+5 + path_provider: ^2.1.0 #跳转到外部 url_launcher: ^6.1.12 #蓝牙