track_controller.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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 mapPadding =
  27. MapPadding(left: 50.w, top: 100.w, right: 50.w, bottom: Get.height / 2);
  28. final selectPadding =
  29. MapPadding(left: 80.w, top: 150.w, right: 80.w, bottom: Get.height / 2);
  30. final TrackRepository trackRepository;
  31. final FriendsRepository friendsRepository;
  32. final AccountRepository accountRepository;
  33. TrackController(
  34. this.trackRepository, this.friendsRepository, this.accountRepository);
  35. @override
  36. void onInit() {
  37. final param = Get.arguments;
  38. if (param is UserInfo) {
  39. _userInfo.value = param;
  40. }
  41. _onRequestTrackDateList();
  42. }
  43. @override
  44. void onReady() {
  45. super.onReady();
  46. sheetController.expand();
  47. _recordNumberTrajectoryViewed();
  48. }
  49. void _onRequestTrackDateList() {
  50. trackRepository.getLocationTrackDays().then((list) {
  51. daysList.assignAll(list);
  52. _createTabController();
  53. }).catchError((error) {
  54. ErrorHandler.toastError(error);
  55. });
  56. }
  57. void _createTabController() {
  58. tabController?.dispose();
  59. final tab = TabController(
  60. length: daysList.length,
  61. vsync: this,
  62. );
  63. _tabController.value = tab;
  64. tab.addListener(() {
  65. if (tab.indexIsChanging == false) {
  66. //控制请求当前页数据或者数据已有时跟换数据
  67. mapController.clear();
  68. currentTrackDay.value = daysList[tab.index];
  69. }
  70. });
  71. Future.delayed(Duration(milliseconds: 100), () {
  72. currentTrackDay.value = daysList.isNotEmpty ? daysList[0] : null;
  73. });
  74. }
  75. ///记录查看轨迹的次数
  76. void _recordNumberTrajectoryViewed() {
  77. if (accountRepository.memberStatusInfo.value?.trialed == true &&
  78. accountRepository.memberStatusInfo.value?.level == 20) {
  79. trackRepository.refreshMemberTrailTrack();
  80. }
  81. }
  82. ///显示轨迹以及标记点
  83. void showMapTrack(List<LatLng> points, List<Marker> markers) {
  84. mapController.clear();
  85. //画折线
  86. if (points.length > 1) {
  87. mapController.addPolyline(points, mapPadding: mapPadding);
  88. }
  89. //画标记点
  90. if (markers.isNotEmpty) {
  91. mapController.updateOrAddMarkers(markers);
  92. }
  93. }
  94. void showSelectMarker(List<LatLng> points, Marker selectMarker) {
  95. mapController.updateOrAddMarker(selectMarker);
  96. mapController.moveToSuitableLocation(points, mapPadding: selectPadding);
  97. }
  98. void back() {
  99. Get.back();
  100. }
  101. @override
  102. void onClose() {
  103. super.onClose();
  104. tabController?.dispose();
  105. }
  106. }