Преглед изворни кода

[feat]分析亲密度,增加支持跳转时,指定切换到哪个Tab

hezihao пре 7 месеци
родитељ
комит
c1835f634c

+ 2 - 2
lib/module/intimacy_analyse/analyse_report/intimacy_analyse_report_view_controller.dart

@@ -22,7 +22,7 @@ import '../intimacy_analyse_upload/intimacy_analyse_upload_page.dart';
 /// 亲密度分析-分析报告Tab-Controller
 @injectable
 class IntimacyAnalyseReportController extends BaseController {
-  String tag = "IntimacyAnalyseReportController";
+  final String _tag = "IntimacyAnalyseReportController";
 
   /// 亲密度分析Repository
   IntimacyAnalyzeRepository intimacyAnalyzeRepository;
@@ -87,7 +87,7 @@ class IntimacyAnalyseReportController extends BaseController {
   void clickIntimacyArchivesSwitch() async {
     // 跳转到档案选择页,获取当前的键盘Id
     KeyboardInfo? keyboardInfo = await ProfilePage.start() as KeyboardInfo?;
-    AtmobLog.d(tag, "switchTaTest result:=> ${keyboardInfo?.toJson() ?? ""}");
+    AtmobLog.d(_tag, "switchTaTest result:=> ${keyboardInfo?.toJson() ?? ""}");
   }
 
   /// 跳转去档案页

+ 33 - 0
lib/module/intimacy_analyse/enums/intimacy_analyse_tab.dart

@@ -0,0 +1,33 @@
+import '../../../resource/string.gen.dart';
+
+/// 亲密度分析Tab枚举
+enum IntimacyAnalyseTab {
+  /// 亲密度分析报告Tab
+  intimacyAnalyseReport(0),
+
+  /// 截图回复Tab
+  intimacyAnalyseScreenshotReply(1);
+
+  /// Tab所在页面的索引
+  final int tabIndex;
+
+  const IntimacyAnalyseTab(this.tabIndex);
+
+  /// 获取Tab名称
+  String getTabName() {
+    switch (this) {
+      case intimacyAnalyseReport:
+        return StringName.intimacyAnalyseTabReport;
+      case intimacyAnalyseScreenshotReply:
+        return StringName.intimacyAnalyseTabScreenshotReply;
+    }
+  }
+
+  /// 通过index,查找对应的Tab枚举实例
+  IntimacyAnalyseTab fromIndex(int index) {
+    return IntimacyAnalyseTab.values.firstWhere(
+      (element) => element.tabIndex == index,
+      orElse: () => intimacyAnalyseReport,
+    );
+  }
+}

+ 40 - 9
lib/module/intimacy_analyse/intimacy_analyse_controller.dart

@@ -4,25 +4,56 @@ import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/resource/string.gen.dart';
 
+import '../../router/app_page_arguments.dart';
+import '../../utils/atmob_log.dart';
+import 'enums/intimacy_analyse_tab.dart';
+
 /// 亲密度分析Controller
 @injectable
 class IntimacyAnalyseController extends BaseController
     with GetTickerProviderStateMixin {
+  final String _tag = "IntimacyAnalyseController";
+
   /// Tab列表
   RxList<String> tabBarList =
-      <String>[
-        StringName.intimacyAnalyseTabReport,
-        StringName.intimacyAnalyseTabScreenshotReply,
-      ].obs;
+      IntimacyAnalyseTab.values.map((item) => item.getTabName()).toList().obs;
 
   /// Tab控制器
-  late final TabController tabController = TabController(
-    length: tabBarList.length,
-    vsync: this,
-  );
+  late final TabController tabController;
 
   /// PageView控制器
-  final PageController pageController = PageController();
+  late final PageController pageController;
+
+  @override
+  void onInit() {
+    super.onInit();
+    _initArgs();
+  }
+
+  /// 初始化参数
+  void _initArgs() {
+    final arguments = Get.arguments as Map<String, dynamic>?;
+
+    // 当前索引
+    int tabIndex = IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.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,
+    );
+  }
 
   /// 返回上一页
   void clickBack() {

+ 11 - 2
lib/module/intimacy_analyse/intimacy_analyse_page.dart

@@ -6,9 +6,11 @@ import 'package:keyboard/module/intimacy_analyse/screenshot_reply/intimacy_analy
 import 'package:nested_scroll_views/material.dart';
 import '../../resource/assets.gen.dart';
 import '../../resource/colors.gen.dart';
+import '../../router/app_page_arguments.dart';
 import '../../router/app_pages.dart';
 import '../../widget/tabbar/custom_tab_indicator.dart';
 import 'analyse_report/intimacy_analyse_report_view.dart';
+import 'enums/intimacy_analyse_tab.dart';
 import 'intimacy_analyse_controller.dart';
 
 /// 亲密度报告页
@@ -26,8 +28,15 @@ class IntimacyAnalysePage extends BasePage<IntimacyAnalyseController> {
     return Colors.white;
   }
 
-  static start() {
-    Get.toNamed(RoutePath.intimacyAnalyse);
+  /// 跳转
+  static start({
+    IntimacyAnalyseTab tab = IntimacyAnalyseTab.intimacyAnalyseReport,
+  }) {
+    Map<String, dynamic> args = {
+      // Tab索引
+      AppPageArguments.index: tab.tabIndex,
+    };
+    Get.toNamed(RoutePath.intimacyAnalyse, arguments: args);
   }
 
   @override

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

@@ -6,6 +6,7 @@ import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/data/api/response/keyboard_home_info_response.dart';
 import 'package:keyboard/data/repository/keyboard_repository.dart';
+import 'package:keyboard/module/intimacy_analyse/enums/intimacy_analyse_tab.dart';
 import 'package:keyboard/module/keyboard_manage/keyboard_manage_page.dart';
 import 'package:keyboard/module/store/new_discount/new_discount_page.dart';
 import 'package:keyboard/module/store/store_page.dart';
@@ -49,11 +50,14 @@ class KeyBoardController extends BaseController {
 
   void clickIntimacyAnalyze() {
     debugPrint("click intimacy analyze");
-    IntimacyAnalysePage.start();
+    IntimacyAnalysePage.start(tab: IntimacyAnalyseTab.intimacyAnalyseReport);
   }
 
   void clickScreenshotReply() {
     debugPrint("click screenshot reply");
+    IntimacyAnalysePage.start(
+      tab: IntimacyAnalyseTab.intimacyAnalyseScreenshotReply,
+    );
   }
 
   void clickEasyReply() {
@@ -80,8 +84,7 @@ class KeyBoardController extends BaseController {
 
   void clickBanner() {
     debugPrint("click banner");
-  NewDiscountPage.start();
-
+    NewDiscountPage.start();
   }
 
   void startCountdown() {