diff --git a/star_lock/images/icon_main_xhj_1024.png b/star_lock/images/icon_main_xhj_1024.png new file mode 100644 index 00000000..8aa598c7 Binary files /dev/null and b/star_lock/images/icon_main_xhj_1024.png differ diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index f305a651..2c32a5fc 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -787,5 +787,10 @@ "下载列表":"Download list", "已下载":"Downloaded", "全部视频":"All videos", - "已为本设备免费提供3大滚动视频储存服务":"Three scrolling video storage services have been provided for this device free of charge" + "已为本设备免费提供3大滚动视频储存服务":"Three scrolling video storage services have been provided for this device free of charge", + "视频播放":"Video playback", + "全选":"Select all", + "请选择要删除的视频":"Please select the video you want to delete", + "请选择要下载的视频":"Please select the video you want to download", + "欢迎使用":"Welcome to use" } diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 138a623c..2f60d178 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -786,5 +786,10 @@ "下载列表":"下载列表", "已下载":"已下载", "全部视频":"全部视频", - "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务" + "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务", + "视频播放":"视频播放", + "全选":"全选", + "请选择要删除的视频":"请选择要删除的视频", + "请选择要下载的视频":"请选择要下载的视频", + "欢迎使用":"欢迎使用" } diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index c3ad187a..622abcce 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -789,5 +789,10 @@ "下载列表":"下载列表", "已下载":"已下载", "全部视频":"全部视频", - "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务" + "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务", + "视频播放":"视频播放", + "全选":"全选", + "请选择要删除的视频":"请选择要删除的视频", + "请选择要下载的视频":"请选择要下载的视频", + "欢迎使用":"欢迎使用" } diff --git a/star_lock/lib/appRouters.dart b/star_lock/lib/appRouters.dart index 9f85ee13..f103b9a8 100644 --- a/star_lock/lib/appRouters.dart +++ b/star_lock/lib/appRouters.dart @@ -1,7 +1,10 @@ import 'package:get/get.dart'; import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart'; import 'package:star_lock/flavors.dart'; +import 'package:star_lock/login/forgetPassword/starLock_forgetPassword_xhj_page.dart'; +import 'package:star_lock/login/login/starLock_login_xhj_page.dart'; import 'package:star_lock/login/register/starLock_register_binding.dart'; +import 'package:star_lock/login/register/starLock_register_xhj_page.dart'; import 'package:star_lock/main/lockDetail/accessoriesList/accessoriesList_page.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_page.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_page.dart'; @@ -564,15 +567,21 @@ abstract class AppRouters { ), GetPage( name: Routers.starLockLoginPage, - page: () => const StarLockLoginPage(), + page: () => F.sw( + defaultCall: () => const StarLockLoginPage(), + xhjCall: () => const StarLockLoginXHJPage()), ), GetPage( name: Routers.starLockRegisterPage, - page: () => const StarLockRegisterPage(), + page: () => F.sw( + defaultCall: () => const StarLockRegisterPage(), + xhjCall: () => const StarLockRegisterXHJPage()), binding: StarLockRegisterBinding()), GetPage( name: Routers.starLockForgetPasswordPage, - page: () => const StarLockForgetPasswordPage(), + page: () => F.sw( + defaultCall: () => const StarLockForgetPasswordPage(), + xhjCall: () => const StarLockForgetPasswordXHJPage()), ), GetPage( name: Routers.selectCountryRegionPage, @@ -1011,9 +1020,7 @@ abstract class AppRouters { // GetPage( // name: Routers.addCardTypeManagePage, // page: () => const AddCardTypeManagePage()), - GetPage( - name: Routers.addCardPage, - page: () => const AddCardPage()), + GetPage(name: Routers.addCardPage, page: () => const AddCardPage()), GetPage(name: Routers.cardDetailPage, page: () => const CardDetailPage()), GetPage( name: Routers.fingerprintListPage, @@ -1025,9 +1032,7 @@ abstract class AppRouters { name: Routers.fingerprintDetailPage, page: () => const FingerprintDetailPage()), GetPage(name: Routers.faceListPage, page: () => const FaceListPage()), - GetPage( - name: Routers.addFaceTypePage, - page: () => const AddFaceTypePage()), + GetPage(name: Routers.addFaceTypePage, page: () => const AddFaceTypePage()), GetPage( name: Routers.passwordKeyDetailChangeDatePage, page: () => const PasswordKeyDetailChangeDatePage()), diff --git a/star_lock/lib/login/forgetPassword/starLock_forgetPassword_xhj_page.dart b/star_lock/lib/login/forgetPassword/starLock_forgetPassword_xhj_page.dart new file mode 100644 index 00000000..013aa9c2 --- /dev/null +++ b/star_lock/lib/login/forgetPassword/starLock_forgetPassword_xhj_page.dart @@ -0,0 +1,200 @@ +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/appRouters.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/login/forgetPassword/starLock_forgetPassword_logic.dart'; +import 'package:star_lock/tools/submitBtn.dart'; +import 'package:star_lock/tools/tf_loginInput.dart'; +import 'package:star_lock/tools/titleAppBar.dart'; +import 'package:star_lock/translations/trans_lib.dart'; + +class StarLockForgetPasswordXHJPage extends StatefulWidget { + const StarLockForgetPasswordXHJPage({Key? key}) : super(key: key); + + @override + State createState() => + _StarLockForgetPasswordPageState(); +} + +class _StarLockForgetPasswordPageState + extends State { + final logic = Get.put(StarLockForgetPasswordLogic()); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + return Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: const Color(0xFFFFFFFF), + appBar: TitleAppBar( + barTitle: "忘记密码".tr, + haveBack: true, + iconColor: AppColors.blackColor, + titleColor: AppColors.blackColor, + backgroundColor: Colors.white), + body: ListView( + padding: EdgeInsets.only(left: 40.w, right: 40.w), + children: [ + GestureDetector( + onTap: () async { + var result = await Navigator.pushNamed( + context, Routers.selectCountryRegionPage); + if (result != null) { + result as Map; + state.countryCode.value = result['code']; + state.countryName.value = result['countryName']; + } + }, + child: SizedBox( + height: 70.h, + child: Row( + children: [ + SizedBox(width: 5.w), + Text(TranslationLoader.lanKeys!.countryAndRegion!.tr, + style: TextStyle( + fontSize: 26.sp, color: AppColors.blackColor)), + SizedBox(width: 60.w), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Obx(() => Text( + '${state.countryName} +${state.countryCode}', + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 26.sp, color: AppColors.mainColor), + )) + ], + ), + ], + ), + ), + ), + Container( + height: 0.5.h, + color: Colors.grey, + ), + LoginInput( + controller: state.phoneController, + onchangeAction: (v) { + logic.checkNext(state.phoneController); + }, + leftWidget: Padding( + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 5.w), + ), + label: + TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr, + keyboardType: TextInputType.number, + inputFormatters: [ + LengthLimitingTextInputFormatter(30), + ]), + LoginInput( + controller: state.pwdController, + onchangeAction: (v) { + logic.checkNext(state.pwdController); + }, + isPwd: true, + leftWidget: Padding( + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 5.w), + ), + label: + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.password!.tr}", + inputFormatters: [ + LengthLimitingTextInputFormatter(20), + ]), + Text( + TranslationLoader.lanKeys!.registerPasswordTip!.tr, + style: TextStyle( + color: AppColors.placeholderTextColor, fontSize: 20.sp), + ), + LoginInput( + controller: state.sureController, + onchangeAction: (v) { + logic.checkNext(state.sureController); + }, + isPwd: true, + leftWidget: Padding( + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 5.w), + ), + label: + "${TranslationLoader.lanKeys!.sure!.tr}${TranslationLoader.lanKeys!.password!.tr}", + inputFormatters: [ + LengthLimitingTextInputFormatter(20), + ]), + Row( + children: [ + Expanded( + child: LoginInput( + controller: state.codeController, + onchangeAction: (v) { + logic.checkNext(state.codeController); + }, + leftWidget: Padding( + padding: EdgeInsets.only(right: 10.w, left: 5.w), + ), + hintText: + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}", + inputFormatters: [ + LengthLimitingTextInputFormatter(20), + ]), + ), + Obx(() => GestureDetector( + onTap: (state.phoneStrIsOK.value && state.canResend.value) + ? () async { + var result = await Navigator.pushNamed( + context, Routers.safetyVerificationPage, + arguments: { + "countryCode": state.countryCode.value, + "account": state.phoneStr.value + }); + logic.state.xWidth.value = + (result as Map)['xWidth']; + logic.sendValidationCode(); + } + : null, + child: Container( + width: 180.w, + padding: EdgeInsets.all(10.h), + child: Center( + child: Text(state.btnText.value, + textAlign: TextAlign.center, + style: TextStyle( + color: AppColors.mainColor, + fontSize: 24.sp, + )), + ), + ), + )), + SizedBox( + width: 10.w, + ), + ], + ), + // ], + // ), + SizedBox(height: 50.w), + Obx(() { + return SubmitBtn( + btnName: + "${TranslationLoader.lanKeys!.reset!.tr}${TranslationLoader.lanKeys!.password!.tr}", + // backgroundColorList: state.canSub.value ? [AppColors.mainColor] :[Colors.grey], + fontSize: 30.sp, + borderRadius: 20.w, + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + isDisabled: state.canSub.value, + onClick: state.canSub.value + ? () { + logic.resetPassword(); + } + : null); + }), + ], + )); + } +} diff --git a/star_lock/lib/login/login/starLock_login_xhj_page.dart b/star_lock/lib/login/login/starLock_login_xhj_page.dart new file mode 100644 index 00000000..15ac2e42 --- /dev/null +++ b/star_lock/lib/login/login/starLock_login_xhj_page.dart @@ -0,0 +1,337 @@ +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/flavors.dart'; + +import '../../appRouters.dart'; +import '../../app_settings/app_colors.dart'; +import '../../common/XSConstantMacro/XSConstantMacro.dart'; +import '../../tools/commonItem.dart'; +import '../../tools/tf_loginInput.dart'; +import '../../tools/submitBtn.dart'; +import '../../tools/titleAppBar.dart'; +import '../../translations/trans_lib.dart'; +import 'starLock_login_logic.dart'; + +class StarLockLoginXHJPage extends StatefulWidget { + const StarLockLoginXHJPage({Key? key}) : super(key: key); + + @override + State createState() => _StarLockLoginPageState(); +} + +class _StarLockLoginPageState extends State { + final logic = Get.put(StarLockLoginLogic()); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + return Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: const Color(0xFFFFFFFF), + body: ListView( + padding: EdgeInsets.only(top: 120.h, left: 40.w, right: 40.w), + children: [ + Text( + '${"欢迎使用".tr}${F.title}', + style: TextStyle( + color: AppColors.darkGrayTextColor, + fontSize: 48.sp, + ), + ), + SizedBox(height: 30.h), + GestureDetector( + onTap: () async { + var result = await Get.toNamed(Routers.selectCountryRegionPage); + if (result != null) { + result as Map; + state.countryCode.value = result['code']; + state.countryName.value = result['countryName']; + } + }, + child: Container( + color: Colors.transparent, + child: Row( + children: [ + SizedBox( + width: 5.w, + ), + Text( + TranslationLoader.lanKeys!.countryAndRegion!.tr, + style: TextStyle( + fontSize: 22.sp, color: AppColors.darkGrayTextColor), + ), + SizedBox( + width: 40.w, + ), + Text( + '${state.countryName.value} +${state.countryCode.value}', + style: TextStyle( + fontSize: 22.sp, color: AppColors.mainColor), + ) + ], + ), + ), + ), + LoginInput( + controller: state.emailOrPhoneController, + onchangeAction: (v) { + logic.checkNext(state.emailOrPhoneController); + }, + leftWidget: Padding( + padding: EdgeInsets.only( + top: 30.w, + bottom: 20.w, + right: 20.w, + ), + ), + rightSlot: IconButton( + icon: Icon(Icons.close), + onPressed: () {}, + ), + label: TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr, + // keyboardType: TextInputType.number, + inputFormatters: [ + LengthLimitingTextInputFormatter(30), + ]), + LoginInput( + controller: state.pwdController, + onchangeAction: (v) { + logic.checkNext(state.pwdController); + }, + isPwd: true, + leftWidget: Padding( + padding: EdgeInsets.only( + top: 30.w, + bottom: 20.w, + right: 20.w, + ), + ), + label: + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.password!.tr}", + inputFormatters: [ + LengthLimitingTextInputFormatter(20), + ]), + SizedBox(height: 30.h), + GestureDetector( + onTap: () { + state.agree.value = !state.agree.value; + logic.changeAgreeState(); + }, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 10.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Obx( + () => Container( + padding: EdgeInsets.only( + left: 5.w, + right: 10.w, + ), + child: Image.asset( + state.agree.value + ? 'images/icon_round_select.png' + : 'images/icon_round_unSelect.png', + width: 20.w, + height: 20.w, + ), + ), + ), + Flexible( + child: RichText( + text: TextSpan( + text: TranslationLoader.lanKeys!.readAndAgree!.tr, + style: TextStyle( + color: const Color(0xff333333), fontSize: 20.sp), + children: [ + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: GestureDetector( + child: Text( + '《${TranslationLoader.lanKeys!.userAgreement!.tr}》', + style: TextStyle( + color: AppColors.mainColor, + fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, + arguments: { + "url": XSConstantMacro.userAgreementURL, + "title": '用户协议'.tr + }); + }, + )), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: GestureDetector( + child: Text( + '《${TranslationLoader.lanKeys!.privacyPolicy!.tr}》', + style: TextStyle( + color: AppColors.mainColor, + fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, + arguments: { + "url": XSConstantMacro.privacyPolicyURL, + "title": '隐私政策'.tr + }); + }, + )), + ], + )), + ) + ], + ), + ), + ), + SizedBox(height: 15.w), + Obx(() => SubmitBtn( + btnName: TranslationLoader.lanKeys!.login!.tr, + fontSize: 28.sp, + borderRadius: 20.w, + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + isDisabled: state.canNext.value, + onClick: state.canNext.value + ? () { + if (state.agree.value == false) { + logic.showToast('请先同意用户协议及隐私政策'.tr); + return; + } else { + logic.login(); + } + } + : null)), + SizedBox(height: 10.h), + ElevatedButton( + onPressed: () async { + var data = await Get.toNamed(Routers.starLockRegisterPage); + if (data != null) { + state.emailOrPhoneController.text = data['phoneOrEmailStr']; + logic.checkNext(state.emailOrPhoneController); + state.pwdController.text = data['pwd']; + logic.checkNext(state.pwdController); + } + }, + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.mainColor), + child: Text( + TranslationLoader.lanKeys!.register!.tr, + style: TextStyle(fontSize: 22.sp, color: Colors.white), + ), + ), + SizedBox(height: 5.w), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + child: SizedBox( + // width: 150.w, + height: 50.h, + // color: Colors.red, + child: Center( + child: Text( + '${TranslationLoader.lanKeys!.forgetPassword!.tr}?', + style: TextStyle( + fontSize: 22.sp, color: AppColors.mainColor)), + ), + ), + onTap: () { + Navigator.pushNamed( + context, Routers.starLockForgetPasswordPage); + }, + ), + Expanded( + child: SizedBox( + width: 10.sp, + )), + F.isLite + ? Container() + : GestureDetector( + child: SizedBox( + // width: 150.w, + height: 50.h, + // color: Colors.red, + child: Center( + child: Text('演示模式'.tr, + style: TextStyle( + fontSize: 22.sp, + color: AppColors.mainColor)), + ), + ), + onTap: () { + Get.toNamed(Routers.demoModeLockDetailPage); + }, + ) + ], + ), + ], + )); + } + + Widget loginInput( + {TextEditingController? controller, + List? inputFormatters, + String? hintText, + bool? isHaveLeftWidget, + Widget? leftWidget, + String? label, + bool? isPwd, + BlockStrCallback? onchangeAction}) { + return Container( + width: 1.sp, + child: Column( + children: [ + Row( + children: [ + Container( + color: Colors.red, + child: Image.asset( + 'images/icon_login_password.png', + width: 36.w, + height: 36.w, + ), + ), + SizedBox( + width: 40.w, + ), + Expanded( + child: TextField( + //输入框一行 + maxLines: 1, + controller: controller, + onChanged: onchangeAction, + // autofocus: false, + inputFormatters: inputFormatters, + decoration: InputDecoration( + //输入里面输入文字内边距设置 + contentPadding: const EdgeInsets.only( + top: 8.0, left: -19.0, right: -15.0, bottom: 8.0), + labelText: label, + labelStyle: TextStyle(fontSize: 22.sp), + hintStyle: TextStyle(fontSize: 22.sp), + hintText: hintText, + //不需要输入框下划线 + border: InputBorder.none, + //左边图标设置 + // icon: isHaveLeftWidget == true + // ? leftWidget + // : SizedBox( + // width: 20.w, + // height: 40.w, + // ), + ), + obscureText: isPwd ?? false, + ), + ), + ], + ), + Container( + height: 0.5.h, + color: Colors.grey, + ), + ], + ), + ); + } +} diff --git a/star_lock/lib/login/register/starLock_register_xhj_page.dart b/star_lock/lib/login/register/starLock_register_xhj_page.dart new file mode 100644 index 00000000..c636f2c5 --- /dev/null +++ b/star_lock/lib/login/register/starLock_register_xhj_page.dart @@ -0,0 +1,305 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../appRouters.dart'; +import '../../app_settings/app_colors.dart'; +import '../../common/XSConstantMacro/XSConstantMacro.dart'; +import '../../tools/tf_loginInput.dart'; +import '../../tools/submitBtn.dart'; +import '../../tools/titleAppBar.dart'; +import '../../translations/trans_lib.dart'; +import 'starLock_register_logic.dart'; + +class StarLockRegisterXHJPage extends StatefulWidget { + const StarLockRegisterXHJPage({Key? key}) : super(key: key); + + @override + State createState() => _StarLockRegisterPageState(); +} + +class _StarLockRegisterPageState extends State { + final logic = Get.put(StarLockRegisterLogic()); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + return Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: Colors.white, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.register!.tr, + haveBack: true, + iconColor: AppColors.blackColor, + titleColor: AppColors.blackColor, + backgroundColor: Colors.white), + body: ListView( + padding: EdgeInsets.only(left: 40.w, right: 40.w), + children: [ + topSelectCountryAndRegionWidget(), + middleTFWidget(), + _buildBottomAgreement(), + SizedBox( + height: 10.h, + ), + Obx(() { + return SubmitBtn( + btnName: TranslationLoader.lanKeys!.register!.tr, + // backgroundColorList: state.canSub.value ? [AppColors.mainColor] :[Colors.grey], + 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.agree.value == false) { + logic.showToast('请先同意用户协议及隐私政策'.tr); + return; + } else { + logic.register(); + } + } + : null); + }), + ], + )); + } + + Widget topSelectCountryAndRegionWidget() { + return Column( + children: [ + Container( + height: 80.h, + child: DefaultTabController( + length: 2, + child: TabBar( + onTap: (int index) { + state.isIphoneType.value = index == 0; + }, + overlayColor: MaterialStateProperty.resolveWith((states) { + return Colors.transparent; + }), + dividerHeight: 0, + indicatorSize: TabBarIndicatorSize.tab, + tabs: [ + Text(TranslationLoader.lanKeys!.iphone!.tr), + Text(TranslationLoader.lanKeys!.email!.tr) + ], + indicatorColor: AppColors.mainColor, + labelStyle: + TextStyle(color: AppColors.mainColor, fontSize: 26.sp), + unselectedLabelStyle: + TextStyle(color: AppColors.blackColor, fontSize: 22.sp), + ), + ), + ), + SizedBox( + height: 15.h, + ), + GestureDetector( + onTap: () async { + var result = await Get.toNamed(Routers.selectCountryRegionPage); + if (result != null) { + result as Map; + state.countryCode.value = result['code']; + state.countryName.value = result['countryName']; + } + Get.log("路由返回值: $result, countryCode:${logic.state.countryCode}"); + }, + child: Obx(() => Container( + color: Colors.white, + height: 70.h, + child: Row( + children: [ + SizedBox(width: 5.w), + Text(TranslationLoader.lanKeys!.countryAndRegion!.tr, + style: TextStyle( + fontSize: 26.sp, color: AppColors.blackColor)), + SizedBox(width: 50.w), + Text( + state.isIphoneType.value + ? '${state.countryName.value} +${state.countryCode.value}' + : state.countryName.value, + style: TextStyle( + fontSize: 26.sp, color: AppColors.mainColor), + ), + ], + ), + )), + ), + ], + ); + } + + Widget middleTFWidget() { + return Column( + children: [ + Obx(() => LoginInput( + controller: state.phoneOrEmailController, + onchangeAction: (v) { + logic.checkNext(state.phoneOrEmailController); + }, + leftWidget: Padding( + padding: EdgeInsets.only(right: 10.w, left: 5.w), + ), + label: + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${state.isIphoneType.value ? "手机号".tr : TranslationLoader.lanKeys!.email!.tr}", + keyboardType: TextInputType.number, + inputFormatters: [ + LengthLimitingTextInputFormatter(30), + ])), + LoginInput( + controller: state.pwdController, + onchangeAction: (v) { + logic.checkNext(state.pwdController); + }, + isPwd: true, + leftWidget: Padding( + padding: EdgeInsets.only(right: 10.w, left: 5.w), + ), + label: + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.password!.tr}", + inputFormatters: [ + LengthLimitingTextInputFormatter(20), + ]), + Text( + TranslationLoader.lanKeys!.registerPasswordTip!.tr, + style: + TextStyle(color: AppColors.placeholderTextColor, fontSize: 20.sp), + ), + LoginInput( + controller: state.sureController, + onchangeAction: (v) { + logic.checkNext(state.sureController); + }, + isPwd: true, + leftWidget: Padding( + padding: EdgeInsets.only(right: 10.w, left: 5.w), + ), + label: + "${TranslationLoader.lanKeys!.sure!.tr}${TranslationLoader.lanKeys!.password!.tr}", + inputFormatters: [ + LengthLimitingTextInputFormatter(20), + ]), + Row( + children: [ + Expanded( + child: LoginInput( + controller: state.codeController, + onchangeAction: (v) { + logic.checkNext(state.codeController); + }, + leftWidget: Padding( + padding: EdgeInsets.only(right: 10.w, left: 5.w), + ), + label: + "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.verificationCode!.tr}", + inputFormatters: [ + LengthLimitingTextInputFormatter(20), + ]), + ), + Obx(() => GestureDetector( + onTap: + state.phoneOrEmailStrIsOK.value && state.canResend.value + ? () async { + // Navigator.pushNamed(context, Routers.safetyVerificationPage, arguments: {"countryCode":"+86", "account":state.phoneOrEmailStr.value}); + var result = await Navigator.pushNamed( + context, Routers.safetyVerificationPage, + arguments: { + "countryCode": state.countryCode, + "account": state.phoneOrEmailStr.value + }); + state.xWidth.value = + (result as Map)['xWidth']; + logic.sendValidationCode(); + } + : null, + child: Container( + color: Colors.transparent, + padding: EdgeInsets.all(10.h), + child: Center( + child: Text(state.btnText.value, + textAlign: TextAlign.center, + style: TextStyle( + color: AppColors.mainColor, + fontSize: 22.sp, + )), + ), + ), + )), + SizedBox( + width: 20.w, + ), + ], + ), + SizedBox(height: 50.w), + ], + ); + } + + Widget _buildBottomAgreement() { + return GestureDetector( + onTap: () { + state.agree.value = !state.agree.value; + logic.changeAgreeState(); + }, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 16.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Obx(() => Image.asset( + state.agree.value + ? 'images/icon_round_select.png' + : 'images/icon_round_unSelect.png', + width: 20.w, + height: 20.w, + )), + SizedBox( + width: 15.w, + ), + Flexible( + child: RichText( + text: TextSpan( + text: TranslationLoader.lanKeys!.readAndAgree!.tr, + style: + TextStyle(color: const Color(0xff333333), fontSize: 20.sp), + children: [ + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: GestureDetector( + child: Text( + '《${TranslationLoader.lanKeys!.userAgreement!.tr}》', + style: TextStyle( + color: AppColors.mainColor, fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, arguments: { + "url": XSConstantMacro.userAgreementURL, + "title": '用户协议'.tr + }); + }, + )), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: GestureDetector( + child: Text( + '《${TranslationLoader.lanKeys!.privacyPolicy!.tr}》', + style: TextStyle( + color: AppColors.mainColor, fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, arguments: { + "url": XSConstantMacro.privacyPolicyURL, + "title": '隐私政策'.tr + }); + }, + )), + ], + )), + ) + ], + ), + ), + ); + } +} diff --git a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart index 8d45d5c7..19e0ee91 100644 --- a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart +++ b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart @@ -1,8 +1,28 @@ - +import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'editVideoLog_state.dart'; -class EditVideoLogLogic extends BaseGetXController{ +class EditVideoLogLogic extends BaseGetXController { EditVideoLogState state = EditVideoLogState(); -} \ No newline at end of file + void deleteLockCloudStorageList() async { + var entity = await ApiRepository.to.deleteLockCloudStorageList( + recordIds: state.selectVideoLogList.value.map((e) => e.recordId).toList(), + ); + if (entity.errorCode!.codeIsSuccessful) { + state.selectVideoLogList.value.clear(); + showToast('删除成功'); + getLockCloudStorageList(); + } + } + + void getLockCloudStorageList() async { + var entity = await ApiRepository.to.getLockCloudStorageList( + lockId: state.getLockId.value, + ); + if (entity.errorCode!.codeIsSuccessful) { + state.videoLogList.value = entity.data!; + state.videoLogList.refresh(); + } + } +} diff --git a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart index a8f94f11..6e5fbb72 100644 --- a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart @@ -1,6 +1,7 @@ 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/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; import 'package:star_lock/tools/dateTool.dart'; @@ -24,17 +25,38 @@ class _EditVideoLogPageState extends State { return Scaffold( backgroundColor: Colors.white, appBar: TitleAppBar( - barTitle: "已选${state.selectVideoLog.value}项", + barTitle: "已选${state.selectVideoLogList.value.length}项", haveBack: true, backgroundColor: AppColors.mainColor, actionsList: [ TextButton( child: Text( - "全选", + "全选".tr, style: TextStyle(color: Colors.white, fontSize: 24.sp), ), onPressed: () async { state.isSelectAll.value = !state.isSelectAll.value; + if (state.selectVideoLogList.value.isEmpty) { + state.isSelectAll.value = true; + } + if (state.isSelectAll.value == true) { + state.selectVideoLogList.value.clear(); + state.videoLogList.forEach((element) { + element.recordList!.forEach((element) { + element.isSelect = true; + state.selectVideoLogList.add(element); + }); + }); + } else { + state.selectVideoLogList.value.clear(); + state.videoLogList.forEach((element) { + element.recordList!.forEach((element) { + element.isSelect = false; + state.selectVideoLogList.remove(element); + }); + }); + } + setState(() {}); }, ), ], @@ -91,70 +113,87 @@ class _EditVideoLogPageState extends State { } Widget videoItem(RecordListData recordData, int index) { - return SizedBox( + return Container( width: itemW, height: itemH, - child: Stack( - children: [ - Column( + color: Colors.white, + child: GestureDetector( + onTap: () { + recordData.isSelect = !recordData.isSelect!; + if (recordData.isSelect! == true) { + state.selectVideoLogList.add(recordData); + } else { + state.selectVideoLogList.remove(recordData); + } + setState(() {}); + }, + child: Stack( children: [ - Container( - width: itemW, - height: itemW, - margin: const EdgeInsets.all(0), - color: Colors.white, - child: ClipRRect( - borderRadius: BorderRadius.circular(10.w), - child: Image( - fit: BoxFit.cover, - image: Image.network(recordData.imagesUrl ?? - "images/icon_video_placeholder.jpg") - .image), - ), + Column( + children: [ + Container( + width: itemW, + height: itemW, + margin: const EdgeInsets.all(0), + color: Colors.white, + child: ClipRRect( + borderRadius: BorderRadius.circular(10.w), + child: Image( + fit: BoxFit.cover, + image: Image.network(recordData.imagesUrl ?? + "images/icon_video_placeholder.jpg") + .image), + ), + ), + SizedBox(height: 5.h), + Text( + DateTool() + .dateToYMDHNString(recordData.operateDate.toString()), + textAlign: TextAlign.center, + style: TextStyle(fontSize: 18.sp)) + ], ), - SizedBox(height: 5.h), - Text( - DateTool() - .dateToYMDHNString(recordData.operateDate.toString()), - textAlign: TextAlign.center, - style: TextStyle(fontSize: 18.sp)) + Positioned( + top: 0.w, + right: 0.w, + child: Image( + width: 36.w, + height: 36.w, + image: state.selectVideoLogList.value.contains(recordData) + ? const AssetImage("images/icon_round_select.png") + : const AssetImage("images/icon_round_unSelect.png"))) ], - ), - Visibility( - visible: true, - child: Positioned( - top: 0.w, - right: 0.w, - child: GestureDetector( - onTap: () {}, - child: Obx(() => Image( - width: 36.w, - height: 36.w, - image: state.isSelectAll.value - ? const AssetImage("images/icon_round_select.png") - : const AssetImage( - "images/icon_round_unSelect.png"))))), - ) - ], - ), + )), ); } Widget bottomBottomBtnWidget() { - return Container( + return SizedBox( width: 1.sw, child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ bottomBtnItemWidget( "images/main/icon_lockDetail_monitoringDownloadVideo.png", - "下载", - Colors.white, - () {}), + "下载".tr, + Colors.white, () { + if (state.selectVideoLogList.value.isNotEmpty) { + Get.toNamed(Routers.videoLogDownLoadPage, arguments: { + "downloadVideoLogList": state.selectVideoLogList.value + }); + } else { + logic.showToast('请选择要下载的视频'); + } + }), SizedBox(width: 100.w), bottomBtnItemWidget( "images/main/icon_lockDetail_monitoringDeletVideo.png", - "删除", - AppColors.mainColor, - () {}) + "删除".tr, + AppColors.mainColor, () { + if (state.selectVideoLogList.value.isNotEmpty) { + logic.deleteLockCloudStorageList(); + } else { + logic.showToast('请选择要删除的视频'.tr); + } + }) ]), ); } @@ -164,7 +203,7 @@ class _EditVideoLogPageState extends State { var wh = 40.w; return GestureDetector( onTap: onClick, - child: Container( + child: SizedBox( height: 140.h, child: Column( crossAxisAlignment: CrossAxisAlignment.center, diff --git a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart index 7d4a7fe0..d83405a9 100644 --- a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart +++ b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart @@ -1,15 +1,20 @@ import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; class EditVideoLogState { - var selectVideoLog = 0.obs; - var selectVideoLogList = [].obs; + var selectVideoLogList = [].obs; var isSelectAll = false.obs; var videoLogList = [].obs; + var getLockId = 0.obs; EditVideoLogState() { Map map = Get.arguments; if (map['videoDataList'] != null) { videoLogList.value = map['videoDataList']; } + + if (map['lockId'] != null) { + getLockId.value = map['lockId']; + } } } diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart index 7c7a90fd..9e8dd9a2 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart @@ -62,6 +62,7 @@ class RecordListData { String? imagesUrl; String? videoUrl; int? recordType; + bool? isSelect = false; RecordListData( {this.recordId, diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart index be027017..0d717537 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart @@ -14,4 +14,11 @@ class VideoLogLogic extends BaseGetXController { state.videoLogList.refresh(); } } + + @override + onReady() { + super.onReady(); + + getLockCloudStorageList(); + } } diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart index 44ce3e3f..5e4a24fc 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart @@ -22,12 +22,6 @@ class _VideoLogPageState extends State { final logic = Get.put(VideoLogLogic()); final state = Get.find().state; - @override - initState() { - super.initState(); - logic.getLockCloudStorageList(); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -234,8 +228,10 @@ class _VideoLogPageState extends State { iconSize: 30, color: Colors.black54, onPressed: () { - Get.toNamed(Routers.editVideoLogPage, - arguments: {"videoDataList": state.videoLogList.value}); + Get.toNamed(Routers.editVideoLogPage, arguments: { + "videoDataList": state.videoLogList.value, + "lockId": state.getLockId.value + }); }, ) // TextButton( diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart index 214c38d2..ac9f2358 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart @@ -1,10 +1,11 @@ import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; class VideoLogState { var isNavLocal = false.obs; var localList = []; var getLockId = 0.obs; - var videoLogList = [].obs; + var videoLogList = [].obs; VideoLogState() { Map map = Get.arguments; diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart b/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart index 1f5a1d34..dc3938d0 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart @@ -42,7 +42,7 @@ class _VideoLogDetailPageState extends State { return Scaffold( backgroundColor: Colors.white, appBar: TitleAppBar( - barTitle: "视频播放", + barTitle: "视频播放".tr, haveBack: true, backgroundColor: AppColors.mainColor, ), diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_page.dart b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_page.dart index 520ec302..5bd84efe 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_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:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; +import 'package:star_lock/tools/dateTool.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/noData.dart'; @@ -25,77 +25,74 @@ class _VideoLogDownLoadPageState extends State { return Scaffold( backgroundColor: Colors.white, appBar: TitleAppBar( - barTitle: "下载列表", + barTitle: "下载列表".tr, haveBack: true, backgroundColor: AppColors.mainColor, ), - body: Column( - children: [ - Expanded( - child: state.localList.isNotEmpty ? ListView.builder( - itemCount: 5, - itemBuilder: (c, index) { - return Column(children: [ - Container( - margin: EdgeInsets.only(left:20.w, top: 15.w, bottom: 15.w), - child: Row( - children: [ - Text("2023.10.23", style: TextStyle(fontSize: 20.sp)), - ] - )), - mainListView(index) - ],); - }): NoData(), - ), - ], + body: Container( + color: AppColors.greyBackgroundColor, + child: Column( + children: [ + Expanded( + child: Obx( + () => state.videoLogDownloadList.isNotEmpty + ? mainListView(state.videoLogDownloadList.value) + : NoData(), + )), + ], + ), ), ); } - var itemW = (1.sw - 15.w*4)/3; - var itemH = (1.sw - 15.w*4)/3+40.h; - Widget mainListView(int index){ - return Container( - // margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 40.h), - // color: Colors.blue, - child: GridView.builder( - padding: EdgeInsets.only(left: 15.w, right: 15.w), - itemCount: index+1, + var itemW = (1.sw - 15.w * 4) / 3; + var itemH = (1.sw - 15.w * 4) / 3 + 40.h; + Widget mainListView(List itemList) { + return ListView.separated( + itemCount: itemList.length, shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - //横轴元素个数 - crossAxisCount: 3, - //纵轴间距 - mainAxisSpacing: 10.w, - // 横轴间距 - crossAxisSpacing: 15.w, - //子组件宽高长度比例 - childAspectRatio: itemW/itemH - ), - itemBuilder: (context, index) { - return videoItem(); + separatorBuilder: (c, index) { + return const Divider( + height: 1, + color: Colors.transparent, + ); }, - ), - ); + itemBuilder: (c, index) { + RecordListData recordData = itemList[index]; + return videoItem(recordData, index); + }); } - Widget videoItem(){ - return SizedBox( - width: itemW, - height: itemH, - child: Stack( + Widget videoItem(RecordListData recordData, int index) { + return Container( + padding: + EdgeInsets.only(left: 20.w, right: 20.w, bottom: 20.h, top: 20.h), + color: Colors.white, + child: Row( children: [ - Column( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(10.w), - child: Image(width: itemW, height: itemW, fit: BoxFit.fill, image: const AssetImage("images/main/icon_lockDetail_monitoringvoiceFrist.png")), - ), - SizedBox(height:5.h), - Text("2023.10.23 10:00", style: TextStyle(fontSize: 20.sp)) - ], + ClipRRect( + borderRadius: BorderRadius.circular(10.w), + child: Image( + fit: BoxFit.cover, + width: 120.w, + height: 80.w, + image: Image.network(recordData.imagesUrl ?? + "images/icon_video_placeholder.jpg") + .image), ), + SizedBox(width: 15.w), + Text(DateTool().dateToYMDHNString(recordData.operateDate.toString()), + style: TextStyle(fontSize: 20.sp)), + Expanded( + child: SizedBox( + width: 20.w, + )), + TextButton( + onPressed: () {}, + child: Text('下载'.tr, + style: + TextStyle(fontSize: 22.sp, color: AppColors.mainColor))) ], ), ); diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart index 3e60e4d5..e57c35de 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart @@ -1,5 +1,13 @@ +import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; +class VideoLogDownLoadState { + var videoLogDownloadList = [].obs; -class VideoLogDownLoadState{ - var localList = []; -} \ No newline at end of file + VideoLogDownLoadState() { + Map map = Get.arguments; + if (map['downloadVideoLogList'] != null) { + videoLogDownloadList.value = map['downloadVideoLogList']; + } + } +} diff --git a/star_lock/lib/mine/about/about_page.dart b/star_lock/lib/mine/about/about_page.dart index 96463107..a9ebc7c1 100644 --- a/star_lock/lib/mine/about/about_page.dart +++ b/star_lock/lib/mine/about/about_page.dart @@ -54,8 +54,12 @@ class _AboutPageState extends State { children: [ SizedBox(height: 150.h), Row(mainAxisAlignment: MainAxisAlignment.center, children: [ - Image.asset("images/icon_main_1024.png", - width: 160.w, height: 160.w), + Image.asset( + F.sw( + defaultCall: () => "images/icon_main_1024.png", + xhjCall: () => "images/icon_main_xhj_1024.png"), + width: 160.w, + height: 160.w), ]), SizedBox(height: 20.h), Text( @@ -94,11 +98,10 @@ class _AboutPageState extends State { isHaveLine: false, isHaveDirection: true, action: () { - Get.toNamed(Routers.webviewShowPage, - arguments: { - "url": XSConstantMacro.userAgreementURL, - "title": '用户协议'.tr - }); + Get.toNamed(Routers.webviewShowPage, arguments: { + "url": XSConstantMacro.userAgreementURL, + "title": '用户协议'.tr + }); }), Divider( height: 1, diff --git a/star_lock/lib/mine/about/webviewShow_page.dart b/star_lock/lib/mine/about/webviewShow_page.dart index 811c316b..ddc8c21f 100644 --- a/star_lock/lib/mine/about/webviewShow_page.dart +++ b/star_lock/lib/mine/about/webviewShow_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/app_settings/app_colors.dart'; +import 'package:star_lock/flavors.dart'; import 'package:star_lock/mine/about/webviewShow_logic.dart'; import 'package:star_lock/tools/titleAppBar.dart'; import 'package:webview_flutter/webview_flutter.dart'; @@ -24,6 +26,10 @@ class _WebviewShowPageState extends State { @override Widget build(BuildContext context) { state.webViewController.loadRequest(Uri.parse(state.webURL)); + return F.sw(defaultCall: () => defaultView(), xhjCall: () => xhjView()); + } + + Widget defaultView() { return Scaffold( resizeToAvoidBottomInset: false, backgroundColor: const Color(0xFFFFFFFF), @@ -35,6 +41,21 @@ class _WebviewShowPageState extends State { body: WebViewWidget(controller: state.webViewController)); } + Widget xhjView() { + return SafeArea( + child: Stack( + children: [ + WebViewWidget(controller: state.webViewController), + IconButton( + onPressed: () { + Get.back(); + }, + icon: Icon(Icons.arrow_back_ios)), + ], + ), + ); + } + String getWebTitle() { String webTitleStr = state.webTitle; state.webViewController.getTitle().then((result) { diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index ebe843c7..87a56aba 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -222,4 +222,5 @@ abstract class Api { final String getUseRecordListURL = '/v2/service/getUseRecordList'; //获取使用记录列表 final String getlockCloudStorageListURL = '/lockCloudStorage/list'; //获取云存列表 + final String deleteLockCloudStorageURL = '/lockCloudStorage/delete'; //删除云存 } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 2eee89be..1428c012 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -1946,6 +1946,10 @@ class ApiProvider extends BaseProvider { Future getLockCloudStorageList(int lockId) => post(getlockCloudStorageListURL.toUrl, jsonEncode({'lockId': lockId})); + // 删除云存列表 + Future deleteLockCloudStorageList(List recordIds) => post( + deleteLockCloudStorageURL.toUrl, jsonEncode({'recordIds': recordIds})); + // 设置微信公众号推送 Future setMpWechatPushSwitch(int mpWechatPushSwitch) => post( setWechatPushSwitchURL.toUrl, diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index c29f283f..13fc6263 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -1967,6 +1967,13 @@ class ApiRepository { return VideoLogEntity.fromJson(res.body); } + // 删除云存列表 + Future deleteLockCloudStorageList( + {required List recordIds}) async { + final res = await apiProvider.deleteLockCloudStorageList(recordIds); + return VersionUndateEntity.fromJson(res.body); + } + // 设置微信公众号推送 Future setMpWechatPushSwitch( {required int mpWechatPushSwitch}) async { diff --git a/star_lock/lib/starLockApplication/starLockApplication.dart b/star_lock/lib/starLockApplication/starLockApplication.dart index 18ac7817..1d3a0f35 100644 --- a/star_lock/lib/starLockApplication/starLockApplication.dart +++ b/star_lock/lib/starLockApplication/starLockApplication.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/login/login/starLock_login_page.dart'; +import 'package:star_lock/login/login/starLock_login_xhj_page.dart'; import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart'; import 'package:star_lock/debug/debug_tool.dart'; @@ -42,15 +43,19 @@ class _StarLockApplicationState extends State { if (snapshot.data!) { // 如果用户已登录,返回主页面 return F.sw( - defaultCall: () => StarLockMainPage(), + defaultCall: () => StarLockMainPage(), xhjCall: () => const StarLockMainXHJPage()); } else { // 如果用户未登录,返回登录页面 - return const StarLockLoginPage(); + return F.sw( + defaultCall: () => const StarLockLoginPage(), + xhjCall: () => const StarLockLoginXHJPage()); } } else { // 如果没有数据,返回一个空白的小部件 - return const StarLockLoginPage(); + return F.sw( + defaultCall: () => const StarLockLoginPage(), + xhjCall: () => const StarLockLoginXHJPage()); } }, ); diff --git a/star_lock/lib/tools/tf_loginInput.dart b/star_lock/lib/tools/tf_loginInput.dart index 34a08940..5cb0056d 100644 --- a/star_lock/lib/tools/tf_loginInput.dart +++ b/star_lock/lib/tools/tf_loginInput.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; /* * 登录注册页面 input @@ -41,15 +42,13 @@ class LoginInput extends StatelessWidget { this.isHaveLeftWidget = true, this.leftWidget, this.onchangeAction, - this.onTapAction}) + this.onTapAction, + }) : super(key: key); @override Widget build(BuildContext context) { return Container( - // color: Colors.red, - // width: 1.sp, - // height: 200.h, child: Column( children: [ TextField( @@ -66,7 +65,7 @@ class LoginInput extends StatelessWidget { contentPadding: const EdgeInsets.only( top: 8.0, left: -19.0, right: -15.0, bottom: 8.0), labelText: label, - labelStyle: TextStyle(fontSize: 22.sp), + labelStyle: TextStyle(fontSize: 22.sp,color: AppColors.darkGrayTextColor), hintStyle: TextStyle(fontSize: 22.sp), hintText: hintText, //不需要输入框下划线 diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index 31a9e45f..7b56d97a 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -35,8 +35,9 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # 1.0.27+2024041702 打包鑫锁提审华为 # 1.0.27+2024041703 打包鑫锁提审ios # 1.0.27+2024042204 打包鑫锁提审ios与 android +# 1.0.28+2024042601 打包鑫锁提审华为 -version: 1.0.27+2024042204 +version: 1.0.28+2024042602 environment: sdk: '>=2.12.0 <3.0.0'