intimacy_analyse_controller.dart 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:injectable/injectable.dart';
  4. import 'package:keyboard/base/base_controller.dart';
  5. import 'package:keyboard/module/intimacy_analyse/screenshot_reply/intimacy_analyse_screenshot_reply_controller.dart';
  6. import 'package:keyboard/resource/string.gen.dart';
  7. import '../../data/consts/event_report.dart';
  8. import '../../handler/event_handler.dart';
  9. import '../../router/app_page_arguments.dart';
  10. import '../../utils/atmob_log.dart';
  11. import 'enums/intimacy_analyse_tab.dart';
  12. import 'enums/screenshot_reply_tab.dart';
  13. /// 亲密度分析Controller
  14. @injectable
  15. class IntimacyAnalyseController extends BaseController
  16. with GetTickerProviderStateMixin {
  17. final String _tag = "IntimacyAnalyseController";
  18. /// Tab列表
  19. RxList<String> tabBarList =
  20. IntimacyAnalyseTab.values.map((item) => item.getTabName()).toList().obs;
  21. /// Tab控制器
  22. late final TabController tabController;
  23. /// PageView控制器
  24. late final PageController pageController;
  25. /// PageView是否允许滑动切换
  26. RxBool isPageViewSwipeEnabled = false.obs;
  27. /// 当前Tab的索引
  28. final RxInt _currentIndex = 0.obs;
  29. @override
  30. void onInit() {
  31. super.onInit();
  32. _initArgs();
  33. }
  34. /// 初始化参数
  35. void _initArgs() {
  36. final arguments = Get.arguments as Map<String, dynamic>?;
  37. // 当前索引
  38. int tabIndex = IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.tabIndex;
  39. if (arguments?[AppPageArguments.index] == null) {
  40. AtmobLog.i(_tag, '没有传递 index 参数');
  41. } else {
  42. final int? index = arguments?[AppPageArguments.index] as int?;
  43. if (index != null) {
  44. tabIndex = index;
  45. AtmobLog.i(_tag, "index: $tabIndex");
  46. }
  47. }
  48. // 创建PageController和TabController,并设置当前选中的index为初始索引
  49. pageController = PageController(initialPage: tabIndex);
  50. tabController = TabController(
  51. initialIndex: tabIndex,
  52. length: tabBarList.length,
  53. vsync: this,
  54. );
  55. if (tabIndex == IntimacyAnalyseTab.intimacyAnalyseReport.tabIndex) {
  56. EventHandler.report(EventId.event_09001);
  57. } else if (tabIndex ==
  58. IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.tabIndex) {
  59. if (Get.isRegistered<IntimacyAnalyseScreenshotReplyController>()) {
  60. var controller = Get.find<IntimacyAnalyseScreenshotReplyController>();
  61. if (controller.currentTabIndex.value ==
  62. ScreenshotReplyTab.conversationAnalysis.tabIndex) {
  63. EventHandler.report(EventId.event_10001);
  64. } else {
  65. EventHandler.report(EventId.event_10004);
  66. }
  67. } else {
  68. EventHandler.report(EventId.event_10001);
  69. }
  70. }
  71. _currentIndex.listen((newIndex) {
  72. _reportEvent(newIndex);
  73. });
  74. }
  75. /// 返回上一页
  76. void clickBack() {
  77. Get.back();
  78. }
  79. @override
  80. void onClose() {
  81. tabController.dispose();
  82. pageController.dispose();
  83. super.onClose();
  84. }
  85. /// 处理Tab切换,联动PageView
  86. void handleTabChange(int index) {
  87. if (_currentIndex.value == index) {
  88. return;
  89. }
  90. pageController.animateToPage(
  91. index,
  92. duration: const Duration(milliseconds: 300),
  93. curve: Curves.fastOutSlowIn,
  94. );
  95. _currentIndex.value = index;
  96. }
  97. /// 处理PageView切换,联动Tab
  98. void handlePageChange(int index) {
  99. if (_currentIndex.value == index) {
  100. return;
  101. }
  102. tabController.animateTo(index, duration: const Duration(milliseconds: 300));
  103. _currentIndex.value = index;
  104. }
  105. /// 埋点
  106. void _reportEvent(int index) {
  107. if (index == IntimacyAnalyseTab.intimacyAnalyseReport.tabIndex) {
  108. EventHandler.report(EventId.event_09001);
  109. } else if (index ==
  110. IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.tabIndex) {
  111. EventHandler.report(EventId.event_10001);
  112. }
  113. }
  114. }