Bladeren bron

修改电话号码

liukai 2 weken geleden
bovenliggende
commit
8d2799d9bb

+ 1 - 1
packages/cpt_auth/lib/modules/forgot_input/forgot_input_page.dart

@@ -92,7 +92,7 @@ class ForgotInputPage extends HookConsumerWidget {
                   MyTextView(
                     "+65",
                     textColor: context.appColors.textBlack,
-                    fontSize: 20,
+                    fontSize: 18.5,
                     marginLeft: 15,
                     marginRight: 12,
                     isFontMedium: true,

+ 1 - 1
packages/cpt_auth/lib/modules/sign_up/sign_up_page.dart

@@ -114,7 +114,7 @@ class SignUpPage extends HookConsumerWidget {
                   MyTextView(
                     "+65",
                     textColor: context.appColors.textBlack,
-                    fontSize: 20,
+                    fontSize: 18.5,
                     marginLeft: 15,
                     marginRight: 12,
                     isFontMedium: true,

+ 271 - 0
packages/cpt_profile/lib/modules/change_mobile/change_mobile_page.dart

@@ -0,0 +1,271 @@
+import 'package:cpt_profile/modules/change_mobile/change_mobile_state.dart';
+import 'package:cs_resources/generated/assets.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:auto_route/auto_route.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:router/ext/auto_router_extensions.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:widgets/my_button.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_field.dart';
+import 'package:widgets/my_text_view.dart';
+import 'package:widgets/widget_export.dart';
+import '../../router/page/profile_page_router.dart';
+import 'change_mobile_view_model.dart';
+
+@RoutePage()
+class ChangeMobilePage extends HookConsumerWidget {
+  const ChangeMobilePage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(const ChangeMobilePageRoute());
+    } else {
+      appRouter.push(const ChangeMobilePageRoute());
+    }
+  }
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.watch(changeMobileViewModelProvider.notifier);
+    final state = ref.watch(changeMobileViewModelProvider);
+
+    return Scaffold(
+      appBar: MyAppBar.appBar(context, S.current.change_mobile_phone),
+      backgroundColor: context.appColors.backgroundDefault,
+      body: SingleChildScrollView(
+        scrollDirection: Axis.vertical,
+        physics: const BouncingScrollPhysics(),
+        child: Container(
+          margin: const EdgeInsets.symmetric(horizontal: 15),
+          width: double.infinity,
+          child: Column(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              //旧手机
+              MyTextView(
+                S.current.old_mobile_phone,
+                fontSize: 16.5,
+                marginTop: 38,
+                marginBottom: 15,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              //旧的电话号码
+              Row(
+                mainAxisSize: MainAxisSize.max,
+                crossAxisAlignment: CrossAxisAlignment.center,
+                children: [
+                  const MyAssetImage(
+                    Assets.authCountrySg,
+                    width: 45,
+                    height: 30,
+                  ),
+                  MyTextView(
+                    "+65",
+                    textColor: context.appColors.textBlack,
+                    fontSize: 18.5,
+                    marginLeft: 15,
+                    marginRight: 12,
+                    isFontMedium: true,
+                  ),
+                  //电话输入框
+                  _buildInputLayout(
+                    context,
+                    state,
+                    "old",
+                    textInputType: TextInputType.number,
+                    textInputAction: TextInputAction.next,
+                    onSubmit: (formKey, value) {
+                      state.formData[formKey]!['focusNode'].unfocus();
+                      FocusScope.of(context).requestFocus(state.formData['old_code']!['focusNode']);
+                    },
+                  ).expanded(),
+                ],
+              ),
+
+              //旧手机的验证码
+              MyTextView(
+                S.current.verification_code,
+                fontSize: 16.5,
+                marginTop: 13,
+                marginBottom: 15,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              // 表单 - 旧的电话号码验证码
+              _buildInputLayout(
+                context,
+                state,
+                "old_code",
+                textInputType: TextInputType.number,
+                textInputAction: TextInputAction.next,
+                errorText: state.oldCodeErrorText,
+                showRightIcon: true,
+                rightWidget: MyTextView(
+                  state.isOldCounting ? "${state.oldCountdownTime} s" : S.current.get_code,
+                  textAlign: TextAlign.center,
+                  textColor: context.appColors.textPrimary,
+                  fontSize: 15,
+                  paddingRight: 5,
+                  isFontMedium: true,
+                  onClick: state.isOldCounting ? null : () => viewModel.showVerifyCodedDialog(false),
+                ).paddingOnly(top: 15, bottom: 15),
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                  FocusScope.of(context).requestFocus(state.formData['new']!['focusNode']);
+                },
+              ),
+
+              //新电话
+              MyTextView(
+                S.current.new_mobile_phone,
+                fontSize: 16.5,
+                marginTop: 38,
+                marginBottom: 15,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              //新的电话号码
+              Row(
+                mainAxisSize: MainAxisSize.max,
+                crossAxisAlignment: CrossAxisAlignment.center,
+                children: [
+                  const MyAssetImage(
+                    Assets.authCountrySg,
+                    width: 45,
+                    height: 30,
+                  ),
+                  MyTextView(
+                    "+65",
+                    textColor: context.appColors.textBlack,
+                    fontSize: 18.5,
+                    marginLeft: 15,
+                    marginRight: 12,
+                    isFontMedium: true,
+                  ),
+                  //电话输入框
+                  _buildInputLayout(
+                    context,
+                    state,
+                    "new",
+                    textInputType: TextInputType.number,
+                    textInputAction: TextInputAction.next,
+                    onSubmit: (formKey, value) {
+                      state.formData[formKey]!['focusNode'].unfocus();
+                      FocusScope.of(context).requestFocus(state.formData['new_code']!['focusNode']);
+                    },
+                  ).expanded(),
+                ],
+              ),
+
+              //新手机的验证码
+              MyTextView(
+                S.current.verification_code,
+                fontSize: 16.5,
+                marginTop: 13,
+                marginBottom: 15,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              // 表单 - 新的电话号码验证码
+              _buildInputLayout(
+                context,
+                state,
+                "new_code",
+                textInputType: TextInputType.number,
+                textInputAction: TextInputAction.done,
+                errorText: state.newCodeErrorText,
+                showRightIcon: true,
+                rightWidget: MyTextView(
+                  state.isNewCounting ? "${state.newCountdownTime} s" : S.current.get_code,
+                  textAlign: TextAlign.center,
+                  textColor: context.appColors.textPrimary,
+                  fontSize: 15,
+                  paddingRight: 5,
+                  isFontMedium: true,
+                  onClick: state.isNewCounting ? null : () => viewModel.showVerifyCodedDialog(true),
+                ).paddingOnly(top: 15, bottom: 15),
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                  viewModel.submitChangeMobile();
+                },
+              ),
+
+              //提交按钮
+              MyButton(
+                onPressed: viewModel.submitChangeMobile,
+                text: S.current.submit,
+                textColor: Colors.white,
+                backgroundColor: context.appColors.btnBgDefault,
+                fontWeight: FontWeight.w500,
+                type: ClickType.throttle,
+                fontSize: 16,
+                minHeight: 50,
+                radius: 5,
+              ).marginOnly(top: 50, bottom: 30),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  /// 输入框
+  Widget _buildInputLayout(
+    BuildContext context,
+    ChangeMobileState state,
+    String key, {
+    double marginTop = 0,
+    bool? showRightIcon = false, //是否展示右侧的布局
+    Widget? rightWidget, //右侧的布局
+    TextInputType textInputType = TextInputType.text,
+    String? errorText,
+    bool obscureText = false,
+    TextInputAction textInputAction = TextInputAction.done,
+    Function? onSubmit,
+  }) {
+    return IgnoreKeyboardDismiss(
+      child: MyTextField(
+        key,
+        fillBackgroundColor: context.appColors.authFiledBG,
+        state.formData[key]!['value'],
+        hintText: state.formData[key]!['hintText'],
+        hintStyle: TextStyle(
+          color: context.appColors.authFiledHint,
+          fontSize: 16.0,
+          fontWeight: FontWeight.w500,
+        ),
+        controller: state.formData[key]!['controller'],
+        focusNode: state.formData[key]!['focusNode'],
+        margin: EdgeInsets.only(top: marginTop),
+        padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 3),
+        showDivider: false,
+        height: 44,
+        style: TextStyle(
+          color: context.appColors.authFiledText,
+          fontSize: 16.0,
+          fontWeight: FontWeight.w500,
+        ),
+        inputType: textInputType,
+        textInputAction: textInputAction,
+        onSubmit: onSubmit,
+        cursorColor: context.appColors.authFiledText,
+        obscureText: obscureText,
+        errorText: errorText,
+        showLeftIcon: true,
+        showRightIcon: showRightIcon,
+        rightWidget: rightWidget,
+      ),
+    );
+  }
+}

+ 79 - 0
packages/cpt_profile/lib/modules/change_mobile/change_mobile_state.dart

@@ -0,0 +1,79 @@
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:flutter/material.dart';
+
+class ChangeMobileState {
+  //表单的校验与数据
+  final Map<String, Map<String, dynamic>> formData;
+
+  //获取验证码的倒计时
+  bool isOldCounting;
+  int oldCountdownTime;
+
+  bool isNewCounting;
+  int newCountdownTime;
+
+  //表单的错误信息展示
+  String? oldCodeErrorText;
+  String? newCodeErrorText;
+
+  // ===================================  Begin  ↓  ===================================
+
+  ChangeMobileState({
+    Map<String, Map<String, dynamic>>? formData,
+    this.isOldCounting = false,
+    this.oldCountdownTime = 0,
+    this.isNewCounting = false,
+    this.newCountdownTime = 0,
+    this.oldCodeErrorText,
+    this.newCodeErrorText,
+  }) : formData = formData ??
+            {
+              'old': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': S.current.mobile_phone,
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'old_code': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': S.current.verification_code,
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'new': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': S.current.mobile_phone,
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'new_code': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': S.current.verification_code,
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+            };
+
+  ChangeMobileState copyWith({
+    bool? isOldCounting,
+    int? oldCountdownTime,
+    bool? isNewCounting,
+    int? newCountdownTime,
+    String? oldCodeErrorText,
+    String? newCodeErrorText,
+  }) {
+    return ChangeMobileState(
+      formData: this.formData,
+      isOldCounting: isOldCounting ?? this.isOldCounting,
+      oldCountdownTime: oldCountdownTime ?? this.oldCountdownTime,
+      isNewCounting: isNewCounting ?? this.isNewCounting,
+      newCountdownTime: newCountdownTime ?? this.newCountdownTime,
+      oldCodeErrorText: oldCodeErrorText,
+      newCodeErrorText: newCodeErrorText,
+    );
+  }
+}

+ 161 - 0
packages/cpt_profile/lib/modules/change_mobile/change_mobile_view_model.dart

@@ -0,0 +1,161 @@
+import 'dart:async';
+
+import 'package:cpt_profile/modules/setting/setting_page.dart';
+import 'package:flutter/material.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:shared/utils/util.dart';
+
+import 'change_mobile_state.dart';
+
+part 'change_mobile_view_model.g.dart';
+
+@riverpod
+class ChangeMobileViewModel extends _$ChangeMobileViewModel {
+  @override
+  ChangeMobileState build() {
+    final state = ChangeMobileState();
+    initListener(state);
+    ref.onDispose(() {
+      onDispose(state);
+    });
+    return state;
+  }
+
+  /// 提交表单修改电话号码
+  void submitChangeMobile() {
+    state = state.copyWith(oldCodeErrorText: null, newCodeErrorText: null);
+
+    final FocusNode oldMobileFocusNode = state.formData['old']!['focusNode'];
+    final FocusNode oldCodeFocusNode = state.formData['old_code']!['focusNode'];
+    final FocusNode newMobileFocusNode = state.formData['new']!['focusNode'];
+    final FocusNode newCodeFocusNode = state.formData['new_code']!['focusNode'];
+
+    final TextEditingController oldMobileController = state.formData['old']!['controller'];
+    final TextEditingController oldCodeController = state.formData['old_code']!['controller'];
+    final TextEditingController newMobileController = state.formData['new']!['controller'];
+    final TextEditingController newCodeController = state.formData['new_code']!['controller'];
+
+    oldMobileFocusNode.unfocus();
+    oldCodeFocusNode.unfocus();
+    newMobileFocusNode.unfocus();
+    newCodeFocusNode.unfocus();
+
+    final oldMobile = oldMobileController.text;
+    final oldCode = oldCodeController.text;
+    final newMobile = newMobileController.text;
+    final newCode = newCodeController.text;
+
+    Log.d('当前待提交的 oldMobile:$oldMobile oldCode:$oldCode newMobile:$newMobile newCode:$newCode');
+
+    if (Utils.isEmpty(oldMobile)) {
+      ToastEngine.show("Enter Old Mobile Phone");
+      return;
+    }
+
+    if (Utils.isEmpty(oldCode)) {
+      state = state.copyWith(oldCodeErrorText: "Old mobile phone verification code cannot be empty!");
+      return;
+    }
+
+    if (Utils.isEmpty(newMobile)) {
+      ToastEngine.show("Enter New Mobile Phone");
+      return;
+    }
+
+    if (Utils.isEmpty(newCode)) {
+      state = state.copyWith(newCodeErrorText: "New mobile phone verification code cannot be empty!");
+      return;
+    }
+
+    //执行密码登录
+    ToastEngine.show('准备执行请求发送验证码 oldMobile:$oldMobile oldCode:$oldCode newMobile:$newMobile newCode:$newCode');
+
+    //返回设置页面
+    SettingPage.startInstance();
+  }
+
+  //展示发送验证码弹窗
+  showVerifyCodedDialog(bool isNewMobile) {
+    if (isNewMobile) {
+      _startNewCountDown();
+    } else {
+      _startOldCountDown();
+    }
+  }
+
+  Timer? oldCountdownTimer;
+  Timer? newCountdownTimer;
+
+  /// 开启倒计时 - Old
+  void _startOldCountDown() {
+    //60秒倒计时
+    state = state.copyWith(isOldCounting: true, oldCountdownTime: 60);
+
+    //每秒的倒计时
+    oldCountdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
+      int time = state.oldCountdownTime;
+      Log.d('Old倒计时-->$time');
+      if (time > 0) {
+        time--;
+        state = state.copyWith(isOldCounting: true, oldCountdownTime: time);
+      } else {
+        state = state.copyWith(isOldCounting: false, oldCountdownTime: 0);
+        oldCountdownTimer?.cancel(); // 取消计时器
+      }
+    });
+  }
+
+  /// 开启倒计时 - New
+  void _startNewCountDown() {
+    //60秒倒计时
+    state = state.copyWith(isNewCounting: true, newCountdownTime: 60);
+
+    //每秒的倒计时
+    newCountdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
+      int time = state.newCountdownTime;
+      Log.d('Old倒计时-->$time');
+      if (time > 0) {
+        time--;
+        state = state.copyWith(isNewCounting: true, newCountdownTime: time);
+      } else {
+        state = state.copyWith(isNewCounting: false, newCountdownTime: 0);
+        newCountdownTimer?.cancel(); // 取消计时器
+      }
+    });
+  }
+
+  //初始化监听
+  void initListener(ChangeMobileState initState) {
+    final FocusNode oldCodeFocusNode = initState.formData['old_code']!['focusNode'];
+    final FocusNode newCodeFocusNode = initState.formData['new_code']!['focusNode'];
+
+    oldCodeFocusNode.addListener(() {
+      // 获取焦点的时候清空错误文本
+      if (oldCodeFocusNode.hasFocus) {
+        state = state.copyWith(oldCodeErrorText: null);
+      }
+    });
+
+    newCodeFocusNode.addListener(() {
+      // 获取焦点的时候清空错误文本
+      if (newCodeFocusNode.hasFocus) {
+        state = state.copyWith(newCodeErrorText: null);
+      }
+    });
+  }
+
+  //销毁资源
+  void onDispose(ChangeMobileState initState) {
+    final FocusNode oldCodeFocusNode = initState.formData['old_code']!['focusNode'];
+    final FocusNode newCodeFocusNode = initState.formData['new_code']!['focusNode'];
+    oldCodeFocusNode.dispose();
+    newCodeFocusNode.dispose();
+
+    oldCountdownTimer?.cancel();
+    newCountdownTimer?.cancel();
+
+    Log.d("ChangeMobileViewModel 销毁 onDispose");
+  }
+}

+ 27 - 0
packages/cpt_profile/lib/modules/change_mobile/change_mobile_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'change_mobile_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$changeMobileViewModelHash() =>
+    r'ee65fa3e237d339b2437eccc1800b5394ed31db9';
+
+/// See also [ChangeMobileViewModel].
+@ProviderFor(ChangeMobileViewModel)
+final changeMobileViewModelProvider = AutoDisposeNotifierProvider<
+    ChangeMobileViewModel, ChangeMobileState>.internal(
+  ChangeMobileViewModel.new,
+  name: r'changeMobileViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$changeMobileViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$ChangeMobileViewModel = AutoDisposeNotifier<ChangeMobileState>;
+// ignore_for_file: type=lint
+// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

+ 4 - 3
packages/cpt_profile/lib/modules/setting/setting_page.dart

@@ -8,6 +8,7 @@ import 'package:auto_route/auto_route.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:plugin_basic/provider/app_config/app_config_service.dart';
 import 'package:router/ext/auto_router_extensions.dart';
+import 'package:widgets/ext/ex_widget.dart';
 import 'package:widgets/my_appbar.dart';
 import 'package:widgets/my_text_view.dart';
 import 'package:widgets/shatter/setting_item_container.dart';
@@ -19,9 +20,9 @@ class SettingPage extends HookConsumerWidget {
   //启动当前页面
   static void startInstance({BuildContext? context}) {
     if (context != null) {
-      context.router.push(const SettingPageRoute());
+      context.router.navigate(const SettingPageRoute());
     } else {
-      appRouter.push(const SettingPageRoute());
+      appRouter.navigate(const SettingPageRoute());
     }
   }
 
@@ -55,7 +56,7 @@ class SettingPage extends HookConsumerWidget {
             ),
 
             //修改手机号码
-            SettingItemContainer(title: S.current.change_mobile_phone),
+            SettingItemContainer(title: S.current.change_mobile_phone).onTap(viewModel.gotoChangeMobilePage),
 
             //重置密码
             SettingItemContainer(title: S.current.reset_password),

+ 5 - 0
packages/cpt_profile/lib/modules/setting/setting_view_model.dart

@@ -1,3 +1,4 @@
+import 'package:cpt_profile/modules/change_mobile/change_mobile_page.dart';
 import 'package:cpt_profile/modules/setting/setting_state.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 
@@ -14,4 +15,8 @@ class SettingViewModel extends _$SettingViewModel {
     state = state.copyWith(enbaleNofitication: value);
   }
 
+  //去修改手机号码的页面
+  void gotoChangeMobilePage() {
+    ChangeMobilePage.startInstance();
+  }
 }

+ 1 - 1
packages/cpt_profile/lib/modules/setting/setting_view_model.g.dart

@@ -6,7 +6,7 @@ part of 'setting_view_model.dart';
 // RiverpodGenerator
 // **************************************************************************
 
-String _$settingViewModelHash() => r'19cfe63eaf670fb5b02c9870a16a210815321d9f';
+String _$settingViewModelHash() => r'89a579d989f14f87f6017c39a3df45ab9b93f2c1';
 
 /// See also [SettingViewModel].
 @ProviderFor(SettingViewModel)

+ 2 - 0
packages/cpt_profile/lib/router/page/profile_page_router.dart

@@ -5,6 +5,7 @@ import 'package:router/path/router_path.dart';
 
 import '../../modules/profile_edit/Profile_edit_page.dart';
 import '../../modules/setting/setting_page.dart';
+import '../../modules/change_mobile/change_mobile_page.dart';
 
 
 part 'profile_page_router.gr.dart';
@@ -19,5 +20,6 @@ class ProfilePageRouter extends _$ProfilePageRouter {
 
     CustomRoute(page: ProfileEditPageRoute.page, path: RouterPath.profileEdit, transitionsBuilder: applySlideTransition),
     CustomRoute(page: SettingPageRoute.page, path: RouterPath.settings, transitionsBuilder: applySlideTransition),
+    CustomRoute(page: ChangeMobilePageRoute.page, path: RouterPath.settingsChangeMobile, transitionsBuilder: applySlideTransition),
   ];
 }

+ 20 - 0
packages/cpt_profile/lib/router/page/profile_page_router.gr.dart

@@ -15,6 +15,12 @@ abstract class _$ProfilePageRouter extends RootStackRouter {
 
   @override
   final Map<String, PageFactory> pagesMap = {
+    ChangeMobilePageRoute.name: (routeData) {
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: const ChangeMobilePage(),
+      );
+    },
     ProfileEditPageRoute.name: (routeData) {
       return AutoRoutePage<dynamic>(
         routeData: routeData,
@@ -31,6 +37,20 @@ abstract class _$ProfilePageRouter extends RootStackRouter {
 }
 
 /// generated route for
+/// [ChangeMobilePage]
+class ChangeMobilePageRoute extends PageRouteInfo<void> {
+  const ChangeMobilePageRoute({List<PageRouteInfo>? children})
+      : super(
+          ChangeMobilePageRoute.name,
+          initialChildren: children,
+        );
+
+  static const String name = 'ChangeMobilePageRoute';
+
+  static const PageInfo<void> page = PageInfo<void>(name);
+}
+
+/// generated route for
 /// [ProfileEditPage]
 class ProfileEditPageRoute extends PageRouteInfo<void> {
   const ProfileEditPageRoute({List<PageRouteInfo>? children})

+ 8 - 0
packages/cs_resources/lib/generated/intl/messages_en.dart

@@ -41,6 +41,8 @@ class MessageLookup extends MessageLookupByLibrary {
             "123 is the block number #08-08 is the unit number"),
         "change_mobile_phone":
             MessageLookupByLibrary.simpleMessage("Change Mobile Phone"),
+        "confirm_new_password":
+            MessageLookupByLibrary.simpleMessage("Confirm New Password"),
         "confirm_password":
             MessageLookupByLibrary.simpleMessage("Confirm Password"),
         "create_new_yy_home_account":
@@ -72,9 +74,14 @@ class MessageLookup extends MessageLookupByLibrary {
         "login": MessageLookupByLibrary.simpleMessage("Log In"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("Mobile Phone"),
         "my_post": MessageLookupByLibrary.simpleMessage("My Posts"),
+        "new_mobile_phone":
+            MessageLookupByLibrary.simpleMessage("New Mobile Phone"),
+        "new_password": MessageLookupByLibrary.simpleMessage("New Password"),
         "next": MessageLookupByLibrary.simpleMessage("Next"),
         "notice_board": MessageLookupByLibrary.simpleMessage("Notice Board"),
         "notification": MessageLookupByLibrary.simpleMessage("Notification"),
+        "old_mobile_phone":
+            MessageLookupByLibrary.simpleMessage("Old Mobile Phone"),
         "other": MessageLookupByLibrary.simpleMessage("Other"),
         "owner": MessageLookupByLibrary.simpleMessage("Owner"),
         "owner_or_tenant":
@@ -110,6 +117,7 @@ class MessageLookup extends MessageLookupByLibrary {
             "Now, let\'s get you connected to your estate and community"),
         "sign_up_verify_txt": MessageLookupByLibrary.simpleMessage(
             "We have sent you an SMS verification code Please enter it below"),
+        "submit": MessageLookupByLibrary.simpleMessage("Submit"),
         "tenant": MessageLookupByLibrary.simpleMessage("Tenant"),
         "tenants_desc1": MessageLookupByLibrary.simpleMessage(
             "My name is in the lease agreement"),

+ 5 - 0
packages/cs_resources/lib/generated/intl/messages_zh_CN.dart

@@ -38,6 +38,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "block_example_desc":
             MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
+        "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
@@ -63,9 +64,12 @@ class MessageLookup extends MessageLookupByLibrary {
         "login": MessageLookupByLibrary.simpleMessage("登录"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
         "my_post": MessageLookupByLibrary.simpleMessage("我的发布"),
+        "new_mobile_phone": MessageLookupByLibrary.simpleMessage("新的手机号码"),
+        "new_password": MessageLookupByLibrary.simpleMessage("新密码"),
         "next": MessageLookupByLibrary.simpleMessage("下一步"),
         "notice_board": MessageLookupByLibrary.simpleMessage("消息板"),
         "notification": MessageLookupByLibrary.simpleMessage("通知"),
+        "old_mobile_phone": MessageLookupByLibrary.simpleMessage("旧的手机号码"),
         "other": MessageLookupByLibrary.simpleMessage("其他"),
         "owner": MessageLookupByLibrary.simpleMessage("业主"),
         "owner_or_tenant": MessageLookupByLibrary.simpleMessage("您是业主还是租户?"),
@@ -93,6 +97,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("现在,让我们把你和你的社区关联起来"),
         "sign_up_verify_txt":
             MessageLookupByLibrary.simpleMessage("我们已经向您发送了短信验证码,请在下面输入"),
+        "submit": MessageLookupByLibrary.simpleMessage("提交"),
         "tenant": MessageLookupByLibrary.simpleMessage("租户"),
         "tenants_desc1": MessageLookupByLibrary.simpleMessage("我的名字在租赁协议上"),
         "tenants_desc2": MessageLookupByLibrary.simpleMessage("我和指定的租户住在同一个家庭"),

+ 5 - 0
packages/cs_resources/lib/generated/intl/messages_zh_HK.dart

@@ -38,6 +38,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "block_example_desc":
             MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
+        "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
@@ -63,9 +64,12 @@ class MessageLookup extends MessageLookupByLibrary {
         "login": MessageLookupByLibrary.simpleMessage("登录"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
         "my_post": MessageLookupByLibrary.simpleMessage("我的发布"),
+        "new_mobile_phone": MessageLookupByLibrary.simpleMessage("新的手机号码"),
+        "new_password": MessageLookupByLibrary.simpleMessage("新密码"),
         "next": MessageLookupByLibrary.simpleMessage("下一步"),
         "notice_board": MessageLookupByLibrary.simpleMessage("通知板"),
         "notification": MessageLookupByLibrary.simpleMessage("通知"),
+        "old_mobile_phone": MessageLookupByLibrary.simpleMessage("旧的手机号码"),
         "other": MessageLookupByLibrary.simpleMessage("其他"),
         "password": MessageLookupByLibrary.simpleMessage("密码"),
         "password_format": MessageLookupByLibrary.simpleMessage("8位数字或字母"),
@@ -85,6 +89,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("现在,让我们把你和你的社区关联起来"),
         "sign_up_verify_txt":
             MessageLookupByLibrary.simpleMessage("我们已经向您发送了短信验证码,请在下面输入"),
+        "submit": MessageLookupByLibrary.simpleMessage("提交"),
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),

+ 50 - 0
packages/cs_resources/lib/generated/l10n.dart

@@ -810,6 +810,56 @@ class S {
     );
   }
 
+  /// `Old Mobile Phone`
+  String get old_mobile_phone {
+    return Intl.message(
+      'Old Mobile Phone',
+      name: 'old_mobile_phone',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `New Mobile Phone`
+  String get new_mobile_phone {
+    return Intl.message(
+      'New Mobile Phone',
+      name: 'new_mobile_phone',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Submit`
+  String get submit {
+    return Intl.message(
+      'Submit',
+      name: 'submit',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `New Password`
+  String get new_password {
+    return Intl.message(
+      'New Password',
+      name: 'new_password',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Confirm New Password`
+  String get confirm_new_password {
+    return Intl.message(
+      'Confirm New Password',
+      name: 'confirm_new_password',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Other`
   String get other {
     return Intl.message(

+ 5 - 0
packages/cs_resources/lib/l10n/intl_en.arb

@@ -75,5 +75,10 @@
   "rate_us": "Rate Us",
   "version_no": "Version No.",
   "Logout": "Logout",
+  "old_mobile_phone": "Old Mobile Phone",
+  "new_mobile_phone": "New Mobile Phone",
+  "submit": "Submit",
+  "new_password": "New Password",
+  "confirm_new_password": "Confirm New Password",
   "other": "Other"
 }

+ 5 - 0
packages/cs_resources/lib/l10n/intl_zh_CN.arb

@@ -75,5 +75,10 @@
   "rate_us": "评价我们",
   "version_no": "版本号.",
   "Logout": "退出登录",
+  "old_mobile_phone": "旧的手机号码",
+  "new_mobile_phone": "新的手机号码",
+  "submit": "提交",
+  "new_password": "新密码",
+  "confirm_new_password": "确认新密码",
   "other": "其他"
 }

+ 5 - 0
packages/cs_resources/lib/l10n/intl_zh_HK.arb

@@ -61,5 +61,10 @@
   "rate_us": "评价我们",
   "version_no": "版本号.",
   "Logout": "退出登录",
+  "old_mobile_phone": "旧的手机号码",
+  "new_mobile_phone": "新的手机号码",
+  "submit": "提交",
+  "new_password": "新密码",
+  "confirm_new_password": "确认新密码",
   "other": "其他"
 }