track_controller.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_map/flutter_map.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:get/get.dart';
  5. import 'package:get/get_core/src/get_main.dart';
  6. import 'package:injectable/injectable.dart';
  7. import 'package:location/base/base_controller.dart';
  8. import 'package:location/data/bean/track_days.dart';
  9. import 'package:location/data/repositories/account_repository.dart';
  10. import 'package:location/data/repositories/friends_repository.dart';
  11. import 'package:location/data/repositories/track_repository.dart';
  12. import 'package:location/handler/error_handler.dart';
  13. import 'package:sliding_sheet2/sliding_sheet2.dart';
  14. import '../../data/bean/user_info.dart';
  15. @injectable
  16. class TrackController extends BaseController
  17. with GetSingleTickerProviderStateMixin {
  18. final Rxn<UserInfo> _userInfo = Rxn<UserInfo>();
  19. UserInfo? get userInfo => _userInfo.value;
  20. final MapController mapController = MapController();
  21. SheetController sheetController = SheetController();
  22. final RxList<TrackDays> daysList = RxList<TrackDays>();
  23. final Rxn<TabController> _tabController = Rxn<TabController>();
  24. TabController? get tabController => _tabController.value;
  25. final Rxn<TrackDays> currentTrackDay = Rxn();
  26. final TrackRepository trackRepository;
  27. final FriendsRepository friendsRepository;
  28. final AccountRepository accountRepository;
  29. TrackController(
  30. this.trackRepository, this.friendsRepository, this.accountRepository);
  31. @override
  32. void onInit() {
  33. final param = Get.arguments;
  34. if (param is UserInfo) {
  35. _userInfo.value = param;
  36. }
  37. _onRequestTrackDateList();
  38. }
  39. @override
  40. void onReady() {
  41. super.onReady();
  42. sheetController.expand();
  43. _recordNumberTrajectoryViewed();
  44. }
  45. void _onRequestTrackDateList() {
  46. trackRepository.getLocationTrackDays().then((list) {
  47. daysList.assignAll(list);
  48. _createTabController();
  49. }).catchError((error) {
  50. ErrorHandler.toastError(error);
  51. });
  52. }
  53. void _createTabController() {
  54. tabController?.dispose();
  55. final tab = TabController(
  56. length: daysList.length,
  57. vsync: this,
  58. );
  59. _tabController.value = tab;
  60. tab.addListener(() {
  61. if (tab.indexIsChanging == false) {
  62. //控制请求当前页数据或者数据已有时跟换数据
  63. mapController.clear();
  64. currentTrackDay.value = daysList[tab.index];
  65. }
  66. });
  67. Future.delayed(Duration(milliseconds: 100), () {
  68. currentTrackDay.value = daysList.isNotEmpty ? daysList[0] : null;
  69. });
  70. }
  71. ///记录查看轨迹的次数
  72. void _recordNumberTrajectoryViewed() {
  73. if (accountRepository.memberStatusInfo.value?.trialed == true &&
  74. accountRepository.memberStatusInfo.value?.level == 20) {
  75. trackRepository.refreshMemberTrailTrack();
  76. }
  77. }
  78. ///显示轨迹以及标记点
  79. void showMapTrack(List<LatLng> points, List<Marker> markers) {
  80. mapController.clear();
  81. //画折线
  82. if (points.length > 1) {
  83. mapController.addPolyline(points,
  84. mapPadding: MapPadding(
  85. left: 50.w, top: 100.w, right: 50.w, bottom: Get.height / 2));
  86. }
  87. //画标记点
  88. if (markers.isNotEmpty) {
  89. mapController.updateOrAddMarkers(markers);
  90. }
  91. }
  92. void back() {
  93. Get.back();
  94. }
  95. @override
  96. void onClose() {
  97. super.onClose();
  98. tabController?.dispose();
  99. }
  100. }