ソースを参照

选择房子与单元

liukai 2 週間 前
コミット
733bda7175
共有39 個のファイルを変更した1052 個の追加129 個の削除を含む
  1. 19 19
      app/pubspec_overrides.yaml
  2. 205 0
      packages/cpt_auth/lib/modules/select_estate/select_estate_page.dart
  3. 33 0
      packages/cpt_auth/lib/modules/select_estate/select_estate_state.dart
  4. 24 0
      packages/cpt_auth/lib/modules/select_estate/select_estate_view_model.dart
  5. 27 0
      packages/cpt_auth/lib/modules/select_estate/select_estate_view_model.g.dart
  6. 295 0
      packages/cpt_auth/lib/modules/select_unit/select_unit_page.dart
  7. 47 0
      packages/cpt_auth/lib/modules/select_unit/select_unit_state.dart
  8. 24 0
      packages/cpt_auth/lib/modules/select_unit/select_unit_view_model.dart
  9. 27 0
      packages/cpt_auth/lib/modules/select_unit/select_unit_view_model.g.dart
  10. 1 1
      packages/cpt_auth/lib/modules/sing_up_success/sign_up_success_view_model.g.dart
  11. 1 1
      packages/cpt_auth/lib/modules/sing_up_verify/sign_up_verify_view_model.g.dart
  12. 2 1
      packages/cpt_auth/lib/router/component/auth_component_service.dart
  13. 4 0
      packages/cpt_auth/lib/router/page/auth_page_router.dart
  14. 74 0
      packages/cpt_auth/lib/router/page/auth_page_router.gr.dart
  15. 7 7
      packages/cpt_auth/pubspec_overrides.yaml
  16. 7 7
      packages/cpt_community/pubspec_overrides.yaml
  17. 7 7
      packages/cpt_facility/pubspec_overrides.yaml
  18. 7 7
      packages/cpt_form/pubspec_overrides.yaml
  19. 7 7
      packages/cpt_main/pubspec_overrides.yaml
  20. 7 7
      packages/cpt_notice_board/pubspec_overrides.yaml
  21. 7 7
      packages/cpt_payment/pubspec_overrides.yaml
  22. 7 7
      packages/cpt_profile/pubspec_overrides.yaml
  23. 7 7
      packages/cpt_property/pubspec_overrides.yaml
  24. 7 7
      packages/cpt_rewards/pubspec_overrides.yaml
  25. 7 7
      packages/cpt_services/pubspec_overrides.yaml
  26. 6 6
      packages/cs_domain/pubspec_overrides.yaml
  27. 7 7
      packages/cs_initializer/pubspec_overrides.yaml
  28. 6 6
      packages/cs_plugin_basic/pubspec_overrides.yaml
  29. 4 4
      packages/cs_plugin_platform/pubspec_overrides.yaml
  30. 16 1
      packages/cs_resources/lib/generated/intl/messages_en.dart
  31. 14 1
      packages/cs_resources/lib/generated/intl/messages_zh_CN.dart
  32. 14 1
      packages/cs_resources/lib/generated/intl/messages_zh_HK.dart
  33. 90 0
      packages/cs_resources/lib/generated/l10n.dart
  34. 9 0
      packages/cs_resources/lib/l10n/intl_en.arb
  35. 9 0
      packages/cs_resources/lib/l10n/intl_zh_CN.arb
  36. 9 0
      packages/cs_resources/lib/l10n/intl_zh_HK.arb
  37. 3 1
      packages/cs_router/lib/path/router_path.dart
  38. 2 0
      packages/cs_widgets/lib/my_appbar.dart
  39. 3 3
      packages/cs_widgets/pubspec_overrides.yaml

+ 19 - 19
app/pubspec_overrides.yaml

@@ -1,40 +1,40 @@
 # melos_managed_dependency_overrides: cpt_auth,cpt_community,cpt_facility,cpt_form,cpt_main,cpt_notice_board,cpt_payment,cpt_profile,cpt_rewards,cpt_services,cs_resources,domain,initializer,plugin_basic,plugin_platform,router,shared,widgets,cpt_property
 dependency_overrides:
   cpt_auth:
-    path: ..\\packages\\cpt_auth
+    path: ../packages/cpt_auth
   cpt_community:
-    path: ..\\packages\\cpt_community
+    path: ../packages/cpt_community
   cpt_facility:
-    path: ..\\packages\\cpt_facility
+    path: ../packages/cpt_facility
   cpt_form:
-    path: ..\\packages\\cpt_form
+    path: ../packages/cpt_form
   cpt_main:
-    path: ..\\packages\\cpt_main
+    path: ../packages/cpt_main
   cpt_notice_board:
-    path: ..\\packages\\cpt_notice_board
+    path: ../packages/cpt_notice_board
   cpt_payment:
-    path: ..\\packages\\cpt_payment
+    path: ../packages/cpt_payment
   cpt_profile:
-    path: ..\\packages\\cpt_profile
+    path: ../packages/cpt_profile
   cpt_property:
-    path: ..\\packages\\cpt_property
+    path: ../packages/cpt_property
   cpt_rewards:
-    path: ..\\packages\\cpt_rewards
+    path: ../packages/cpt_rewards
   cpt_services:
-    path: ..\\packages\\cpt_services
+    path: ../packages/cpt_services
   cs_resources:
-    path: ..\\packages\\cs_resources
+    path: ../packages/cs_resources
   domain:
