Pārlūkot izejas kodu

[new]去除map_interface,整合到map包中

zk 8 mēneši atpakaļ
vecāks
revīzija
7403c723f2
43 mainītis faili ar 502 papildinājumiem un 252 dzēšanām
  1. BIN
      assets/images/bg_check_locatin_permission.webp
  2. BIN
      assets/images/icon_dialog_add_friend.webp
  3. BIN
      assets/images/icon_dialog_close.webp
  4. 8 0
      assets/string/base/string.xml
  5. 129 0
      lib/dialog/add_friend_dialog.dart
  6. 103 0
      lib/dialog/check_loation_permission_dialog.dart
  7. 5 2
      lib/dialog/location_permission_dialog.dart
  8. 4 4
      lib/module/add_friend/add_friend_view.dart
  9. 29 16
      lib/module/main/main_controller.dart
  10. 1 1
      lib/module/main/main_page.dart
  11. 15 0
      lib/resource/assets.gen.dart
  12. 20 0
      lib/resource/string.gen.dart
  13. 21 2
      lib/sdk/map/map_helper.dart
  14. 18 6
      plugins/map/lib/flutter_map.dart
  15. 10 3
      plugins/map_platform_interface/lib/src/consts/constants.dart
  16. 1 1
      plugins/map_platform_interface/lib/src/consts/marker_type.dart
  17. 12 5
      plugins/map/lib/src/core/map_initializer.dart
  18. 46 4
      plugins/map/lib/src/core/map_platform.dart
  19. 0 0
      plugins/map/lib/src/entity/camera_position.dart
  20. 44 0
      plugins/map/lib/src/entity/map_location.dart
  21. 0 0
      plugins/map/lib/src/entity/marker.dart
  22. 0 0
      plugins/map/lib/src/interface/map_overlays_interface.dart
  23. 13 0
      plugins/map/lib/src/interface/map_platform_interface.dart
  24. 7 4
      plugins/map/lib/src/core/map_controller.dart
  25. 6 4
      plugins/map/lib/src/widget/map_widget.dart
  26. 1 3
      plugins/map/pubspec.yaml
  27. 0 3
      plugins/map_amap_android/pubspec.yaml
  28. 0 3
      plugins/map_google_android/lib/map_google_android.dart
  29. 0 11
      plugins/map_google_android/lib/map_google_android_method_channel.dart
  30. 0 28
      plugins/map_google_android/lib/map_google_android_platform_interface.dart
  31. 0 2
      plugins/map_google_android/pubspec.yaml
  32. 0 29
      plugins/map_platform_interface/.gitignore
  33. 0 10
      plugins/map_platform_interface/.metadata
  34. 0 3
      plugins/map_platform_interface/CHANGELOG.md
  35. 0 1
      plugins/map_platform_interface/LICENSE
  36. 0 39
      plugins/map_platform_interface/README.md
  37. 0 4
      plugins/map_platform_interface/analysis_options.yaml
  38. 0 14
      plugins/map_platform_interface/lib/map_interface.dart
  39. 0 5
      plugins/map_platform_interface/lib/src/consts/flutter_map_name_config.dart
  40. 0 5
      plugins/map_platform_interface/lib/src/interface/map_platform_interface.dart
  41. 0 25
      plugins/map_platform_interface/pubspec.yaml
  42. 7 14
      pubspec.lock
  43. 2 1
      pubspec.yaml

BIN
assets/images/bg_check_locatin_permission.webp


BIN
assets/images/icon_dialog_add_friend.webp


BIN
assets/images/icon_dialog_close.webp


+ 8 - 0
assets/string/base/string.xml

@@ -101,4 +101,12 @@
     <string name="next_step">下一步</string>
     <string name="location_background_always_desc">为保位置展示在地图上,请按照图中指引操作</string>
 
+    <string name="dialog_add_friend_title">实时定位轨迹</string>
+    <string name="dialog_add_friend_desc">去添加Ta的手机号码</string>
+    <string name="dialog_add_friend_btn">立即添加</string>
+    <string name="dialog_record_location">记录轨迹</string>
+    <string name="dialog_record_location_has_permission">开启定位权限</string>
+    <string name="dialog_record_location_not_request">暂不开启</string>
+    <string name="dialog_record_location_request">立即开启</string>
+
 </resources>

+ 129 - 0
lib/dialog/add_friend_dialog.dart

