track_controller.dart 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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/consts/constants.dart';
  10. import 'package:location/data/repositories/account_repository.dart';
  11. import 'package:location/data/repositories/friends_repository.dart';
  12. import 'package:location/data/repositories/track_repository.dart';
  13. import 'package:location/handler/error_handler.dart';
  14. import 'package:sliding_sheet2/sliding_sheet2.dart';
  15. import '../../data/bean/user_info.dart';
  16. @injectable
  17. class TrackController extends BaseController
  18. with GetSingleTickerProviderStateMixin {
  19. final Rxn<UserInfo> _userInfo = Rxn<UserInfo>();
  20. UserInfo? get userInfo => _userInfo.value;
  21. final MapController mapController = MapController();
  22. SheetController sheetController = SheetController();
  23. final RxList<TrackDays> daysList = RxList<TrackDays>();
  24. final Rxn<TabController> _tabController = Rxn<TabController>();
  25. TabController? get tabController => _tabController.value;
  26. final Rxn<TrackDays> currentTrackDay = Rxn();
  27. final mapPadding =
  28. MapPadding(left: 50.w, top: 100.w, right: 50.w, bottom: Get.height / 2);
  29. final selectPadding =
  30. MapPadding(left: 80.w, top: 150.w, right: 80.w, bottom: Get.height / 2);
  31. final TrackRepository trackRepository;
  32. final FriendsRepository friendsRepository;
  33. final AccountRepository accountRepository;
  34. TrackController(
  35. this.trackRepository, this.friendsRepository, this.accountRepository);
  36. @override
  37. void onInit() {
  38. final param = Get.arguments;
  39. if (param is UserInfo) {
  40. _userInfo.value = param;
  41. }
  42. _onRequestTrackDateList();
  43. }
  44. @override
  45. void onReady() {
  46. super.onReady();
  47. sheetController.expand();
  48. _recordNumberTrajectoryViewed();
  49. }
  50. void _onRequestTrackDateList() {
  51. trackRepository.getLocationTrackDays().then((list) {
  52. daysList.assignAll(list);
  53. _createTabController();
  54. }).catchError((error) {
  55. ErrorHandler.toastError(error);
  56. });
  57. }
  58. void _createTabController() {
  59. tabController?.dispose();
  60. final tab = TabController(
  61. length: daysList.length,
  62. vsync: this,
  63. );
  64. _tabController.value = tab;
  65. tab.addListener(() {
  66. if (tab.indexIsChanging == false) {
  67. //控制请求当前页数据或者数据已有时跟换数据
  68. mapController.clear();
  69. currentTrackDay.value = daysList[tab.index];
  70. }
  71. });
  72. Future.delayed(Duration(milliseconds: 100), () {
  73. currentTrackDay.value = daysList.isNotEmpty ? daysList[0] : null;
  74. });
  75. }
  76. ///记录查看轨迹的次数
  77. void _recordNumberTrajectoryViewed() {
  78. if (accountRepository.memberStatusInfo.value?.trialed == true &&
  79. accountRepository.memberStatusInfo.value?.level == 20) {
  80. trackRepository.refreshMemberTrailTrack();
  81. }
  82. }
  83. ///显示轨迹以及标记点
  84. void showMapTrack(List<LatLng> points, List<Marker> markers) {
  85. mapController.clear();
  86. //画折线
  87. if (points.length > 1) {
  88. mapController.addPolyline(Constants.traceNormalLineId, points,
  89. mapPadding: mapPadding);
  90. }
  91. //画标记点
  92. if (markers.isNotEmpty) {
  93. mapController.updateOrAddMarkers(markers);
  94. }
  95. }
  96. void showSelectMarker(List<LatLng> points, Marker selectMarker) {
  97. _clearSelectMapMarker();
  98. mapController.updateOrAddMarker(selectMarker);
  99. mapController.moveToSuitableLocation(points, mapPadding: selectPadding);
  100. }
  101. void back() {
  102. Get.back();
  103. }
  104. void showMovingTrack(List<LatLng> movingPoints) {
  105. _clearSelectMapMarker();
  106. mapController.addPolyline(Constants.traceSelectLineId, movingPoints,
  107. lineType: PolylineType.selected, mapPadding: mapPadding);
  108. }
  109. void showTrackError(List<LatLng> errorPoints, Marker errorMarker) {
  110. _clearSelectMapMarker();
  111. mapController.updateOrAddMarker(errorMarker);
  112. mapController.addPolyline(Constants.traceSelectLineId, errorPoints,
  113. lineType: PolylineType.error, mapPadding: mapPadding);
  114. }
  115. void _clearSelectMapMarker() {
  116. mapController.removePolyline(Constants.traceSelectLineId);
  117. mapController.removeMarker(Constants.tracePopupId);
  118. mapController.removeMarker(Constants.traceErrorId);
  119. }
  120. @override
  121. void onClose() {
  122. super.onClose();
  123. tabController?.dispose();
  124. }
  125. }