intimacy_analyse_controller.dart 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. /// PageView是否允许滑动切换
  22. RxBool isPageViewSwipeEnabled = false.obs;
  23. @override
  24. void onInit() {
  25. super.onInit();
  26. _initArgs();
  27. }
  28. /// 初始化参数
  29. void _initArgs() {
  30. final arguments = Get.arguments as Map<String, dynamic>?;
  31. // 当前索引
  32. int tabIndex = IntimacyAnalyseTab.intimacyAnalyseScreenshotReply.tabIndex;
  33. if (arguments?[AppPageArguments.index] == null) {
  34. AtmobLog.i(_tag, '没有传递 index 参数');
  35. } else {
  36. final int? index = arguments?[AppPageArguments.index] as int?;
  37. if (index != null) {
  38. tabIndex = index;
  39. AtmobLog.i(_tag, "index: $tabIndex");
  40. }
  41. }
  42. // 创建PageController和TabController,并设置当前选中的index为初始索引
  43. pageController = PageController(initialPage: tabIndex);
  44. tabController = TabController(
  45. initialIndex: tabIndex,
  46. length: tabBarList.length,
  47. vsync: this,
  48. );
  49. }
  50. /// 返回上一页
  51. void clickBack() {
  52. Get.back();
  53. }
  54. @override
  55. void onClose() {
  56. tabController.dispose();
  57. pageController.dispose();
  58. super.onClose();
  59. }
  60. /// 处理Tab切换,联动PageView
  61. void handleTabChange(int index) {
  62. pageController.animateToPage(
  63. index,
  64. duration: const Duration(milliseconds: 300),
  65. curve: Curves.fastOutSlowIn,
  66. );
  67. }
  68. /// 处理PageView切换,联动Tab
  69. void handlePageChange(int index) {
  70. tabController.animateTo(index, duration: const Duration(milliseconds: 300));
  71. }
  72. }