-    path: ..\\packages\\cs_domain
+    path: ../packages/cs_domain
   initializer:
-    path: ..\\packages\\cs_initializer
+    path: ../packages/cs_initializer
   plugin_basic:
-    path: ..\\packages\\cs_plugin_basic
+    path: ../packages/cs_plugin_basic
   plugin_platform:
-    path: ..\\packages\\cs_plugin_platform
+    path: ../packages/cs_plugin_platform
   router:
-    path: ..\\packages\\cs_router
+    path: ../packages/cs_router
   shared:
-    path: ..\\packages\\cs_shared
+    path: ../packages/cs_shared
   widgets:
-    path: ..\\packages\\cs_widgets
+    path: ../packages/cs_widgets

+ 205 - 0
packages/cpt_auth/lib/modules/select_estate/select_estate_page.dart

@@ -0,0 +1,205 @@
+import 'package:cpt_auth/modules/select_estate/select_estate_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:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:router/ext/auto_router_extensions.dart';
+import 'package:shared/utils/log_utils.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/auth_page_router.dart';
+import 'select_estate_view_model.dart';
+
+@RoutePage()
+class SelectEstatePage extends HookConsumerWidget {
+  SelectEstatePage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(SelectEstatePageRoute());
+    } else {
+      appRouter.push(SelectEstatePageRoute());
+    }
+  }
+
+  // 为需要测量的控件创建 GlobalKey
+  final GlobalKey _appbarKey = GlobalKey();
+  final GlobalKey _topImageKey = GlobalKey();
+  final GlobalKey _titleKey = GlobalKey();
+  final GlobalKey _inputKey = GlobalKey();
+  final GlobalKey _descriptionKey = GlobalKey();
+  final GlobalKey _buttonKey = GlobalKey();
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.watch(selectEstateViewModelProvider.notifier);
+    final state = ref.watch(selectEstateViewModelProvider);
+
+    // 获取屏幕高度
+    final screenHeight = MediaQuery.of(context).size.height;
+    final statusBarHeight = MediaQuery.of(context).padding.top;
+    final navigationBarHeight = MediaQuery.of(context).padding.bottom;
+
+    useEffect(() {
+      double usedHeight = 0;
+      // 组件挂载时执行,获取控件高度
+      WidgetsBinding.instance.addPostFrameCallback((_) {
+        // 获取各个控件的高度
+        usedHeight += _appbarKey.currentContext?.size?.height ?? 0;
+        usedHeight += _topImageKey.currentContext?.size?.height ?? 0;
+        usedHeight += _titleKey.currentContext?.size?.height ?? 0;
+        usedHeight += _inputKey.currentContext?.size?.height ?? 0;
+        usedHeight += _descriptionKey.currentContext?.size?.height ?? 0;
+        usedHeight += _buttonKey.currentContext?.size?.height ?? 0;
+
+        // 计算剩余空间
+        double remainingSpace = screenHeight - statusBarHeight - navigationBarHeight - usedHeight - 38 - 28 - 20 - 20;
+
+        Log.d("计算剩余空间:$remainingSpace");
+
+        if (remainingSpace > 0) {
+          // 设置一个状态来存储剩余空间的高度
+          viewModel.setRemainingSpace(remainingSpace);
+        }
+      });
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Scaffold(
+      appBar: MyAppBar.appBar(context, S.current.yy_home_accounts, key: _appbarKey),
+      backgroundColor: context.appColors.backgroundDefault,
+      body: SingleChildScrollView(
+        scrollDirection: Axis.vertical,
+        physics: const BouncingScrollPhysics(),
+        child: Container(
+          padding: const EdgeInsets.symmetric(horizontal: 38),
+          width: double.infinity,
+          child: Column(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              //顶部图片
+              MyAssetImage(
+                key: _topImageKey,
+                Assets.authChooseEstateBuilding,
+                width: 267,
+                height: 158,
+              ).marginOnly(top: 28, bottom: 38),
+
+              MyTextView(
+                key: _titleKey,
+                S.current.estate_or_building_name,
+                fontSize: 23,
+                marginBottom: 20,
+                textAlign: TextAlign.center,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              //输入资产的名称
+              _buildInputLayout(
+                context,
+                state,
+                "estate",
+                key: _inputKey,
+                textInputAction: TextInputAction.done,
+                onSubmit: (formKey, value) {
+                  state.formData[formKey]!['focusNode'].unfocus();
+                },
+              ),
+
+              MyTextView(
+                key: _descriptionKey,
+                S.current.estate_name_desc,
+                fontSize: 15,
+                marginTop: 19,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              SizedBox(
+                height: state.remainingSpace, // 使用剩余空间的值
+              ),
+
+              MyButton(
+                key: _buttonKey,
+                onPressed: viewModel.submitEstate,
+                text: S.current.next,
+                textColor: Colors.white,
+                backgroundColor: context.appColors.btnBgDefault,
+                fontWeight: FontWeight.w500,
+                type: ClickType.throttle,
+                fontSize: 16,
+                minHeight: 50,
+                radius: 5,
+              ).marginOnly(top: 48, bottom: 32),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  /// 输入框
+  Widget _buildInputLayout(
+    BuildContext context,
+    SelectEstateState state,
+    String formKey, {
+    Key? 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(
+        formKey,
+        key: key,
+        fillBackgroundColor: context.appColors.authFiledBG,
+        state.formData[formKey]!['value'],
+        hintText: state.formData[formKey]!['hintText'],
+        hintStyle: TextStyle(
+          color: context.appColors.authFiledHint,
+          fontSize: 16.0,
+          fontWeight: FontWeight.w500,
+        ),
+        controller: state.formData[formKey]!['controller'],
+        focusNode: state.formData[formKey]!['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,
+      ),
+    );
+  }
+}

+ 33 - 0
packages/cpt_auth/lib/modules/select_estate/select_estate_state.dart

@@ -0,0 +1,33 @@
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:flutter/material.dart';
+
+class SelectEstateState {
+  //表单的校验与数据
+  final Map<String, Map<String, dynamic>> formData;
+
+  double remainingSpace;
+
+  // ===================================  Begin  ↓  ===================================
+
+  SelectEstateState({
+    this.remainingSpace = 0,
+    Map<String, Map<String, dynamic>>? formData,
+  }) : formData = formData ??
+            {
+              'estate': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': S.current.type_here,
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+            };
+
+  SelectEstateState copyWith({
+    double? remainingSpace,
+  }) {
+    return SelectEstateState(
+      remainingSpace: remainingSpace ?? this.remainingSpace,
+    );
+  }
+}

+ 24 - 0
packages/cpt_auth/lib/modules/select_estate/select_estate_view_model.dart

@@ -0,0 +1,24 @@
+
+import 'package:cpt_auth/modules/select_estate/select_estate_state.dart';
+import 'package:cpt_auth/modules/select_unit/select_unit_page.dart';
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+
+part 'select_estate_view_model.g.dart';
+
+@riverpod
+class SelectEstateViewModel extends _$SelectEstateViewModel {
+
+  @override
+  SelectEstateState build(){
+    return SelectEstateState();
+  }
+
+  /// 提交并进入下一步
+  void submitEstate() {
+    SelectUnitPage.startInstance();
+  }
+
+  void setRemainingSpace(double remainingSpace) {
+    state = state.copyWith(remainingSpace: remainingSpace);
+  }
+}

+ 27 - 0
packages/cpt_auth/lib/modules/select_estate/select_estate_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'select_estate_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$selectEstateViewModelHash() =>
+    r'44d0829cc1f4d48b2fa0991838a8217e77898786';
+
+/// See also [SelectEstateViewModel].
+@ProviderFor(SelectEstateViewModel)
+final selectEstateViewModelProvider = AutoDisposeNotifierProvider<
+    SelectEstateViewModel, SelectEstateState>.internal(
+  SelectEstateViewModel.new,
+  name: r'selectEstateViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$selectEstateViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$SelectEstateViewModel = AutoDisposeNotifier<SelectEstateState>;
+// 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

+ 295 - 0
packages/cpt_auth/lib/modules/select_unit/select_unit_page.dart

@@ -0,0 +1,295 @@
+import 'package:cpt_auth/modules/select_estate/select_estate_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:flutter_hooks/flutter_hooks.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:router/ext/auto_router_extensions.dart';
+import 'package:shared/utils/log_utils.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/auth_page_router.dart';
+import 'select_unit_state.dart';
+import 'select_unit_view_model.dart';
+
+@RoutePage()
+class SelectUnitPage extends HookConsumerWidget {
+  SelectUnitPage({Key? key}) : super(key: key);
+
+  //启动当前页面
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(SelectUnitPageRoute());
+    } else {
+      appRouter.push(SelectUnitPageRoute());
+    }
+  }
+
+  // 为需要测量的控件创建 GlobalKey
+  final GlobalKey _appbarKey = GlobalKey();
+  final GlobalKey _topImageKey = GlobalKey();
+  final GlobalKey _inputKey = GlobalKey();
+  final GlobalKey _description1Key = GlobalKey();
+  final GlobalKey _description2Key = GlobalKey();
+  final GlobalKey _description3Key = GlobalKey();
+  final GlobalKey _buttonKey = GlobalKey();
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.watch(selectUnitViewModelProvider.notifier);
+    final state = ref.watch(selectUnitViewModelProvider);
+
+    // 获取屏幕高度
+    final screenHeight = MediaQuery.of(context).size.height;
+    final statusBarHeight = MediaQuery.of(context).padding.top;
+    final navigationBarHeight = MediaQuery.of(context).padding.bottom;
+
+    useEffect(() {
+      double usedHeight = 0;
+      // 组件挂载时执行,获取控件高度
+      WidgetsBinding.instance.addPostFrameCallback((_) {
+        // 获取各个控件的高度
+        usedHeight += _appbarKey.currentContext?.size?.height ?? 0;
+        usedHeight += _topImageKey.currentContext?.size?.height ?? 0;
+        usedHeight += _inputKey.currentContext?.size?.height ?? 0;
+        usedHeight += _description1Key.currentContext?.size?.height ?? 0;
+        usedHeight += _description2Key.currentContext?.size?.height ?? 0;
+        usedHeight += _description3Key.currentContext?.size?.height ?? 0;
+        usedHeight += _buttonKey.currentContext?.size?.height ?? 0;
+
+        // 计算剩余空间
+        double remainingSpace = screenHeight - statusBarHeight - navigationBarHeight - usedHeight - 30 - 20 - 25 - 20 - 20;
+
+        Log.d("计算剩余空间:$remainingSpace");
+
+        if (remainingSpace > 0) {
+          // 设置一个状态来存储剩余空间的高度
+          viewModel.setRemainingSpace(remainingSpace);
+        }
+      });
+      return () {
+        // 组件卸载时执行
+      };
+    }, []);
+
+    return Scaffold(
+      appBar: MyAppBar.appBar(context, S.current.yy_home_accounts, key: _appbarKey),
+      backgroundColor: context.appColors.backgroundDefault,
+      body: SingleChildScrollView(
+        scrollDirection: Axis.vertical,
+        physics: const BouncingScrollPhysics(),
+        child: Container(
+          padding: const EdgeInsets.symmetric(horizontal: 20),
+          width: double.infinity,
+          child: Column(
+            mainAxisSize: MainAxisSize.max,
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              //顶部图片
+              MyAssetImage(
+                key: _topImageKey,
+                Assets.authSignUpUnitImg,
+                width: 266.5,
+                height: 162,
+              ).marginOnly(top: 30, bottom: 20),
+
+              Row(
+                key: _inputKey,
+                mainAxisSize: MainAxisSize.min,
+                children: [
+                  //街区
+                  Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      MyTextView(
+                        S.current.block,
+                        marginBottom: 9,
+                        textColor: context.appColors.textBlack,
+                        fontSize: 16,
+                        isFontMedium: true,
+                      ),
+
+                      // 表单 - 街区
+                      _buildInputLayout(
+                        context,
+                        state,
+                        "block",
+                        textInputAction: TextInputAction.next,
+                        onSubmit: (formKey, value) {
+                          state.formData[formKey]!['focusNode'].unfocus();
+                          FocusScope.of(context).requestFocus(state.formData['unit']!['focusNode']);
+                        },
+                      ).constrained(width: 88),
+                    ],
+                  ),
+
+                  MyTextView(
+                    "#",
+                    marginTop: 20,
+                    marginLeft: 8.5,
+                    marginRight: 8.5,
+                    textColor: context.appColors.textBlack,
+                    fontSize: 16,
+                    isFontMedium: true,
+                  ),
+
+                  //单元
+                  Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      MyTextView(
+                        S.current.unit_number,
+                        marginBottom: 9,
+                        textColor: context.appColors.textBlack,
+                        fontSize: 16,
+                        isFontMedium: true,
+                      ),
+                      Row(
+                        children: [
+                          // 表单 - 单元
+                          _buildInputLayout(
+                            context,
+                            state,
+                            "unit",
+                            textInputAction: TextInputAction.next,
+                            onSubmit: (formKey, value) {
+                              state.formData[formKey]!['focusNode'].unfocus();
+                              FocusScope.of(context).requestFocus(state.formData['room']!['focusNode']);
+                            },
+                          ).constrained(width: 83),
+
+                          MyTextView(
+                            "-",
+                            textColor: context.appColors.textBlack,
+                            marginLeft: 4,
+                            marginRight: 4,
+                            isFontMedium: true,
+                          ),
+
+                          // 表单 - 房号
+                          _buildInputLayout(
+                            context,
+                            state,
+                            "room",
+                            textInputAction: TextInputAction.done,
+                            onSubmit: (formKey, value) {
+                              state.formData[formKey]!['focusNode'].unfocus();
+                            },
+                          ).constrained(width: 83),
+                        ],
+                      ),
+                    ],
+                  ),
+                ],
+              ),
+
+              MyTextView(
+                key: _description1Key,
+                S.current.block_desc,
+                fontSize: 15,
+                marginTop: 25,
+                textAlign: TextAlign.center,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              MyTextView(
+                key: _description2Key,
+                S.current.block_example,
+                fontSize: 15,
+                marginTop: 20,
+                textAlign: TextAlign.center,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              MyTextView(
+                key: _description3Key,
+                S.current.block_example_desc,
+                fontSize: 15,
+                marginTop: 20,
+                textAlign: TextAlign.center,
+                isFontMedium: true,
+                textColor: context.appColors.textBlack,
+              ),
+
+              SizedBox(
+                height: state.remainingSpace, // 使用剩余空间的值
+              ),
+
+              MyButton(
+                key: _buttonKey,
+                onPressed: viewModel.submitUnit,
+                text: S.current.next,
+                textColor: Colors.white,
+                backgroundColor: context.appColors.btnBgDefault,
+                fontWeight: FontWeight.w500,
+                type: ClickType.throttle,
+                fontSize: 16,
+                minHeight: 50,
+                radius: 5,
+              ).marginOnly(top: 48, bottom: 32, left: 18, right: 18),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  /// 输入框
+  Widget _buildInputLayout(
+    BuildContext context,
+    SelectUnitState state,
+    String key, {
+    double marginTop = 0,
+    bool? showRightIcon = false, //是否展示右侧的布局
+    Widget? rightWidget, //右侧的布局
+    TextInputType textInputType = TextInputType.number,
+    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,
+      ),
+    );
+  }
+}

+ 47 - 0
packages/cpt_auth/lib/modules/select_unit/select_unit_state.dart

@@ -0,0 +1,47 @@
+import 'package:flutter/material.dart';
+
+class SelectUnitState {
+  //表单的校验与数据
+  final Map<String, Map<String, dynamic>> formData;
+
+  double remainingSpace;
+
+  // ===================================  Begin  ↓  ===================================
+
+  SelectUnitState({
+    this.remainingSpace = 0,
+    Map<String, Map<String, dynamic>>? formData,
+  }) : formData = formData ??
+            {
+              'block': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': '',
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'unit': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': '',
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+              'room': {
+                'value': '',
+                'controller': TextEditingController(),
+                'hintText': '',
+                'focusNode': FocusNode(),
+                'obsecure': false,
+              },
+            };
+
+  SelectUnitState copyWith({
+    double? remainingSpace,
+  }) {
+    return SelectUnitState(
+      remainingSpace: remainingSpace ?? this.remainingSpace,
+    );
+  }
+
+}

+ 24 - 0
packages/cpt_auth/lib/modules/select_unit/select_unit_view_model.dart

@@ -0,0 +1,24 @@
+
+import 'package:cpt_auth/modules/select_unit/select_unit_state.dart';
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+
+part 'select_unit_view_model.g.dart';
+
+@riverpod
+class SelectUnitViewModel extends _$SelectUnitViewModel {
+
+  @override
+  SelectUnitState build(){
+    return SelectUnitState();
+  }
+
+  /// 提交选择的街道与单元
+  void submitUnit() {
+
+  }
+
+  void setRemainingSpace(double remainingSpace) {
+    state = state.copyWith(remainingSpace: remainingSpace);
+  }
+
+}

+ 27 - 0
packages/cpt_auth/lib/modules/select_unit/select_unit_view_model.g.dart

@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'select_unit_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$selectUnitViewModelHash() =>
+    r'33be3440f5134f21ce9a9ecae640e97afe250494';
+
+/// See also [SelectUnitViewModel].
+@ProviderFor(SelectUnitViewModel)
+final selectUnitViewModelProvider =
+    AutoDisposeNotifierProvider<SelectUnitViewModel, SelectUnitState>.internal(
+  SelectUnitViewModel.new,
+  name: r'selectUnitViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$selectUnitViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$SelectUnitViewModel = AutoDisposeNotifier<SelectUnitState>;
+// 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

+ 1 - 1
packages/cpt_auth/lib/modules/sing_up_success/sign_up_success_view_model.g.dart

@@ -7,7 +7,7 @@ part of 'sign_up_success_view_model.dart';
 // **************************************************************************
 
 String _$signUpSuccessViewModelHash() =>
-    r'2f571b709af1af896a291c7515d60df05e629aa7';
+    r'715f2ae03093839694f7336d2cf8f0b57ce65d95';
 
 /// See also [SignUpSuccessViewModel].
 @ProviderFor(SignUpSuccessViewModel)

+ 1 - 1
packages/cpt_auth/lib/modules/sing_up_verify/sign_up_verify_view_model.g.dart

@@ -7,7 +7,7 @@ part of 'sign_up_verify_view_model.dart';
 // **************************************************************************
 
 String _$signUpVerifyViewModelHash() =>
-    r'505c17b6c8fee69bdc0758c329ecdd14dcb8da3c';
+    r'3ed4563220e5e1ae25ff7650c8d005e496e68334';
 
 /// See also [SignUpVerifyViewModel].
 @ProviderFor(SignUpVerifyViewModel)

+ 2 - 1
packages/cpt_auth/lib/router/component/auth_component_service.dart

@@ -9,6 +9,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:riverpod_annotation/riverpod_annotation.dart';
 
 import '../../modules/auth_login/auth_login_page.dart';
+import '../../modules/select_estate/select_estate_page.dart';
 
 part 'auth_component_service.g.dart';
 
@@ -25,6 +26,6 @@ class AuthComponentService extends AuthService {
 
   @override
   void startResetPasswordPage() {
-    ForgotInputPage.startInstance();
+    SelectEstatePage.startInstance();
   }
 }

+ 4 - 0
packages/cpt_auth/lib/router/page/auth_page_router.dart

@@ -9,6 +9,8 @@ import '../../modules/forgot_verify/forgot_verify_page.dart';
 import '../../modules/sign_up/sign_up_page.dart';
 import '../../modules/sing_up_verify/sign_up_verify_page.dart';
 import '../../modules/sing_up_success/sign_up_success_page.dart';
+import '../../modules/select_estate/select_estate_page.dart';
+import '../../modules/select_unit/select_unit_page.dart';
 
 
 
@@ -27,5 +29,7 @@ class AuthPageRouter extends _$AuthPageRouter {
     CustomRoute(page: SignUpPageRoute.page, path: RouterPath.authSignUp, transitionsBuilder: applySlideTransition),
     CustomRoute(page: SignUpVerifyPageRoute.page, path: RouterPath.authSignUpVerify, transitionsBuilder: applySlideTransition),
     CustomRoute(page: SignUpSuccessPageRoute.page, path: RouterPath.authSignUpSuccess, transitionsBuilder: applySlideTransition),
+    CustomRoute(page: SelectEstatePageRoute.page, path: RouterPath.authSelectEstate, transitionsBuilder: applySlideTransition),
+    CustomRoute(page: SelectUnitPageRoute.page, path: RouterPath.authSelectUnit, transitionsBuilder: applySlideTransition),
   ];
 }

+ 74 - 0
packages/cpt_auth/lib/router/page/auth_page_router.gr.dart

@@ -33,6 +33,22 @@ abstract class _$AuthPageRouter extends RootStackRouter {
         child: const ForgotVerifyPage(),
       );
     },
+    SelectEstatePageRoute.name: (routeData) {
+      final args = routeData.argsAs<SelectEstatePageRouteArgs>(
+          orElse: () => const SelectEstatePageRouteArgs());
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: SelectEstatePage(key: args.key),
+      );
+    },
+    SelectUnitPageRoute.name: (routeData) {
+      final args = routeData.argsAs<SelectUnitPageRouteArgs>(
+          orElse: () => const SelectUnitPageRouteArgs());
+      return AutoRoutePage<dynamic>(
+        routeData: routeData,
+        child: SelectUnitPage(key: args.key),
+      );
+    },
     SignUpPageRoute.name: (routeData) {
       return AutoRoutePage<dynamic>(
         routeData: routeData,
@@ -97,6 +113,64 @@ class ForgotVerifyPageRoute extends PageRouteInfo<void> {
 }
 
 /// generated route for
+/// [SelectEstatePage]
+class SelectEstatePageRoute extends PageRouteInfo<SelectEstatePageRouteArgs> {
+  SelectEstatePageRoute({
+    Key? key,
+    List<PageRouteInfo>? children,
+  }) : super(
+          SelectEstatePageRoute.name,
+          args: SelectEstatePageRouteArgs(key: key),
+          initialChildren: children,
+        );
+
+  static const String name = 'SelectEstatePageRoute';
+
+  static const PageInfo<SelectEstatePageRouteArgs> page =
+      PageInfo<SelectEstatePageRouteArgs>(name);
+}
+
+class SelectEstatePageRouteArgs {
+  const SelectEstatePageRouteArgs({this.key});
+
+  final Key? key;
+
+  @override
+  String toString() {
+    return 'SelectEstatePageRouteArgs{key: $key}';
+  }
+}
+
+/// generated route for
+/// [SelectUnitPage]
+class SelectUnitPageRoute extends PageRouteInfo<SelectUnitPageRouteArgs> {
+  SelectUnitPageRoute({
+    Key? key,
+    List<PageRouteInfo>? children,
+  }) : super(
+          SelectUnitPageRoute.name,
+          args: SelectUnitPageRouteArgs(key: key),
+          initialChildren: children,
+        );
+
+  static const String name = 'SelectUnitPageRoute';
+
+  static const PageInfo<SelectUnitPageRouteArgs> page =
+      PageInfo<SelectUnitPageRouteArgs>(name);
+}
+
+class SelectUnitPageRouteArgs {
+  const SelectUnitPageRouteArgs({this.key});
+
+  final Key? key;
+
+  @override
+  String toString() {
+    return 'SelectUnitPageRouteArgs{key: $key}';
+  }
+}
+
+/// generated route for
 /// [SignUpPage]
 class SignUpPageRoute extends PageRouteInfo<void> {
   const SignUpPageRoute({List<PageRouteInfo>? children})

+ 7 - 7
packages/cpt_auth/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_community/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_facility/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_form/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_main/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_notice_board/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_payment/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_profile/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_property/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_rewards/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cpt_services/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 6 - 6
packages/cs_domain/pubspec_overrides.yaml

@@ -1,14 +1,14 @@
 # melos_managed_dependency_overrides: cs_resources,plugin_platform,shared,widgets,plugin_basic,router
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 7 - 7
packages/cs_initializer/pubspec_overrides.yaml

@@ -1,16 +1,16 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_basic,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_basic:
-    path: ..\\cs_plugin_basic
+    path: ../cs_plugin_basic
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 6 - 6
packages/cs_plugin_basic/pubspec_overrides.yaml

@@ -1,14 +1,14 @@
 # melos_managed_dependency_overrides: cs_resources,domain,plugin_platform,router,shared,widgets
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   domain:
-    path: ..\\cs_domain
+    path: ../cs_domain
   plugin_platform:
-    path: ..\\cs_plugin_platform
+    path: ../cs_plugin_platform
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 4 - 4
packages/cs_plugin_platform/pubspec_overrides.yaml

@@ -1,10 +1,10 @@
 # melos_managed_dependency_overrides: cs_resources,shared,widgets,router
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared
   widgets:
-    path: ..\\cs_widgets
+    path: ../cs_widgets

+ 16 - 1
packages/cs_resources/lib/generated/intl/messages_en.dart

@@ -25,6 +25,13 @@ class MessageLookup extends MessageLookupByLibrary {
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
         "agree_to": MessageLookupByLibrary.simpleMessage("Agree to"),
+        "block": MessageLookupByLibrary.simpleMessage("Block"),
+        "block_desc": MessageLookupByLibrary.simpleMessage(
+            "Block refers to the street number of the unit\'s official mailing address"),
+        "block_example": MessageLookupByLibrary.simpleMessage(
+            "123 Example Road #08-08 Country 123456"),
+        "block_example_desc": MessageLookupByLibrary.simpleMessage(
+            "123 is the block number #08-08 is the unit number"),
         "confirm_password":
             MessageLookupByLibrary.simpleMessage("Confirm Password"),
         "create_new_yy_home_account":
@@ -32,6 +39,10 @@ class MessageLookup extends MessageLookupByLibrary {
         "did_not_receive":
             MessageLookupByLibrary.simpleMessage("Did Not Receive?"),
         "email": MessageLookupByLibrary.simpleMessage("Email"),
+        "estate_name_desc": MessageLookupByLibrary.simpleMessage(
+            "Tell us the name of the estateor building you are applying to"),
+        "estate_or_building_name":
+            MessageLookupByLibrary.simpleMessage("Estate or Building Name?"),
         "facility": MessageLookupByLibrary.simpleMessage("Facility"),
         "first_name": MessageLookupByLibrary.simpleMessage("First Name"),
         "forgot_password":
@@ -69,9 +80,13 @@ class MessageLookup extends MessageLookupByLibrary {
         "terms_of_service":
             MessageLookupByLibrary.simpleMessage("Terms of Service"),
         "tries_left": MessageLookupByLibrary.simpleMessage("Tries Left"),
+        "type_here": MessageLookupByLibrary.simpleMessage("Type Here"),
+        "unit_number": MessageLookupByLibrary.simpleMessage("Unit Number"),
         "verification_code":
             MessageLookupByLibrary.simpleMessage("Verification Code"),
         "welcome_name": m0,
-        "you_have": MessageLookupByLibrary.simpleMessage("You have")
+        "you_have": MessageLookupByLibrary.simpleMessage("You have"),
+        "yy_home_accounts":
+            MessageLookupByLibrary.simpleMessage("YY Home Accounts")
       };
 }

+ 14 - 1
packages/cs_resources/lib/generated/intl/messages_zh_CN.dart

@@ -25,11 +25,21 @@ class MessageLookup extends MessageLookupByLibrary {
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
+        "block": MessageLookupByLibrary.simpleMessage("街区"),
+        "block_desc": MessageLookupByLibrary.simpleMessage("街区是指单位官方邮编街道号"),
+        "block_example":
+            MessageLookupByLibrary.simpleMessage("123 示例路 #08-08 国家 123456"),
+        "block_example_desc":
+            MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
         "email": MessageLookupByLibrary.simpleMessage("邮箱"),
+        "estate_name_desc":
+            MessageLookupByLibrary.simpleMessage("告诉我们您申请的公寓楼的名称"),
+        "estate_or_building_name":
+            MessageLookupByLibrary.simpleMessage("房产或建筑名称?"),
         "facility": MessageLookupByLibrary.simpleMessage("设施"),
         "first_name": MessageLookupByLibrary.simpleMessage("名"),
         "forgot_password": MessageLookupByLibrary.simpleMessage("忘记密码?"),
@@ -61,8 +71,11 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("我们已经向您发送了短信验证码,请在下面输入"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
+        "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
+        "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "welcome_name": m0,
-        "you_have": MessageLookupByLibrary.simpleMessage("你还有")
+        "you_have": MessageLookupByLibrary.simpleMessage("你还有"),
+        "yy_home_accounts": MessageLookupByLibrary.simpleMessage("YY Home 账户")
       };
 }

+ 14 - 1
packages/cs_resources/lib/generated/intl/messages_zh_HK.dart

@@ -25,11 +25,21 @@ class MessageLookup extends MessageLookupByLibrary {
   final messages = _notInlinedMessages(_notInlinedMessages);
   static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
         "agree_to": MessageLookupByLibrary.simpleMessage("同意"),
+        "block": MessageLookupByLibrary.simpleMessage("街区"),
+        "block_desc": MessageLookupByLibrary.simpleMessage("街区是指单位官方邮编街道号"),
+        "block_example":
+            MessageLookupByLibrary.simpleMessage("123 示例路 #08-08 国家 123456"),
+        "block_example_desc":
+            MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
         "create_new_yy_home_account":
             MessageLookupByLibrary.simpleMessage("创建新的 YY Home 账户"),
         "did_not_receive": MessageLookupByLibrary.simpleMessage("没有收到验证码?"),
         "email": MessageLookupByLibrary.simpleMessage("邮箱"),
+        "estate_name_desc":
+            MessageLookupByLibrary.simpleMessage("告诉我们您申请的公寓楼的名称"),
+        "estate_or_building_name":
+            MessageLookupByLibrary.simpleMessage("房产或建筑名称?"),
         "facility": MessageLookupByLibrary.simpleMessage("設施"),
         "first_name": MessageLookupByLibrary.simpleMessage("名"),
         "forgot_password": MessageLookupByLibrary.simpleMessage("忘记密码?"),
@@ -61,8 +71,11 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("我们已经向您发送了短信验证码,请在下面输入"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
         "tries_left": MessageLookupByLibrary.simpleMessage("次尝试机会"),
+        "type_here": MessageLookupByLibrary.simpleMessage("在此输入"),
+        "unit_number": MessageLookupByLibrary.simpleMessage("单元"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "welcome_name": m0,
-        "you_have": MessageLookupByLibrary.simpleMessage("你还有")
+        "you_have": MessageLookupByLibrary.simpleMessage("你还有"),
+        "yy_home_accounts": MessageLookupByLibrary.simpleMessage("YY Home 账户")
       };
 }

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

@@ -390,6 +390,96 @@ class S {
     );
   }
 
+  /// `YY Home Accounts`
+  String get yy_home_accounts {
+    return Intl.message(
+      'YY Home Accounts',
+      name: 'yy_home_accounts',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Block`
+  String get block {
+    return Intl.message(
+      'Block',
+      name: 'block',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Unit Number`
+  String get unit_number {
+    return Intl.message(
+      'Unit Number',
+      name: 'unit_number',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Block refers to the street number of the unit's official mailing address`
+  String get block_desc {
+    return Intl.message(
+      'Block refers to the street number of the unit\'s official mailing address',
+      name: 'block_desc',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `123 Example Road #08-08 Country 123456`
+  String get block_example {
+    return Intl.message(
+      '123 Example Road #08-08 Country 123456',
+      name: 'block_example',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `123 is the block number #08-08 is the unit number`
+  String get block_example_desc {
+    return Intl.message(
+      '123 is the block number #08-08 is the unit number',
+      name: 'block_example_desc',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Estate or Building Name?`
+  String get estate_or_building_name {
+    return Intl.message(
+      'Estate or Building Name?',
+      name: 'estate_or_building_name',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Type Here`
+  String get type_here {
+    return Intl.message(
+      'Type Here',
+      name: 'type_here',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Tell us the name of the estateor building you are applying to`
+  String get estate_name_desc {
+    return Intl.message(
+      'Tell us the name of the estateor building you are applying to',
+      name: 'estate_name_desc',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Other`
   String get other {
     return Intl.message(

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

@@ -33,5 +33,14 @@
   "sign_up_success_txt2": "Your username is your email address and please keep your password safe",
   "sign_up_success_txt3": "Now, let's get you connected to your estate and community",
   "get_started": "let's get started",
+  "yy_home_accounts": "YY Home Accounts",
+  "block": "Block",
+  "unit_number": "Unit Number",
+  "block_desc": "Block refers to the street number of the unit's official mailing address",
+  "block_example": "123 Example Road #08-08 Country 123456",
+  "block_example_desc": "123 is the block number #08-08 is the unit number",
+  "estate_or_building_name": "Estate or Building Name?",
+  "type_here": "Type Here",
+  "estate_name_desc": "Tell us the name of the estateor building you are applying to",
   "other": "Other"
 }

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

@@ -33,5 +33,14 @@
   "sign_up_success_txt2": "您的用户名是您的电子邮件地址,请保护您的密码安全",
   "sign_up_success_txt3": "现在,让我们把你和你的社区关联起来",
   "get_started": "让我们开始吧",
+  "yy_home_accounts": "YY Home 账户",
+  "block": "街区",
+  "unit_number": "单元",
+  "block_desc": "街区是指单位官方邮编街道号",
+  "block_example": "123 示例路 #08-08 国家 123456",
+  "block_example_desc": "123 是街区地址邮编 #08-08 是单元号码",
+  "estate_or_building_name": "房产或建筑名称?",
+  "type_here": "在此输入",
+  "estate_name_desc": "告诉我们您申请的公寓楼的名称",
   "other": "其他"
 }

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

@@ -33,5 +33,14 @@
   "sign_up_success_txt2": "您的用户名是您的电子邮件地址,请保护您的密码安全",
   "sign_up_success_txt3": "现在,让我们把你和你的社区关联起来",
   "get_started": "让我们开始吧",
+  "yy_home_accounts": "YY Home 账户",
+  "block": "街区",
+  "unit_number": "单元",
+  "block_desc": "街区是指单位官方邮编街道号",
+  "block_example": "123 示例路 #08-08 国家 123456",
+  "block_example_desc": "123 是街区地址邮编 #08-08 是单元号码",
+  "estate_or_building_name": "房产或建筑名称?",
+  "type_here": "在此输入",
+  "estate_name_desc": "告诉我们您申请的公寓楼的名称",
   "other": "其他"
 }

+ 3 - 1
packages/cs_router/lib/path/router_path.dart

@@ -10,7 +10,9 @@ class RouterPath {
   static const authForgotVerify = '/auth/forgot/verify'; //忘记密码校验
   static const authSignUp = '/auth/signup'; //注册
   static const authSignUpVerify = '/auth/signup/verify'; //注册的短信验证
-  static const authSignUpSuccess = '/auth/signup/success'; //注册的短信验证
+  static const authSignUpSuccess = '/auth/signup/success'; //账号注册成功
+  static const authSelectEstate = '/auth/select/estate'; //绑定社区
+  static const authSelectUnit = '/auth/select/unit'; //绑定楼栋与房间号
   static const authResetPassword = '/auth/rest_psd'; //重置密码
 
   //首页

+ 2 - 0
packages/cs_widgets/lib/my_appbar.dart

@@ -14,6 +14,7 @@ class MyAppBar {
   ///封装的默认的AppBar,Light默认模式下,黑色图标+黑色文本,Dark模式下,白色图标+白色文本
   static AppBar appBar(BuildContext context, String title,
       {void Function()? backCallback,
+      Key? key,
       String? backIconPath,
       double? backIconWidth,
       double? backIconHeight,
@@ -27,6 +28,7 @@ class MyAppBar {
     final bool isDarkMode = Theme.of(context).brightness == Brightness.dark;
 
     return AppBar(
+      key: key,
       backgroundColor: backgroundColor,
       surfaceTintColor: backgroundColor,
       systemOverlayStyle: systemUiOverlayStyle ?? ThemeConfig.getSystemUiOverlayStyleByTheme(context),

+ 3 - 3
packages/cs_widgets/pubspec_overrides.yaml

@@ -1,8 +1,8 @@
 # melos_managed_dependency_overrides: cs_resources,shared,router
 dependency_overrides:
   cs_resources:
-    path: ..\\cs_resources
+    path: ../cs_resources
   router:
-    path: ..\\cs_router
+    path: ../cs_router
   shared:
-    path: ..\\cs_shared
+    path: ../cs_shared