import 'package:abroad_location/base/base_controller.dart'; import 'package:abroad_location/module/location/location_view.dart'; import 'package:abroad_location/module/urgent/urgent_view.dart'; import 'package:abroad_location/resource/assets.gen.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:injectable/injectable.dart'; import '../friend/friend_view.dart'; @injectable class MainController extends BaseController with GetSingleTickerProviderStateMixin { List tabData = [ TabData(Assets.images.iconMainTabLocationSelected.provider(), Assets.images.iconMainTabLocationUnselect.provider(), LocationView()), TabData(Assets.images.iconMainTabFriendSelected.provider(), Assets.images.iconMainTabFriendUnselect.provider(), FriendView()), TabData(Assets.images.iconMainTabUrgentSelected.provider(), Assets.images.iconMianTabUrgentUnselect.provider(), UrgentView()), ]; final RxInt _currentIndex = 0.obs; int get currentIndex => _currentIndex.value; late TabController tabController = TabController( length: tabData.length, vsync: this, initialIndex: _currentIndex.value); @override onReady() { precacheTabIcon(); } onTabClick(int index) { tabController.animateTo(index); _currentIndex.value = index; } void precacheTabIcon() { for (var tab in tabData) { precacheImage(tab.selectIcon, Get.context!); precacheImage(tab.unSelectIcon, Get.context!); } } @override void onClose() { super.onClose(); tabController.dispose(); } } class TabData { ImageProvider selectIcon; ImageProvider unSelectIcon; Widget page; TabData(this.selectIcon, this.unSelectIcon, this.page); }