@@ -0,0 +1,129 @@
+import 'dart:ui';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
+import 'package:location/resource/assets.gen.dart';
+import 'package:location/resource/string.gen.dart';
+import 'package:location/utils/common_expand.dart';
+import 'package:location/utils/common_style.dart';
+
+class AddFriendDialog {
+  static final String _tag = 'AddFriendDialog';
+
+  static void show(
+      {required VoidCallback onAddClick,
+      VoidCallback? onCloseClick,
+      VoidCallback? onNotAddDismiss}) {
+    bool isClickAdd = false;
+
+    SmartDialog.show(
+        tag: _tag,
+        onDismiss: () {
+          if (!isClickAdd) {
+            onNotAddDismiss?.call();
+          }
+        },
+        builder: (_) {
+          return AddFriendDialogView(
+              onAddClick: () {
+                isClickAdd = true;
+                onAddClick();
+              },
+              onCloseClick: onCloseClick);
+        });
+  }
+
+  static void dismiss() {
+    SmartDialog.dismiss(tag: _tag);
+  }
+}
+
+class AddFriendDialogView extends Dialog {
+  final VoidCallback onAddClick;
+  final VoidCallback? onCloseClick;
+
+  const AddFriendDialogView({
+    super.key,
+    required this.onAddClick,
+    this.onCloseClick,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return IntrinsicHeight(
+      child: Stack(
+        children: [
+          Center(
+            child: Container(
+              width: 289.w,
+              margin: EdgeInsets.only(top: 34.w),
+              decoration: BoxDecoration(
+                color: Colors.white,
+                borderRadius: BorderRadius.circular(20.w),
+              ),
+              child: IntrinsicHeight(
+                child: Align(
+                  alignment: Alignment.topCenter,
+                  child: Stack(
+                    children: [
+                      SizedBox(
+                        width: double.infinity,
+                        child: Column(children: [
+                          SizedBox(height: 89.w),
+                          Text(StringName.dialogAddFriendTitle,
+                              style: TextStyle(
+                                  fontSize: 18.sp,
+                                  color: '#333333'.color,
+                                  fontWeight: FontWeight.bold)),
+                          SizedBox(height: 8.w),
+                          Text(StringName.dialogAddFriendTitle,
+                              style: TextStyle(
+                                  fontSize: 15.sp, color: '#404040'.color)),
+                          SizedBox(height: 23.w),
+                          GestureDetector(
+                            onTap: () {
+                              onAddClick();
+                              AddFriendDialog.dismiss();
+                            },
+                            child: Container(
+                              width: 229.w,
+                              height: 40.w,
+                              decoration: getPrimaryBtnDecoration(32.w),
+                              child: Center(
+                                child: Text(StringName.dialogAddFriendBtn,
+                                    style: TextStyle(
+                                        fontSize: 14.sp, color: Colors.white)),
+                              ),
+                            ),
+                          ),
+                          SizedBox(height: 22.w),
+                        ]),
+                      ),
+                      Align(
+                          alignment: Alignment.topRight,
+                          child: Container(
+                            margin: EdgeInsets.only(top: 12.w, right: 12.w),
+                            child: GestureDetector(
+                              onTap: () {
+                                onCloseClick?.call();
+                                AddFriendDialog.dismiss();
+                              },
+                              child: Assets.images.iconDialogClose
+                                  .image(width: 20.w, height: 20.w),
+                            ),
+                          ))
+                    ],
+                  ),
+                ),
+              ),
+            ),
+          ),
+          Align(
+              alignment: Alignment.topCenter,
+              child: Assets.images.iconDialogAddFriend.image(width: 124.w)),
+        ],
+      ),
+    );
+  }
+}

+ 103 - 0
lib/dialog/check_loation_permission_dialog.dart

@@ -0,0 +1,103 @@
+import 'dart:ui';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
+import 'package:location/utils/common_expand.dart';
+
+import '../resource/assets.gen.dart';
+import '../resource/string.gen.dart';
+import '../utils/common_style.dart';
+
+class CheckLocationPermissionDialog {
+  static final String _tag = 'CheckLocationPermissionDialog';
+
+  static void show({required VoidCallback onRequestPermissionClick}) {
+    SmartDialog.show(
+        tag: _tag,
+        builder: (_) {
+          return CheckLocationPermissionView(
+              onRequestPermissionClick: onRequestPermissionClick);
+        });
+  }
+
+  static void dismiss() {
+    SmartDialog.dismiss(tag: _tag);
+  }
+}
+
+class CheckLocationPermissionView extends Dialog {
+  final VoidCallback onRequestPermissionClick;
+
+  const CheckLocationPermissionView(
+      {super.key, required this.onRequestPermissionClick});
+
+  @override
+  Widget build(BuildContext context) {
+    //图片当做背景
+    return Container(
+      width: 289.w,
+      height: 223.w,
+      decoration: BoxDecoration(
+        image: DecorationImage(
+          image: Assets.images.bgCheckLocatinPermission.provider(),
+          fit: BoxFit.fill,
+        ),
+      ),
+      child: Column(
+        children: [
+          SizedBox(height: 92.w),
+          Text(StringName.dialogRecordLocation,
+              style: TextStyle(
+                  fontSize: 18.sp,
+                  color: '#333333'.color,
+                  fontWeight: FontWeight.bold)),
+          SizedBox(height: 8.w),
+          Text(StringName.dialogRecordLocationHasPermission,
+              style: TextStyle(fontSize: 15.sp, color: '#404040'.color)),
+          SizedBox(height: 20.6.w),
+          Row(
+            mainAxisAlignment: MainAxisAlignment.center,
+            children: [
+              GestureDetector(
+                onTap: () {
+                  CheckLocationPermissionDialog.dismiss();
+                },
+                child: Container(
+                  decoration: BoxDecoration(
+                    border: Border.all(color: '#AAAAAA'.color, width: 1.w),
+                    borderRadius: BorderRadius.circular(54.w),
+                  ),
+                  width: 109.w,
+                  height: 40.w,
+                  child: Center(
+                    child: Text(
+                      StringName.dialogRecordLocationNotRequest,
+                      style: TextStyle(fontSize: 14.sp, color: '#AAAAAA'.color),
+                    ),
+                  ),
+                ),
+              ),
+              SizedBox(width: 16.w),
+              GestureDetector(
+                onTap: () {
+                  onRequestPermissionClick.call();
+                  CheckLocationPermissionDialog.dismiss();
+                },
+                child: Container(
+                  decoration: getPrimaryBtnDecoration(54.w),
+                  width: 109.w,
+                  height: 40.w,
+                  child: Center(
+                    child: Text(StringName.dialogRecordLocationRequest,
+                        style: TextStyle(fontSize: 14.sp, color: Colors.white)),
+                  ),
+                ),
+              )
+            ],
+          )
+        ],
+      ),
+    );
+  }
+}

+ 5 - 2
lib/dialog/location_permission_dialog.dart

@@ -51,8 +51,11 @@ class CupertinoLocationView extends Dialog {
         ),
         child: Column(
           children: [
-            Assets.images.bgDialogLocationPermissionIos
-                .image(width: double.infinity),
+            AspectRatio(
+              aspectRatio: 900 / 438,
+              child: Assets.images.bgDialogLocationPermissionIos
+                  .image(width: double.infinity),
+            ),
             SizedBox(height: 34.w),
             SizedBox(
               width: 210.w,

+ 4 - 4
lib/module/add_friend/add_friend_view.dart

@@ -10,11 +10,11 @@ import '../../../resource/colors.gen.dart';
 import '../../../resource/string.gen.dart';
 import 'add_friend_dialog_controller.dart';
 
-class AddFriendView extends BaseView<AddFriendDialogController> {
-  const AddFriendView({super.key});
+class AddFriendPage extends BaseView<AddFriendDialogController> {
+  const AddFriendPage({super.key});
 
-  static void show() {
-    Get.bottomSheet(AddFriendView(),
+  static Future<T?> show<T>() {
+    return Get.bottomSheet(AddFriendPage(),
         isScrollControlled: true,
         barrierColor: ColorName.black55,
         backgroundColor: ColorName.transparent);

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

@@ -1,5 +1,3 @@
-import 'dart:io';
-
 import 'package:get/get.dart';
 import 'package:get/get_rx/src/rx_types/rx_types.dart';
 import 'package:injectable/injectable.dart';
@@ -8,13 +6,12 @@ import 'package:location/data/bean/location_info.dart';
 import 'package:location/data/bean/user_info.dart';
 import 'package:location/data/repositories/account_repository.dart';
 import 'package:location/data/repositories/friends_repository.dart';
-import 'package:location/utils/atmob_log.dart';
-import 'package:map/flutter_map.dart';
-import 'package:map_platform_interface/map_interface.dart';
-
+import 'package:flutter_map/flutter_map.dart';
+import '../../dialog/add_friend_dialog.dart';
+import '../../dialog/check_loation_permission_dialog.dart';
 import '../../dialog/location_permission_dialog.dart';
 import '../../utils/location_permission_util.dart';
-import '../add_friend/add_friend_view.dart';
+import '../add_friend/add_friend_page.dart';
 import '../mine/mine_page.dart';
 
 @injectable
@@ -40,16 +37,30 @@ class MainController extends BaseController {
     friendsList.listen((list) {
       mapController.addMarkers(_convertToMarker(list));
     });
+    AddFriendDialog.show(
+        onAddClick: () async {
+          await onAddFriendClick();
+          checkLocationPermissionCallback();
+        },
+        onNotAddDismiss: checkLocationPermissionCallback);
   }
 
-  void onAddFriendClick() {
-    AddFriendView.show();
+  Future<void> onAddFriendClick() {
+    return AddFriendPage.show();
   }
 
   void onMineClick() {
     MinePage.start();
   }
 
+  void checkLocationPermissionCallback() async {
+    bool isGranted = await LocationPermissionUtil.checkLocationPermission();
+    if (!isGranted) {
+      CheckLocationPermissionDialog.show(
+          onRequestPermissionClick: _requestLocationPermission);
+    }
+  }
+
   void onSelectClick(UserInfo mineLocation) {
     UserInfo? oldInfo = _selectedFriend.value;
     _selectedFriend.value = mineLocation;
@@ -108,18 +119,20 @@ class MainController extends BaseController {
     //权限检查
     bool isGranted = await LocationPermissionUtil.checkLocationPermission();
     if (!isGranted) {
-      LocationPermissionDialog.show(onNextStep: () async {
-        isGranted = await LocationPermissionUtil.requestLocationPermission();
-        _showLocationAlways();
-        if (isGranted) {
-          _updateCurrentLocation();
-        }
-      });
+      LocationPermissionDialog.show(onNextStep: _requestLocationPermission);
     } else {
       _updateCurrentLocation();
     }
   }
 
+  void _requestLocationPermission() async {
+    bool isGranted = await LocationPermissionUtil.requestLocationPermission();
+    _showLocationAlways();
+    if (isGranted) {
+      _updateCurrentLocation();
+    }
+  }
+
   void _showLocationAlways() async {
     bool isGranted = await LocationPermissionUtil.checkShowLocationAlways();
     if (!isGranted) {

+ 1 - 1
lib/module/main/main_page.dart

@@ -11,7 +11,7 @@ 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/common_expand.dart';
-import 'package:map/flutter_map.dart';
+import 'package:flutter_map/flutter_map.dart';
 import '../../router/app_pages.dart';
 import 'main_friend_item.dart';
 

+ 15 - 0
lib/resource/assets.gen.dart

@@ -16,6 +16,10 @@ class $AssetsImagesGen {
   AssetGenImage get bgAddFriendDialog =>
       const AssetGenImage('assets/images/bg_add_friend_dialog.webp');
 
+  /// File path: assets/images/bg_check_locatin_permission.webp
+  AssetGenImage get bgCheckLocatinPermission =>
+      const AssetGenImage('assets/images/bg_check_locatin_permission.webp');
+
   /// File path: assets/images/bg_dialog_location_permission_ios.webp
   AssetGenImage get bgDialogLocationPermissionIos => const AssetGenImage(
       'assets/images/bg_dialog_location_permission_ios.webp');
@@ -56,6 +60,14 @@ class $AssetsImagesGen {
   AssetGenImage get iconDefaultMineAvatar =>
       const AssetGenImage('assets/images/icon_default_mine_avatar.webp');
 
+  /// File path: assets/images/icon_dialog_add_friend.webp
+  AssetGenImage get iconDialogAddFriend =>
+      const AssetGenImage('assets/images/icon_dialog_add_friend.webp');
+
+  /// File path: assets/images/icon_dialog_close.webp
+  AssetGenImage get iconDialogClose =>
+      const AssetGenImage('assets/images/icon_dialog_close.webp');
+
   /// File path: assets/images/icon_experiment.webp
   AssetGenImage get iconExperiment =>
       const AssetGenImage('assets/images/icon_experiment.webp');
@@ -195,6 +207,7 @@ class $AssetsImagesGen {
   /// List of all assets
   List<AssetGenImage> get values => [
         bgAddFriendDialog,
+        bgCheckLocatinPermission,
         bgDialogLocationPermissionIos,
         bgLoginHeadContainer,
         bgMineMemberCard,
@@ -205,6 +218,8 @@ class $AssetsImagesGen {
         iconCheckboxUnSelect,
         iconDefaultFriendAvatar,
         iconDefaultMineAvatar,
+        iconDialogAddFriend,
+        iconDialogClose,
         iconExperiment,
         iconLoginAddressBook,
         iconLoginClose,

+ 20 - 0
lib/resource/string.gen.dart

@@ -109,6 +109,19 @@ class StringName {
   static final String nextStep = 'next_step'.tr; // 下一步
   static final String locationBackgroundAlwaysDesc =
       'location_background_always_desc'.tr; // 为保位置展示在地图上,请按照图中指引操作
+  static final String dialogAddFriendTitle =
+      'dialog_add_friend_title'.tr; // 实时定位轨迹
+  static final String dialogAddFriendDesc =
+      'dialog_add_friend_desc'.tr; // 去添加Ta的手机号码
+  static final String dialogAddFriendBtn = 'dialog_add_friend_btn'.tr; // 立即添加
+  static final String dialogRecordLocation =
+      'dialog_record_location'.tr; // 记录轨迹
+  static final String dialogRecordLocationHasPermission =
+      'dialog_record_location_has_permission'.tr; // 开启定位权限
+  static final String dialogRecordLocationNotRequest =
+      'dialog_record_location_not_request'.tr; // 暂不开启
+  static final String dialogRecordLocationRequest =
+      'dialog_record_location_request'.tr; // 立即开启
 }
 class StringMultiSource {
   StringMultiSource._();
@@ -195,6 +208,13 @@ class StringMultiSource {
       'dialog_exit_account_desc': '确定退出登录吗?',
       'next_step': '下一步',
       'location_background_always_desc': '为保位置展示在地图上,请按照图中指引操作',
+      'dialog_add_friend_title': '实时定位轨迹',
+      'dialog_add_friend_desc': '去添加Ta的手机号码',
+      'dialog_add_friend_btn': '立即添加',
+      'dialog_record_location': '记录轨迹',
+      'dialog_record_location_has_permission': '开启定位权限',
+      'dialog_record_location_not_request': '暂不开启',
+      'dialog_record_location_request': '立即开启',
     },
   };
 }

+ 21 - 2
lib/sdk/map/map_helper.dart

@@ -1,7 +1,26 @@
-import 'package:map/flutter_map.dart';
+import 'package:flutter_map/flutter_map.dart';
+import '../../utils/atmob_log.dart';
 
 class MapHelper {
+  static const String tag = "MapHelper";
+
+  static MapLocation? _lastLocation;
+  static late MapPlatform _mapPlatform;
+
   static Future<void> init() async {
-    await MapInitializer.init();
+    await FlutterMap.init();
+    _mapPlatform = FlutterMap.getMapPlatform();
+    initLocationClient();
+  }
+
+  static initLocationClient() {
+    _mapPlatform.setLocationListener(
+        interval: 5000,
+        listener: (location) {
+          AtmobLog.d(tag, "onLocationChanged: $location");
+          if (location.errorCode == 0) {
+            _lastLocation = location;
+          }
+        });
   }
 }

+ 18 - 6
plugins/map/lib/flutter_map.dart

@@ -1,10 +1,22 @@
-library map;
-
-//
+library flutter_map;
 
 //地图组件
-export 'package:map/src/widget/map_widget.dart';
-export 'package:map/src/core/map_controller.dart';
+export 'package:flutter_map/src/widget/map_widget.dart';
+export 'package:flutter_map/src/widget/map_controller.dart';
+export 'package:flutter_map/src/core/map_platform.dart';
 
 //初始化
-export 'package:map/src/core/map_initializer.dart';
+export 'package:flutter_map/src/core/flutter_map.dart';
+
+//公共配置.
+export 'package:flutter_map/src/consts/map_constants.dart';
+
+//实体类
+export 'package:flutter_map/src/consts/marker_type.dart';
+export 'package:flutter_map/src/entity/marker.dart';
+export 'package:flutter_map/src/entity/camera_position.dart';
+export 'package:flutter_map/src/entity/map_location.dart';
+
+//接口
+export 'package:flutter_map/src/interface/map_platform_interface.dart';
+export 'package:flutter_map/src/interface/map_overlays_interface.dart';

+ 10 - 3
plugins/map_platform_interface/lib/src/consts/constants.dart

@@ -1,10 +1,17 @@
-class Constants {
-  Constants._();
+class MapConstants {
+  MapConstants._();
+
+  //地图调用方法通道
+  static const String mapMethodChannel = 'atmob_map_method_channel';
+
+  //地图定位持续监听通道
+  static const String mapEventChannel = 'atmob_map_event_channel';
 
   //地图渠道名称
   static const String mapViewChannelName = "com.atmob.flutter_map/map_view_";
 
-  //基础功能
+  /// *********************************************************************************************************************
+  //基础方法
   static const String initClient = 'initClient';
   static const String getPlatformMapName = 'getPlatformMapName';
 

+ 1 - 1
plugins/map_platform_interface/lib/src/consts/marker_type.dart

@@ -1,4 +1,4 @@
-import '../../map_interface.dart';
+import '../entity/marker.dart';
 
 enum MarkerType {
   mine(1),

+ 12 - 5
plugins/map/lib/src/core/map_initializer.dart

@@ -1,16 +1,16 @@
 import 'package:flutter/services.dart';
-import 'package:map_platform_interface/map_interface.dart';
-import 'map_platform.dart';
+import '../../flutter_map.dart';
+
+class FlutterMap {
+  FlutterMap._();
 
-class MapInitializer {
   static MapPlatform? _mapPlatform;
 
   static Future<void> init() async {
     if (_mapPlatform != null) {
       return;
     }
-    MethodChannel channel =
-        const MethodChannel(FlutterMapNameConfig.mapMethodChannel);
+    MethodChannel channel = const MethodChannel(MapConstants.mapMethodChannel);
 
     MapPlatform mapPlatform = MapPlatform(channel);
     if (!await mapPlatform.initClient()) {
@@ -18,4 +18,11 @@ class MapInitializer {
     }
     _mapPlatform = mapPlatform;
   }
+
+  static MapPlatform getMapPlatform() {
+    if (_mapPlatform == null) {
+      throw Exception("地图未初始化,请先调用Map.init()方法初始化地图");
+    }
+    return _mapPlatform!;
+  }
 }

+ 46 - 4
plugins/map/lib/src/core/map_platform.dart

@@ -1,25 +1,67 @@
+import 'dart:async';
 import 'package:flutter/services.dart';
-import 'package:map_platform_interface/map_interface.dart';
+import '../../flutter_map.dart';
 
 class MapPlatform extends MapInterface {
   final MethodChannel _channel;
 
+  final EventChannel _eventChannel =
+      const EventChannel(MapConstants.mapEventChannel);
+
+  MapLocationListener? _currentListener;
+  StreamSubscription<dynamic>? _locationSubscription;
+
   MapPlatform(this._channel);
 
   @override
   Future<String?> getPlatformName() {
-    return _channel.invokeMethod<String>(Constants.getPlatformMapName);
+    return _channel.invokeMethod<String>(MapConstants.getPlatformMapName);
   }
 
   @override
   Future<bool> initClient() async {
-    bool? isSupport;
     try {
-      isSupport = await _channel.invokeMethod<bool>(Constants.initClient);
+      bool? isSupport =
+          await _channel.invokeMethod<bool>(MapConstants.initClient);
       if (isSupport == true) {
         return true;
       }
     } catch (e) {}
     return false;
   }
+
+  @override
+  Stream<dynamic> setLocationListener(
+      {required int interval, required MapLocationListener listener}) {
+    return _eventChannel.receiveBroadcastStream(<String, dynamic>{
+      'interval': interval,
+    });
+  }
+
+  StreamSubscription registerLocationStream({required int interval}) {
+    return _eventChannel.receiveBroadcastStream(<String, dynamic>{
+      'interval': interval,
+    }).listen((data) {});
+  }
+
+  void _handleLocationUpdate(dynamic event) {
+    try {
+      // final data = Map<String, dynamic>.from(event as FlutterMap);
+      // final location = MapLocationData(
+      //   latitude: data['latitude'] as double,
+      //   longitude: data['longitude'] as double,
+      //   accuracy: data['accuracy']?.toDouble(),
+      //   timestamp: DateTime.fromMillisecondsSinceEpoch(
+      //       data['timestamp'] as int),
+      // );
+      // _currentListener?.call(location);
+    } catch (e) {
+      // _currentListener?.call(null, "Data format error: $e");
+    }
+  }
+
+  void _handleLocationError(Object error) {
+    if (error is PlatformException) {
+    } else {}
+  }
 }

plugins/map_platform_interface/lib/src/entity/camera_position.dart → plugins/map/lib/src/entity/camera_position.dart


+ 44 - 0
plugins/map/lib/src/entity/map_location.dart

@@ -0,0 +1,44 @@
+class MapLocation {
+  final int? time;
+
+  final String? address;
+
+  final double latitude;
+
+  final double longitude;
+
+  final int? errorCode;
+
+  MapLocation({
+    this.time,
+    this.address,
+    this.errorCode,
+    required this.latitude,
+    required this.longitude,
+  });
+
+  Map<String, dynamic> toJson() {
+    return {
+      'time': time,
+      'address': address,
+      'latitude': latitude,
+      'longitude': longitude,
+      'errorCode': errorCode,
+    };
+  }
+
+  factory MapLocation.fromJson(Map<String, dynamic> map) {
+    return MapLocation(
+      time: map['time'],
+      address: map['address'],
+      latitude: map['latitude'],
+      longitude: map['longitude'],
+      errorCode: map['errorCode'],
+    );
+  }
+
+  @override
+  String toString() {
+    return 'MapLocation{time: $time, address: $address, latitude: $latitude, longitude: $longitude, errorCode: $errorCode}';
+  }
+}

plugins/map_platform_interface/lib/src/entity/marker.dart → plugins/map/lib/src/entity/marker.dart


plugins/map_platform_interface/lib/src/interface/map_overlays_interface.dart → plugins/map/lib/src/interface/map_overlays_interface.dart


+ 13 - 0
plugins/map/lib/src/interface/map_platform_interface.dart

@@ -0,0 +1,13 @@
+import '../entity/map_location.dart';
+
+typedef MapLocationListener = void Function(MapLocation location);
+
+abstract class MapInterface {
+  Future<String?> getPlatformName();
+
+  Future<bool> initClient();
+
+  ///interval 单位毫秒
+  void setLocationListener(
+      {required int interval, required MapLocationListener listener});
+}

+ 7 - 4
plugins/map/lib/src/core/map_controller.dart

@@ -2,7 +2,10 @@ import 'dart:convert';
 
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/services.dart';
-import 'package:map_platform_interface/map_interface.dart';
+import 'package:flutter_map/src/consts/map_constants.dart';
+import 'package:flutter_map/src/entity/camera_position.dart';
+import 'package:flutter_map/src/entity/marker.dart';
+import 'package:flutter_map/src/interface/map_overlays_interface.dart';
 
 class MapController extends MapOverlaysInterface {
   final _pendingOperations = <Map<String, dynamic>>[];
@@ -42,7 +45,7 @@ class MapController extends MapOverlaysInterface {
     if (_isDisposed || markers.isEmpty) return;
     final serialized = jsonEncode(markers);
     final params = {
-      'method': Constants.methodUpdateMarkers,
+      'method': MapConstants.methodUpdateMarkers,
       'args': serialized
     };
     debugPrint("updateMarkers...params==>$params");
@@ -58,7 +61,7 @@ class MapController extends MapOverlaysInterface {
     if (_isDisposed) return;
     final serialized = cameraPosition.toJson();
     final params = {
-      'method': Constants.methodMapMoveCamera,
+      'method': MapConstants.methodMapMoveCamera,
       'args': serialized
     };
     debugPrint("moveCamera...params==>$params");
@@ -74,7 +77,7 @@ class MapController extends MapOverlaysInterface {
     if (_isDisposed) return;
     final serialized = cameraPosition.toJson();
     final params = {
-      'method': Constants.methodMapAnimateCamera,
+      'method': MapConstants.methodMapAnimateCamera,
       'args': serialized
     };
     debugPrint("animateCamera...params==>$params");

+ 6 - 4
plugins/map/lib/src/widget/map_widget.dart

@@ -3,8 +3,10 @@ import 'dart:convert';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/services.dart';
-import 'package:map/src/core/map_controller.dart';
-import 'package:map_platform_interface/map_interface.dart';
+import 'package:flutter_map/src/consts/map_constants.dart';
+import 'package:flutter_map/src/consts/marker_type.dart';
+import 'package:flutter_map/src/entity/marker.dart';
+import 'package:flutter_map/src/widget/map_controller.dart';
 
 class MapWidget extends StatefulWidget {
   final MapController? controller;
@@ -43,7 +45,7 @@ class _MapWidgetState extends State<MapWidget> {
 
   Future<void> onPlatformViewCreated(int viewId) async {
     MethodChannel mapChannel =
-        MethodChannel('${Constants.mapViewChannelName}$viewId');
+        MethodChannel('${MapConstants.mapViewChannelName}$viewId');
     widget.controller?.setChannel(mapChannel);
     mapChannel.setMethodCallHandler(_mapMethodCallHandler);
   }
@@ -52,7 +54,7 @@ class _MapWidgetState extends State<MapWidget> {
     debugPrint(
         '_mapMethodCallHandler...call.method==>${call.method},call.arguments==>${call.arguments}');
     switch (call.method) {
-      case Constants.methodMarkerOnTap:
+      case MapConstants.methodMarkerOnTap:
         Map<String, dynamic> jsonMap = jsonDecode(call.arguments);
         Marker marker = Marker.fromJson(jsonMap);
         widget.onMarkerTap?.call(marker);

+ 1 - 3
plugins/map/pubspec.yaml

@@ -1,4 +1,4 @@
-name: map
+name: flutter_map
 description: "定位地图调用总入口"
 version: 0.0.1
 homepage:
@@ -12,8 +12,6 @@ dependencies:
     sdk: flutter
   plugin_platform_interface: ^2.0.2
 
-  map_platform_interface:
-    path: ../map_platform_interface
 
 
 dev_dependencies:

+ 0 - 3
plugins/map_amap_android/pubspec.yaml

@@ -12,9 +12,6 @@ dependencies:
     sdk: flutter
   plugin_platform_interface: ^2.0.2
 
-  map_platform_interface:
-    path: ../map_platform_interface
-
 dev_dependencies:
   flutter_test:
     sdk: flutter

+ 0 - 3
plugins/map_google_android/lib/map_google_android.dart

@@ -1,3 +0,0 @@
-class MapGoogleAndroid {
-  MapGoogleAndroid._();
-}

+ 0 - 11
plugins/map_google_android/lib/map_google_android_method_channel.dart

@@ -1,11 +0,0 @@
-import 'package:flutter/foundation.dart';
-import 'package:flutter/services.dart';
-
-import 'map_google_android_platform_interface.dart';
-
-/// An implementation of [MapGoogleAndroidPlatform] that uses method channels.
-class MethodChannelMapGoogleAndroid extends MapGoogleAndroidPlatform {
-  /// The method channel used to interact with the native platform.
-  @visibleForTesting
-  final methodChannel = const MethodChannel('map_google_android');
-}

+ 0 - 28
plugins/map_google_android/lib/map_google_android_platform_interface.dart

@@ -1,28 +0,0 @@
-import 'package:flutter/cupertino.dart';
-import 'package:plugin_platform_interface/plugin_platform_interface.dart';
-
-import 'map_google_android_method_channel.dart';
-
-abstract class MapGoogleAndroidPlatform extends PlatformInterface {
-  /// Constructs a MapGoogleAndroidPlatform.
-  MapGoogleAndroidPlatform() : super(token: _token) {
-    debugPrint('MapGoogleAndroidPlatform');
-  }
-
-  static final Object _token = Object();
-
-  static MapGoogleAndroidPlatform _instance = MethodChannelMapGoogleAndroid();
-
-  /// The default instance of [MapGoogleAndroidPlatform] to use.
-  ///
-  /// Defaults to [MethodChannelMapGoogleAndroid].
-  static MapGoogleAndroidPlatform get instance => _instance;
-
-  /// Platform-specific implementations should set this with their own
-  /// platform-specific class that extends [MapGoogleAndroidPlatform] when
-  /// they register themselves.
-  static set instance(MapGoogleAndroidPlatform instance) {
-    PlatformInterface.verifyToken(instance, _token);
-    _instance = instance;
-  }
-}

+ 0 - 2
plugins/map_google_android/pubspec.yaml

@@ -12,8 +12,6 @@ dependencies:
     sdk: flutter
   plugin_platform_interface: ^2.0.2
 
-  map_platform_interface:
-    path: ../map_platform_interface
 
 dev_dependencies:
   flutter_test:

+ 0 - 29
plugins/map_platform_interface/.gitignore

@@ -1,29 +0,0 @@
-# Miscellaneous
-*.class
-*.log
-*.pyc
-*.swp
-.DS_Store
-.atom/
-.buildlog/
-.history
-.svn/
-migrate_working_dir/
-
-# IntelliJ related
-*.iml
-*.ipr
-*.iws
-.idea/
-
-# The .vscode folder contains launch configuration and tasks you configure in
-# VS Code which you may wish to be included in version control, so this line
-# is commented out by default.
-#.vscode/
-
-# Flutter/Dart/Pub related
-# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
-/pubspec.lock
-**/doc/api/
-.dart_tool/
-build/

+ 0 - 10
plugins/map_platform_interface/.metadata

@@ -1,10 +0,0 @@
-# This file tracks properties of this Flutter project.
-# Used by Flutter tool to assess capabilities and perform upgrades etc.
-#
-# This file should be version controlled and should not be manually edited.
-
-version:
-  revision: "80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819"
-  channel: "stable"
-
-project_type: package

+ 0 - 3
plugins/map_platform_interface/CHANGELOG.md

@@ -1,3 +0,0 @@
-## 0.0.1
-
-* TODO: Describe initial release.

+ 0 - 1
plugins/map_platform_interface/LICENSE

@@ -1 +0,0 @@
-TODO: Add your license here.

+ 0 - 39
plugins/map_platform_interface/README.md

@@ -1,39 +0,0 @@
-<!--
-This README describes the package. If you publish this package to pub.dev,
-this README's contents appear on the landing page for your package.
-
-For information about how to write a good package README, see the guide for
-[writing package pages](https://dart.dev/tools/pub/writing-package-pages).
-
-For general information about developing packages, see the Dart guide for
-[creating packages](https://dart.dev/guides/libraries/create-packages)
-and the Flutter guide for
-[developing packages and plugins](https://flutter.dev/to/develop-packages).
--->
-
-TODO: Put a short description of the package here that helps potential users
-know whether this package might be useful for them.
-
-## Features
-
-TODO: List what your package can do. Maybe include images, gifs, or videos.
-
-## Getting started
-
-TODO: List prerequisites and provide or point to information on how to
-start using the package.
-
-## Usage
-
-TODO: Include short and useful examples for package users. Add longer examples
-to `/example` folder.
-
-```dart
-const like = 'sample';
-```
-
-## Additional information
-
-TODO: Tell users more about the package: where to find more information, how to
-contribute to the package, how to file issues, what response they can expect
-from the package authors, and more.

+ 0 - 4
plugins/map_platform_interface/analysis_options.yaml

@@ -1,4 +0,0 @@
-include: package:flutter_lints/flutter.yaml
-
-# Additional information about this file can be found at
-# https://dart.dev/guides/language/analysis-options

+ 0 - 14
plugins/map_platform_interface/lib/map_interface.dart

@@ -1,14 +0,0 @@
-library map_platform_interface;
-
-//公共配置.
-export 'package:map_platform_interface/src/consts/flutter_map_name_config.dart';
-export 'package:map_platform_interface/src/consts/constants.dart';
-
-//实体类
-export 'package:map_platform_interface/src/consts/marker_type.dart';
-export 'package:map_platform_interface/src/entity/marker.dart';
-export 'package:map_platform_interface/src/entity/camera_position.dart';
-
-//接口
-export 'package:map_platform_interface/src/interface/map_platform_interface.dart';
-export 'package:map_platform_interface/src/interface/map_overlays_interface.dart';

+ 0 - 5
plugins/map_platform_interface/lib/src/consts/flutter_map_name_config.dart

@@ -1,5 +0,0 @@
-class FlutterMapNameConfig {
-  FlutterMapNameConfig._();
-
-  static const String mapMethodChannel = 'atmob_map_method_channel';
-}

+ 0 - 5
plugins/map_platform_interface/lib/src/interface/map_platform_interface.dart

@@ -1,5 +0,0 @@
-abstract class MapInterface {
-  Future<String?> getPlatformName();
-
-  Future<bool> initClient();
-}

+ 0 - 25
plugins/map_platform_interface/pubspec.yaml

@@ -1,25 +0,0 @@
-name: map_platform_interface
-description: "定位地图接口"
-version: 0.0.1
-homepage:
-
-environment:
-  sdk: ^3.5.0
-  flutter: ">=1.17.0"
-
-dependencies:
-  flutter:
-    sdk: flutter
-
-
-dev_dependencies:
-  flutter_test:
-    sdk: flutter
-  flutter_lints: ^4.0.0
-
-# For information on the generic Dart part of this file, see the
-# following page: https://dart.dev/tools/pub/pubspec
-
-# The following section is specific to Flutter packages.
-flutter:
-

+ 7 - 14
pubspec.lock

@@ -336,6 +336,13 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_map:
+    dependency: "direct main"
+    description:
+      path: "plugins/map"
+      relative: true
+    source: path
+    version: "0.0.1"
   flutter_screenutil:
     dependency: "direct main"
     description:
@@ -546,13 +553,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "0.1.2-main.4"
-  map:
-    dependency: "direct main"
-    description:
-      path: "plugins/map"
-      relative: true
-    source: path
-    version: "0.0.1"
   map_amap_android:
     dependency: "direct main"
     description:
@@ -560,13 +560,6 @@ packages:
       relative: true
     source: path
     version: "0.0.1"
-  map_platform_interface:
-    dependency: transitive
-    description:
-      path: "plugins/map_platform_interface"
-      relative: true
-    source: path
-    version: "0.0.1"
   marquee:
     dependency: "direct main"
     description:

+ 2 - 1
pubspec.yaml

@@ -84,13 +84,14 @@ dependencies:
 
 
   ######################地图########################
-  map:
+  flutter_map:
     path: plugins/map
   ##Android端
   #  map_google_android:
   #    path: plugins/map_google_android
   map_amap_android:
     path: plugins/map_amap_android
+
   ##iOS端
   #  map_amap_ios:
   #    path: plugins/map_amap_ios