فهرست منبع

[new]增加轨迹页切换时自动切换地图数据

zk 5 ماه پیش
والد
کامیت
81082d9450

+ 35 - 3
lib/module/track/track_controller.dart

@@ -1,21 +1,21 @@
+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/location_info.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/atmob_track_point.dart';
 import '../../data/bean/user_info.dart';
 
 @injectable
-class TrackController extends BaseController {
+class TrackController extends BaseController
+    with GetSingleTickerProviderStateMixin {
   final Rxn<UserInfo> _userInfo = Rxn<UserInfo>();
 
   UserInfo? get userInfo => _userInfo.value;
@@ -26,6 +26,12 @@ class TrackController extends BaseController {
 
   final RxList<TrackDays> daysList = RxList<TrackDays>();
 
+  final Rxn<TabController> _tabController = Rxn<TabController>();
+
+  TabController? get tabController => _tabController.value;
+
+  final Rxn<TrackDays> currentTrackDay = Rxn();
+
   final TrackRepository trackRepository;
   final FriendsRepository friendsRepository;
   final AccountRepository accountRepository;
@@ -52,11 +58,31 @@ class TrackController extends BaseController {
   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 &&
@@ -83,4 +109,10 @@ class TrackController extends BaseController {
   void back() {
     Get.back();
   }
+
+  @override
+  void onClose() {
+    super.onClose();
+    tabController?.dispose();
+  }
 }

+ 18 - 9
lib/module/track/track_day_detail/track_day_detail_controller.dart

@@ -16,6 +16,7 @@ import 'package:location/module/track/track_util.dart';
 import 'package:location/resource/string.gen.dart';
 import 'package:location/sdk/wechat/wechat_share_util.dart';
 import 'package:location/utils/async_util.dart';
+import 'package:location/utils/atmob_log.dart';
 import 'package:location/utils/common_expand.dart';
 import 'package:location/utils/pair.dart';
 import 'package:location/utils/toast_util.dart';
@@ -24,7 +25,6 @@ import '../../../data/api/response/track_daily_summary_response.dart';
 import '../../../data/bean/atmob_track_point.dart';
 import '../../../data/bean/stream_chat_origin_data.dart';
 import '../../../data/bean/track_days.dart';
-import '../../../utils/capture_util.dart';
 import '../../../utils/http_handler.dart';
 import '../../../widget/gradually_print_text.dart';
 import '../track_status.dart';
@@ -73,35 +73,44 @@ class TrackDayDetailController extends BaseController {
 
   CancelableFuture? requestTrackFuture;
 
-  List<AtmobTrackPoint>? trackOriginPoints;
-
   String? get summaryError => _summaryError.value;
 
   final GlobalKey shareGlobalKey = GlobalKey();
 
   CancelableFuture? summaryFuture;
 
+  //轨迹相关
+  List<AtmobTrackPoint>? trackOriginPoints; //原始轨迹点
+  List<LatLng> points = []; //根据停留情况合并的轨迹点
+  List<Marker> markers = []; // 停留时间较长的标记点
+
   TrackDayDetailController(this.days, bool isExpand) {
     trackRepository = TrackRepository.getInstance();
     _isExpanded.value = isExpand;
   }
 
   @override
-  void onInit() {
-    super.onInit();
-    _requestTrackData();
+  void onReady() {
+    trackController.currentTrackDay.listen((dat) {
+      if (dat == days) {
+        _requestTrackData();
+      }
+    });
     _requestTrackDailySummary();
   }
 
   _requestTrackData() {
+    if (isRequested) {
+      trackController.showMapTrack(points, markers);
+      return;
+    }
     requestTrackFuture?.cancel();
     requestTrackFuture = AsyncUtil.waitForAll(
         [_requestTrackHistoryPoints(), _requestTrackDaily()]);
     requestTrackFuture!.then((_) {
       //组装地图新的数据
-      List<LatLng> points = [];
-      List<Marker> markers = [];
-
+      points.clear();
+      markers.clear();
       for (int i = 0; i < trackDailyList.length; i++) {
         final bean = trackDailyList[i];
         double? markerLatitude;

+ 4 - 3
lib/module/track/track_page.dart

@@ -92,13 +92,14 @@ class TrackPage extends BasePage<TrackController> {
       height: 0.77.sh,
       width: double.infinity,
       child: Obx(() {
-        return DefaultTabController(
-          length: controller.daysList.length,
+        return Visibility(
+          visible: controller.tabController != null,
           child: Column(
             children: [
               SizedBox(
                 width: double.infinity,
                 child: TabBar(
+                  controller: controller.tabController,
                   tabAlignment: TabAlignment.start,
                   isScrollable: true,
                   dividerHeight: 0,
@@ -127,6 +128,7 @@ class TrackPage extends BasePage<TrackController> {
               ),
               Expanded(
                   child: TabBarView(
+                controller: controller.tabController,
                 children: List.generate(
                     controller.daysList.length,
                     (index) => TrackDayDetailView(controller.daysList[index],
@@ -187,5 +189,4 @@ class TrackPage extends BasePage<TrackController> {
       ],
     );
   }
-
 }