Browse Source

main页面与home页面的部分

liukai 2 weeks ago
parent
commit
d8e902f9a0
58 changed files with 1344 additions and 157 deletions
  1. 365 0
      packages/cpt_main/lib/modules/home/home_page.dart
  2. 103 0
      packages/cpt_main/lib/modules/home/home_state.dart
  3. 73 0
      packages/cpt_main/lib/modules/home/home_view_model.dart
  4. 26 0
      packages/cpt_main/lib/modules/home/home_view_model.g.dart
  5. 24 0
      packages/cpt_main/lib/modules/home/item_home_category.dart
  6. 60 0
      packages/cpt_main/lib/modules/home/item_home_last_news.dart
  7. 72 0
      packages/cpt_main/lib/modules/home/item_home_last_trans.dart
  8. 53 0
      packages/cpt_main/lib/modules/home/item_home_manage_guide.dart
  9. 49 0
      packages/cpt_main/lib/modules/home/item_home_property_news.dart
  10. 0 116
      packages/cpt_main/lib/modules/home/page/home_page.dart
  11. 25 24
      packages/cpt_main/lib/modules/main/page/main_page.dart
  12. 86 0
      packages/cpt_main/lib/modules/main/main_state.dart
  13. 15 0
      packages/cpt_main/lib/modules/main/main_view_model.dart
  14. 26 0
      packages/cpt_main/lib/modules/main/main_view_model.g.dart
  15. 0 0
      packages/cpt_main/lib/modules/me/me_page.dart
  16. 7 3
      packages/cpt_main/lib/modules/notification/notification_page.dart
  17. 2 1
      packages/cpt_main/lib/modules/visitor/page/visitor_page.dart
  18. 0 0
      packages/cpt_main/lib/modules/visitor/visitor_state.dart
  19. 0 0
      packages/cpt_main/lib/modules/visitor/visitor_view_model.dart
  20. 0 0
      packages/cpt_main/lib/modules/visitor/visitor_view_model.g.dart
  21. 1 1
      packages/cpt_main/lib/router/component/main_component_service_impl.dart
  22. 4 4
      packages/cpt_main/lib/router/page/main_page_router.dart
  23. BIN
      packages/cs_resources/assets/main/home_botice_board_icon.webp
  24. BIN
      packages/cs_resources/assets/main/home_community_icon.webp
  25. BIN
      packages/cs_resources/assets/main/home_facility_icon.webp
  26. BIN
      packages/cs_resources/assets/main/home_forms_icon.webp
  27. BIN
      packages/cs_resources/assets/main/home_info_news.webp
  28. BIN
      packages/cs_resources/assets/main/home_internal_news.webp
  29. BIN
      packages/cs_resources/assets/main/home_more_icon.webp
  30. BIN
      packages/cs_resources/assets/main/home_notification_icon.webp
  31. BIN
      packages/cs_resources/assets/main/home_payment_icon.webp
  32. BIN
      packages/cs_resources/assets/main/home_property_icon.webp
  33. BIN
      packages/cs_resources/assets/main/home_property_news.webp
  34. BIN
      packages/cs_resources/assets/main/home_publish_news.webp
  35. BIN
      packages/cs_resources/assets/main/home_rewards_icon.webp
  36. BIN
      packages/cs_resources/assets/main/home_service_icon.webp
  37. BIN
      packages/cs_resources/assets/main/introduction_guide.webp
  38. BIN
      packages/cs_resources/assets/main/property_guide.webp
  39. BIN
      packages/cs_resources/assets/main/roles_guide.webp
  40. BIN
      packages/cs_resources/assets/main/tab_feedback_selected.webp
  41. BIN
      packages/cs_resources/assets/main/tab_feedback_unselected.webp
  42. BIN
      packages/cs_resources/assets/main/tab_home_selected.webp
  43. BIN
      packages/cs_resources/assets/main/tab_home_unselected.webp
  44. BIN
      packages/cs_resources/assets/main/tab_me_selected.webp
  45. BIN
      packages/cs_resources/assets/main/tab_me_unselected.webp
  46. BIN
      packages/cs_resources/assets/main/tab_visitor_selected.webp
  47. BIN
      packages/cs_resources/assets/main/tab_visitor_unselected.webp
  48. 25 0
      packages/cs_resources/lib/generated/assets.dart
  49. 22 0
      packages/cs_resources/lib/generated/intl/messages_en.dart
  50. 20 0
      packages/cs_resources/lib/generated/intl/messages_zh_CN.dart
  51. 20 0
      packages/cs_resources/lib/generated/intl/messages_zh_HK.dart
  52. 170 0
      packages/cs_resources/lib/generated/l10n.dart
  53. 17 0
      packages/cs_resources/lib/l10n/intl_en.arb
  54. 17 0
      packages/cs_resources/lib/l10n/intl_zh_CN.arb
  55. 17 0
      packages/cs_resources/lib/l10n/intl_zh_HK.arb
  56. 28 3
      packages/cs_resources/lib/theme/app_colors_theme.dart
  57. 13 2
      packages/cs_shared/lib/utils/device_utils.dart
  58. 4 3
      packages/cs_widgets/lib/my_appbar.dart

+ 365 - 0
packages/cpt_main/lib/modules/home/home_page.dart

