zodiac_love_intimacy_controller.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 '../../router/app_page_arguments.dart';
  6. import '../../utils/atmob_log.dart';
  7. import 'enums/zodiac_love_intimacy_tab.dart';
  8. /// 星座恋爱分析Controller
  9. @injectable
  10. class ZodiacLoveIntimacyController extends BaseController
  11. with GetTickerProviderStateMixin {
  12. final String _tag = "ZodiacLoveIntimacyController";
  13. /// Tab列表
  14. RxList<ZodiacLoveIntimacyTab> tabBarList = ZodiacLoveIntimacyTab.values.obs;
  15. /// Tab控制器
  16. late final TabController tabController;
  17. /// PageView控制器
  18. late final PageController pageController;
  19. /// PageView是否允许滑动切换
  20. RxBool isPageViewSwipeEnabled = true.obs;
  21. /// 当前Tab的索引
  22. Rx<int> currentTabIndex = 0.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 = ZodiacLoveIntimacyTab.today.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. currentTabIndex.value = tabIndex;
  50. }
  51. /// 返回
  52. void clickBack() {
  53. Get.back();
  54. }
  55. @override
  56. void onClose() {
  57. tabController.dispose();
  58. pageController.dispose();
  59. super.onClose();
  60. }
  61. /// 处理Tab切换,联动PageView
  62. void handleTabChange(int index) {
  63. pageController.animateToPage(
  64. index,
  65. duration: const Duration(milliseconds: 300),
  66. curve: Curves.easeInToLinear,
  67. );
  68. }
  69. /// 处理PageView切换,联动Tab
  70. void handlePageChange(int index) {
  71. tabController.animateTo(index, duration: const Duration(milliseconds: 300));
  72. currentTabIndex.value = index;
  73. }
  74. }