Browse Source

[new]调整地图marker属性

zk 5 months ago
parent
commit
febf74b97f

+ 16 - 2
lib/module/main/main_controller.dart

@@ -90,6 +90,11 @@ class MainController extends BaseController {
   String? lastCheckFriendId;
   bool isExecuteAutoSelect = false;
 
+  final RxBool _todayTrackRequesting = RxBool(false);
+  double? _friendTrackVisibleFraction;
+
+  bool get todayTrackRequesting => _todayTrackRequesting.value;
+
   MainController(
       this.friendsRepository,
       this.accountRepository,
@@ -395,8 +400,8 @@ class MainController extends BaseController {
   //弹出求助提示
   void onShowRequestHelpTip() {
     String? memberPageKeyStr = KVUtil.getString(_kChickHelpAlertKey, '');
-    if (memberStatusInfo.value?.expired ==
-        true && (memberPageKeyStr ?? '').isEmpty) {
+    if (memberStatusInfo.value?.expired == true &&
+        (memberPageKeyStr ?? '').isEmpty) {
       ///永久化存储
       KVUtil.putString(_kChickHelpAlertKey, _kChickHelpAlertKey);
       UrgentContactClickHelpDialog.show(confirmOnTap: () {
@@ -447,6 +452,15 @@ class MainController extends BaseController {
     }
   }
 
+  void onFriendVisibleFraction(double visibleFraction) {
+    _friendTrackVisibleFraction = visibleFraction;
+    if (visibleFraction > 0.2) {
+      _requestSelectedFriendTrack();
+    }
+  }
+
+  void _requestSelectedFriendTrack() {}
+
   @override
   void onClose() {
     mineLocationSubscription?.cancel();

+ 95 - 72
lib/module/main/main_page.dart

@@ -12,8 +12,10 @@ import 'package:location/module/main/view.dart';
 import 'package:location/resource/assets.gen.dart';
 import 'package:location/resource/colors.gen.dart';
 import 'package:location/resource/string.gen.dart';
+import 'package:location/utils/atmob_log.dart';
 import 'package:location/utils/common_expand.dart';
 import 'package:sliding_sheet2/sliding_sheet2.dart';
+import 'package:visibility_detector/visibility_detector.dart';
 import '../../data/consts/constants.dart';
 import '../../router/app_pages.dart';
 import '../../utils/common_style.dart';
@@ -45,12 +47,18 @@ class MainPage extends BasePage<MainController> {
       onPopInvokedWithResult: (bool didPop, dynamic result) {
         controller.onAppBack();
       },
-      child: Stack(
+      child: Column(
         children: [
-          buildMapView(),
-          buildMapFunView(),
-          buildMainBottomView(),
-          buildFriendListView(),
+          Expanded(
+              child: Stack(
+            children: [
+              buildMapView(),
+              buildMapFunView(),
+              buildMainBottomView(),
+              buildFriendListView(),
+            ],
+          )),
+          buildTabContainer()
         ],
       ),
     );
@@ -75,94 +83,109 @@ class MainPage extends BasePage<MainController> {
       shadowColor: Colors.black.withOpacity(0.1),
       cornerRadius: 18.w,
       snapSpec: SnapSpec(
-        initialSnap: SnapSpec.headerFooterSnap,
+        initialSnap: SnapSpec.headerSnap,
         // Enable snapping. This is true by default.
         snap: true,
         // Set custom snapping points.
-        snappings: [SnapSpec.headerFooterSnap, SnapSpec.expanded],
+        snappings: [SnapSpec.headerSnap, SnapSpec.expanded],
         // Define to what the snappings relate to. In this case,
         // the total available space that the sheet can expand to.
         positioning: SnapPositioning.relativeToAvailableSpace,
       ),
-      footerBuilder: buildFooterBuilder,
       headerBuilder: buildHeaderBuilder,
       builder: buildTrackEntranceBuilder,
     );
   }
 
   Widget buildTrackEntranceBuilder(BuildContext context, SheetState state) {
-    return Container(
-      margin: EdgeInsets.only(left: 12.w, right: 12.w, bottom: 12.w),
-      padding: EdgeInsets.only(left: 12.w, right: 12.w, top: 12.w, bottom: 9.w),
-      decoration: BoxDecoration(
-          color: Colors.white, borderRadius: BorderRadius.circular(20.r)),
-      child: AspectRatio(
-        aspectRatio: 336 / 134,
-        child: Column(
+    return VisibilityDetector(
+      key: Key('main_today_track'),
+      onVisibilityChanged: (VisibilityInfo info) {
+        final visibleFraction = info.visibleFraction;
+        controller.onFriendVisibleFraction(visibleFraction);
+      },
+      child: Container(
+        margin: EdgeInsets.only(left: 12.w, right: 12.w, bottom: 12.w),
+        padding:
+            EdgeInsets.only(left: 12.w, right: 12.w, top: 12.w, bottom: 9.w),
+        decoration: BoxDecoration(
+            color: Colors.white, borderRadius: BorderRadius.circular(20.r)),
+        child: AspectRatio(
+          aspectRatio: 336 / 134,
+          child: Column(
+            children: [
+              Row(
+                children: [
+                  Text(StringName.todaySimpleTrack,
+                      style: TextStyle(
+                          fontSize: 13.sp,
+                          color: '#333333'.color,
+                          fontWeight: FontWeight.bold)),
+                  Spacer(),
+                  Assets.images.iconMainTrackArrow
+                      .image(width: 10.w, height: 10.w),
+                ],
+              ),
+              SizedBox(height: 7.w),
+              buildSelectedFriendTodayTrackDetailView(),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  Widget buildSelectedFriendTodayTrackDetailView() {
+    return Expanded(child: Obx(() {
+      if (controller.todayTrackRequesting) {
+        return Center(child: Text('加载中...'));
+      } else {
+        return Row(
           children: [
-            Row(
+            Container(
+              margin: EdgeInsets.only(bottom: 3.w, top: 3.w),
+              child: AspectRatio(
+                aspectRatio: 1,
+                child: Assets.images.imgTrackExample.image(),
+              ),
+            ),
+            SizedBox(width: 10.w),
+            Column(
+              mainAxisAlignment: MainAxisAlignment.center,
               children: [
-                Text(StringName.todaySimpleTrack,
-                    style: TextStyle(
-                        fontSize: 13.sp,
-                        color: '#333333'.color,
-                        fontWeight: FontWeight.bold)),
-                Spacer(),
-                Assets.images.iconMainTrackArrow
-                    .image(width: 10.w, height: 10.w),
+                SizedBox(height: 6.w),
+                getMainTrackDot('#15CBA1'.color),
+                Expanded(
+                  child: Container(
+                    margin: EdgeInsets.symmetric(vertical: 4.w),
+                    width: 1.w,
+                    height: double.infinity,
+                    decoration: BoxDecoration(
+                      color: '#F0F0F0'.color,
+                      borderRadius: BorderRadius.circular(100.r),
+                    ),
+                  ),
+                ),
+                getMainTrackDot('#E94949'.color),
+                SizedBox(height: 6.w),
               ],
             ),
-            SizedBox(height: 7.w),
+            SizedBox(width: 8.w),
             Expanded(
-              child: Row(
+              child: Column(
                 children: [
-                  Container(
-                    margin: EdgeInsets.only(bottom: 3.w, top: 3.w),
-                    child: AspectRatio(
-                      aspectRatio: 1,
-                      child: Assets.images.imgTrackExample.image(),
-                    ),
-                  ),
-                  SizedBox(width: 10.w),
-                  Column(
-                    mainAxisAlignment: MainAxisAlignment.center,
-                    children: [
-                      SizedBox(height: 6.w),
-                      getMainTrackDot('#15CBA1'.color),
-                      Expanded(
-                        child: Container(
-                          margin: EdgeInsets.symmetric(vertical: 4.w),
-                          width: 1.w,
-                          height: double.infinity,
-                          decoration: BoxDecoration(
-                            color: '#F0F0F0'.color,
-                            borderRadius: BorderRadius.circular(100.r),
-                          ),
-                        ),
-                      ),
-                      getMainTrackDot('#E94949'.color),
-                      SizedBox(height: 6.w),
-                    ],
-                  ),
-                  SizedBox(width: 8.w),
-                  Expanded(
-                    child: Column(
-                      children: [
-                        buildTrackPoint(MainTrackType.startPoint,
-                            '广东省广州市天河区高唐路235号靠近C栋2楼时代E-PARK'),
-                        Spacer(),
-                        buildTrackPoint(
-                            MainTrackType.errorPoint, '广东省广州市海珠区滨江东路驾驶花园C栋601'),
-                      ],
-                    ),
-                  )
+                  buildTrackPoint(MainTrackType.startPoint,
+                      '广东省广州市天河区高唐路235号靠近C栋2楼时代E-PARK'),
+                  Spacer(),
+                  buildTrackPoint(
+                      MainTrackType.errorPoint, '广东省广州市海珠区滨江东路驾驶花园C栋601'),
                 ],
               ),
-            ),
+            )
           ],
-        ),
-      ),
-    );
+        );
+      }
+    }));
   }
 
   Widget buildFriendListView() {
@@ -190,7 +213,7 @@ class MainPage extends BasePage<MainController> {
   Widget buildMapFunView() {
     return Positioned(
       right: 0.w,
-      bottom: 230.w,
+      bottom: 140.w,
       child: Column(
         children: [
           GestureDetector(

+ 1 - 1
lib/module/track/track_day_detail/track_day_detail_controller.dart

@@ -387,7 +387,7 @@ class TrackDayDetailController extends BaseController {
         latitude: bean.lat,
         longitude: bean.lng,
         markerType: MarkerType.tracePopupPoint,
-        popup: Popup(
+        tags: Popup(
           title: bean.addr ?? '',
           desc: TrackUtil.formatDurationFromMillis(bean.duration),
         ),

+ 5 - 7
plugins/map/lib/src/entity/marker.dart

@@ -1,7 +1,5 @@
-import 'package:flutter_map/src/entity/popup.dart';
-
 import '../consts/marker_type.dart';
-import "codable.dart";  
+import "codable.dart";
 
 class Marker implements Codable {
   String id;
@@ -18,7 +16,7 @@ class Marker implements Codable {
 
   String? customAvatarUrl;
 
-  Popup? popup;
+  dynamic tags;
 
   Marker({
     required this.id,
@@ -28,7 +26,7 @@ class Marker implements Codable {
     required this.markerType,
     this.isSelected = false,
     this.customAvatarUrl,
-    this.popup,
+    this.tags,
   });
 
   @override
@@ -41,7 +39,7 @@ class Marker implements Codable {
       'markerType': markerType.value,
       'isSelected': isSelected,
       'customAvatarUrl': customAvatarUrl,
-      'popup': popup?.toJson(),
+      'tags': tags,
     };
   }
 
@@ -54,7 +52,7 @@ class Marker implements Codable {
       markerType: MarkerType.fromValue(map['markerType'] as int),
       isSelected: map['isSelected'],
       customAvatarUrl: map['customAvatarUrl'] as String?,
-      popup: map['popup'] != null ? Popup.fromJson(map['popup']) : null,
+      tags: map['tags'] ? map['tags'] : null,
     );
   }
 }

+ 7 - 7
plugins/map_amap_android/android/src/main/java/com/atmob/map_amap_android/bean/MakerInfo.java

@@ -34,15 +34,15 @@ public class MakerInfo {
     @SerializedName("customAvatarUrl")
     private String customAvatarUrl;
 
-    @SerializedName("popup")
-    private Popup popup;
+    @SerializedName("tags")
+    private Object tags;
 
-    public Popup getPopup() {
-        return popup;
+    public Object getTags() {
+        return tags;
     }
 
-    public void setPopup(Popup popup) {
-        this.popup = popup;
+    public void setTags(Object tags) {
+        this.tags = tags;
     }
 
     public String getCustomAvatarUrl() {
@@ -126,7 +126,7 @@ public class MakerInfo {
                 ", markerType=" + markerType +
                 ", isSelected=" + isSelected +
                 ", customAvatarUrl='" + customAvatarUrl + '\'' +
-                ", popup=" + popup +
+                ", tags=" + tags +
                 '}';
     }
 }

+ 8 - 11
plugins/map_amap_android/android/src/main/java/com/atmob/map_amap_android/overlays/marker/MarkersController.java

@@ -182,13 +182,9 @@ public class MarkersController implements MyMethodCallHandler, AMap.OnMarkerClic
             if (object instanceof MakerInfo) {
                 MakerInfo cacheInfo = (MakerInfo) object;
                 if (cacheInfo.getMarkerType() == MakerInfo.MarkerType.TRACE_POPUP_POINT) {
-                    boolean popupChanged = !Objects.equals(cacheInfo.getPopup(), makerInfo.getPopup());
-                    if (popupChanged) {
-                        BitmapDescriptor markerBitmap = getMarkerBitmap(makerInfo, null);
-                        marker.setIcon(markerBitmap);
-                        marker.setZIndex(999);
-                        LogUtil.i(TAG, "updateMarkers=成功修改popup:" + makerInfo.getPopup());
-                    }
+                    BitmapDescriptor markerBitmap = getMarkerBitmap(makerInfo, null);
+                    marker.setIcon(markerBitmap);
+                    marker.setZIndex(999);
                 } else {
                     boolean nameChanged = !Objects.equals(cacheInfo.getMarkerName(), makerInfo.getMarkerName());
                     boolean selectedChanged = cacheInfo.isSelected() != makerInfo.isSelected();
@@ -318,10 +314,11 @@ public class MarkersController implements MyMethodCallHandler, AMap.OnMarkerClic
             return viewGetBitmapDescriptor(view);
         } else if (markerInfo.getMarkerType() == MakerInfo.MarkerType.TRACE_POPUP_POINT) {
             ItemTrackSelectedMarkerBinding trackSelectedMarkerBinding = ItemTrackSelectedMarkerBinding.inflate(LayoutInflater.from(context));
-            Popup popup = markerInfo.getPopup();
-            if (popup != null) {
-                trackSelectedMarkerBinding.tvPopupTitle.setText(popup.getTitle());
-                trackSelectedMarkerBinding.tvPopupDesc.setText(popup.getDesc());
+            Object tags = markerInfo.getTags();
+            if (tags instanceof Map) {
+                Map<String, Object> tagsMap = (Map<String, Object>) tags;
+                trackSelectedMarkerBinding.tvPopupTitle.setText(ParamUtil.getString(tagsMap, "title"));
+                trackSelectedMarkerBinding.tvPopupDesc.setText(ParamUtil.getString(tagsMap, "desc"));
             }
             ConstraintLayout view = trackSelectedMarkerBinding.getRoot();
             return viewGetBitmapDescriptor(view);