@@ -0,0 +1,365 @@
+import 'package:cpt_main/modules/home/home_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:flutter/src/widgets/framework.dart';
+import 'package:hooks_riverpod/hooks_riverpod.dart';
+import 'package:auto_route/auto_route.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_appbar.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+import 'item_home_category.dart';
+import 'home_view_model.dart';
+import 'item_home_last_news.dart';
+import 'item_home_last_trans.dart';
+import 'item_home_manage_guide.dart';
+import 'item_home_property_news.dart';
+
+@RoutePage()
+class HomePage extends HookConsumerWidget {
+  const HomePage({super.key});
+
+  @override
+  Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(homeViewModelProvider.notifier);
+    final state = ref.watch(homeViewModelProvider);
+
+    return Scaffold(
+      appBar: MyAppBar.appBar(context, "Good Afternoon,Mike",
+          backgroundColor: context.appColors.whiteBG,
+          actions: [
+            Center(
+                child: Stack(
+                  clipBehavior: Clip.none, // 不裁剪超出边界的内容
+                  alignment: Alignment.topLeft,
+                  children: <Widget>[
+                    // 通知图标
+                    const MyAssetImage(Assets.mainHomeNotificationIcon, width: 19, height: 20),
+
+                    //未读消息
+                    Positioned(
+                      left: 0,
+                      top: 0,
+                      child: Transform.translate(
+                        offset: const Offset(-10, -5),
+                        child: MyTextView(
+                          "99",
+                          boxWidth: 20.0,
+                          textColor: Colors.white,
+                          fontSize: 10,
+                          isFontLight: true,
+                          backgroundColor: context.appColors.redDefault,
+                          cornerRadius: 8,
+                          paddingTop: 2,
+                          paddingBottom: 2,
+                          textAlign: TextAlign.center,
+                        ),
+                      ),
+                    ),
+                  ],
+                ).onTap(viewModel.gotoNotificationPage))
+                .marginOnly(right: 15),
+          ],
+          showBottomDivider: true),
+      backgroundColor: context.appColors.backgroundDefault,
+      body: CustomScrollView(
+        scrollDirection: Axis.vertical,
+        physics: const BouncingScrollPhysics(),
+        slivers: [
+          //支付与奖励
+          _buildPaymentAndRewardsWidget(context, ref),
+
+          //间距
+          _buildSliverSpace(20),
+
+          //九宫选项组 (固定)
+          _buildCategoryWidget(context, ref),
+
+          //轮播图片 (动态)
+          _buildBannerImage(),
+
+          //最新的新闻(动态)
+          _buildLastNews(context, ref),
+
+          //最新的交易
+          SliverToBoxAdapter(
+            child: MyTextView(
+              marginTop: 14,
+              marginLeft: 15,
+              marginBottom: 14,
+              S.current.latest_transactions,
+              textColor: context.appColors.textPrimary,
+              fontSize: 16,
+              isFontMedium: true,
+            ),
+          ),
+
+          //最新交易列表 (动态)
+          _buildLastTransaction(context, state),
+
+          //房产新闻
+          SliverToBoxAdapter(
+            child: MyTextView(
+              marginTop: 14,
+              marginLeft: 15,
+              marginBottom: 14,
+              onClick: viewModel.gotoPropertyNewsPage,
+              S.current.property_news,
+              textColor: context.appColors.textPrimary,
+              fontSize: 16,
+              isFontMedium: true,
+            ),
+          ),
+
+          //房产新闻列表 (动态)
+          _buildPropertyNews(context, state),
+
+          //管理员介绍 (固定)
+          _buildManagementGuides(context, ref),
+
+          //间距
+          _buildSliverSpace(15),
+        ],
+      ),
+    );
+  }
+
+  //顶部的支付与奖励的布局
+  Widget _buildPaymentAndRewardsWidget(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(homeViewModelProvider.notifier);
+
+    return SliverToBoxAdapter(
+      child: Container(
+        color: context.appColors.whiteBG,
+        width: double.infinity,
+        height: 45,
+        child: Column(
+          children: [
+            Row(
+              children: [
+                Row(
+                  mainAxisSize: MainAxisSize.max,
+                  mainAxisAlignment: MainAxisAlignment.center,
+                  children: [
+                    const MyAssetImage(Assets.mainHomePaymentIcon, width: 16.5, height: 18).marginOnly(left: 20),
+                    MyTextView(
+                      S.current.payment,
+                      textColor: context.appColors.textBlack,
+                      fontSize: 15,
+                      isFontMedium: true,
+                    ).paddingOnly(left: 13, right: 13).expanded(),
+                    const MyAssetImage(Assets.mainHomeMoreIcon, width: 6, height: 8.5).marginOnly(right: 15),
+                  ],
+                ).onTap(viewModel.gotoPaymentPage).expanded(),
+                Container(color: context.appColors.dividerDefault, width: 0.5, height: double.infinity),
+                Row(
+                  mainAxisSize: MainAxisSize.max,
+                  mainAxisAlignment: MainAxisAlignment.center,
+                  children: [
+                    const MyAssetImage(Assets.mainHomeRewardsIcon, width: 16.5, height: 17).marginOnly(left: 20),
+                    MyTextView(
+                      S.current.rewards,
+                      textColor: context.appColors.textBlack,
+                      fontSize: 15,
+                      isFontMedium: true,
+                    ).paddingOnly(left: 13, right: 13).expanded(),
+                    const MyAssetImage(Assets.mainHomeMoreIcon, width: 6, height: 8.5).marginOnly(right: 15),
+                  ],
+                ).onTap(viewModel.gotoRewardsPage).expanded(),
+              ],
+            ).expanded(),
+            //底部分割线
+            Container(color: context.appColors.dividerDefault, height: 0.5, width: double.infinity),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildSliverSpace(double size) {
+    return SliverToBoxAdapter(
+      child: SizedBox(height: size),
+    );
+  }
+
+  //九宫格选项组
+  Widget _buildCategoryWidget(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(homeViewModelProvider.notifier);
+    final state = ref.watch(homeViewModelProvider);
+
+    return SliverGrid(
+      gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
+        crossAxisCount: 3, // 三列
+        mainAxisSpacing: 14.0, // 主轴(上下)的间距
+        crossAxisSpacing: 0.0, // 交叉轴(左右)的间距
+        childAspectRatio: 9 / 7, // 子组件的宽高比
+      ),
+      delegate: SliverChildBuilderDelegate(
+            (BuildContext context, int index) {
+          return HomeCategoryItem(
+            category: state.homeCategory[index],
+          ).onTap(() {
+            viewModel.switchCategory(index);
+          }); // 生成每个网格项
+        },
+        childCount: state.homeCategory.length, // 总共的网格项数
+      ),
+    );
+  }
+
+  //Banner的布局
+  Widget _buildBannerImage() {
+    return SliverToBoxAdapter(
+      child: Center(
+        child: MyLoadImage(
+          "https://t11.baidu.com/it/u=1326770860,192430039&fm=30&app=106&f=JPEG?w=640&h=427&s=33B5BFAA6A165BCA182937620300D077",
+          width: 345,
+          height: 152.5,
+          cornerRadius: 5,
+        ),
+      ).marginOnly(top: 21),
+    );
+  }
+
+  //最新新闻
+  Widget _buildLastNews(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(homeViewModelProvider.notifier);
+    final state = ref.watch(homeViewModelProvider);
+
+    return SliverToBoxAdapter(
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          mainAxisAlignment: MainAxisAlignment.start,
+          children: [
+            MyTextView(
+              S.current.latest_news,
+              fontSize: 16,
+              marginTop: 14,
+              marginBottom: 14,
+              isFontMedium: true,
+              onClick: viewModel.gotoLastNewsPage,
+              textColor: context.appColors.textPrimary,
+            ),
+            SingleChildScrollView(
+              scrollDirection: Axis.horizontal,
+              physics: const BouncingScrollPhysics(),
+              clipBehavior: Clip.none,
+              child: Row(
+                children: List.generate(state.lastNews.length, (index) {
+                  return LastNewsItem(
+                    lastNews: state.lastNews[index],
+                  );
+                }),
+              ),
+            )
+          ],
+        ).paddingOnly(left: 15, right: 15));
+  }
+
+  //最新的交易列表
+  Widget _buildLastTransaction(BuildContext context, HomeState state) {
+    return SliverPadding(
+      padding: const EdgeInsets.symmetric(horizontal: 15),
+      sliver: DecoratedSliver(
+        decoration: BoxDecoration(
+          color: context.appColors.whiteBG,
+          borderRadius: BorderRadius.circular(5.0),
+          boxShadow: [
+            BoxShadow(
+              color: const Color(0xFF656565).withOpacity(0.1),
+              offset: const Offset(0, 1.5),
+              blurRadius: 2.5,
+              spreadRadius: 1.5,
+            ),
+          ],
+        ),
+        sliver: SliverPadding(
+          padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 20),
+          sliver: SliverList(
+            delegate: SliverChildBuilderDelegate(
+                  (BuildContext context, int index) {
+                return Padding(
+                  padding: const EdgeInsets.symmetric(vertical: 10),
+                  child: LastTransItem(
+                    lastTrans: state.lastTrans[index],
+                  ),
+                );
+              },
+              childCount: state.lastTrans.length,
+            ),
+          ),
+        ),
+      ),
+    );
+  }
+
+  //房产新闻的双列表
+  Widget _buildPropertyNews(BuildContext context, HomeState state) {
+    return SliverList(
+      delegate: SliverChildListDelegate(
+        [
+          // PropertyNews(),
+
+          // 第一个水平滑动列表
+          _buildPropertyNewsHorizontalList(),
+
+          const SizedBox(height: 10),
+
+          // // 第二个水平滑动列表
+          _buildPropertyNewsHorizontalList(),
+        ],
+      ),
+    );
+  }
+
+  Widget _buildPropertyNewsHorizontalList() {
+    return SingleChildScrollView(
+      scrollDirection: Axis.horizontal,
+      physics: const BouncingScrollPhysics(),
+      clipBehavior: Clip.none,
+      child: Row(
+        children: List.generate(5, (index) {
+          return PropertyNews();
+        }),
+      ).marginOnly(left: 15, right: 15),
+    );
+  }
+
+  //管理员介绍
+  Widget _buildManagementGuides(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.read(homeViewModelProvider.notifier);
+    final state = ref.watch(homeViewModelProvider);
+
+    return SliverToBoxAdapter(
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          mainAxisAlignment: MainAxisAlignment.start,
+          children: [
+            MyTextView(
+              S.current.strata_management_guides,
+              fontSize: 16,
+              marginTop: 14,
+              marginBottom: 14,
+              onClick: viewModel.gotoManageGuidePage,
+              isFontMedium: true,
+              textColor: context.appColors.textPrimary,
+            ),
+            SingleChildScrollView(
+              scrollDirection: Axis.horizontal,
+              physics: const BouncingScrollPhysics(),
+              clipBehavior: Clip.none,
+              child: Row(
+                children: List.generate(state.manage_guide.length, (index) {
+                  return ManageGuideItem(
+                    manageGuide: state.manage_guide[index],
+                  );
+                }),
+              ),
+            )
+          ],
+        ).paddingOnly(left: 15, right: 15));
+  }
+}

+ 103 - 0
packages/cpt_main/lib/modules/home/home_state.dart

@@ -0,0 +1,103 @@
+import 'package:cs_resources/generated/assets.dart';
+import 'package:cs_resources/generated/l10n.dart';
+
+class HomeState {
+  final homeCategory = [
+    {
+      'category_name': S.current.facility,
+      'category_icon': Assets.mainHomeFacilityIcon,
+    },
+    {
+      'category_name': S.current.form,
+      'category_icon': Assets.mainHomeFormsIcon,
+    },
+    {
+      'category_name': S.current.notice_board,
+      'category_icon': Assets.mainHomeBoticeBoardIcon,
+    },
+    {
+      'category_name': S.current.property,
+      'category_icon': Assets.mainHomePropertyIcon,
+    },
+    {
+      'category_name': S.current.service,
+      'category_icon': Assets.mainHomeServiceIcon,
+    },
+    {
+      'category_name': S.current.community,
+      'category_icon': Assets.mainHomeCommunityIcon,
+    }
+  ];
+
+  final lastNews = [
+    {
+      'category_name': S.current.property,
+      'category_icon': Assets.mainHomePropertyNews,
+      'icon_width': 38.5,
+      'icon_height': 39.5,
+      'margin_right': 13.0,
+    },
+    {
+      'category_name': S.current.internal,
+      'category_icon': Assets.mainHomeInternalNews,
+      'icon_width': 33.5,
+      'icon_height': 41.0,
+      'margin_right': 11.0,
+    },
+    {
+      'category_name': S.current.info,
+      'category_icon': Assets.mainHomeInfoNews,
+      'icon_width': 44.0,
+      'icon_height': 42.0,
+      'margin_right': 6.0,
+    },
+    {
+      'category_name': S.current.publish,
+      'category_icon': Assets.mainHomePublishNews,
+      'icon_width': 40.5,
+      'icon_height': 42.5,
+      'margin_right': 11.0,
+    }
+  ];
+
+
+  final manage_guide = [
+    {
+      'category_name': S.current.introduction_to_info_pack,
+      'category_icon': Assets.mainIntroductionGuide,
+      'icon_width': 118.5,
+      'icon_height': 73.5,
+      'margin_top': 12.0,
+    },
+    {
+      'category_name': S.current.your_roles_responsibilities,
+      'category_icon': Assets.mainRolesGuide,
+      'icon_width': 116,
+      'icon_height': 78,
+      'margin_top': 8.5,
+    },
+    {
+      'category_name': S.current.property_guide,
+      'category_icon': Assets.mainPropertyGuide,
+      'icon_width': 117.0,
+      'icon_height': 76.5,
+      'margin_top': 10.0,
+    },
+  ];
+
+  //模拟数据
+  final lastTrans = [
+    {
+      'title': '18 Sep 2024 Blk 39 #09-XX',
+      'price': '1,001 - 1,337 sqft',
+      'total': '1.338 M',
+      'unit': '',
+    },
+    {
+      'title': 'Jul 2024  Blk XX #XX to XX',
+      'price': '1,100 - 1,200 sqft',
+      'total': '4,000 M',
+      'unit': 'per month',
+    },
+  ];
+}

