فهرست منبع

[feat]星座恋爱分析,搭建页面框架

hezihao 8 ماه پیش
والد
کامیت
cb620f4491

BIN
assets/images/bg_zodiac_love_intimacy.webp


BIN
assets/images/zodiac_love_tab_left1.webp


BIN
assets/images/zodiac_love_tab_left2.webp


BIN
assets/images/zodiac_love_tab_right1.webp


BIN
assets/images/zodiac_love_tab_right2.webp


+ 4 - 0
assets/string/base/string.xml

@@ -473,4 +473,8 @@
     <string name="permission_dialog_title">使用权限说明</string>
     <string name="permission_dialog_authorize">去开启</string>
     <string name="permission_authorize_fail">授权失败</string>
+
+    <string name="zodiac_love_intimacy">星座恋爱分析</string>
+    <string name="zodiac_love_intimacy_today_tab">今日指数</string>
+    <string name="zodiac_love_intimacy_future_week_tab">未来一周</string>
 </resources>

+ 10 - 0
lib/di/get_it.config.dart

@@ -95,6 +95,10 @@ import '../module/store/store_controller.dart' as _i344;
 import '../module/store/suprise/goods_surprise_controller.dart' as _i935;
 import '../module/user_info/user_info_controller.dart' as _i866;
 import '../module/user_profile/user_profile_controller.dart' as _i329;
+import '../module/zodiac_love_intimacy/future_week/zodiac_love_future_week_controller.dart'
+    as _i109;
+import '../module/zodiac_love_intimacy/tody/zodiac_love_today_controller.dart'
+    as _i630;
 import '../module/zodiac_love_intimacy/zodiac_love_intimacy_controller.dart'
     as _i1060;
 import '../plugins/keyboard_method_handler.dart' as _i415;
