Sfoglia il codice sorgente

[new]调整首页当日行动轨迹显示

zk 6 mesi fa
parent
commit
023897dbd0

+ 37 - 24
lib/module/main/main_page.dart

@@ -118,17 +118,23 @@ class MainPage extends BasePage<MainController> {
               if (controller.memberStatusInfo.value == null ||
                   controller.memberStatusInfo.value?.expired == true) {
                 return buildNoMemberView();
-              } else if (todayTrack == null ||
-                  todayTrack.isRequestSuccess.value == false) {
-                return buildTodayTrackLoadingView();
               } else {
-                return buildTodayTrackDetailView(todayTrack);
+                return buildTodayTrackView(todayTrack);
               }
             })),
       ),
     );
   }
 
+  Widget buildTodayTrackView(TodayTrackReportBean? todayTrack) {
+    return Stack(children: [
+      buildTodayTrackDetailView(todayTrack),
+      Visibility(
+          visible: todayTrack?.isRequestSuccess.value == false,
+          child: buildTodayTrackLoadingView()),
+    ]);
+  }
+
   Widget buildNoMemberView() {
     return GestureDetector(
         onTap: controller.onTrackNoMemberClick,
@@ -136,22 +142,28 @@ class MainPage extends BasePage<MainController> {
   }
 
   Widget buildTodayTrackLoadingView() {
-    return Column(
-      mainAxisAlignment: MainAxisAlignment.center,
-      children: [
-        CupertinoActivityIndicator(
-          color: '#A3A3A5'.color,
-          radius: 16.w,
-        ),
-        SizedBox(height: 15.w),
-        Text(StringName.mainTodayTrackLoading,
-            style: TextStyle(
-                fontSize: 14.sp, color: '#666666'.color.withOpacity(0.87)))
-      ],
+    return Container(
+      width: double.infinity,
+      height: double.infinity,
+      decoration: BoxDecoration(
+          color: Colors.white, borderRadius: BorderRadius.circular(20.r)),
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        children: [
+          CupertinoActivityIndicator(
+            color: '#A3A3A5'.color,
+            radius: 16.w,
+          ),
+          SizedBox(height: 15.w),
+          Text(StringName.mainTodayTrackLoading,
+              style: TextStyle(
+                  fontSize: 14.sp, color: '#666666'.color.withOpacity(0.87)))
+        ],
+      ),
     );
   }
 
-  Widget buildTodayTrackDetailView(TodayTrackReportBean todayTrackReportBean) {
+  Widget buildTodayTrackDetailView(TodayTrackReportBean? todayTrackReportBean) {
     return GestureDetector(
       behavior: HitTestBehavior.opaque,
       onTap: controller.onTodayTraceClick,
@@ -181,10 +193,10 @@ class MainPage extends BasePage<MainController> {
   }
 
   Widget buildSelectedFriendTodayTrackDetailView(
-      TodayTrackReportBean todayTrackReportBean) {
-    final startAddr = todayTrackReportBean.startPoint?.addr;
+      TodayTrackReportBean? todayTrackReportBean) {
+    final startAddr = todayTrackReportBean?.startPoint?.addr;
 
-    final errorAddr = todayTrackReportBean.exceptionPoint?.addr;
+    final errorAddr = todayTrackReportBean?.exceptionPoint?.addr;
 
     MainTrackType startPointType = startAddr?.isNotEmpty == true
         ? MainTrackType.startPoint
@@ -274,15 +286,16 @@ class MainPage extends BasePage<MainController> {
     ));
   }
 
-  Widget buildTodayMapView(TodayTrackReportBean todayTrackReportBean) {
+  Widget buildTodayMapView(TodayTrackReportBean? todayTrackReportBean) {
     return ClipRRect(
         borderRadius: BorderRadius.circular(8.r),
         child: MapWidget(
+          controller: controller.todayTrackSmallMapController,
           isShowLogo: false,
           interactionIsEnabled: false,
-          mapPadding: todayTrackReportBean.mapPadding,
-          markers: todayTrackReportBean.markers,
-          polyline: todayTrackReportBean.polylines,
+          mapPadding: todayTrackReportBean?.mapPadding,
+          markers: todayTrackReportBean?.markers,
+          polyline: todayTrackReportBean?.polylines,
         ));
   }
 

+ 1 - 0
plugins/map/lib/src/consts/map_constants.dart

@@ -41,4 +41,5 @@ class MapConstants {
   //polyline
   static const String methodAddPolyline = "polyline#addPolyline";
   static const String methodRemovePolyline = "polyline#removePolyline";
+  static const String methodClearAllPolylines = "polyline#clearAllPolylines";
 }

+ 12 - 0
plugins/map/lib/src/core/map_controller.dart

@@ -209,6 +209,18 @@ class MapController
   }
 
   @override
+  void clearAllPolylines() {
+    if (_isDisposed) return;
+    final params = {'method': MapConstants.methodClearAllPolylines, 'args': ''};
+    debugPrint("clearAllPolylines...params==>$params");
+    if (_channel != null) {
+      _executeMethod(params);
+    } else {
+      _pendingOperations.add(params);
+    }
+  }
+
+  @override
   void setMapInteractionEnabled(bool enabled) {
     if (_isDisposed) return;
     final params = {

+ 2 - 0
plugins/map/lib/src/interface/map_polyline_interface.dart

@@ -11,4 +11,6 @@ abstract class MapPolylineInterface {
 
   //清除制定的线
   void removePolyline(String lineId);
+
+  void clearAllPolylines();
 }

+ 25 - 21
plugins/map/lib/src/widget/map_widget.dart

@@ -14,7 +14,7 @@ import '../../flutter_map.dart';
 import '../entity/polyline.dart';
 
 class MapWidget extends StatefulWidget {
-  late final MapController mapController;
+  final MapController? controller;
   final MarkerTapCallback? onMarkerTap;
   final List<Marker>? markers;
   final List<Polyline>? polyline;
@@ -23,9 +23,9 @@ class MapWidget extends StatefulWidget {
   final bool? isShowLogo;
   final bool? interactionIsEnabled;
 
-  MapWidget({
+  const MapWidget({
     super.key,
-    MapController? controller,
+    this.controller,
     this.onMarkerTap,
     this.mapPadding,
     this.markers,
@@ -33,9 +33,7 @@ class MapWidget extends StatefulWidget {
     this.isShowLogo,
     this.interactionIsEnabled,
     this.polyline,
-  }) {
-    mapController = controller ?? MapController();
-  }
+  });
 
   @override
   State<MapWidget> createState() => _MapWidgetState();
@@ -51,12 +49,14 @@ class _MapWidgetState extends State<MapWidget> {
     super.didUpdateWidget(oldWidget);
     cameraPoints.clear();
     if (oldWidget.markers != widget.markers) {
-      showMarker();
+      if (widget.markers == null || widget.markers!.isEmpty) {
+        widget.controller?.clearAllMarkers();
+      } else {
+        showMarker();
+      }
     }
     if (oldWidget.polyline != widget.polyline) {
-      oldWidget.polyline?.forEach((line) {
-        widget.mapController.removePolyline(line.lineId);
-      });
+      widget.controller?.clearAllPolylines();
       showPolyline();
     }
     animateCamera();
@@ -71,20 +71,25 @@ class _MapWidgetState extends State<MapWidget> {
             LatLng(latitude: marker.latitude, longitude: marker.longitude))
         .toList();
     cameraPoints.addAll(markerPoints ?? []);
-    widget.mapController.replaceAllMarkers(widget.markers ?? []);
+    widget.controller?.replaceAllMarkers(widget.markers ?? []);
   }
 
   void showPolyline() {
-    widget.polyline?.where((line) => line.points.isNotEmpty).forEach((line) {
-      cameraPoints.addAll(line.points);
-      widget.mapController.addPolyline(line, isAnimateCamera: false);
-    });
+    if (widget.polyline == null || widget.polyline!.isEmpty) {
+      return;
+    }
+    for (var line in widget.polyline!) {
+      if (line.points.isNotEmpty) {
+        cameraPoints.add(line.points.first);
+        widget.controller?.addPolyline(line, isAnimateCamera: false);
+      }
+    }
   }
 
   void animateCamera() {
     if (cameraPoints.isNotEmpty) {
-      widget.mapController
-          .moveToSuitableLocation(cameraPoints, mapPadding: widget.mapPadding);
+      widget.controller
+          ?.moveToSuitableLocation(cameraPoints, mapPadding: widget.mapPadding);
     }
   }
 
@@ -92,11 +97,10 @@ class _MapWidgetState extends State<MapWidget> {
   void initState() {
     super.initState();
     if (widget.isShowLogo != null) {
-      widget.mapController.setMapLogoVisible(widget.isShowLogo!);
+      widget.controller?.setMapLogoVisible(widget.isShowLogo!);
     }
     if (widget.interactionIsEnabled != null) {
-      widget.mapController
-          .setMapInteractionEnabled(widget.interactionIsEnabled!);
+      widget.controller?.setMapInteractionEnabled(widget.interactionIsEnabled!);
     }
 
     showMarker();
@@ -147,7 +151,7 @@ class _MapWidgetState extends State<MapWidget> {
   Future<void> onPlatformViewCreated(int viewId) async {
     MethodChannel mapChannel =
         MethodChannel('${MapConstants.mapViewChannelName}$viewId');
-    widget.mapController.setChannel(mapChannel);
+    widget.controller?.setChannel(mapChannel);
     mapChannel.setMethodCallHandler(_mapMethodCallHandler);
   }
 

+ 2 - 1
plugins/map_amap_android/android/src/main/java/com/atmob/map_amap_android/contants/Constants.java

@@ -57,8 +57,9 @@ public class Constants {
      */
     public static final String METHOD_UPDATE_OR_ADD_POLYLINE = "polyline#addPolyline";
     public static final String METHOD_REMOVE_POLYLINE = "polyline#removePolyline";
+    public static final String METHOD_CLEAR_ALL_POLYLINES = "polyline#clearAllPolylines";
 
-    public static final String[] METHOD_ID_LIST_FOR_POLYLINE = {METHOD_UPDATE_OR_ADD_POLYLINE, METHOD_REMOVE_POLYLINE};
+    public static final String[] METHOD_ID_LIST_FOR_POLYLINE = {METHOD_UPDATE_OR_ADD_POLYLINE, METHOD_REMOVE_POLYLINE,METHOD_CLEAR_ALL_POLYLINES};
 
 
 }

+ 20 - 0
plugins/map_amap_android/android/src/main/java/com/atmob/map_amap_android/overlays/polyline/PolylineController.java

@@ -64,6 +64,26 @@ public class PolylineController implements MyMethodCallHandler {
             case Constants.METHOD_REMOVE_POLYLINE:
                 removePolyLine(call, result);
                 break;
+            case Constants.METHOD_CLEAR_ALL_POLYLINES:
+                removeAllPolylines(call, result);
+                break;
+        }
+    }
+
+    private void removeAllPolylines(MethodCall call, MethodChannel.Result result){
+        try {
+            LogUtil.d(TAG, "removeAllPolylines");
+            for (Map.Entry<String, Polyline> entry : currentPolylineMap.entrySet()) {
+                Polyline polyline = entry.getValue();
+                if (polyline != null) {
+                    polyline.remove();
+                }
+            }
+            currentPolylineMap.clear();
+            result.success(null);
+        } catch (Exception e) {
+            LogUtil.d(TAG, "removeAllPolylines error===>" + e.getMessage());
+            result.error("JsonSyntaxException", e.getMessage(), null);
         }
     }