+ 73 - 0
packages/cpt_main/lib/modules/home/home_view_model.dart

@@ -0,0 +1,73 @@
+import 'package:cpt_main/modules/notification/notification_page.dart';
+import 'package:plugin_platform/engine/toast/toast_engine.dart';
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+import 'package:router/componentRouter/community_service.dart';
+import 'package:router/componentRouter/component_service_manager.dart';
+
+import 'home_state.dart';
+
+part 'home_view_model.g.dart';
+
+@riverpod
+class HomeViewModel extends _$HomeViewModel {
+  @override
+  HomeState build() {
+    return HomeState();
+  }
+
+  /// 根据索引触发点击的事件
+  void switchCategory(int index) {
+    switch (index) {
+      case 0:
+        //设备
+        ComponentServiceManager().facilityService.startFacilityPage();
+        break;
+      case 1:
+        //表单
+        ComponentServiceManager().formService.startFormPage();
+        break;
+      case 2:
+        //公告板
+        ComponentServiceManager().noticeBoardService.startNoticeBoardPage();
+        break;
+      case 3:
+        //房产
+        ComponentServiceManager().propertyService.startPropertyPage();
+        break;
+      case 4:
+        //广告服务
+        ComponentServiceManager().servicesService.startServicePage();
+        break;
+      case 5:
+        //社区
+        ComponentServiceManager().communityService.startCommunityPage();
+        break;
+    }
+  }
+
+  //去消息通知页面
+  void gotoNotificationPage() {
+    NotificationPage.startInstance();
+  }
+
+  void gotoPaymentPage() {
+    ComponentServiceManager().paymentService.startPaymentPage();
+  }
+
+  void gotoRewardsPage() {
+    ComponentServiceManager().rewardsService.startRewardsPage();
+  }
+
+  void gotoLastNewsPage(){
+    ToastEngine.show("去最近新闻的页面");
+  }
+
+  void gotoPropertyNewsPage(){
+    ToastEngine.show("去房产新闻的页面");
+  }
+
+  void gotoManageGuidePage(){
+    ToastEngine.show("去管理员指引的页面");
+  }
+
+}

+ 26 - 0
packages/cpt_main/lib/modules/home/home_view_model.g.dart

@@ -0,0 +1,26 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'home_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$homeViewModelHash() => r'9b4974389335a1d56e6b345f83e7c626e3ba0d28';
+
+/// See also [HomeViewModel].
+@ProviderFor(HomeViewModel)
+final homeViewModelProvider =
+    AutoDisposeNotifierProvider<HomeViewModel, HomeState>.internal(
+  HomeViewModel.new,
+  name: r'homeViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$homeViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$HomeViewModel = AutoDisposeNotifier<HomeState>;
+// 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

+ 24 - 0
packages/cpt_main/lib/modules/home/item_home_category.dart

@@ -0,0 +1,24 @@
+import 'package:cpt_main/modules/feedback/page/feedback_page.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+class HomeCategoryItem extends StatelessWidget {
+  final Map<String, dynamic> category;
+
+  HomeCategoryItem({required this.category});
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      mainAxisAlignment: MainAxisAlignment.center,
+      crossAxisAlignment: CrossAxisAlignment.center,
+      children: <Widget>[
+        MyAssetImage(category['category_icon'], width: 70, height: 70),
+        const SizedBox(height: 5),
+        MyTextView(category['category_name'], fontSize: 15, isFontMedium: true, textColor: context.appColors.textBlack),
+      ],
+    );
+  }
+}

+ 60 - 0
packages/cpt_main/lib/modules/home/item_home_last_news.dart

@@ -0,0 +1,60 @@
+import 'package:cpt_main/modules/feedback/page/feedback_page.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+class LastNewsItem extends StatelessWidget {
+  final Map<String, dynamic> lastNews;
+
+  LastNewsItem({required this.lastNews});
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      mainAxisAlignment: MainAxisAlignment.start,
+      children: [
+        MyTextView(
+          lastNews['category_name'],
+          marginLeft: 9,
+          marginTop: 9,
+          fontSize: 14,
+          isFontMedium: true,
+          textColor: context.appColors.tabTextUnSelectedPrimary,
+        ),
+        const Spacer(),
+        Row(
+          mainAxisAlignment: MainAxisAlignment.end, // 对齐到右侧
+          children: [
+            Padding(
+              padding: EdgeInsets.only(right: lastNews['margin_right']), // 控制边距
+              child: MyAssetImage(
+                lastNews['category_icon'],
+                width: (lastNews['icon_width'] as num).toDouble(),
+                height: (lastNews['icon_height'] as num).toDouble(),
+                fit: BoxFit.cover, // 调整 fit 参数
+              ),
+            ),
+          ],
+        ),
+      ],
+      // ),
+    )
+        .decorated(
+          color: context.appColors.whiteBG,
+          borderRadius: BorderRadius.circular(5.0), // 5个圆角
+          boxShadow: [
+            BoxShadow(
+              color: const Color(0xFF656565).withOpacity(0.1), // 阴影颜色,并且设置透明度
+              offset: const Offset(0, 1.5), // 阴影的偏移量
+              blurRadius: 2.5, // 模糊半径
+              spreadRadius: 1.5, // 扩散半径
+            ),
+          ],
+        )
+        .marginOnly(right: 5)
+        .constrained(width: 86.5, height: 78.5);
+  }
+}

+ 72 - 0
packages/cpt_main/lib/modules/home/item_home_last_trans.dart

@@ -0,0 +1,72 @@
+import 'package:cpt_main/modules/feedback/page/feedback_page.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:shared/utils/util.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+class LastTransItem extends StatelessWidget {
+  final Map<String, dynamic> lastTrans;
+
+  LastTransItem({required this.lastTrans});
+
+  @override
+  Widget build(BuildContext context) {
+    return Row(
+      mainAxisSize: MainAxisSize.max,
+      crossAxisAlignment: CrossAxisAlignment.center,
+      mainAxisAlignment: MainAxisAlignment.start,
+      children: [
+        Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            MyTextView(
+              lastTrans['title'],
+              fontSize: 15,
+              textColor: context.appColors.textBlack,
+              isFontMedium: true,
+            ),
+            MyTextView(
+              lastTrans['price'],
+              fontSize: 15,
+              marginTop: 5,
+              textColor: context.appColors.textBlack,
+              isFontMedium: true,
+            ),
+          ],
+        ).expanded(),
+
+        Container(
+          width: 91.5,
+          margin: const EdgeInsets.only(left: 10),
+          height: 45,
+          decoration: BoxDecoration(
+            color: context.appColors.lightPurpleBg,
+            borderRadius: BorderRadius.circular(5.0), // 5个圆角
+          ),
+          child: Column(
+            crossAxisAlignment: CrossAxisAlignment.center,
+            mainAxisAlignment: MainAxisAlignment.center,
+            children: [
+              MyTextView(
+               "\$${lastTrans['total']}",
+                fontSize: 17,
+                textColor: context.appColors.textBlack,
+                isFontMedium: true,
+              ),
+              Visibility(
+                  visible: Utils.isNotEmpty(lastTrans['unit']),
+                  child: MyTextView(
+                    lastTrans['unit'],
+                    fontSize: 12,
+                    textColor: context.appColors.textBlack,
+                    isFontRegular: true,
+                  ))
+            ],
+          ),
+        ),
+      ],
+    );
+  }
+}

+ 53 - 0
packages/cpt_main/lib/modules/home/item_home_manage_guide.dart

