main_controller.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import 'package:abroad_location/base/base_controller.dart';
  2. import 'package:abroad_location/module/location/location_view.dart';
  3. import 'package:abroad_location/module/urgent/urgent_view.dart';
  4. import 'package:abroad_location/resource/assets.gen.dart';
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:get/get.dart';
  8. import 'package:injectable/injectable.dart';
  9. import '../friend/friend_view.dart';
  10. @injectable
  11. class MainController extends BaseController with GetSingleTickerProviderStateMixin {
  12. List<TabData> tabData = [
  13. TabData(Assets.images.iconMainTabLocationSelected.provider(),
  14. Assets.images.iconMainTabLocationUnselect.provider(), LocationView()),
  15. TabData(Assets.images.iconMainTabFriendSelected.provider(),
  16. Assets.images.iconMainTabFriendUnselect.provider(), FriendView()),
  17. TabData(Assets.images.iconMainTabUrgentSelected.provider(),
  18. Assets.images.iconMianTabUrgentUnselect.provider(), UrgentView()),
  19. ];
  20. final RxInt _currentIndex = 0.obs;
  21. int get currentIndex => _currentIndex.value;
  22. late TabController tabController = TabController(
  23. length: tabData.length, vsync: this, initialIndex: _currentIndex.value);
  24. @override
  25. onReady() {
  26. precacheTabIcon();
  27. }
  28. onTabClick(int index) {
  29. tabController.animateTo(index);
  30. _currentIndex.value = index;
  31. }
  32. void precacheTabIcon() {
  33. for (var tab in tabData) {
  34. precacheImage(tab.selectIcon, Get.context!);
  35. precacheImage(tab.unSelectIcon, Get.context!);
  36. }
  37. }
  38. @override
  39. void onClose() {
  40. super.onClose();
  41. tabController.dispose();
  42. }
  43. }
  44. class TabData {
  45. ImageProvider selectIcon;
  46. ImageProvider unSelectIcon;
  47. Widget page;
  48. TabData(this.selectIcon, this.unSelectIcon, this.page);
  49. }