intimacy_analyse_controller.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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/resource/string.gen.dart';
  6. import '../../data/consts/event_report.dart';
  7. import '../../handler/event_handler.dart';
  8. import '../../router/app_page_arguments.dart';
  9. import '../../utils/atmob_log.dart';
  10. import 'enums/intimacy_analyse_tab.dart';
  11. /// 亲密度分析Controller
  12. @injectable
  13. class IntimacyAnalyseController extends BaseController
  14. with GetTickerProviderStateMixin {
  15. final String _tag = "IntimacyAnalyseController";
  16. /// Tab列表
  17. RxList<String> tabBarList =
  18. IntimacyAnalyseTab.values.map((item) => item.getTabName()).toList().obs;
  19. /// Tab控制器
  20. late final TabController tabController;
  21. /// PageView控制器
  22. late final PageController pageController;
  23. /// PageView是否允许滑动切换
  24. RxBool isPageViewSwipeEnabled = false.obs;
  25. @override
  26. void onInit() {
  27. super.onInit();
  28. _initArgs();
  29. }
  30. /// 初始化参数
  31. void _initArgs() {
  32. final arguments = Get.arguments as Map<String, dynamic>?;
  33. // 当前索引
  34. int tabIndex = IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.tabIndex;
  35. if (arguments?[AppPageArguments.index] == null) {
  36. AtmobLog.i(_tag, '没有传递 index 参数');
  37. } else {
  38. final int? index = arguments?[AppPageArguments.index] as int?;
  39. if (index != null) {
  40. tabIndex = index;
  41. AtmobLog.i(_tag, "index: $tabIndex");
  42. }
  43. }
  44. // 创建PageController和TabController,并设置当前选中的index为初始索引
  45. pageController = PageController(initialPage: tabIndex);
  46. tabController = TabController(
  47. initialIndex: tabIndex,
  48. length: tabBarList.length,
  49. vsync: this,
  50. );
  51. if (tabIndex == IntimacyAnalyseTab.intimacyAnalyseReport.tabIndex) {
  52. EventHandler.report(EventId.event_09001);
  53. } else if (tabIndex ==
  54. IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.tabIndex) {
  55. EventHandler.report(EventId.event_10001);
  56. }
  57. }
  58. /// 返回上一页
  59. void clickBack() {
  60. Get.back();
  61. }
  62. @override
  63. void onClose() {
  64. tabController.dispose();
  65. pageController.dispose();
  66. super.onClose();
  67. }
  68. /// 处理Tab切换,联动PageView
  69. void handleTabChange(int index) {
  70. pageController.animateToPage(
  71. index,
  72. duration: const Duration(milliseconds: 300),
  73. curve: Curves.fastOutSlowIn,
  74. );
  75. if (index == IntimacyAnalyseTab.intimacyAnalyseReport.tabIndex) {
  76. EventHandler.report(EventId.event_09001);
  77. } else if (index ==
  78. IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.tabIndex) {
  79. EventHandler.report(EventId.event_10001);
  80. }
  81. }
  82. /// 处理PageView切换,联动Tab
  83. void handlePageChange(int index) {
  84. tabController.animateTo(index, duration: const Duration(milliseconds: 300));
  85. }
  86. }