import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:get/get_core/src/get_main.dart'; import 'package:injectable/injectable.dart'; import 'package:location/base/base_controller.dart'; import 'package:location/data/bean/track_days.dart'; import 'package:location/data/repositories/account_repository.dart'; import 'package:location/data/repositories/friends_repository.dart'; import 'package:location/data/repositories/track_repository.dart'; import 'package:location/handler/error_handler.dart'; import 'package:sliding_sheet2/sliding_sheet2.dart'; import '../../data/bean/user_info.dart'; @injectable class TrackController extends BaseController with GetSingleTickerProviderStateMixin { final Rxn _userInfo = Rxn(); UserInfo? get userInfo => _userInfo.value; final MapController mapController = MapController(); SheetController sheetController = SheetController(); final RxList daysList = RxList(); final Rxn _tabController = Rxn(); TabController? get tabController => _tabController.value; final Rxn currentTrackDay = Rxn(); final TrackRepository trackRepository; final FriendsRepository friendsRepository; final AccountRepository accountRepository; TrackController( this.trackRepository, this.friendsRepository, this.accountRepository); @override void onInit() { final param = Get.arguments; if (param is UserInfo) { _userInfo.value = param; } _onRequestTrackDateList(); } @override void onReady() { super.onReady(); sheetController.expand(); _recordNumberTrajectoryViewed(); } void _onRequestTrackDateList() { trackRepository.getLocationTrackDays().then((list) { daysList.assignAll(list); _createTabController(); }).catchError((error) { ErrorHandler.toastError(error); }); } void _createTabController() { tabController?.dispose(); final tab = TabController( length: daysList.length, vsync: this, ); _tabController.value = tab; tab.addListener(() { if (tab.indexIsChanging == false) { //控制请求当前页数据或者数据已有时跟换数据 mapController.clear(); currentTrackDay.value = daysList[tab.index]; } }); Future.delayed(Duration(milliseconds: 100), () { currentTrackDay.value = daysList.isNotEmpty ? daysList[0] : null; }); } ///记录查看轨迹的次数 void _recordNumberTrajectoryViewed() { if (accountRepository.memberStatusInfo.value?.trialed == true && accountRepository.memberStatusInfo.value?.level == 20) { trackRepository.refreshMemberTrailTrack(); } } ///显示轨迹以及标记点 void showMapTrack(List points, List markers) { mapController.clear(); //画折线 if (points.length > 1) { mapController.addPolyline(points, mapPadding: MapPadding( left: 50.w, top: 100.w, right: 50.w, bottom: Get.height / 2)); } //画标记点 if (markers.isNotEmpty) { mapController.updateOrAddMarkers(markers); } } void back() { Get.back(); } @override void onClose() { super.onClose(); tabController?.dispose(); } }