@@ -164,6 +168,12 @@ extension GetItInjectableX on _i174.GetIt {
     gh.factory<_i415.KeyboardMethodHandler>(
       () => _i415.KeyboardMethodHandler(),
     );
+    gh.factory<_i109.ZodiacLoveFutureWeekController>(
+      () => _i109.ZodiacLoveFutureWeekController(),
+    );
+    gh.factory<_i630.ZodiacLoveTodayController>(
+      () => _i630.ZodiacLoveTodayController(),
+    );
     gh.lazySingleton<_i495.WechatLoginService>(
       () => _i495.WechatLoginService(),
     );

+ 7 - 3
lib/module/keyboard/keyboard_controller.dart

@@ -23,6 +23,7 @@ import '../intimacy_analyse/intimacy_analyse_page.dart';
 import '../intimacy_scale/intimacy_scale_page.dart';
 import '../keyboard_guide/keyboard_guide_page.dart';
 import '../profile/profile_page.dart';
+import '../zodiac_love_intimacy/zodiac_love_intimacy_page.dart';
 
 @injectable
 class KeyBoardController extends BaseController {
@@ -74,16 +75,14 @@ class KeyBoardController extends BaseController {
   /// 根据当前登录状态 & 会员信息更新 banner显示逻辑
   void _updateBannerState() {
     if (isLogin && (memberInfo?.isMember == true)) {
-
       isShowBanner.value = false;
       _timer?.cancel(); // 停止倒计时
     } else {
-
       if (isShowBanner.value == false) {
         isShowBanner.value = true;
       }
       if (_timer == null || !_timer!.isActive) {
-        if(isNotHWChannel()) {
+        if (isNotHWChannel()) {
           startCountdown();
         }
       }
@@ -168,4 +167,9 @@ class KeyBoardController extends BaseController {
 
     return "$minutes:$seconds:$milliseconds";
   }
+
+  /// 点击星座恋爱分析
+  void clickZodiacLoveIntimacy() {
+    ZodiacLoveIntimacyPage.start();
+  }
 }

+ 87 - 82
lib/module/keyboard/keyboard_view.dart

@@ -163,92 +163,97 @@ class KeyBoardView extends BaseView<KeyBoardController> {
 
   // 爱情指数卡片
   Widget _buildLoveIndexCard() {
-    return Stack(
-      clipBehavior: Clip.none,
-      children: [
-        Positioned(
-          left: 0,
-          right: 0,
-          top: -12.h,
-          child: Assets.images.iconKeyboardTriangle.image(
-            color: Colors.white,
-            width: 20.w,
-            height: 16.h,
-          ),
-        ),
-        Container(
-          margin: EdgeInsets.symmetric(horizontal: 22.w),
-          padding: EdgeInsets.symmetric(vertical: 5.h, horizontal: 5.w),
-          decoration: BoxDecoration(
-            color: Colors.white,
-            borderRadius: BorderRadius.circular(12.r),
+    return GestureDetector(
+      onTap: () {
+        controller.clickZodiacLoveIntimacy();
+      },
+      child: Stack(
+        clipBehavior: Clip.none,
+        children: [
+          Positioned(
+            left: 0,
+            right: 0,
+            top: -12.h,
+            child: Assets.images.iconKeyboardTriangle.image(
+              color: Colors.white,
+              width: 20.w,
+              height: 16.h,
+            ),
           ),
-          child: Row(
-            children: [
-              Assets.images.iconKeyboardLoveIndex.image(
-                width: 72.w,
-                height: 23.h,
-              ),
-              SizedBox(width: 10.w),
-              Expanded(
-                child: Obx(() {
-                  return Container(
-                    padding: EdgeInsets.symmetric(
-                      horizontal: 10.w,
-                      vertical: 8.h,
-                    ),
-                    decoration: BoxDecoration(
-                      color: Color(0xFFFAFAFC),
-                      borderRadius: BorderRadius.circular(12.r),
-                    ),
-                    child: Row(
-                      children: [
-                        Expanded(
-                          child: Column(
-                            children: [
-                              ProgressBar(
-                                title: StringName.keyboardPassion,
-                                value: controller.loveIndex.value?.passion,
-                                color: Color(0XFFFF637D),
-                              ),
-                              SizedBox(height: 6.h),
-                              ProgressBar(
-                                title: StringName.keyboardRapport,
-                                value: controller.loveIndex.value?.rapport,
-                                color: Color(0XFFCE63FF),
-                              ),
-                            ],
+          Container(
+            margin: EdgeInsets.symmetric(horizontal: 22.w),
+            padding: EdgeInsets.symmetric(vertical: 5.h, horizontal: 5.w),
+            decoration: BoxDecoration(
+              color: Colors.white,
+              borderRadius: BorderRadius.circular(12.r),
+            ),
+            child: Row(
+              children: [
+                Assets.images.iconKeyboardLoveIndex.image(
+                  width: 72.w,
+                  height: 23.h,
+                ),
+                SizedBox(width: 10.w),
+                Expanded(
+                  child: Obx(() {
+                    return Container(
+                      padding: EdgeInsets.symmetric(
+                        horizontal: 10.w,
+                        vertical: 8.h,
+                      ),
+                      decoration: BoxDecoration(
+                        color: Color(0xFFFAFAFC),
+                        borderRadius: BorderRadius.circular(12.r),
+                      ),
+                      child: Row(
+                        children: [
+                          Expanded(
+                            child: Column(
+                              children: [
+                                ProgressBar(
+                                  title: StringName.keyboardPassion,
+                                  value: controller.loveIndex.value?.passion,
+                                  color: Color(0XFFFF637D),
+                                ),
+                                SizedBox(height: 6.h),
+                                ProgressBar(
+                                  title: StringName.keyboardRapport,
+                                  value: controller.loveIndex.value?.rapport,
+                                  color: Color(0XFFCE63FF),
+                                ),
+                              ],
+                            ),
                           ),
-                        ),
-                        SizedBox(width: 21.w),
-                        Expanded(
-                          child: Column(
-                            children: [
-                              Obx(() {
-                                return ProgressBar(
-                                  title: StringName.keyboardFetter,
-                                  value: controller.loveIndex.value?.fetter,
-                                  color: Color(0xFFFFC954),
-                                );
-                              }),
-                              SizedBox(height: 6.h),
-                              ProgressBar(
-                                title: StringName.keyboardPromise,
-                                value: controller.loveIndex.value?.promise,
-                                color: Color(0XFF6382FF),
-                              ),
-                            ],
+                          SizedBox(width: 21.w),
+                          Expanded(
+                            child: Column(
+                              children: [
+                                Obx(() {
+                                  return ProgressBar(
+                                    title: StringName.keyboardFetter,
+                                    value: controller.loveIndex.value?.fetter,
+                                    color: Color(0xFFFFC954),
+                                  );
+                                }),
+                                SizedBox(height: 6.h),
+                                ProgressBar(
+                                  title: StringName.keyboardPromise,
+                                  value: controller.loveIndex.value?.promise,
+                                  color: Color(0XFF6382FF),
+                                ),
+                              ],
+                            ),
                           ),
-                        ),
-                      ],
-                    ),
-                  );
-                }),
-              ),
-            ],
+                        ],
+                      ),
+                    );
+                  }),
+                ),
+              ],
+            ),
           ),
-        ),
-      ],
+        ],
+      ),
     );
   }
 

+ 56 - 0
lib/module/zodiac_love_intimacy/enums/zodiac_love_intimacy_tab.dart

@@ -0,0 +1,56 @@
+import 'package:flutter/cupertino.dart';
+
+import '../../../resource/assets.gen.dart';
+import '../../../resource/string.gen.dart';
+
+/// 星座分析Tab枚举
+enum ZodiacLoveIntimacyTab {
+  /// 今日指数Tab
+  today(0),
+
+  /// 未来一周Tab
+  futureWeek(1);
+
+  /// Tab所在页面的索引
+  final int tabIndex;
+
+  const ZodiacLoveIntimacyTab(this.tabIndex);
+
+  /// 获取Tab名称
+  String getTabName() {
+    switch (this) {
+      case today:
+        return StringName.zodiacLoveIntimacyTodayTab;
+      case futureWeek:
+        return StringName.zodiacLoveIntimacyFutureWeekTab;
+    }
+  }
+
+  /// 获取Tab未选中时的背景
+  ImageProvider getTabNormalBg() {
+    switch (this) {
+      case today:
+        return Assets.images.zodiacLoveTabLeft2.provider();
+      case futureWeek:
+        return Assets.images.zodiacLoveTabRight1.provider();
+    }
+  }
+
+  /// 获取Tab未选中时的背景
+  ImageProvider getTabSelectedBg() {
+    switch (this) {
+      case today:
+        return Assets.images.zodiacLoveTabLeft1.provider();
+      case futureWeek:
+        return Assets.images.zodiacLoveTabRight2.provider();
+    }
+  }
+
+  /// 通过index,查找对应的Tab枚举实例
+  ZodiacLoveIntimacyTab fromIndex(int index) {
+    return ZodiacLoveIntimacyTab.values.firstWhere(
+      (element) => element.tabIndex == index,
+      orElse: () => today,
+    );
+  }
+}

+ 6 - 0
lib/module/zodiac_love_intimacy/future_week/zodiac_love_future_week_controller.dart

@@ -0,0 +1,6 @@
+import 'package:injectable/injectable.dart';
+import 'package:keyboard/base/base_controller.dart';
+
+/// 星座恋爱分析-未来一周Tab-Controller
+@injectable
+class ZodiacLoveFutureWeekController extends BaseController {}

+ 20 - 0
lib/module/zodiac_love_intimacy/future_week/zodiac_love_future_week_view.dart

@@ -0,0 +1,20 @@
+import 'package:flutter/Material.dart';
+import 'package:keyboard/module/zodiac_love_intimacy/future_week/zodiac_love_future_week_controller.dart';
+
+import '../../../base/base_view.dart';
+
+/// 星座恋爱分析-未来一周Tab
+class ZodiacLoveFutureWeekView
+    extends BaseView<ZodiacLoveFutureWeekController> {
+  const ZodiacLoveFutureWeekView({super.key});
+
+  @override
+  backgroundColor() {
+    return Color(0xFFF6F5FA);
+  }
+
+  @override
+  Widget buildBody(BuildContext context) {
+    return Container(child: Center(child: Text("")));
+  }
+}

+ 6 - 0
lib/module/zodiac_love_intimacy/tody/zodiac_love_today_controller.dart

@@ -0,0 +1,6 @@
+import 'package:injectable/injectable.dart';
+import 'package:keyboard/base/base_controller.dart';
+
+/// 星座恋爱分析-今日Tab-Controller
+@injectable
+class ZodiacLoveTodayController extends BaseController {}

+ 19 - 0
lib/module/zodiac_love_intimacy/tody/zodiac_love_today_view.dart

@@ -0,0 +1,19 @@
+import 'package:flutter/Material.dart';
+import 'package:keyboard/module/zodiac_love_intimacy/tody/zodiac_love_today_controller.dart';
+
+import '../../../base/base_view.dart';
+
+/// 星座恋爱分析-今日Tab
+class ZodiacLoveTodayView extends BaseView<ZodiacLoveTodayController> {
+  const ZodiacLoveTodayView({super.key});
+
+  @override
+  backgroundColor() {
+    return Color(0xFFF6F5FA);
+  }
+
+  @override
+  Widget buildBody(BuildContext context) {
+    return Container(child: Center(child: Text("")));
+  }
+}

+ 84 - 2
lib/module/zodiac_love_intimacy/zodiac_love_intimacy_controller.dart

@@ -1,7 +1,89 @@
+import 'package:flutter/Material.dart';
+import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
 
+import '../../router/app_page_arguments.dart';
+import '../../utils/atmob_log.dart';
+import 'enums/zodiac_love_intimacy_tab.dart';
+
 /// 星座恋爱分析Controller
 @injectable
-class ZodiacLoveIntimacyController extends BaseController {
-}
+class ZodiacLoveIntimacyController extends BaseController
+    with GetTickerProviderStateMixin {
+  final String _tag = "ZodiacLoveIntimacyController";
+
+  /// Tab列表
+  RxList<ZodiacLoveIntimacyTab> tabBarList = ZodiacLoveIntimacyTab.values.obs;
+
+  /// Tab控制器
+  late final TabController tabController;
+
+  /// PageView控制器
+  late final PageController pageController;
+
+  /// PageView是否允许滑动切换
+  RxBool isPageViewSwipeEnabled = true.obs;
+
+  /// 当前Tab的索引
+  Rx<int> currentTabIndex = 0.obs;
+
+  @override
+  void onInit() {
+    super.onInit();
+    _initArgs();
+  }
+
+  /// 初始化参数
+  void _initArgs() {
+    final arguments = Get.arguments as Map<String, dynamic>?;
+
+    // 当前索引
+    int tabIndex = ZodiacLoveIntimacyTab.today.tabIndex;
+    if (arguments?[AppPageArguments.index] == null) {
+      AtmobLog.i(_tag, '没有传递 index 参数');
+    } else {
+      final int? index = arguments?[AppPageArguments.index] as int?;
+      if (index != null) {
+        tabIndex = index;
+        AtmobLog.i(_tag, "index: $tabIndex");
+      }
+    }
+
+    // 创建PageController和TabController,并设置当前选中的index为初始索引
+    pageController = PageController(initialPage: tabIndex);
+    tabController = TabController(
+      initialIndex: tabIndex,
+      length: tabBarList.length,
+      vsync: this,
+    );
+    currentTabIndex.value = tabIndex;
+  }
+
+  /// 返回
+  void clickBack() {
+    Get.back();
+  }
+
+  @override
+  void onClose() {
+    tabController.dispose();
+    pageController.dispose();
+    super.onClose();
+  }
+
+  /// 处理Tab切换,联动PageView
+  void handleTabChange(int index) {
+    pageController.animateToPage(
+      index,
+      duration: const Duration(milliseconds: 300),
+      curve: Curves.easeInToLinear,
+    );
+  }
+
+  /// 处理PageView切换,联动Tab
+  void handlePageChange(int index) {
+    tabController.animateTo(index, duration: const Duration(milliseconds: 300));
+    currentTabIndex.value = index;
+  }
+}

+ 227 - 2
lib/module/zodiac_love_intimacy/zodiac_love_intimacy_page.dart

@@ -1,9 +1,20 @@
-import 'package:flutter/cupertino.dart';
+import 'package:collection/collection.dart';
+import 'package:flutter/Material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import 'package:keyboard/base/base_page.dart';
+import 'package:keyboard/module/zodiac_love_intimacy/tody/zodiac_love_today_view.dart';
 import 'package:keyboard/module/zodiac_love_intimacy/zodiac_love_intimacy_controller.dart';
+import 'package:keyboard/resource/colors.gen.dart';
+import 'package:nested_scroll_views/material.dart';
 
+import '../../resource/assets.gen.dart';
+import '../../resource/string.gen.dart';
 import '../../router/app_pages.dart';
+import '../../widget/status_bar_placeholder_widget.dart';
+import '../../widget/top_bar.dart';
+import 'enums/zodiac_love_intimacy_tab.dart';
+import 'future_week/zodiac_love_future_week_view.dart';
 
 /// 星座恋爱分析Tab页
 class ZodiacLoveIntimacyPage extends BasePage<ZodiacLoveIntimacyController> {
@@ -14,7 +25,221 @@ class ZodiacLoveIntimacyPage extends BasePage<ZodiacLoveIntimacyController> {
   }
 
   @override
+  bool immersive() {
+    return true;
+  }
+
+  @override
+  bool statusBarDarkFont() {
+    return false;
+  }
+
+  @override
+  backgroundColor() {
+    return Colors.transparent;
+  }
+
+  @override
   Widget buildBody(BuildContext context) {
-    return Center();
+    return Scaffold(
+      backgroundColor: backgroundColor(),
+      body: Stack(
+        children: [
+          // 背景图
+          Positioned.fill(child: _buildBackgroundImage()),
+          // 内容,填充剩余部分
+          Positioned.fill(
+            top: 0,
+            left: 0,
+            right: 0,
+            bottom: 0,
+            child: _buildContent(context),
+          ),
+          // 状态栏和标题栏
+          Positioned(
+            left: 0,
+            top: 0,
+            right: 0,
+            child: Column(
+              mainAxisSize: MainAxisSize.min,
+              children: [StatusBarPlaceholderWidget(), _buildTopBar()],
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  /// 背景图
+  Widget _buildBackgroundImage() {
+    return Container(
+      child: Assets.images.bgZodiacLoveIntimacy.image(
+        fit: BoxFit.cover,
+        width: double.infinity,
+        height: double.infinity,
+      ),
+    );
+  }
+
+  /// 顶部栏
+  Widget _buildTopBar() {
+    return TopBar(
+      leftWidget: GestureDetector(
+        onTap: controller.clickBack,
+        child: Assets.images.iconWhiteBackArrow.image(
+          width: 24.w,
+          height: 24.h,
+        ),
+      ),
+      centerWidget: Text(
+        StringName.zodiacLoveIntimacy,
+        style: TextStyle(
+          color: ColorName.white,
+          fontSize: 17.sp,
+          fontWeight: FontWeight.w500,
+        ),
+      ),
+    );
+  }
+
+  /// 指示器
+  Widget _buildTabBar() {
+    return Obx(() {
+      return PreferredSize(
+        preferredSize: Size.fromHeight(45.h),
+        child: Stack(
+          children: [
+            Container(
+              height: 41.h,
+              margin: EdgeInsets.only(top: 6.h),
+              // 顶部2边圆角
+              decoration: BoxDecoration(
+                color: Color(0xFFEBE7FD),
+                borderRadius: BorderRadius.only(
+                  topLeft: Radius.circular(45.r),
+                  topRight: Radius.circular(45.r),
+                ),
+              ),
+            ),
+            // Tab
+            TabBar(
+              // 只有2个Tab,均分宽度,所以不可以滚动
+              isScrollable: false,
+              // 去除底部的黑线
+              dividerHeight: 0,
+              // 去掉自带的指示器
+              indicator: BoxDecoration(),
+              // 对齐方式,填充式对齐
+              tabAlignment: TabAlignment.fill,
+              // 指示器的高度设置为0,才能完全隐藏,否则还是会有一条线的高度
+              indicatorWeight: 0,
+              // 移除左右边距
+              padding: EdgeInsets.zero,
+              // 移除指示器与标签的间距
+              indicatorPadding: EdgeInsets.zero,
+              // 移除标签内部边距
+              labelPadding: EdgeInsets.zero,
+              // 配置Tab数据
+              tabs:
+                  controller.tabBarList.mapIndexed((
+                    int index,
+                    ZodiacLoveIntimacyTab tab,
+                  ) {
+                    bool isSelected = controller.currentTabIndex.value == index;
+                    return _buildTab(tab, isSelected);
+                  }).toList(),
+              controller: controller.tabController,
+              onTap: (index) {
+                controller.handleTabChange(index);
+              },
+            ),
+          ],
+        ),
+      );
+    });
+  }
+
+  /// 每个Tab
+  Tab _buildTab(ZodiacLoveIntimacyTab tab, bool isSelected) {
+    String tabName = tab.getTabName();
+    TextStyle tabTextStyle;
+    if (isSelected) {
+      // 选中时的颜色
+      tabTextStyle = TextStyle(
+        fontSize: 14.sp,
+        fontWeight: FontWeight.w700,
+        color: ColorName.black80,
+      );
+    } else {
+      // 未选中时的颜色
+      tabTextStyle = TextStyle(
+        fontSize: 14.sp,
+        fontWeight: FontWeight.w500,
+        color: ColorName.black60,
+      );
+    }
+    return Tab(
+      child: Container(
+        width: double.infinity,
+        height: double.infinity,
+        // 未选中时,距离顶部有一定距离,选中时则撑满TabBar
+        margin: EdgeInsets.only(top: isSelected ? 0 : 6.h),
+        decoration: BoxDecoration(
+          image:
+              // 选中时,才有背景图
+              isSelected
+                  ? DecorationImage(
+                    image: tab.getTabSelectedBg(),
+                    fit: BoxFit.fill,
+                  )
+                  : null,
+        ),
+        child: Center(child: Text(tabName, style: tabTextStyle)),
+      ),
+    );
+  }
+
+  /// 内容
+  Widget _buildContent(BuildContext context) {
+    return Column(
+      children: [
+        // 顶部概览
+        _buildOverviewHeader(),
+        // TabBar
+        _buildTabBar(),
+        // PageView
+        Expanded(child: _buildPage()),
+      ],
+    );
+  }
+
+  /// 顶部概览视图
+  Widget _buildOverviewHeader() {
+    return Container(height: 270.h);
+  }
+
+  /// PageView
+  Widget _buildPage() {
+    return Obx(() {
+      return NestedPageView(
+        controller: controller.pageController,
+        // 保持页面缓存
+        wantKeepAlive: true,
+        // 是否禁止滑动切换
+        physics:
+            controller.isPageViewSwipeEnabled.value
+                ? ScrollPhysics()
+                : NeverScrollableScrollPhysics(),
+        onPageChanged: (index) {
+          controller.handlePageChange(index);
+        },
+        children: [
+          // 今日Tab
+          ZodiacLoveTodayView(),
+          // 未来一周Tab
+          ZodiacLoveFutureWeekView(),
+        ],
+      );
+    });
   }
 }

+ 25 - 0
lib/resource/assets.gen.dart

@@ -329,6 +329,10 @@ class $AssetsImagesGen {
   AssetGenImage get bgTicketDialogPrices2 =>
       const AssetGenImage('assets/images/bg_ticket_dialog_prices2.webp');
 
+  /// File path: assets/images/bg_zodiac_love_intimacy.webp
+  AssetGenImage get bgZodiacLoveIntimacy =>
+      const AssetGenImage('assets/images/bg_zodiac_love_intimacy.webp');
+
   /// File path: assets/images/gif_discount_unlock_button.gif
   AssetGenImage get gifDiscountUnlockButton =>
       const AssetGenImage('assets/images/gif_discount_unlock_button.gif');
@@ -1257,6 +1261,22 @@ class $AssetsImagesGen {
   AssetGenImage get keyboardTutorialIosStep2 =>
       const AssetGenImage('assets/images/keyboard_tutorial_ios_step_2.webp');
 
+  /// File path: assets/images/zodiac_love_tab_left1.webp
+  AssetGenImage get zodiacLoveTabLeft1 =>
+      const AssetGenImage('assets/images/zodiac_love_tab_left1.webp');
+
+  /// File path: assets/images/zodiac_love_tab_left2.webp
+  AssetGenImage get zodiacLoveTabLeft2 =>
+      const AssetGenImage('assets/images/zodiac_love_tab_left2.webp');
+
+  /// File path: assets/images/zodiac_love_tab_right1.webp
+  AssetGenImage get zodiacLoveTabRight1 =>
+      const AssetGenImage('assets/images/zodiac_love_tab_right1.webp');
+
+  /// File path: assets/images/zodiac_love_tab_right2.webp
+  AssetGenImage get zodiacLoveTabRight2 =>
+      const AssetGenImage('assets/images/zodiac_love_tab_right2.webp');
+
   /// List of all assets
   List<AssetGenImage> get values => [
     bgAgreementAgainDialog,
@@ -1317,6 +1337,7 @@ class $AssetsImagesGen {
     bgTicketDialog,
     bgTicketDialogPrices,
     bgTicketDialogPrices2,
+    bgZodiacLoveIntimacy,
     gifDiscountUnlockButton,
     iconAboutArrowLeft,
     iconActionCopy,
@@ -1537,6 +1558,10 @@ class $AssetsImagesGen {
     iconWhiteBackArrow,
     keyboardTutorialIosStep1,
     keyboardTutorialIosStep2,
+    zodiacLoveTabLeft1,
+    zodiacLoveTabLeft2,
+    zodiacLoveTabRight1,
+    zodiacLoveTabRight2,
   ];
 }
 

+ 6 - 0
lib/resource/string.gen.dart

@@ -351,6 +351,9 @@ class StringName {
   static final String permissionDialogTitle = 'permission_dialog_title'.tr; // 使用权限说明
   static final String permissionDialogAuthorize = 'permission_dialog_authorize'.tr; // 去开启
   static final String permissionAuthorizeFail = 'permission_authorize_fail'.tr; // 授权失败
+  static final String zodiacLoveIntimacy = 'zodiac_love_intimacy'.tr; // 星座恋爱分析
+  static final String zodiacLoveIntimacyTodayTab = 'zodiac_love_intimacy_today_tab'.tr; // 今日指数
+  static final String zodiacLoveIntimacyFutureWeekTab = 'zodiac_love_intimacy_future_week_tab'.tr; // 未来一周
 }
 class StringMultiSource {
   StringMultiSource._();
@@ -705,6 +708,9 @@ class StringMultiSource {
       'permission_dialog_title': '使用权限说明',
       'permission_dialog_authorize': '去开启',
       'permission_authorize_fail': '授权失败',
+      'zodiac_love_intimacy': '星座恋爱分析',
+      'zodiac_love_intimacy_today_tab': '今日指数',
+      'zodiac_love_intimacy_future_week_tab': '未来一周',
     },
   };
 }

+ 6 - 1
lib/router/app_pages.dart

@@ -79,6 +79,8 @@ import '../module/store/discount/discount_controller.dart';
 import '../module/store/new_discount/new_discount_controller.dart';
 import '../module/store/suprise/goods_surprise_controller.dart';
 import '../module/user_profile/user_profile_page.dart';
+import '../module/zodiac_love_intimacy/future_week/zodiac_love_future_week_controller.dart';
+import '../module/zodiac_love_intimacy/tody/zodiac_love_today_controller.dart';
 import '../module/zodiac_love_intimacy/zodiac_love_intimacy_controller.dart';
 import '../module/zodiac_love_intimacy/zodiac_love_intimacy_page.dart';
 
@@ -188,7 +190,6 @@ class AppBinding extends Bindings {
     lazyPut(() => getIt.get<IntroController>());
 
     lazyPut(() => getIt.get<IntimacyGenerateCharacterEditController>());
-    lazyPut(() => getIt.get<ZodiacLoveIntimacyController>());
     lazyPut(() => getIt.get<IntimacyScaleController>());
     lazyPut(() => getIt.get<KeyboardTutorialController>());
     lazyPut(() => getIt.get<KeyboardTutorialAndroidViewController>());
@@ -196,6 +197,10 @@ class AppBinding extends Bindings {
     lazyPut(() => getIt.get<KeyboardTutorialVideoController>());
     lazyPut(() => getIt.get<KeyboardTutorialVideoAndroidViewController>());
     lazyPut(() => getIt.get<KeyboardTutorialVideoIosViewController>());
+
+    lazyPut(() => getIt.get<ZodiacLoveIntimacyController>());
+    lazyPut(() => getIt.get<ZodiacLoveTodayController>());
+    lazyPut(() => getIt.get<ZodiacLoveFutureWeekController>());
   }
 
   void lazyPut<S>(InstanceBuilderCallback<S> builder) {

+ 4 - 1
lib/widget/top_bar.dart

@@ -42,7 +42,10 @@ class TopBar extends StatelessWidget {
             Positioned(
               left: 0,
               right: 0,
-              child: centerWidget != null ? centerWidget! : SizedBox.shrink(),
+              child: Align(
+                alignment: Alignment.center,
+                child: centerWidget != null ? centerWidget! : SizedBox.shrink(),
+              ),
             ),
             // 右边的按钮
             Positioned(