intimacy_analyse_controller.dart 2.2 KB

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