@@ -0,0 +1,53 @@
+import 'package:cpt_main/modules/feedback/page/feedback_page.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+class ManageGuideItem extends StatelessWidget {
+  final Map<String, dynamic> manageGuide;
+
+  ManageGuideItem({required this.manageGuide});
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      mainAxisAlignment: MainAxisAlignment.start,
+      children: [
+        MyAssetImage(
+          manageGuide['category_icon'],
+          width: (manageGuide['icon_width'] as num).toDouble(),
+          height: (manageGuide['icon_height'] as num).toDouble(),
+          fit: BoxFit.cover, // 调整 fit 参数
+        ).marginOnly(top: manageGuide['margin_top']),
+
+        MyTextView(
+          manageGuide['category_name'],
+          marginLeft: 9,
+          marginTop: 10,
+          maxLines: 2,
+          fontSize: 14,
+          isFontMedium: true,
+          textColor: context.appColors.tabTextUnSelectedPrimary,
+        ),
+      ],
+      // ),
+    )
+        .decorated(
+          color: context.appColors.lightBlueBg,
+          borderRadius: BorderRadius.circular(5.0), // 5个圆角
+          boxShadow: [
+            BoxShadow(
+              color: const Color(0xFF656565).withOpacity(0.1), // 阴影颜色,并且设置透明度
+              offset: const Offset(0, 1.5), // 阴影的偏移量
+              blurRadius: 2.5, // 模糊半径
+              spreadRadius: 1.5, // 扩散半径
+            ),
+          ],
+        )
+        .marginOnly(right: 10)
+        .constrained(width: 130, height: 142.5);
+  }
+}

+ 49 - 0
packages/cpt_main/lib/modules/home/item_home_property_news.dart

@@ -0,0 +1,49 @@
+import 'package:cpt_main/modules/feedback/page/feedback_page.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
+import 'package:flutter/material.dart';
+import 'package:shared/utils/util.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+import 'package:widgets/my_text_view.dart';
+
+class PropertyNews extends StatelessWidget {
+  PropertyNews();
+
+  @override
+  Widget build(BuildContext context) {
+    return Row(
+      crossAxisAlignment: CrossAxisAlignment.center,
+      mainAxisAlignment: MainAxisAlignment.start,
+      children: [
+        MyLoadImage(
+          "https://t11.baidu.com/it/u=4142771387,220552469&fm=30&app=106&f=JPEG?w=564&h=604&s=FA2FB04406270B0D68AE05910300509B",
+          width: 80,
+          height: 80,
+        ),
+        MyTextView(
+          "Key Appeals and Performance of Nonlan-ded Properties in District 19",
+          fontSize: 15,
+          marginLeft: 12.5,
+          marginRight: 12.5,
+          maxLines: 4,
+          textColor: context.appColors.textBlack,
+          isFontMedium: true,
+        ).expanded(),
+      ],
+    )
+        .decorated(
+          color: context.appColors.whiteBG,
+          borderRadius: BorderRadius.circular(5.0), // 5个圆角
+          boxShadow: [
+            BoxShadow(
+              color: const Color(0xFF656565).withOpacity(0.1), // 阴影颜色,并且设置透明度
+              offset: const Offset(0, 1.5), // 阴影的偏移量
+              blurRadius: 2.5, // 模糊半径
+              spreadRadius: 1.5, // 扩散半径
+            ),
+          ],
+        )
+        .marginOnly(right: 10)
+        .constrained(height: 80, width: 270);
+  }
+}

+ 0 - 116
packages/cpt_main/lib/modules/home/page/home_page.dart

@@ -1,116 +0,0 @@
-import 'package:cpt_main/modules/visitor/page/visitor_page.dart';
-import 'package:cs_resources/generated/l10n.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/src/widgets/framework.dart';
-import 'package:hooks_riverpod/hooks_riverpod.dart';
-import 'package:auto_route/auto_route.dart';
-import 'package:router/componentRouter/component_service_manager.dart';
-import 'package:widgets/ext/ex_widget.dart';
-
-@RoutePage()
-class HomePage extends HookConsumerWidget {
-  const HomePage({super.key});
-
-  @override
-  Widget build(BuildContext context, WidgetRef ref) {
-    return Scaffold(
-      appBar: AppBar(title: Text("Home")),
-      body: Center(
-        child: Column(
-          children: [
-            Row(
-              mainAxisAlignment: MainAxisAlignment.spaceAround,
-              children: [
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().paymentService.startPaymentPage();
-                  },
-                  child: Text(S.of(context).payment),  //国际化中英文适配
-                ),
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().rewardsService.startRewardsPage();
-                  },
-                  child: Text(S.of(context).rewards),
-                ),
-                ElevatedButton(
-                  onPressed: () {},
-                  child: Text(S.of(context).notification),
-                ),
-              ],
-            ).marginOnly(top: 10),
-            Row(
-              mainAxisAlignment: MainAxisAlignment.spaceAround,
-              children: [
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().facilityService.startFacilityPage();
-                  },
-                  child: Text(S.of(context).facility),
-                ),
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().formService.startFormPage();
-                  },
-                  child: Text(S.of(context).form),
-                ),
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().noticeBoardService.startNoticeBoardPage();
-                  },
-                  child: Text(S.of(context).notice_board),
-                ),
-              ],
-            ).marginOnly(top: 10),
-            Row(
-              mainAxisAlignment: MainAxisAlignment.spaceAround,
-              children: [
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().propertyService.startPropertyPage();
-                  },
-                  child: Text('Property'),
-                ),
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().servicesService.startServicePage();
-                  },
-                  child: Text('Service'),
-                ),
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().communityService.startCommunityPage();
-                  },
-                  child: Text('Community'),
-                ),
-              ],
-            ).marginOnly(top: 10),
-            Row(
-              mainAxisAlignment: MainAxisAlignment.spaceAround,
-              children: [
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().authService.startLoginPage();
-                  },
-                  child: Text('Login'),
-                ),
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().authService.startResetPasswordPage();
-                  },
-                  child: Text('Forgot'),
-                ),
-                ElevatedButton(
-                  onPressed: () {
-                    ComponentServiceManager().profileService.startSettingPage();
-                  },
-                  child: Text('Setting'),
-                ),
-              ],
-            ).marginOnly(top: 10),
-          ],
-        ),
-      ),
-    );
-  }
-}

+ 25 - 24
packages/cpt_main/lib/modules/main/page/main_page.dart

@@ -1,13 +1,14 @@
-import 'package:cs_resources/theme/theme_config.dart';
-import 'package:flutter/services.dart';
+import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:flutter/src/widgets/framework.dart';
 import 'package:hooks_riverpod/hooks_riverpod.dart';
 import 'package:auto_route/auto_route.dart';
 import 'package:flutter/material.dart';
-import 'package:shared/utils/ext_dart.dart';
-import '../../../router/page/main_page_router.dart';
+import 'package:shared/utils/device_utils.dart';
+import '../../router/page/main_page_router.dart';
 import 'package:router/ext/auto_router_extensions.dart';
 
