From 809096a11b7c5e4fba77b7af359a57d1d53880e4 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 9 Oct 2023 18:45:10 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E9=A1=B5=E9=9D=A2=E5=8F=8A=E7=9B=B8=E5=BA=94?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=92=8C=E9=80=BB=E8=BE=91=202=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=8D=E6=BB=91=E5=8A=A8=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E9=AA=8C=E8=AF=81=E7=A0=81=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=203=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF-=E6=98=B5?= =?UTF-8?q?=E7=A7=B0=E6=8E=A5=E5=8F=A3=204=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B4=A6=E5=8F=B7=E6=8E=A5=E5=8F=A3=E5=8F=8A?= =?UTF-8?q?=E9=80=BB=E8=BE=91=205=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E9=82=AE=E7=AE=B1=E6=8E=A5=E5=8F=A3=E5=8F=8A=E9=80=BB?= =?UTF-8?q?=E8=BE=91=206=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 1 + star_lock/images/lan/lan_keys.json | 1 + star_lock/images/lan/lan_zh.json | 1 + .../mine/safeVerify/safeVerify_logic.dart | 7 +- .../mine/mine/safeVerify/safeVerify_page.dart | 24 ++-- .../mine/safeVerify/safeVerify_state.dart | 2 +- .../minePersonInfo/minePersonInfo_entity.dart | 77 ++++++++++++ .../minePersonInfo/minePersonInfo_logic.dart | 19 +++ .../minePersonInfo/minePersonInfo_page.dart | 78 +++++++++--- .../minePersonInfo/minePersonInfo_state.dart | 11 ++ .../minePersonInfoEditAccount_logic.dart | 88 +++++++++++++ .../minePersonInfoEditAccount_page.dart | 118 +++++------------- .../minePersonInfoEditAccount_state.dart | 65 ++++++++++ .../minePersonInfoEditAccountNext_logic.dart | 89 +++++++++++++ .../minePersonInfoEditAccountNext_page.dart | 31 ++--- .../minePersonInfoEditAccountNext_state.dart | 68 ++++++++++ .../MinePersonInfoEditNamePage_state.dart | 15 +++ .../MinePersonInfoEditName_logic.dart | 43 +++++++ .../minePersonInfoEditName_page.dart | 26 ++-- .../minePersonInfoEmail_logic.dart | 102 +++++++++++++++ .../minePersonInfoEmail_page.dart | 109 ++++++++-------- .../minePersonInfoEmail_state.dart | 54 ++++++++ .../minePersonInfoResetPassword_logic.dart | 46 +++++++ .../minePersonInfoResetPassword_page.dart | 23 ++-- .../minePersonInfoResetPassword_state.dart | 26 ++++ .../minePersonInfoSetSafetyProblem_logic.dart | 0 .../minePersonInfoSetSafetyProblem_page.dart | 1 - .../minePersonInfoSetSafetyProblem_state.dart | 0 star_lock/lib/network/api.dart | 6 + star_lock/lib/network/api_provider.dart | 81 +++++++++--- star_lock/lib/network/api_repository.dart | 70 ++++++++--- star_lock/lib/tools/tf_input_haveBorder.dart | 45 +++++-- star_lock/lib/translations/lanKeyEntity.dart | 4 + 33 files changed, 1076 insertions(+), 255 deletions(-) create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditNamePage_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditName_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_state.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_logic.dart create mode 100644 star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index b00628fc..62345b97 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -319,6 +319,7 @@ "registerPasswordTip":"The password must be 8-20 characters, including at least 2 of the numbers/letters/symbols", "iphone":"Iphone", "email":"Email", + "mobileNumber":"Mobile phone number", "countryAndRegion":"Country And Region", "selet":"Selet", "getVerificationCode":"Get Verification Code", diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 1d4fc313..8a551768 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -319,6 +319,7 @@ "registerPasswordTip":"registerPasswordTip", "iphone":"iphone", "email":"email", + "mobileNumber":"mobileNumber", "countryAndRegion":"countryAndRegion", "selet":"selet", "getVerificationCode":"getVerificationCode", diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index b4692a38..4bd4b51c 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -319,6 +319,7 @@ "registerPasswordTip":"密码必须是8-20位,至少包括数字/字母/符号中的2种", "iphone":"手机", "email":"邮箱", + "mobileNumber":"手机号", "countryAndRegion":"国家/地区", "selet":"选择", "getVerificationCode":"获取验证码", diff --git a/star_lock/lib/mine/mine/safeVerify/safeVerify_logic.dart b/star_lock/lib/mine/mine/safeVerify/safeVerify_logic.dart index f8f09eb7..c5f6c724 100644 --- a/star_lock/lib/mine/mine/safeVerify/safeVerify_logic.dart +++ b/star_lock/lib/mine/mine/safeVerify/safeVerify_logic.dart @@ -33,7 +33,7 @@ class SafeVerifyLogic extends BaseGetXController { //获取验证码请求 void sendValidationCode() async { - var entity = await ApiRepository.to.sendValidationCode( + var entity = await ApiRepository.to.getValidationCodeAuth( "+86", state.loginData.value.mobile!, '1', @@ -46,8 +46,9 @@ class SafeVerifyLogic extends BaseGetXController { } //删除账号请求 - Future userLogoutRequest() async { - LoginEntity entity = await ApiRepository.to.userLogout(); + Future deleteAccountRequest() async { + LoginEntity entity = await ApiRepository.to + .deleteAccount("", "", state.verificationCode.value); if (entity.errorCode!.codeIsSuccessful) { Toast.show(msg: '验证成功,账号已删除'); //删除账号成功, diff --git a/star_lock/lib/mine/mine/safeVerify/safeVerify_page.dart b/star_lock/lib/mine/mine/safeVerify/safeVerify_page.dart index 9910063b..a13ea601 100644 --- a/star_lock/lib/mine/mine/safeVerify/safeVerify_page.dart +++ b/star_lock/lib/mine/mine/safeVerify/safeVerify_page.dart @@ -17,7 +17,6 @@ class SafeVerifyPage extends StatefulWidget { class _SafeVerifyPageState extends State { final logic = Get.put(SafeVerifyLogic()); final state = Get.find().state; - String mobilePhone = ''; @override void initState() { @@ -51,6 +50,9 @@ class _SafeVerifyPageState extends State { //输入框一行 maxLines: 1, controller: state.codeController, + onChanged: (value) { + logic.checkNext(state.codeController); + }, autofocus: false, decoration: InputDecoration( contentPadding: @@ -65,15 +67,15 @@ class _SafeVerifyPageState extends State { SizedBox( height: 30.h, ), - SizedBox( - width: 200.w, - child: SubmitBtn( - btnName: TranslationLoader.lanKeys!.getVerificationCode!.tr, - onClick: () { - logic.sendValidationCode(); - }, - ), - ), + Obx(() => SizedBox( + width: 200.w, + child: SubmitBtn( + btnName: state.btnText.value, + onClick: () { + logic.sendValidationCode(); + }, + ), + )), SizedBox( height: 60.h, ), @@ -92,7 +94,7 @@ class _SafeVerifyPageState extends State { btnName: '验证', isDisabled: state.canSub.value, onClick: () { - logic.userLogoutRequest(); + logic.deleteAccountRequest(); }, )) ], diff --git a/star_lock/lib/mine/mine/safeVerify/safeVerify_state.dart b/star_lock/lib/mine/mine/safeVerify/safeVerify_state.dart index 8b0e129a..4913a8fc 100644 --- a/star_lock/lib/mine/mine/safeVerify/safeVerify_state.dart +++ b/star_lock/lib/mine/mine/safeVerify/safeVerify_state.dart @@ -14,7 +14,7 @@ class SafeVerifyState { var countryCode = '+86'.obs; var countryId = '9'.obs; - var codeType = '5'.obs; + var codeType = '5'.obs; //5删除账号 var verificationCode = ''.obs; var xWidth = ''.obs; // 滑动验证码滑动位置 var canSub = false.obs; diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart new file mode 100644 index 00000000..6d031ea4 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_entity.dart @@ -0,0 +1,77 @@ +class MinePersonInfoEntity { + int? errorCode; + String? description; + String? errorMsg; + MinePersonInfoData? data; + + MinePersonInfoEntity( + {this.errorCode, this.description, this.errorMsg, this.data}); + + MinePersonInfoEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + data = + json['data'] != null ? MinePersonInfoData.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 MinePersonInfoData { + String? mobile; + String? uid; + bool? isSecurityQuestionSetted; + String? nickname; + String? headUrl; + String? accountName; + int? countryId; + String? email; + String? countryName; + + MinePersonInfoData( + {this.mobile, + this.uid, + this.isSecurityQuestionSetted, + this.nickname, + this.headUrl, + this.accountName, + this.countryId, + this.email, + this.countryName}); + + MinePersonInfoData.fromJson(Map json) { + mobile = json['mobile']; + uid = json['uid']; + isSecurityQuestionSetted = json['isSecurityQuestionSetted']; + nickname = json['nickname']; + headUrl = json['headUrl']; + accountName = json['accountName']; + countryId = json['countryId']; + email = json['email']; + countryName = json['countryName']; + } + + Map toJson() { + final Map data = {}; + data['mobile'] = mobile; + data['uid'] = uid; + data['isSecurityQuestionSetted'] = isSecurityQuestionSetted; + data['nickname'] = nickname; + data['headUrl'] = headUrl; + data['accountName'] = accountName; + data['countryId'] = countryId; + data['email'] = email; + data['countryName'] = countryName; + return data; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart new file mode 100644 index 00000000..f23969af --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_logic.dart @@ -0,0 +1,19 @@ +import 'dart:async'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart'; +import '../../../../network/api_repository.dart'; +import '../../../../tools/baseGetXController.dart'; + +class MinePersonInfoLogic extends BaseGetXController { + final MinePersonInfoState state = MinePersonInfoState(); + //用户信息 + Future getUserInfoRequest() async { + var entity = await ApiRepository.to.getUserInfo(""); + if (entity.errorCode!.codeIsSuccessful) { + state.mineInfoData.value = entity.data!; + state.nickname.value = entity.data!.nickname!; + state.mobileStr.value = entity.data!.mobile!; + state.emailStr.value = entity.data!.email!; + state.countryStr.value = entity.data!.countryName!; + } + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart index b4de92ba..37d19378 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_page.dart @@ -1,8 +1,8 @@ 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 '../../../appRouters.dart'; @@ -18,6 +18,16 @@ class MinePersonInfoPage extends StatefulWidget { } class _MinePersonInfoPageState extends State { + final logic = Get.put(MinePersonInfoLogic()); + final state = Get.find().state; + + @override + void initState() { + super.initState(); + + logic.getUserInfoRequest(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -47,33 +57,63 @@ class _MinePersonInfoPageState extends State { _openModalBottomSheet(); }, ), - CommonItem( + Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.nickName!.tr, - rightTitle: "你好", + rightTitle: state.nickname.value, isHaveLine: true, isHaveDirection: true, action: () { Navigator.pushNamed( - context, Routers.minePersonInfoEditNamePage); - }), - CommonItem( - leftTitel: TranslationLoader.lanKeys!.accountNumber!.tr, - rightTitle: "786612630@qq.com", + context, Routers.minePersonInfoEditNamePage, + arguments: {'nickName': state.nickname.value}) + .then((value) => logic.getUserInfoRequest()); + })), + Obx(() => CommonItem( + leftTitel: TranslationLoader.lanKeys!.mobileNumber!.tr, + rightTitle: state.mobileStr.value, isHaveLine: true, isHaveDirection: true, action: () { - Navigator.pushNamed( - context, Routers.minePersonInfoEditAccountPage); - }), - CommonItem( + //有手机号 则去修改手机号 否则去绑定新的手机号 isFrom:1 短信,2 邮箱 + if (state.mobileStr.value.isNotEmpty) { + Navigator.pushNamed( + context, Routers.minePersonInfoEditAccountPage, + arguments: { + 'mobile': state.mobileStr.value, + 'isFrom': '1' + }); + } else { + Navigator.pushNamed( + context, Routers.minePersonInfoEditEmailPage, + arguments: { + 'mobile': state.mobileStr.value, + 'isFrom': '1' + }); + } + })), + Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.email!.tr, - rightTitle: "", + rightTitle: state.emailStr.value, isHaveLine: true, isHaveDirection: true, action: () { - Navigator.pushNamed( - context, Routers.minePersonInfoEditEmailPage); - }), + //有邮箱 则去修改邮箱 否则去绑定新的邮箱 isFrom:1 短信,2 邮箱 + if (state.emailStr.value.isNotEmpty) { + Navigator.pushNamed( + context, Routers.minePersonInfoEditAccountPage, + arguments: { + 'isFrom': '2', + 'email': state.emailStr.value + }); + } else { + Navigator.pushNamed( + context, Routers.minePersonInfoEditEmailPage, + arguments: { + 'isFrom': '2', + 'email': state.emailStr.value + }); + } + })), CommonItem( leftTitel: TranslationLoader.lanKeys!.resetPasswords!.tr, rightTitle: "", @@ -92,11 +132,11 @@ class _MinePersonInfoPageState extends State { Navigator.pushNamed( context, Routers.minePersonInfoSetSafetyProblemPage); }), - CommonItem( + Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr, - rightTitle: "中国", + rightTitle: state.countryStr.value, isHaveLine: false, - isHaveDirection: false), + isHaveDirection: false)), ], )); } diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart new file mode 100644 index 00000000..d124c4eb --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfo/minePersonInfo_state.dart @@ -0,0 +1,11 @@ +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/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart new file mode 100644 index 00000000..9e5e0e65 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_logic.dart @@ -0,0 +1,88 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +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/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(); + + late Timer _timer; + void _startTimer() { + _timer = Timer.periodic(1.seconds, (timer) { + if (state.currentSecond > 1) { + state.currentSecond--; + } else { + _cancelTimer(); + state.currentSecond = state.totalSeconds; + } + state.resetResend(); + }); + } + + void _cancelTimer() { + _timer.cancel(); + } + + //获取验证码请求 + 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, + state.xWidth.value.toString()); + if (entity.errorCode!.codeIsSuccessful) { + _startTimer(); + } else {} + } + + //删除账号请求 + Future deleteAccountRequest() async { + LoginEntity entity = await ApiRepository.to + .deleteAccount("", "", state.verificationCode.value); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: '验证成功,账号已删除'); + //删除账号成功, + Get.offNamedUntil(Routers.starLockLoginPage, (route) => false); + } + } + + void checkNext(TextEditingController controller) { + changeInput(controller); + } + + void changeInput(TextEditingController controller) { + if (controller == state.codeController) { + state.verificationCode.value = controller.text; + } + _resetCanSub(); + } + + void _resetCanSub() { + state.canSub.value = state.codeIsOK; + } + + @override + void onReady() { + super.onReady(); + } + + @override + void onInit() { + super.onInit(); + state.initLoginData(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart index da48fab7..2d73ea6c 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_page.dart @@ -1,6 +1,8 @@ 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/tools/tf_input_haveBorder.dart'; import '../../../../appRouters.dart'; import '../../../../app_settings/app_colors.dart'; @@ -18,7 +20,8 @@ class MinePersonInfoEditAccountPage extends StatefulWidget { class _MinePersonInfoEditAccountPageState extends State { - final TextEditingController _editAccountController = TextEditingController(); + final logic = Get.put(MineInfoEditAccountLogic()); + final state = Get.find().state; @override Widget build(BuildContext context) { @@ -38,96 +41,39 @@ class _MinePersonInfoEditAccountPageState TranslationLoader.lanKeys!.modifyAccountTip!.tr, style: TextStyle(fontSize: 20.sp), )), - Container( - padding: EdgeInsets.all(20.h), - height: 110.h, - child: TextField( - // maxLines: 1, - keyboardType: TextInputType.text, - // inputFormatters: inputFormatterstters??[], - controller: _editAccountController, - autofocus: false, - textAlign: TextAlign.start, - style: TextStyle( - height: 3.2, - fontSize: 22.sp, - fontWeight: FontWeight.w400, - color: const Color(0xFF333333)), - decoration: InputDecoration( - hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr, - hintStyle: TextStyle( - // height: 3.0, - fontSize: 22.sp, - color: const Color(0xFF999999)), - // labelText:"label", - labelStyle: const TextStyle(color: Color(0xFF999999)), - border: const OutlineInputBorder( - ///设置边框四个角的弧度 - borderRadius: BorderRadius.all(Radius.circular(10)), - - ///用来配置边框的样式 - borderSide: BorderSide( - ///设置边框的颜色 - color: Color(0xffD3D3D3), - - ///设置边框的粗细 - width: 1, - ), - ), - - ///设置输入框可编辑时的边框样式 - enabledBorder: const OutlineInputBorder( - ///设置边框四个角的弧度 - borderRadius: BorderRadius.all(Radius.circular(10)), - - ///用来配置边框的样式 - borderSide: BorderSide( - ///设置边框的颜色 - color: Color(0xffD3D3D3), - - ///设置边框的粗细 - width: 1, - ), - ), - disabledBorder: const OutlineInputBorder( - ///设置边框四个角的弧度 - borderRadius: BorderRadius.all(Radius.circular(10)), - - ///用来配置边框的样式 - borderSide: BorderSide( - ///设置边框的颜色 - color: Color(0xffD3D3D3), - - ///设置边框的粗细 - width: 1, - ), - ), - - ///用来配置输入框获取焦点时的颜色 - focusedBorder: const OutlineInputBorder( - ///设置边框四个角的弧度 - borderRadius: BorderRadius.all(Radius.circular(10)), - - ///用来配置边框的样式 - borderSide: BorderSide( - ///设置边框的颜色 - color: Color(0xffD3D3D3), - - ///设置边框的粗细 - width: 1, - ), - ), - ), - obscureText: false, - onChanged: (String value) {}, - ), - ), + Obx(() => Container( + padding: EdgeInsets.only( + left: 30.w, right: 30.w, top: 20.h, bottom: 10.h), + child: TFInputHaveBorder( + controller: state.codeController, + label: + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}", + rightSlot: GestureDetector( + child: Container( + width: 180.w, + height: 90.h, + padding: EdgeInsets.all(5.h), + margin: EdgeInsets.only(right: 10.w), + child: Center( + child: Text(state.btnText.value, + textAlign: TextAlign.center, + style: TextStyle( + color: AppColors.mainColor, + fontSize: 26.sp, + )), + ), + ), + onTap: () { + logic.sendValidationCode(); + }, + )))), SizedBox(height: 50.w), SubmitBtn( btnName: TranslationLoader.lanKeys!.next!.tr, onClick: () { Navigator.pushNamed( - context, Routers.minePersonInfoEditAccountNextPage); + context, Routers.minePersonInfoEditAccountNextPage, + arguments: {'isFrom': '1'}); }), SizedBox(height: 50.w), Row( diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart new file mode 100644 index 00000000..f8710490 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccount/minePersonInfoEditAccount_state.dart @@ -0,0 +1,65 @@ +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 { + 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 channel = '1'.obs; //短信通道 1 短信,2 邮箱 + var uniqueid = 'B748F838-94EE-4BDB-A0E6-7B2D16849792'.obs; + var verificationCode = ''.obs; + var xWidth = ''.obs; // 滑动验证码滑动位置 + var canSub = false.obs; + var date = currentTimeMillis().toString().obs; + + bool get codeIsOK => verificationCode.value.isNotEmpty; + + var canResend = false.obs; + var btnText = ''.obs; + 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() { + Map map = Get.arguments; + channel.value = map["isFrom"]; + + resetResend(); + } + + void resetResend() { + canResend.value = totalSeconds == currentSecond; + btnText.value = !canResend.value + ? '$currentSecond s' + : btnText.value = TranslationLoader.lanKeys!.getVerificationCode!.tr; + } + + void onClose() {} +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_logic.dart new file mode 100644 index 00000000..2d45cf7f --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_logic.dart @@ -0,0 +1,89 @@ +import 'dart:async'; + +import 'package:flutter/cupertino.dart'; +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/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_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 PersonInfoEditAccountLogic extends BaseGetXController { + final PersonInfoEditAccountState state = PersonInfoEditAccountState(); + + late Timer _timer; + void _startTimer() { + _timer = Timer.periodic(1.seconds, (timer) { + if (state.currentSecond > 1) { + state.currentSecond--; + } else { + _cancelTimer(); + state.currentSecond = state.totalSeconds; + } + state.resetResend(); + }); + } + + void _cancelTimer() { + _timer.cancel(); + } + + //获取验证码请求 + 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, + state.xWidth.value.toString()); + if (entity.errorCode!.codeIsSuccessful) { + _startTimer(); + } else {} + } + + //删除账号请求 + Future deleteAccountRequest() async { + LoginEntity entity = await ApiRepository.to + .deleteAccount("", "", state.verificationCode.value); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: '验证成功,账号已删除'); + //删除账号成功, + Get.offNamedUntil(Routers.starLockLoginPage, (route) => false); + } + } + + void checkNext(TextEditingController controller) { + changeInput(controller); + } + + void changeInput(TextEditingController controller) { + if (controller == state.codeController) { + state.verificationCode.value = controller.text; + } + _resetCanSub(); + } + + void _resetCanSub() { + state.canSub.value = state.codeIsOK; + } + + @override + void onReady() { + super.onReady(); + } + + @override + void onInit() { + super.onInit(); + state.initLoginData(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_page.dart index 4bf98f57..fc75d1fd 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_page.dart @@ -1,10 +1,7 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; - -import '../../../../appRouters.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_logic.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/submitBtn.dart'; import '../../../../tools/tf_input_haveBorder.dart'; @@ -21,9 +18,8 @@ class MinePersonInfoEditAccountNextPage extends StatefulWidget { class _MinePersonInfoEditAccountNextPageState extends State { - final TextEditingController _editAccountController = TextEditingController(); - late Timer _timer; - int _seconds = 60; + final logic = Get.put(PersonInfoEditAccountLogic()); + final state = Get.find().state; @override Widget build(BuildContext context) { @@ -45,10 +41,11 @@ class _MinePersonInfoEditAccountNextPageState TextStyle(fontWeight: FontWeight.w600, fontSize: 24.sp), )), Container( + height: 100.h, padding: EdgeInsets.only( left: 30.w, right: 30.w, top: 10.h, bottom: 10.h), child: TFInputHaveBorder( - controller: _editAccountController, + controller: state.accountController, label: TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr, ), ), @@ -56,9 +53,9 @@ class _MinePersonInfoEditAccountNextPageState padding: EdgeInsets.only( left: 30.w, right: 30.w, top: 20.h, bottom: 10.h), child: TFInputHaveBorder( - controller: _editAccountController, + controller: state.codeController, label: - "${TranslationLoader.lanKeys!.pleaseEnter!.tr} ${TranslationLoader.lanKeys!.verificationCode!.tr}", + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}", rightSlot: GestureDetector( child: Container( width: 180.w, @@ -71,11 +68,7 @@ class _MinePersonInfoEditAccountNextPageState // ), child: Center( child: Text( - _seconds == 60 - ? '${TranslationLoader.lanKeys!.getTip!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}' - : (_seconds < 10) - ? '0$_seconds s' - : '$_seconds s', + '${TranslationLoader.lanKeys!.getTip!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}', textAlign: TextAlign.center, style: TextStyle( color: Colors.grey, @@ -83,13 +76,7 @@ class _MinePersonInfoEditAccountNextPageState )), ), ), - onTap: () { - if (_seconds == 60) { - // _setVerify(); - } else { - // Toast.show(msg: '正在获取验证码'); - } - }, + onTap: () {}, )), ), SizedBox(height: 50.w), diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart new file mode 100644 index 00000000..72d5164c --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditAccount/minePersonInfoEditAccountNext/minePersonInfoEditAccountNext_state.dart @@ -0,0 +1,68 @@ +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 PersonInfoEditAccountState { + final TextEditingController accountController = TextEditingController(); + final TextEditingController codeController = TextEditingController(); + + static int currentTimeMillis() { + return DateTime.now().millisecondsSinceEpoch; + } + + var countryCode = '+86'.obs; + var countryId = '9'.obs; + var codeType = '3'.obs; //1注册,2找回密码,3绑定手机号,4解绑(换绑),5删除账号,6 绑定邮箱 + var channel = '1'.obs; //短信通道 1 短信,2 邮箱 + var uniqueid = 'B748F838-94EE-4BDB-A0E6-7B2D16849792'.obs; + var newAccountStr = ''.obs; + var verificationCode = ''.obs; + var xWidth = ''.obs; // 滑动验证码滑动位置 + var canSub = false.obs; + var date = currentTimeMillis().toString().obs; + + bool get accountIsOK => newAccountStr.value.isNotEmpty; + bool get codeIsOK => verificationCode.value.isNotEmpty; + + var canResend = false.obs; + var btnText = ''.obs; + 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)); + } + } + + PersonInfoEditAccountState() { + Map map = Get.arguments; + channel.value = map["isFrom"]; + + resetResend(); + } + + void resetResend() { + canResend.value = totalSeconds == currentSecond; + btnText.value = !canResend.value + ? '$currentSecond s' + : btnText.value = TranslationLoader.lanKeys!.getVerificationCode!.tr; + } + + void onClose() {} +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditNamePage_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditNamePage_state.dart new file mode 100644 index 00000000..6b219c12 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditNamePage_state.dart @@ -0,0 +1,15 @@ +import 'package:flutter/cupertino.dart'; +import 'package:get/get.dart'; + +class MinePersonInfoEditNamePageState { + final TextEditingController nickNameController = TextEditingController(); + + final inputNickName = ''.obs; + var canSub = false.obs; + bool get nickNameIsOK => inputNickName.value.isNotEmpty; + + MinePersonInfoEditNamePageState() { + Map map = Get.arguments; + inputNickName.value = map["nickName"]; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditName_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditName_logic.dart new file mode 100644 index 00000000..1e7a11d3 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditName_logic.dart @@ -0,0 +1,43 @@ +import 'dart:async'; +import 'package:flutter/cupertino.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditName/MinePersonInfoEditNamePage_state.dart'; +import 'package:star_lock/tools/toast.dart'; +import '../../../../network/api_repository.dart'; +import '../../../../tools/baseGetXController.dart'; + +class MinePersonInfoEditNameLogic extends BaseGetXController { + final MinePersonInfoEditNamePageState state = + MinePersonInfoEditNamePageState(); + //更新个人信息-昵称 + Future updateUserInfoRequest() async { + var entity = + await ApiRepository.to.updateUserInfo(state.inputNickName.value); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: '操作成功'); + Get.back(); + } + } + + void checkNext(TextEditingController controller) { + changeInput(controller); + } + + void changeInput(TextEditingController controller) { + if (controller == state.nickNameController) { + state.inputNickName.value = controller.text; + } + _resetCanSub(); + } + + void _resetCanSub() { + state.canSub.value = state.nickNameIsOK; + } + + @override + void onInit() { + super.onInit(); + + state.nickNameController.text = state.inputNickName.value; + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/minePersonInfoEditName_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/minePersonInfoEditName_page.dart index c6d791e5..d5a13575 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/minePersonInfoEditName_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEditName/minePersonInfoEditName_page.dart @@ -1,6 +1,9 @@ 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/minePersonInfoEditName/MinePersonInfoEditName_logic.dart'; +import 'package:star_lock/tools/toast.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/tf_loginInput.dart'; @@ -17,8 +20,8 @@ class MinePersonInfoEditNamePage extends StatefulWidget { class _MinePersonInfoEditNamePageState extends State { - final TextEditingController _changeNickNameController = - TextEditingController(); + final logic = Get.put(MinePersonInfoEditNameLogic()); + final state = Get.find().state; @override Widget build(BuildContext context) { @@ -34,7 +37,13 @@ class _MinePersonInfoEditNamePageState TranslationLoader.lanKeys!.save!.tr, style: TextStyle(color: Colors.white, fontSize: 24.sp), ), - onPressed: () {}, + onPressed: () { + if (state.nickNameIsOK == false) { + Toast.show(msg: '请输入昵称'); + } else { + logic.updateUserInfoRequest(); + } + }, ), ], ), @@ -43,13 +52,16 @@ class _MinePersonInfoEditNamePageState child: Column( children: [ LoginInput( - controller: _changeNickNameController, - isPwd: true, + controller: state.nickNameController, + onchangeAction: (textStr) { + logic.checkNext(state.nickNameController); + }, + isPwd: false, leftWidget: SizedBox(width: 15.w), hintText: - "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.accountNumber!.tr}", + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.nickName!.tr}", inputFormatters: [ - // LengthLimitingTextInputFormatter(20), + LengthLimitingTextInputFormatter(20), ]), ], ), diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart new file mode 100644 index 00000000..7023c995 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_logic.dart @@ -0,0 +1,102 @@ +import 'dart:async'; + +import 'package:flutter/cupertino.dart'; +import 'package:get/get.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/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(); + + late Timer _timer; + void _startTimer() { + _timer = Timer.periodic(1.seconds, (timer) { + if (state.currentSecond > 1) { + state.currentSecond--; + } else { + _cancelTimer(); + state.currentSecond = state.totalSeconds; + } + state.resetResend(); + }); + } + + void _cancelTimer() { + _timer.cancel(); + } + + //获取验证码请求 + void sendValidationCode() async { + var entity = await ApiRepository.to.getValidationCodeAuth( + state.countryCode.value, + state.inputAccount.value, + state.channel.value, + state.codeType.value, + state.uniqueid.value, + state.xWidth.value.toString()); + if (entity.errorCode!.codeIsSuccessful) { + _startTimer(); + } + } + + //绑定邮箱请求 + Future bindEmailRequest() async { + PasswordKeyListEntity entity = await ApiRepository.to.bindEmail( + state.inputAccount.value, '', state.verificationCode.value, ''); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: '邮箱绑定成功'); + Get.back(); + } + } + + //绑定手机请求 + Future bindMobileRequest() async { + PasswordKeyListEntity entity = await ApiRepository.to.changeAccount( + state.countryCode.value, + state.inputAccount.value, + state.uniqueid.value, + state.verificationCode.value); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: '手机绑定成功'); + Get.back(); + } + } + + void checkNext(TextEditingController controller) { + changeInput(controller); + } + + void changeInput(TextEditingController controller) { + if (controller == state.accountController) { + state.inputAccount.value = controller.text; + state.accountIsOK.value = state.inputAccount.value.isNotEmpty; + } + if (controller == state.codeController) { + state.verificationCode.value = controller.text; + } + + _resetCanSub(); + } + + void _resetCanSub() { + state.canSub.value = state.codeIsOK; + } + + @override + void onReady() { + super.onReady(); + } + + @override + void onInit() { + super.onInit(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart index 8615a9a3..8caa6eed 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart @@ -1,10 +1,9 @@ -import 'dart:async'; - 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 '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/submitBtn.dart'; import '../../../tools/tf_loginInput.dart'; @@ -21,10 +20,8 @@ class MinePersonInfoEditEmailPage extends StatefulWidget { class _MinePersonInfoEditEmailPageState extends State { - final TextEditingController _phoneController = TextEditingController(); - final TextEditingController _codeController = TextEditingController(); - late Timer _timer; - int _seconds = 60; + final logic = Get.put(MinePersonInfoEmailLogic()); + final state = Get.find().state; @override Widget build(BuildContext context) { @@ -46,70 +43,84 @@ class _MinePersonInfoEditEmailPageState style: TextStyle(fontSize: 20.sp), )), LoginInput( - controller: _phoneController, - isPwd: true, + controller: state.accountController, + isPwd: false, + onchangeAction: (textStr) { + logic.checkNext(state.accountController); + }, leftWidget: const SizedBox(), hintText: "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.email!.tr}", inputFormatters: [ - // LengthLimitingTextInputFormatter(20), + LengthLimitingTextInputFormatter(20), ]), SizedBox(height: 10.w), Row( children: [ Expanded( child: LoginInput( - controller: _codeController, - isPwd: true, + controller: state.codeController, + isPwd: false, leftWidget: const SizedBox(), + onchangeAction: (textStr) { + logic.checkNext(state.codeController); + }, hintText: "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}", inputFormatters: [ - // LengthLimitingTextInputFormatter(20), + LengthLimitingTextInputFormatter(20), ]), ), SizedBox( width: 20.w, ), - GestureDetector( - child: Container( - width: 140.w, - // height: 60.h, - padding: EdgeInsets.all(8.h), - decoration: BoxDecoration( - color: AppColors.mainColor, - borderRadius: BorderRadius.circular(5)), - child: Center( - child: Text( - _seconds == 60 - ? '${TranslationLoader.lanKeys!.getTip!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}' - : (_seconds < 10) - ? '0$_seconds s' - : '$_seconds s', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 22.sp, - )), - ), - ), - onTap: () { - if (_seconds == 60) { - // _setVerify(); - } else { - // Toast.show(msg: '正在获取验证码'); - } - }, - ) + Obx(() => GestureDetector( + child: Container( + width: 180.w, + height: 60.h, + padding: EdgeInsets.all(5.h), + decoration: BoxDecoration( + color: state.accountIsOK.value + ? AppColors.mainColor + : AppColors.btnDisableColor, + borderRadius: BorderRadius.circular(5)), + child: Center( + child: Text(state.btnText.value, + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 24.sp, + )), + ), + ), + onTap: () { + if (state.accountIsOK.value) { + logic.sendValidationCode(); + } + }, + )) ], ), SizedBox(height: 50.w), - SubmitBtn( - btnName: TranslationLoader.lanKeys!.sure!.tr, - fontSize: 28.sp, - borderRadius: 20.w, - padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: () {}), + Obx(() { + return SubmitBtn( + btnName: TranslationLoader.lanKeys!.sure!.tr, + fontSize: 30.sp, + borderRadius: 20.w, + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + isDisabled: state.canSub.value, + onClick: state.canSub.value + ? () { + if (state.accountIsOK.value && state.codeIsOK) { + if (state.channel.value == "1") { + logic.bindMobileRequest(); + } else { + logic.bindEmailRequest(); + } + } + } + : null); + }), ], ), )); diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart new file mode 100644 index 00000000..f5f9f202 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_state.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/translations/trans_lib.dart'; + +class MinePersonInfoEmailState { + final TextEditingController accountController = TextEditingController(); + 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 channel = '1'.obs; //短信通道 1 短信,2 邮箱 + var uniqueid = 'B748F838-94EE-4BDB-A0E6-7B2D16849792'.obs; + var verificationCode = ''.obs; + var xWidth = ''.obs; // 滑动验证码滑动位置 + var canSub = false.obs; + var date = currentTimeMillis().toString().obs; + var inputAccount = ''.obs; //新账号 + + var accountIsOK = false.obs; + bool get codeIsOK => verificationCode.value.isNotEmpty; + + var canResend = false.obs; + var btnText = ''.obs; + var totalSeconds = 120; + var currentSecond = 120; + + MinePersonInfoEmailState() { + Map map = Get.arguments; + channel.value = map["isFrom"]; + //短信通道 1 短信,2 邮箱 + //短信类型 1注册,2找回密码,3绑定手机号,4解绑(换绑),5删除账号,6 绑定邮箱 + if (channel.value == "1") { + codeType.value = "3"; + } else { + codeType.value = "6"; + } + + resetResend(); + } + + void resetResend() { + canResend.value = totalSeconds == currentSecond; + btnText.value = !canResend.value + ? '$currentSecond s' + : btnText.value = TranslationLoader.lanKeys!.getVerificationCode!.tr; + } + + void onClose() {} +} diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart new file mode 100644 index 00000000..11be7803 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart @@ -0,0 +1,46 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_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 MinePersonInfoResetPasswordLogic extends BaseGetXController { + final MinePersonInfoResetPasswordState state = + MinePersonInfoResetPasswordState(); + + void changePasswordRequest() async { + var entity = await ApiRepository.to.changePassword( + state.date.value, state.surePwd.value, state.oldPwd.value, ""); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: '重置成功'); + Get.back(); + } else { + print('Error'); + } + } + + void checkNext(TextEditingController controller) { + changeInput(controller); + } + + void changeInput(TextEditingController controller) { + if (controller == state.oldPwdController) { + state.oldPwd.value = controller.text; + } + if (controller == state.newPwdController) { + state.newPwd.value = controller.text; + } + if (controller == state.surePwdController) { + state.surePwd.value = controller.text; + } + _resetCanSub(); + } + + 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 915c6def..7598fafc 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_page.dart @@ -1,6 +1,8 @@ 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/minePersonInfoResetPassword/minePersonInfoResetPassword_logic.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; @@ -19,9 +21,8 @@ class MinePersonInfoResetPasswordPage extends StatefulWidget { class _MinePersonInfoResetPasswordPageState extends State { - final TextEditingController _oldPwdController = TextEditingController(); - final TextEditingController _newPwdController = TextEditingController(); - final TextEditingController _surePwdController = TextEditingController(); + final logic = Get.put(MinePersonInfoResetPasswordLogic()); + final state = Get.find().state; @override Widget build(BuildContext context) { @@ -36,7 +37,7 @@ class _MinePersonInfoResetPasswordPageState child: Column( children: [ LoginInput( - controller: _oldPwdController, + controller: state.oldPwdController, isPwd: true, leftWidget: Text( "${TranslationLoader.lanKeys!.originalPassword!.tr} ", @@ -44,10 +45,10 @@ class _MinePersonInfoResetPasswordPageState ), hintText: "", inputFormatters: [ - // LengthLimitingTextInputFormatter(20), + LengthLimitingTextInputFormatter(20), ]), LoginInput( - controller: _newPwdController, + controller: state.newPwdController, isPwd: true, leftWidget: Text( "${TranslationLoader.lanKeys!.newPassword!.tr} ", @@ -55,10 +56,10 @@ class _MinePersonInfoResetPasswordPageState ), hintText: "", inputFormatters: [ - // LengthLimitingTextInputFormatter(20), + LengthLimitingTextInputFormatter(20), ]), LoginInput( - controller: _surePwdController, + controller: state.surePwdController, isPwd: true, // isHaveLeftWidget: false, leftWidget: Text( @@ -67,7 +68,7 @@ class _MinePersonInfoResetPasswordPageState ), hintText: "", inputFormatters: [ - // LengthLimitingTextInputFormatter(20), + LengthLimitingTextInputFormatter(20), ]), Container( width: 1.sw, @@ -77,12 +78,12 @@ class _MinePersonInfoResetPasswordPageState style: TextStyle( fontSize: 18.w, color: AppColors.darkGrayTextColor))), SizedBox(height: 50.w), - SubmitBtn( + Obx(() => SubmitBtn( btnName: TranslationLoader.lanKeys!.save!.tr, fontSize: 30.sp, borderRadius: 20.w, padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: () {}), + onClick: () {})), 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 new file mode 100644 index 00000000..bfb97b83 --- /dev/null +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassword_state.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class MinePersonInfoResetPasswordState { + final TextEditingController oldPwdController = TextEditingController(); + final TextEditingController newPwdController = TextEditingController(); + final TextEditingController surePwdController = TextEditingController(); + + static int currentTimeMillis() { + return DateTime.now().millisecondsSinceEpoch; + } + + var oldPwd = ''.obs; + var newPwd = ''.obs; + var surePwd = ''.obs; + var canSub = false.obs; + var date = currentTimeMillis().toString().obs; + + bool get oldPwdIsOK => oldPwd.value.isNotEmpty; + 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_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_logic.dart new file mode 100644 index 00000000..e69de29b diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart index f8a23dd4..0c00e267 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart @@ -5,7 +5,6 @@ import 'package:get/get.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/commonItem.dart'; import '../../../tools/submitBtn.dart'; -import '../../../tools/tf_loginInput.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_state.dart new file mode 100644 index 00000000..e69de29b diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index d3acbcf6..bc2f2729 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -123,4 +123,10 @@ abstract class Api { final String userLogoutURL = '/user/logout'; //退出登录 final String deleteAccountURL = '/user/delete'; //删除账号 final String getUserInfoURL = '/user/getUserInfo'; //获取个人信息 + final String getValidationCodeAuthURL = + '/user/sendValidationCodeAuth'; //登录后使用,免图片滑动验证 + final String updateUserInfoURL = '/user/updateUserInfo'; //更新个人信息-昵称/头像 + final String changeAccountURL = '/user/changeAccount'; //修改账号 + final String bindEmailURL = '/user/bindEmail'; //绑定邮箱 + final String changePasswordURL = '/user/changePassword'; //修改密码 } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 963c5bdf..11f28c35 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -255,24 +255,19 @@ class ApiProvider extends BaseProvider { })); // 锁记录上传 - Future lockRecordUploadData( - String lockId, - List records) => - post( - lockRecordUploadURL.toUrl, - jsonEncode({ - 'lockId': lockId, - 'records': records, - })); + Future lockRecordUploadData(String lockId, List records) => post( + lockRecordUploadURL.toUrl, + jsonEncode({ + 'lockId': lockId, + 'records': records, + })); // 查询锁记录最后时间 - Future getLockRecordLastUploadDataTime( - String lockId) => - post( - getLockRecordLastUploadDataTimeURL.toUrl, - jsonEncode({ - 'lockId': lockId, - })); + Future getLockRecordLastUploadDataTime(String lockId) => post( + getLockRecordLastUploadDataTimeURL.toUrl, + jsonEncode({ + 'lockId': lockId, + })); // 绑定蓝牙管理员 Future bindingBlueAdmin( @@ -1157,6 +1152,60 @@ class ApiProvider extends BaseProvider { // 重置密码钥匙 Future keyboardPwdReset(String lockId) => post(keyboardPwdResetURL.toUrl, jsonEncode({'lockId': lockId})); + +//登陆后可使用获取验证码,免图片滑动验证 + Future getValidationCodeAuth(String countryCode, String account, + String channel, String codeType, String uniqueid, String xWidth) => + post( + getValidationCodeAuthURL.toUrl, + jsonEncode({ + 'countryCode': countryCode, + 'account': account, + "channel": channel, + 'codeType': codeType, + "uniqueid": uniqueid, + 'xWidth': xWidth, + })); + + //更新个人信息-头像/昵称 + Future updateUserInfo(String nickname) => + post(updateUserInfoURL.toUrl, jsonEncode({'nickname': nickname})); + + //修改账号 + Future changeAccount(String countryCode, String newAccount, + String uniqueid, String verificationCode) => + post( + changeAccountURL.toUrl, + jsonEncode({ + 'countryCode': countryCode, + 'newAccount': newAccount, + 'uniqueid': uniqueid, + 'verificationCode': verificationCode + })); + + //绑定邮箱 + Future bindEmail(String email, String uniqueid, + String verificationCode, String operatorUid) => + post( + bindEmailURL.toUrl, + jsonEncode({ + 'email': email, + 'uniqueid': uniqueid, + 'verificationCode': verificationCode, + 'operatorUid': operatorUid + })); + +//修改密码 + Future changePassword(String date, String newPassword, + String oldPassword, String operatorUid) => + post( + changePasswordURL.toUrl, + jsonEncode({ + "date": date, + 'newPassword': newPassword, + "oldPassword": oldPassword, + 'operatorUid': operatorUid + })); } extension ExtensionString on String { diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index 69c4f077..0cc09316 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -7,6 +7,7 @@ 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/mineSet/appUnlockNeedMobileNetworkingLock/selectLockListEntity.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetailEntity.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/authorizedAdminListEntity.dart'; @@ -211,23 +212,15 @@ class ApiRepository { //操作记录上传 Future lockRecordUploadData( - { - required String lockId, - required List records - }) async { - final res = await apiProvider.lockRecordUploadData( - lockId, - records); + {required String lockId, required List records}) async { + final res = await apiProvider.lockRecordUploadData(lockId, records); return KeyOperationRecordEntity.fromJson(res.body); } // 查询锁记录最后时间 - Future getLockRecordLastUploadDataTime( - { - required String lockId - }) async { - final res = await apiProvider.getLockRecordLastUploadDataTime( - lockId); + Future + getLockRecordLastUploadDataTime({required String lockId}) async { + final res = await apiProvider.getLockRecordLastUploadDataTime(lockId); return LockOperatingRecordGetLastRecordTimeEntity.fromJson(res.body); } @@ -1134,17 +1127,17 @@ class ApiRepository { } //删除账号 - Future deleteAccount( + Future deleteAccount( String operatorUid, String uniqueid, String verificationCode) async { final res = await apiProvider.deleteAccount( operatorUid, uniqueid, verificationCode); - return AuthorizedAdminListEntity.fromJson(res.body); + return LoginEntity.fromJson(res.body); } //获取个人信息 - Future getUserInfo(String operatorUid) async { + Future getUserInfo(String operatorUid) async { final res = await apiProvider.getUserInfo(operatorUid); - return AuthorizedAdminListEntity.fromJson(res.body); + return MinePersonInfoEntity.fromJson(res.body); } //重置密码钥匙 @@ -1152,4 +1145,47 @@ class ApiRepository { final res = await apiProvider.keyboardPwdReset(lockId); return PasswordKeyListEntity.fromJson(res.body); } + + // 发送验证码 2、登陆后可使用 sendValidationCodeAuth 接口,免图片滑动验证 5删除账号 + Future getValidationCodeAuth( + String countryCode, + String account, + String channel, + String codeType, + String uniqueid, + String xWidth) async { + final res = await apiProvider.getValidationCodeAuth( + countryCode, account, channel, codeType, uniqueid, xWidth); + return SendValidationCodeEntity.fromJson(res.body); + } + + //更新个人信息-头像/昵称 + Future updateUserInfo(String nickname) async { + final res = await apiProvider.updateUserInfo(nickname); + 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); + 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); + return PasswordKeyListEntity.fromJson(res.body); + } + + //重置密码 + Future changePassword(String date, String newPassword, + String oldPassword, String operatorUid) async { + final res = await apiProvider.changePassword( + date, newPassword, oldPassword, operatorUid); + return LoginEntity.fromJson(res.body); + } } diff --git a/star_lock/lib/tools/tf_input_haveBorder.dart b/star_lock/lib/tools/tf_input_haveBorder.dart index 96e7b3a3..ae88d61b 100644 --- a/star_lock/lib/tools/tf_input_haveBorder.dart +++ b/star_lock/lib/tools/tf_input_haveBorder.dart @@ -8,7 +8,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; * */ class TFInputHaveBorder extends StatelessWidget { - TextEditingController? controller; List? inputFormatters; TextInputType? keyboardType; @@ -18,7 +17,18 @@ class TFInputHaveBorder extends StatelessWidget { String? label; bool? isPwd; Widget? rightSlot; - TFInputHaveBorder({Key? key, required this.controller,this.rightSlot,this.label,this.isPwd,this.inputFormatters,this.keyboardType,this.background,this.hintText, this.leftImg}) : super(key: key); + TFInputHaveBorder( + {Key? key, + required this.controller, + this.rightSlot, + this.label, + this.isPwd, + this.inputFormatters, + this.keyboardType, + this.background, + this.hintText, + this.leftImg}) + : super(key: key); @override Widget build(BuildContext context) { @@ -29,39 +39,47 @@ class TFInputHaveBorder extends StatelessWidget { maxLines: 1, keyboardType: TextInputType.text, // inputFormatters: inputFormatterstters??[], - controller:controller, + controller: controller, autofocus: false, textAlign: TextAlign.start, - style:TextStyle(height: 1.1, fontSize: 30.sp, fontWeight: FontWeight.w400, color: const Color(0xFF333333)), + style: TextStyle( + height: 1.1, + fontSize: 24.sp, + fontWeight: FontWeight.w400, + color: const Color(0xFF333333)), decoration: InputDecoration( hintText: label, hintStyle: TextStyle( height: 1.1, - fontSize: 30.sp, + fontSize: 24.sp, fontWeight: FontWeight.w400, - color: const Color(0xFF999999) - ), + color: const Color(0xFF999999)), // labelText:"label", labelStyle: const TextStyle(color: Color(0xFF999999)), border: const OutlineInputBorder( ///设置边框四个角的弧度 borderRadius: BorderRadius.all(Radius.circular(10)), + ///用来配置边框的样式 borderSide: BorderSide( ///设置边框的颜色 color: Color(0xffD3D3D3), + ///设置边框的粗细 width: 1, ), ), + ///设置输入框可编辑时的边框样式 enabledBorder: const OutlineInputBorder( ///设置边框四个角的弧度 borderRadius: BorderRadius.all(Radius.circular(10)), + ///用来配置边框的样式 borderSide: BorderSide( ///设置边框的颜色 color: Color(0xffD3D3D3), + ///设置边框的粗细 width: 1, ), @@ -69,33 +87,36 @@ class TFInputHaveBorder extends StatelessWidget { disabledBorder: const OutlineInputBorder( ///设置边框四个角的弧度 borderRadius: BorderRadius.all(Radius.circular(10)), + ///用来配置边框的样式 borderSide: BorderSide( ///设置边框的颜色 color: Color(0xffD3D3D3), + ///设置边框的粗细 width: 1, ), ), + ///用来配置输入框获取焦点时的颜色 focusedBorder: const OutlineInputBorder( ///设置边框四个角的弧度 borderRadius: BorderRadius.all(Radius.circular(10)), + ///用来配置边框的样式 borderSide: BorderSide( ///设置边框的颜色 color: Color(0xffD3D3D3), + ///设置边框的粗细 width: 1, ), ), ), - obscureText:false, - onChanged: (String value){ - - }, + obscureText: false, + onChanged: (String value) {}, ), - rightSlot??const SizedBox(width: 0,height: 0) + rightSlot ?? const SizedBox(width: 0, height: 0) ], ); } diff --git a/star_lock/lib/translations/lanKeyEntity.dart b/star_lock/lib/translations/lanKeyEntity.dart index b2c895fc..057043f5 100644 --- a/star_lock/lib/translations/lanKeyEntity.dart +++ b/star_lock/lib/translations/lanKeyEntity.dart @@ -311,6 +311,7 @@ class LanKeyEntity { this.registerPasswordTip, this.iphone, this.email, + this.mobileNumber, this.countryAndRegion, this.selet, this.businessCooperation, @@ -734,6 +735,7 @@ class LanKeyEntity { registerPasswordTip = json['registerPasswordTip']; iphone = json['iphone']; email = json['email']; + mobileNumber = json['mobileNumber']; countryAndRegion = json['countryAndRegion']; selet = json['selet']; @@ -1158,6 +1160,7 @@ class LanKeyEntity { String? registerPasswordTip; String? iphone; String? email; + String? mobileNumber; String? countryAndRegion; String? selet; @@ -1587,6 +1590,7 @@ class LanKeyEntity { map['registerPasswordTip'] = registerPasswordTip; map['iphone'] = iphone; map['email'] = email; + map['mobileNumber'] = mobileNumber; map['countryAndRegion'] = countryAndRegion; map['selet'] = selet;