csp_amap_flutter_base

Pub Version License

高德地图 Flutter 插件基础依赖库,为 Flutter 应用集成高德地图 SDK 提供统一的接口封装。

📱 功能特性

  • 🗺️ 定位数据模型 - 提供定位信息数据结构(AMapLocationLatLngLatLngBounds
  • 🔍 POI 数据模型 - 提供 POI 数据结构(AMapPoi
  • 🔑 API Key 管理 - 统一的 API Key 配置(AMapApiKey
  • 🔒 隐私声明 - 符合隐私政策要求的声明配置(AMapPrivacyStatement
  • 🛠️ 工具类 - 提供常用的地图工具方法(AMapToolsAMapUtil
  • 📱 跨平台 - 数据模型与工具类同时适配 Android、iOS 和 HarmonyOS 平台

🚀 快速开始

安装依赖

在你的 pubspec.yaml 文件中添加依赖:

dependencies:
  csp_amap_flutter_base: ^1.0.0

然后运行:

flutter pub get

导入库

import 'package:csp_amap_flutter_base/csp_amap_flutter_base.dart';

📖 使用方法

本库是基础依赖库,仅提供与高德地图相关的数据模型与工具方法,供上层插件或业务层调用。定位、POI 搜索等能力由集成原生高德 SDK 的上层插件提供。

1. API Key 配置

// 构造 API Key 配置
const key = AMapApiKey(
  androidKey: 'your_android_api_key',
  iosKey: 'your_ios_api_key',
  ohosKey: 'your_harmonyos_api_key',
);

// 序列化后传递给原生端
final map = key.toMap();

2. 隐私声明配置

// 构造隐私声明配置
const statement = AMapPrivacyStatement(
  hasContains: true,
  hasShow: true,
  hasAgree: true,
);

final map = statement.toMap();

3. 定位数据模型

// 从原生端反序列化定位信息
final location = AMapLocation.fromMap(json);
print('纬度: ${location?.latLng.latitude}');
print('经度: ${location?.latLng.longitude}');

4. POI 数据模型

// 从原生端反序列化 POI 信息
final poi = AMapPoi.fromJson(json);
print('POI名称: ${poi?.name}');
print('POI位置: ${poi?.latLng}');

5. 地图工具

// 计算两个经纬度之间的距离(米)
final distance = AMapTools.distanceBetween(pointA, pointB);

// 判断坐标点是否在多边形内
final inside = AMapTools.latLngIsInPolygon(point, polygonPoints);

// 计算多边形面积
final area = AMapTools.calculateArea(polygonPoints);

📁 项目结构

lib/
├── csp_amap_flutter_base.dart    # 主入口文件
└── src/
    ├── amap_api_key.dart          # API Key 配置
    ├── amap_privacy_statement.dart # 隐私声明配置
    ├── location.dart              # 定位功能封装
    ├── poi.dart                   # POI 搜索功能
    ├── amap_tools.dart           # 地图工具类
    ├── amap_utils.dart           # 实用工具方法
    ├── callbacks.dart            # 回调函数定义
    └── options.dart              # 配置选项

🔧 开发环境要求

  • Flutter SDK: >= 3.0.0
  • Dart SDK: >= 3.1.5 < 4.0.0
  • Android: API level 21+
  • iOS: iOS 9.0+
  • HarmonyOS: API level 12+

📝 配置说明

Android 配置

android/app/src/main/AndroidManifest.xml 中添加权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

iOS 配置

ios/Runner/Info.plist 中添加位置权限描述:

<key>NSLocationWhenInUseUsageDescription</key>
<string>此应用需要位置权限以提供基于位置的服务</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>此应用需要位置权限以提供基于位置的服务</string>

HarmonyOS 配置

ohos/entry/src/main/module.json5 中添加权限声明:

{
  "requestPermissions": [
    {
      "name": "ohos.permission.LOCATION",
      "reason": "用于获取地理位置信息"
    },
    {
      "name": "ohos.permission.APPROXIMATELY_LOCATION",
      "reason": "用于获取大致位置信息"
    },
    {
      "name": "ohos.permission.INTERNET",
      "reason": "用于网络访问"
    }
  ]
}

📄 许可证

本项目基于 MIT 许可证 开源。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📞 联系方式

⭐ 支持

如果这个项目对你有帮助,请给它一个 ⭐️!