+import 'main_view_model.dart';
+
 @RoutePage()
 class MainPage extends HookConsumerWidget {
   const MainPage({super.key});
@@ -25,6 +26,9 @@ class MainPage extends HookConsumerWidget {
 
   @override
   Widget build(BuildContext context, WidgetRef ref) {
+    final viewModel = ref.watch(mainViewModelProvider.notifier);
+    final state = ref.watch(mainViewModelProvider);
+
     // return AutoTabsRouter(
     //   routes: const [
     //     HomePageRoute(),
@@ -86,29 +90,26 @@ class MainPage extends HookConsumerWidget {
       ),
       bottomNavigationBuilder: (context, tabsRouter) {
         return BottomNavigationBar(
-          unselectedItemColor: Colors.grey[500],
-          elevation: 20,
+          elevation: 10,
+          backgroundColor: context.appColors.whiteBG,
           type: BottomNavigationBarType.fixed,
           currentIndex: tabsRouter.activeIndex,
           onTap: tabsRouter.setActiveIndex,
-          items: const [
-            BottomNavigationBarItem(
-              icon: Icon(Icons.home),
-              label: 'Home',
-            ),
-            BottomNavigationBarItem(
-              icon: Icon(Icons.card_giftcard),
-              label: 'Visitor',
-            ),
-            BottomNavigationBarItem(
-              icon: Icon(Icons.feed),
-              label: 'Feedback',
-            ),
-            BottomNavigationBarItem(
-              icon: Icon(Icons.person),
-              label: 'Me',
-            ),
-          ],
+          unselectedLabelStyle: const TextStyle(color: AppColorsTheme.color666666, fontWeight: FontWeight.w400),
+          selectedLabelStyle: TextStyle(color: context.appColors.textPrimary, fontWeight: FontWeight.w400),
+          unselectedFontSize: 12,
+          selectedFontSize: 12,
+          items: () {
+            var items = <BottomNavigationBarItem>[];
+            state.bottomMap.forEach((k, v) {
+              items.add(BottomNavigationBarItem(
+                label: k,
+                icon: v[0],
+                activeIcon: DeviceUtils.isDarkMode(context) ? v[2] : v[1],
+              ));
+            });
+            return items;
+          }(),
         );
       },
     );

+ 86 - 0
packages/cpt_main/lib/modules/main/main_state.dart

@@ -0,0 +1,86 @@
+import 'package:cpt_main/modules/feedback/page/feedback_page.dart';
+import 'package:cs_resources/generated/assets.dart';
+import 'package:cs_resources/generated/l10n.dart';
+import 'package:flutter/material.dart';
+import 'package:widgets/ext/ex_widget.dart';
+import 'package:widgets/my_load_image.dart';
+
+class MainState {
+//底部数据Map
+  final Map bottomMap = {
+    S.current.home: [
+      const MyAssetImage(
+        //默认
+        Assets.mainTabHomeUnselected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        Assets.mainTabHomeSelected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        //暗色
+        Assets.mainTabHomeSelected,
+        width: 20,
+        height: 20,
+        color: Colors.white,
+      ).marginOnly(bottom: 4)
+    ],
+    S.current.visitor: [
+      const MyAssetImage(
+        Assets.mainTabVisitorUnselected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        Assets.mainTabVisitorSelected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        Assets.mainTabVisitorSelected,
+        width: 20,
+        height: 20,
+        color: Colors.white,
+      ).marginOnly(bottom: 4)
+    ],
+    S.current.feedback: [
+      const MyAssetImage(
+        Assets.mainTabFeedbackUnselected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        Assets.mainTabFeedbackSelected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        Assets.mainTabFeedbackSelected,
+        width: 20,
+        height: 20,
+        color: Colors.white,
+      ).marginOnly(bottom: 4)
+    ],
+    S.current.me: [
+      const MyAssetImage(
+        Assets.mainTabMeUnselected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        Assets.mainTabMeSelected,
+        width: 20,
+        height: 20,
+      ).marginOnly(bottom: 4),
+      const MyAssetImage(
+        Assets.mainTabMeSelected,
+        width: 20,
+        height: 20,
+        color: Colors.white,
+      ).marginOnly(bottom: 4),
+    ],
+  };
+}

+ 15 - 0
packages/cpt_main/lib/modules/main/main_view_model.dart

@@ -0,0 +1,15 @@
+
+import 'package:riverpod_annotation/riverpod_annotation.dart';
+
+import 'main_state.dart';
+part 'main_view_model.g.dart';
+
+@riverpod
+class MainViewModel extends _$MainViewModel {
+
+  @override
+  MainState build(){
+    return MainState();
+  }
+
+}

+ 26 - 0
packages/cpt_main/lib/modules/main/main_view_model.g.dart

@@ -0,0 +1,26 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'main_view_model.dart';
+
+// **************************************************************************
+// RiverpodGenerator
+// **************************************************************************
+
+String _$mainViewModelHash() => r'90a50899c1c9b358ab052eae6102c1666d59de8e';
+
+/// See also [MainViewModel].
+@ProviderFor(MainViewModel)
+final mainViewModelProvider =
+    AutoDisposeNotifierProvider<MainViewModel, MainState>.internal(
+  MainViewModel.new,
+  name: r'mainViewModelProvider',
+  debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
+      ? null
+      : _$mainViewModelHash,
+  dependencies: null,
+  allTransitiveDependencies: null,
+);
+
+typedef _$MainViewModel = AutoDisposeNotifier<MainState>;
+// 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

packages/cpt_main/lib/modules/me/page/me_page.dart → packages/cpt_main/lib/modules/me/me_page.dart


+ 7 - 3
packages/cpt_main/lib/modules/notification/notification_page.dart

@@ -1,15 +1,19 @@
 import 'package:cpt_main/router/page/main_page_router.dart';
 import 'package:flutter/material.dart';
 import 'package:auto_route/auto_route.dart';
+import 'package:router/ext/auto_router_extensions.dart';
 
 @RoutePage()
 class NotificationPage extends StatelessWidget {
 
   const NotificationPage({Key? key}) : super(key: key);
 
-  //启动当前页面
-  static void startInstance({required BuildContext context}) {
-    context.router.push(const NotificationPageRoute());
+  static void startInstance({BuildContext? context}) {
+    if (context != null) {
+      context.router.push(const NotificationPageRoute());
+    } else {
+      appRouter.push(const NotificationPageRoute());
+    }
   }
 
   @override

+ 2 - 1
packages/cpt_main/lib/modules/visitor/page/visitor_page.dart

@@ -1,4 +1,3 @@
-import 'package:cpt_main/modules/visitor/vm/visitor_view_model.dart';
 import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:cs_resources/theme/theme_config.dart';
 import 'package:cs_resources/theme/theme_notifier.dart';
@@ -24,6 +23,8 @@ import 'package:widgets/picker/date_picker_util.dart';
 import 'package:widgets/picker/option_pick_util.dart';
 import 'package:plugin_platform/platform_export.dart';
 
+import 'visitor_view_model.dart';
+
 @RoutePage()
 class VisitorPage extends HookConsumerWidget {
   const VisitorPage({Key? key}) : super(key: key);

packages/cpt_main/lib/modules/visitor/vm/visitor_state.dart → packages/cpt_main/lib/modules/visitor/visitor_state.dart


packages/cpt_main/lib/modules/visitor/vm/visitor_view_model.dart → packages/cpt_main/lib/modules/visitor/visitor_view_model.dart


packages/cpt_main/lib/modules/visitor/vm/visitor_view_model.g.dart → packages/cpt_main/lib/modules/visitor/visitor_view_model.g.dart


+ 1 - 1
packages/cpt_main/lib/router/component/main_component_service_impl.dart

@@ -1,7 +1,7 @@
 /*
  * Main 组件的组件路由
  */
-import 'package:cpt_main/modules/main/page/main_page.dart';
+import 'package:cpt_main/modules/main/main_page.dart';
 import 'package:flutter/material.dart';
 import 'package:router/componentRouter/main_service.dart';
 

+ 4 - 4
packages/cpt_main/lib/router/page/main_page_router.dart

@@ -4,11 +4,11 @@ import 'package:router/ext/auto_router_extensions.dart';
 import 'package:router/path/router_path.dart';
 
 import '../../modules/feedback/page/feedback_page.dart';
-import '../../modules/home/page/home_page.dart';
-import '../../modules/main/page/main_page.dart';
-import '../../modules/me/page/me_page.dart';
+import '../../modules/home/home_page.dart';
+import '../../modules/main/main_page.dart';
+import '../../modules/me/me_page.dart';
 import '../../modules/notification/notification_page.dart';
-import '../../modules/visitor/page/visitor_page.dart';
+import '../../modules/visitor/visitor_page.dart';
 
 
 part 'main_page_router.gr.dart';

BIN
packages/cs_resources/assets/main/home_botice_board_icon.webp


BIN
packages/cs_resources/assets/main/home_community_icon.webp


BIN
packages/cs_resources/assets/main/home_facility_icon.webp


BIN
packages/cs_resources/assets/main/home_forms_icon.webp


BIN
packages/cs_resources/assets/main/home_info_news.webp


BIN
packages/cs_resources/assets/main/home_internal_news.webp


BIN
packages/cs_resources/assets/main/home_more_icon.webp


BIN
packages/cs_resources/assets/main/home_notification_icon.webp


BIN
packages/cs_resources/assets/main/home_payment_icon.webp


BIN
packages/cs_resources/assets/main/home_property_icon.webp


BIN
packages/cs_resources/assets/main/home_property_news.webp


BIN
packages/cs_resources/assets/main/home_publish_news.webp


BIN
packages/cs_resources/assets/main/home_rewards_icon.webp


BIN
packages/cs_resources/assets/main/home_service_icon.webp


BIN
packages/cs_resources/assets/main/introduction_guide.webp


BIN
packages/cs_resources/assets/main/property_guide.webp


BIN
packages/cs_resources/assets/main/roles_guide.webp


BIN
packages/cs_resources/assets/main/tab_feedback_selected.webp


BIN
packages/cs_resources/assets/main/tab_feedback_unselected.webp


BIN
packages/cs_resources/assets/main/tab_home_selected.webp


BIN
packages/cs_resources/assets/main/tab_home_unselected.webp


BIN
packages/cs_resources/assets/main/tab_me_selected.webp


BIN
packages/cs_resources/assets/main/tab_me_unselected.webp


BIN
packages/cs_resources/assets/main/tab_visitor_selected.webp


BIN
packages/cs_resources/assets/main/tab_visitor_unselected.webp


+ 25 - 0
packages/cs_resources/lib/generated/assets.dart

@@ -40,6 +40,31 @@ class Assets {
   static const String baseServiceTriangleDropDown = 'assets/base_service/triangle_drop_down.webp';
   static const String baseServiceTriangleDropDownIcon = 'assets/base_service/triangle_drop_down_icon.webp';
   static const String mainAccountDeactivationImg = 'assets/main/account_deactivation_img.webp';
+  static const String mainHomeBoticeBoardIcon = 'assets/main/home_botice_board_icon.webp';
+  static const String mainHomeCommunityIcon = 'assets/main/home_community_icon.webp';
+  static const String mainHomeFacilityIcon = 'assets/main/home_facility_icon.webp';
+  static const String mainHomeFormsIcon = 'assets/main/home_forms_icon.webp';
+  static const String mainHomeInfoNews = 'assets/main/home_info_news.webp';
+  static const String mainHomeInternalNews = 'assets/main/home_internal_news.webp';
+  static const String mainHomeMoreIcon = 'assets/main/home_more_icon.webp';
+  static const String mainHomeNotificationIcon = 'assets/main/home_notification_icon.webp';
+  static const String mainHomePaymentIcon = 'assets/main/home_payment_icon.webp';
+  static const String mainHomePropertyIcon = 'assets/main/home_property_icon.webp';
+  static const String mainHomePropertyNews = 'assets/main/home_property_news.webp';
+  static const String mainHomePublishNews = 'assets/main/home_publish_news.webp';
+  static const String mainHomeRewardsIcon = 'assets/main/home_rewards_icon.webp';
+  static const String mainHomeServiceIcon = 'assets/main/home_service_icon.webp';
+  static const String mainIntroductionGuide = 'assets/main/introduction_guide.webp';
+  static const String mainPropertyGuide = 'assets/main/property_guide.webp';
+  static const String mainRolesGuide = 'assets/main/roles_guide.webp';
+  static const String mainTabFeedbackSelected = 'assets/main/tab_feedback_selected.webp';
+  static const String mainTabFeedbackUnselected = 'assets/main/tab_feedback_unselected.webp';
+  static const String mainTabHomeSelected = 'assets/main/tab_home_selected.webp';
+  static const String mainTabHomeUnselected = 'assets/main/tab_home_unselected.webp';
+  static const String mainTabMeSelected = 'assets/main/tab_me_selected.webp';
+  static const String mainTabMeUnselected = 'assets/main/tab_me_unselected.webp';
+  static const String mainTabVisitorSelected = 'assets/main/tab_visitor_selected.webp';
+  static const String mainTabVisitorUnselected = 'assets/main/tab_visitor_unselected.webp';
   static const String propertyAdvicePic2x = 'assets/property/advice_pic@2x.png';
   static const String propertyApproval2x = 'assets/property/approval@2x.png';
   static const String propertyConveyancingLawyer2x = 'assets/property/conveyancing_lawyer@2x.png';

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

@@ -44,6 +44,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "cancel": MessageLookupByLibrary.simpleMessage("Cancel"),
         "change_mobile_phone":
             MessageLookupByLibrary.simpleMessage("Change Mobile Phone"),
+        "community": MessageLookupByLibrary.simpleMessage("Community"),
         "confirm": MessageLookupByLibrary.simpleMessage("Confirm"),
         "confirm_new_password":
             MessageLookupByLibrary.simpleMessage("Confirm New Password"),
@@ -62,6 +63,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "estate_or_building_name":
             MessageLookupByLibrary.simpleMessage("Estate or Building Name?"),
         "facility": MessageLookupByLibrary.simpleMessage("Facility"),
+        "feedback": MessageLookupByLibrary.simpleMessage("FeedBack"),
         "first_name": MessageLookupByLibrary.simpleMessage("First Name"),
         "followers": m0,
         "following": m1,
@@ -73,12 +75,21 @@ class MessageLookup extends MessageLookupByLibrary {
         "get_code": MessageLookupByLibrary.simpleMessage("Get Code"),
         "get_started":
             MessageLookupByLibrary.simpleMessage("let\'s get started"),
+        "home": MessageLookupByLibrary.simpleMessage("Home"),
         "household": MessageLookupByLibrary.simpleMessage("Household"),
+        "info": MessageLookupByLibrary.simpleMessage("Info"),
+        "internal": MessageLookupByLibrary.simpleMessage("Internal"),
+        "introduction_to_info_pack":
+            MessageLookupByLibrary.simpleMessage("Introduction to info-pack"),
         "last_name": MessageLookupByLibrary.simpleMessage("Last Name"),
+        "latest_news": MessageLookupByLibrary.simpleMessage("Latest News"),
+        "latest_transactions":
+            MessageLookupByLibrary.simpleMessage("Latest Transactions"),
         "login": MessageLookupByLibrary.simpleMessage("Log In"),
         "logout": MessageLookupByLibrary.simpleMessage("Logout"),
         "logout_alert": MessageLookupByLibrary.simpleMessage(
             "Are you sure you want to logout?"),
+        "me": MessageLookupByLibrary.simpleMessage("Me"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("Mobile Phone"),
         "my_post": MessageLookupByLibrary.simpleMessage("My Posts"),
         "new_mobile_phone":
@@ -111,11 +122,17 @@ class MessageLookup extends MessageLookupByLibrary {
         "phone_email": MessageLookupByLibrary.simpleMessage("Phone/Email"),
         "privacy_policy":
             MessageLookupByLibrary.simpleMessage("Privacy Policy"),
+        "property": MessageLookupByLibrary.simpleMessage("Property"),
+        "property_guide":
+            MessageLookupByLibrary.simpleMessage("Property Guide"),
+        "property_news": MessageLookupByLibrary.simpleMessage("Property News"),
+        "publish": MessageLookupByLibrary.simpleMessage("Publish"),
         "rate_us": MessageLookupByLibrary.simpleMessage("Rate Us"),
         "resend_code": MessageLookupByLibrary.simpleMessage("Resend Code"),
         "reset_password":
             MessageLookupByLibrary.simpleMessage("Reset Password"),
         "rewards": MessageLookupByLibrary.simpleMessage("Rewards"),
+        "service": MessageLookupByLibrary.simpleMessage("Service"),
         "settings": MessageLookupByLibrary.simpleMessage("Settings"),
         "sign_up_success_txt1": MessageLookupByLibrary.simpleMessage(
             "You have successfully created an YY Home account"),
@@ -125,6 +142,8 @@ 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"),
+        "strata_management_guides":
+            MessageLookupByLibrary.simpleMessage("Strata Management Guides"),
         "submit": MessageLookupByLibrary.simpleMessage("Submit"),
         "tenant": MessageLookupByLibrary.simpleMessage("Tenant"),
         "tenants_desc1": MessageLookupByLibrary.simpleMessage(
@@ -154,6 +173,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "verification_code":
             MessageLookupByLibrary.simpleMessage("Verification Code"),
         "version_no": MessageLookupByLibrary.simpleMessage("Version No."),
+        "visitor": MessageLookupByLibrary.simpleMessage("Visitor"),
         "welcome_name": m2,
         "who_are_owners":
             MessageLookupByLibrary.simpleMessage("Who are owners?"),
@@ -161,6 +181,8 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Who are tenants?"),
         "yes": MessageLookupByLibrary.simpleMessage("Yes"),
         "you_have": MessageLookupByLibrary.simpleMessage("You have"),
+        "your_roles_responsibilities": MessageLookupByLibrary.simpleMessage(
+            "Your roles & responsibilities"),
         "yy_home_accounts":
             MessageLookupByLibrary.simpleMessage("YY Home Accounts")
       };

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

@@ -41,6 +41,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
+        "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
@@ -55,6 +56,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "estate_or_building_name":
             MessageLookupByLibrary.simpleMessage("房产或建筑名称?"),
         "facility": MessageLookupByLibrary.simpleMessage("设施"),
+        "feedback": MessageLookupByLibrary.simpleMessage("反馈"),
         "first_name": MessageLookupByLibrary.simpleMessage("名"),
         "followers": m0,
         "following": m1,
@@ -63,11 +65,19 @@ class MessageLookup extends MessageLookupByLibrary {
         "form": MessageLookupByLibrary.simpleMessage("表单"),
         "get_code": MessageLookupByLibrary.simpleMessage("获取验证码"),
         "get_started": MessageLookupByLibrary.simpleMessage("让我们开始吧"),
+        "home": MessageLookupByLibrary.simpleMessage("首页"),
         "household": MessageLookupByLibrary.simpleMessage("家庭"),
+        "info": MessageLookupByLibrary.simpleMessage("咨询"),
+        "internal": MessageLookupByLibrary.simpleMessage("内部"),
+        "introduction_to_info_pack":
+            MessageLookupByLibrary.simpleMessage("信息介绍"),
         "last_name": MessageLookupByLibrary.simpleMessage("姓"),
+        "latest_news": MessageLookupByLibrary.simpleMessage("最新消息"),
+        "latest_transactions": MessageLookupByLibrary.simpleMessage("最新交易"),
         "login": MessageLookupByLibrary.simpleMessage("登录"),
         "logout": MessageLookupByLibrary.simpleMessage("退出登录"),
         "logout_alert": MessageLookupByLibrary.simpleMessage("你确定要退出登录吗?"),
+        "me": MessageLookupByLibrary.simpleMessage("我的"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
         "my_post": MessageLookupByLibrary.simpleMessage("我的发布"),
         "new_mobile_phone": MessageLookupByLibrary.simpleMessage("新的手机号码"),
@@ -91,10 +101,15 @@ class MessageLookup extends MessageLookupByLibrary {
         "payment": MessageLookupByLibrary.simpleMessage("支付"),
         "phone_email": MessageLookupByLibrary.simpleMessage("电话或邮箱"),
         "privacy_policy": MessageLookupByLibrary.simpleMessage("隐私协议"),
+        "property": MessageLookupByLibrary.simpleMessage("房产"),
+        "property_guide": MessageLookupByLibrary.simpleMessage("物业指南"),
+        "property_news": MessageLookupByLibrary.simpleMessage("资产新闻"),
+        "publish": MessageLookupByLibrary.simpleMessage("公布"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "rewards": MessageLookupByLibrary.simpleMessage("奖励"),
+        "service": MessageLookupByLibrary.simpleMessage("服务"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
         "sign_up_success_txt1":
             MessageLookupByLibrary.simpleMessage("您已成功创建 YYHome 的帐户"),
@@ -104,6 +119,8 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("现在,让我们把你和你的社区关联起来"),
         "sign_up_verify_txt":
             MessageLookupByLibrary.simpleMessage("我们已经向您发送了短信验证码,请在下面输入"),
+        "strata_management_guides":
+            MessageLookupByLibrary.simpleMessage("管理手册"),
         "submit": MessageLookupByLibrary.simpleMessage("提交"),
         "tenant": MessageLookupByLibrary.simpleMessage("租户"),
         "tenants_desc1": MessageLookupByLibrary.simpleMessage("我的名字在租赁协议上"),
@@ -125,11 +142,14 @@ class MessageLookup extends MessageLookupByLibrary {
         "upload_documents": MessageLookupByLibrary.simpleMessage("上传文档"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
+        "visitor": MessageLookupByLibrary.simpleMessage("访客"),
         "welcome_name": m2,
         "who_are_owners": MessageLookupByLibrary.simpleMessage("怎样才算业主?"),
         "who_are_tenants": MessageLookupByLibrary.simpleMessage("怎样才算租户?"),
         "yes": MessageLookupByLibrary.simpleMessage("是"),
         "you_have": MessageLookupByLibrary.simpleMessage("你还有"),
+        "your_roles_responsibilities":
+            MessageLookupByLibrary.simpleMessage("您的角色和职责"),
         "yy_home_accounts": MessageLookupByLibrary.simpleMessage("YY Home 账户")
       };
 }

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

@@ -41,6 +41,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("123 是街区地址邮编 #08-08 是单元号码"),
         "cancel": MessageLookupByLibrary.simpleMessage("取消"),
         "change_mobile_phone": MessageLookupByLibrary.simpleMessage("修改手机号码"),
+        "community": MessageLookupByLibrary.simpleMessage("社区"),
         "confirm": MessageLookupByLibrary.simpleMessage("确认"),
         "confirm_new_password": MessageLookupByLibrary.simpleMessage("确认新密码"),
         "confirm_password": MessageLookupByLibrary.simpleMessage("确认密码"),
@@ -55,6 +56,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "estate_or_building_name":
             MessageLookupByLibrary.simpleMessage("房产或建筑名称?"),
         "facility": MessageLookupByLibrary.simpleMessage("設施"),
+        "feedback": MessageLookupByLibrary.simpleMessage("反馈"),
         "first_name": MessageLookupByLibrary.simpleMessage("名"),
         "followers": m0,
         "following": m1,
@@ -63,11 +65,19 @@ class MessageLookup extends MessageLookupByLibrary {
         "form": MessageLookupByLibrary.simpleMessage("表單"),
         "get_code": MessageLookupByLibrary.simpleMessage("获取验证码"),
         "get_started": MessageLookupByLibrary.simpleMessage("让我们开始吧"),
+        "home": MessageLookupByLibrary.simpleMessage("首页"),
         "household": MessageLookupByLibrary.simpleMessage("家庭"),
+        "info": MessageLookupByLibrary.simpleMessage("咨询"),
+        "internal": MessageLookupByLibrary.simpleMessage("内部"),
+        "introduction_to_info_pack":
+            MessageLookupByLibrary.simpleMessage("信息介绍"),
         "last_name": MessageLookupByLibrary.simpleMessage("姓"),
+        "latest_news": MessageLookupByLibrary.simpleMessage("最新消息"),
+        "latest_transactions": MessageLookupByLibrary.simpleMessage("最新交易"),
         "login": MessageLookupByLibrary.simpleMessage("登录"),
         "logout": MessageLookupByLibrary.simpleMessage("退出登录"),
         "logout_alert": MessageLookupByLibrary.simpleMessage("你确定要退出登录吗?"),
+        "me": MessageLookupByLibrary.simpleMessage("我的"),
         "mobile_phone": MessageLookupByLibrary.simpleMessage("手机号码"),
         "my_post": MessageLookupByLibrary.simpleMessage("我的发布"),
         "new_mobile_phone": MessageLookupByLibrary.simpleMessage("新的手机号码"),
@@ -83,10 +93,15 @@ class MessageLookup extends MessageLookupByLibrary {
         "payment": MessageLookupByLibrary.simpleMessage("支付"),
         "phone_email": MessageLookupByLibrary.simpleMessage("电话或邮箱"),
         "privacy_policy": MessageLookupByLibrary.simpleMessage("隐私协议"),
+        "property": MessageLookupByLibrary.simpleMessage("房产"),
+        "property_guide": MessageLookupByLibrary.simpleMessage("物业指南"),
+        "property_news": MessageLookupByLibrary.simpleMessage("资产新闻"),
+        "publish": MessageLookupByLibrary.simpleMessage("公布"),
         "rate_us": MessageLookupByLibrary.simpleMessage("评价我们"),
         "resend_code": MessageLookupByLibrary.simpleMessage("重新发送"),
         "reset_password": MessageLookupByLibrary.simpleMessage("重置密码"),
         "rewards": MessageLookupByLibrary.simpleMessage("獎勵"),
+        "service": MessageLookupByLibrary.simpleMessage("服务"),
         "settings": MessageLookupByLibrary.simpleMessage("设置"),
         "sign_up_success_txt1":
             MessageLookupByLibrary.simpleMessage("您已成功创建 YYHome 的帐户"),
@@ -96,6 +111,8 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("现在,让我们把你和你的社区关联起来"),
         "sign_up_verify_txt":
             MessageLookupByLibrary.simpleMessage("我们已经向您发送了短信验证码,请在下面输入"),
+        "strata_management_guides":
+            MessageLookupByLibrary.simpleMessage("管理手册"),
         "submit": MessageLookupByLibrary.simpleMessage("提交"),
         "terms_conditions": MessageLookupByLibrary.simpleMessage("服务条款"),
         "terms_of_service": MessageLookupByLibrary.simpleMessage("服务条款"),
@@ -112,9 +129,12 @@ class MessageLookup extends MessageLookupByLibrary {
         "upload_documents": MessageLookupByLibrary.simpleMessage("上传文档"),
         "verification_code": MessageLookupByLibrary.simpleMessage("验证码"),
         "version_no": MessageLookupByLibrary.simpleMessage("版本号."),
+        "visitor": MessageLookupByLibrary.simpleMessage("访客"),
         "welcome_name": m2,
         "yes": MessageLookupByLibrary.simpleMessage("是"),
         "you_have": MessageLookupByLibrary.simpleMessage("你还有"),
+        "your_roles_responsibilities":
+            MessageLookupByLibrary.simpleMessage("您的角色和职责"),
         "yy_home_accounts": MessageLookupByLibrary.simpleMessage("YY Home 账户")
       };
 }

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

@@ -930,6 +930,176 @@ class S {
     );
   }
 
+  /// `Home`
+  String get home {
+    return Intl.message(
+      'Home',
+      name: 'home',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Visitor`
+  String get visitor {
+    return Intl.message(
+      'Visitor',
+      name: 'visitor',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `FeedBack`
+  String get feedback {
+    return Intl.message(
+      'FeedBack',
+      name: 'feedback',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Me`
+  String get me {
+    return Intl.message(
+      'Me',
+      name: 'me',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Property`
+  String get property {
+    return Intl.message(
+      'Property',
+      name: 'property',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Service`
+  String get service {
+    return Intl.message(
+      'Service',
+      name: 'service',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Community`
+  String get community {
+    return Intl.message(
+      'Community',
+      name: 'community',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Latest News`
+  String get latest_news {
+    return Intl.message(
+      'Latest News',
+      name: 'latest_news',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Internal`
+  String get internal {
+    return Intl.message(
+      'Internal',
+      name: 'internal',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Info`
+  String get info {
+    return Intl.message(
+      'Info',
+      name: 'info',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Publish`
+  String get publish {
+    return Intl.message(
+      'Publish',
+      name: 'publish',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Latest Transactions`
+  String get latest_transactions {
+    return Intl.message(
+      'Latest Transactions',
+      name: 'latest_transactions',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Property News`
+  String get property_news {
+    return Intl.message(
+      'Property News',
+      name: 'property_news',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Strata Management Guides`
+  String get strata_management_guides {
+    return Intl.message(
+      'Strata Management Guides',
+      name: 'strata_management_guides',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Introduction to info-pack`
+  String get introduction_to_info_pack {
+    return Intl.message(
+      'Introduction to info-pack',
+      name: 'introduction_to_info_pack',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Your roles & responsibilities`
+  String get your_roles_responsibilities {
+    return Intl.message(
+      'Your roles & responsibilities',
+      name: 'your_roles_responsibilities',
+      desc: '',
+      args: [],
+    );
+  }
+
+  /// `Property Guide`
+  String get property_guide {
+    return Intl.message(
+      'Property Guide',
+      name: 'property_guide',
+      desc: '',
+      args: [],
+    );
+  }
+
   /// `Other`
   String get other {
     return Intl.message(

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

@@ -87,5 +87,22 @@
   "alert": "Alert",
   "logout_alert": "Are you sure you want to logout?",
   "account_deactivate_alert": "Are you sure you want to deactivate your account? You will not be able to login into the app once you proceed with the request.",
+  "home": "Home",
+  "visitor": "Visitor",
+  "feedback": "FeedBack",
+  "me": "Me",
+  "property": "Property",
+  "service": "Service",
+  "community": "Community",
+  "latest_news": "Latest News",
+  "internal": "Internal",
+  "info": "Info",
+  "publish": "Publish",
+  "latest_transactions": "Latest Transactions",
+  "property_news": "Property News",
+  "strata_management_guides": "Strata Management Guides",
+  "introduction_to_info_pack": "Introduction to info-pack",
+  "your_roles_responsibilities": "Your roles & responsibilities",
+  "property_guide": "Property Guide",
   "other": "Other"
 }

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

@@ -87,5 +87,22 @@
   "alert": "提示",
   "logout_alert": "你确定要退出登录吗?",
   "account_deactivate_alert": "您确定要停用您的帐户吗?一旦您继续执行请求,您将无法登录应用程序。",
+  "home": "首页",
+  "visitor": "访客",
+  "feedback": "反馈",
+  "me": "我的",
+  "property": "房产",
+  "service": "服务",
+  "community": "社区",
+  "latest_news": "最新消息",
+  "internal": "内部",
+  "info": "咨询",
+  "publish": "公布",
+  "latest_transactions": "最新交易",
+  "property_news": "资产新闻",
+  "strata_management_guides": "管理手册",
+  "introduction_to_info_pack": "信息介绍",
+  "your_roles_responsibilities": "您的角色和职责",
+  "property_guide": "物业指南",
   "other": "其他"
 }

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

@@ -73,5 +73,22 @@
   "alert": "提示",
   "logout_alert": "你确定要退出登录吗?",
   "account_deactivate_alert": "您确定要停用您的帐户吗?一旦您继续执行请求,您将无法登录应用程序。",
+  "home": "首页",
+  "visitor": "访客",
+  "feedback": "反馈",
+  "me": "我的",
+  "property": "房产",
+  "service": "服务",
+  "community": "社区",
+  "latest_news": "最新消息",
+  "internal": "内部",
+  "info": "咨询",
+  "publish": "公布",
+  "latest_transactions": "最新交易",
+  "property_news": "资产新闻",
+  "strata_management_guides": "管理手册",
+  "introduction_to_info_pack": "信息介绍",
+  "your_roles_responsibilities": "您的角色和职责",
+  "property_guide": "物业指南",
   "other": "其他"
 }

+ 28 - 3
packages/cs_resources/lib/theme/app_colors_theme.dart

@@ -11,9 +11,10 @@ extension AppColorsThemeExtensions on BuildContext {
 
 class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
   //亮色主题的自定义颜色值
-  static const _colorPrimary = Color(0xFF4161D0); //主题色
+  static const color666666 = Color(0xFF666666);
+  static const _colorPrimary = Color(0xFF4161D0);
+  static const _colorFF5E75 = Color(0xFFFF5E75);
   static const _colorFCFCFC = Color(0xFFFCFCFC);
-  static const _color666666 = Color(0xFF666666);
   static const _colorD7DBE7 = Color(0xffD7DBE7);
   static const _colorBDBDBD = Color(0xFFBDBDBD);
   static const _colorF2F2F2 = Color(0xFFF2F2F2);
@@ -23,6 +24,10 @@ class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
   static const _colorF3F3F3 = Color(0xFFF3F3F3);
   static const _color999999 = Color(0xFF999999);
   static const _colorF2F3F6 = Color(0xFFF2F3F6);
+  static const _colorDCDCDC = Color(0xFFDCDCDC);
+  static const _colorEFF3FF = Color(0xFFEFF3FF);
+  static const _colorDFF0FF = Color(0xFFDFF0FF);
+
 
   //暗色主题的一些自定义颜色值
   static const _darkBlackBg = Color(0xFF0F0F0F);
@@ -51,6 +56,10 @@ class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
   final Color textDarkGray999; //文本深灰色
   final Color whiteBG; //按钮的白色色背景
   final Color whiteSecondBG; //按钮的白色色背景
+  final Color redDefault; //App标准红色
+  final Color dividerDefault; //分割线默认颜色
+  final Color lightPurpleBg; //淡紫色背景
+  final Color lightBlueBg; //淡蓝色背景
 
   // 私有的构造函数
   const AppColorsTheme._internal({
@@ -73,6 +82,10 @@ class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
     required this.textDarkGray999,
     required this.whiteBG,
     required this.whiteSecondBG,
+    required this.redDefault,
+    required this.dividerDefault,
+    required this.lightPurpleBg,
+    required this.lightBlueBg,
   });
 
   // 浅色主题工厂方法
@@ -87,7 +100,7 @@ class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
       authFiledBG: _colorF2F2F2,
       textPrimary: _colorPrimary,
       textBlack: Colors.black,
-      textDarkGray: _color666666,
+      textDarkGray: color666666,
       orangeBG: _colorFE6C00,
       tabBgSelectedPrimary: _colorPrimary,
       tabBgUnSelectedPrimary: _colorD3D3D3,
@@ -97,6 +110,10 @@ class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
       textDarkGray999: _color999999,
       whiteBG: Colors.white,
       whiteSecondBG: Colors.white,
+      redDefault: _colorFF5E75,
+      dividerDefault: _colorDCDCDC,
+      lightPurpleBg: _colorEFF3FF,
+      lightBlueBg: _colorDFF0FF,
     );
   }
 
@@ -122,6 +139,10 @@ class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
       textDarkGray999: Colors.white,
       whiteBG: _darkBlackItem,
       whiteSecondBG: _darkBlackItemLight,
+      redDefault: _darkBlackItem,
+      dividerDefault: _darkBlackItemDivider,
+      lightPurpleBg: _darkBlackItemLight,
+      lightBlueBg: _darkBlackItem,
     );
   }
 
@@ -156,6 +177,10 @@ class AppColorsTheme extends ThemeExtension<AppColorsTheme> {
       textDarkGray999: Color.lerp(textDarkGray999, other.textDarkGray999, t)!,
       whiteBG: Color.lerp(whiteBG, other.whiteBG, t)!,
       whiteSecondBG: Color.lerp(whiteSecondBG, other.whiteSecondBG, t)!,
+      redDefault: Color.lerp(redDefault, other.redDefault, t)!,
+      dividerDefault: Color.lerp(dividerDefault, other.dividerDefault, t)!,
+      lightPurpleBg: Color.lerp(lightPurpleBg, other.lightPurpleBg, t)!,
+      lightBlueBg: Color.lerp(lightBlueBg, other.lightBlueBg, t)!,
     );
   }
 }

+ 13 - 2
packages/cs_shared/lib/utils/device_utils.dart

@@ -1,19 +1,30 @@
 import 'dart:io';
 
+import 'package:flutter/cupertino.dart';
 import 'package:flutter/foundation.dart';
 
-
 class DeviceUtils {
-
   static bool get isDesktop => !isWeb && (isWindows || isLinux || isMacOS);
+
   static bool get isMobile => isAndroid || isIOS;
+
   static bool get isWeb => kIsWeb;
 
   static bool get isWindows => !isWeb && Platform.isWindows;
+
   static bool get isLinux => !isWeb && Platform.isLinux;
+
   static bool get isMacOS => !isWeb && Platform.isMacOS;
+
   static bool get isAndroid => !isWeb && Platform.isAndroid;
+
   static bool get isFuchsia => !isWeb && Platform.isFuchsia;
+
   static bool get isIOS => !isWeb && Platform.isIOS;
 
+  static bool isDarkMode(BuildContext context) {
+    Brightness currentBrightness = MediaQuery.of(context).platformBrightness;
+    return currentBrightness == Brightness.dark;
+  }
+
 }

+ 4 - 3
packages/cs_widgets/lib/my_appbar.dart

@@ -1,3 +1,4 @@
+import 'package:cs_resources/theme/app_colors_theme.dart';
 import 'package:cs_resources/theme/theme_config.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
@@ -68,12 +69,12 @@ class MyAppBar {
       actions: actions,
       elevation: 0.0,
       bottom: showBottomDivider
-          ? const PreferredSize(
-              preferredSize: Size.fromHeight(0.5),
+          ?  PreferredSize(
+              preferredSize: const Size.fromHeight(0.5),
               child: Divider(
                 height: 0.5,
                 indent: 0.0,
-                color: ColorConstants.dividerBar,
+                color: context.appColors.dividerDefault,
               ))
           : null,
     );