
位置服务跨端开发者久等啦!
过去开发者们在 Flutter 里做定位和地图,要么自己用 MethodChannel 手写桥接,容易踩平台差异的坑,要么依赖第三方方案,能力完整度和长期维护都难有保障。
腾讯位置服务正式发布官方 Flutter 插件,定位 SDK 与地图 SDK 现已全面完成 Flutter 适配。开发者只需编写一套 Dart 代码,即可在 Android 与 iOS 双端直接调用原生级能力,无需额外适配。
这不仅大幅降低了Flutter 开发者的接入门槛,更让开发者能以最小成本获得与原生 SDK 对齐的定位和地图功能。且该插件由腾讯位置服务官方团队持续维护,确保长期稳定更新与技术支持,为您的跨端应用提供可靠的位置服务底座。
PART 01
定位插件 (tencent_location_flutter_plugin) 为同一份 Dart 代码提供跨平台的定位、地理围栏、设备朝向、坐标工具等完整能力。
能力 | 说明 | Android | iOS |
|---|---|---|---|
连续定位 | 可订阅的位置流,支持设置回调间隔、坐标系、返回等级、逆地址解析等参数 | ✅ | ✅ |
单次定位 | 一次性获取当前定位结果,可配置超时时长 | ✅ | ✅ |
地理围栏 | 圆形 / 多边形 / 行政区划三种形态,支持进入 / 离开 / 停留事件回调 | ✅ | ✅ |
设备朝向 | 订阅式获取真北方向、磁北方向等朝向信息 | - | ✅ |
设备状态 | 随连续定位一并产生 GPS / Wi-Fi / 蜂窝 / 定位总开关等状态变化事件 | ✅ | - |
前台定位服务 | 让定位在应用进入后台时也能继续运行 | ✅ | - |
工具方法 | 坐标系互转、两点距离计算、点是否落在指定圆内等通用工具 | ✅ | ✅ |
多实例 | 同一应用内可创建多个定位 / 围栏管理器,事件流互不干扰 | ✅ | ✅ |
DART CODE
import 'package:tencent_location_flutter_plugin/tencent_location_flutter_plugin.dart';
Future<void> main() async {
// ① 隐私合规同意
await TencentLocationSDK.setPrivacyPolicyAgreement(true);
// ② 初始化(双端各自的 Key)
await TencentLocationSDK.init(
androidApiKey: 'YOUR_ANDROID_API_KEY',
iosApiKey: 'YOUR_IOS_API_KEY',
);
// ③ 发起一次单次定位
final manager = TencentLocationManager();
final loc = await manager.startSingleLocation(
TencentLocationRequest.create()..setRequestLevel(RequestLevel.adminArea),
);
print('当前位置:${loc.latitude}, ${loc.longitude}');
}PART 02
核心功能 | 说明 |
|---|---|
🗺️ 地图基础 | • 创建和显示地图 • 地图类型切换(标准 / 卫星) • 自定义地图样式(个性化地图) • 显示定位 • 实时路况 • 3D 建筑物 • 底图标注控制 • 隐私合规 • Logo 位置控制 |
👆 地图交互 | • 手势控制(缩放 / 滑动 / 旋转 / 倾斜) • 点击事件(单击 / 长按 / POI 点击) • UI 控件(指南针 / 比例尺) • 缩放范围限制 • 显示区域限制 • 相机视角控制(含动画) • 坐标转换(屏幕 ↔ 经纬度) • 地图截图 |
📍 覆盖物 | • 点标记 Marker / InfoWindow • 折线 Polyline(折线、虚线、纹理线等) • 多边形 Polygon(简单多边形、带洞多边形、纹理边框等) |
PART 03
腾讯位置服务Flutter插件不是简单地把原生 API「翻译」一遍,而是围绕 Flutter 的声明式范式做了系统性的工程设计。
双端零配置接入,开箱即用
无论 Android 还是 iOS 都无需手动配 SDK 依赖、无需改原生工程文件,双端统一零配置,把接入成本压到最低。
● Android:工具包已发布至 Maven 中央仓库,构建工具自动拉取,无需手动配置
● IOS :依赖声明文件自动处理,执行依赖安装即用
● Key 与隐私合规:统一在 Dart 层传入
声明式 API,贴合 Flutter 范式
覆盖物(点标记 / 折线 / 多边形 / 圆形)采用声明式管理,只需描述"想要什么状态",插件自动对比差异、只同步变化部分,状态清晰、性能更好、代码更简洁。
同时数据模型均为不可变设计,契合 Flutter 习惯。
Compat分层架构,从容应对多版本
用户设备上的地图工具包版本可能不一样,而插件则是以最低版本为编译基准(Android 5.9.0 / iOS 5.7.7),通过 Compat 分层 + 启动时能力检测缓存兼容到最新版:
TECH NOTE
业务代码
→ XxxCompat(统一接口,按版本分支)
→ SdkCompat(启动时检测一次并缓存)
→ TencentMap SDK(5.9.0 ~ 最新版)
检测只在启动时做一次,运行时走纯 if/else,零反射开销;新增差异点只需改 Compat 文件,不污染业务代码。
渲染模式自动选择,用户可选
不必纠结Android 的两种渲染方式怎么选,插件默认自动按系统版本为你选择最优模式,同时也支持强制指定——既兼顾性能与兼容性,又把选择权交回开发者手中,灵活适配各类机型与场景。
DART CODE
enum AndroidViewMode { auto, surfaceView, textureView }
初始化时序内部封装,平台细节双端一致
地图工具包初始化步骤有严格顺序要求,顺序错误会导致白屏或崩溃等问题。
从隐私合规➡️SDK启动➡️ API key➡️创建地图,插件将正确的初始化时序封装在内部,开发者无需操心。同时坐标系、覆盖物渲染等双端差异也一并细致封装与对齐,同一份代码彻底双端一致。
PART 04
以前要操心的 | 使用插件后 |
|---|---|
手写 MethodChannel,逐个桥接原生 API | ✅ 官方已完成封装,直接调用 Dart API |
Android 配置依赖、Maven 仓库、Manifest | ✅ 双端零配置,添加依赖即可使用 |
iOS 修改 AppDelegate 初始化 SDK | ✅ Key 配置与隐私合规统一在 Dart 层完成 |
自己处理 Android / iOS 平台 API 差异 | ✅ 双端 API 保持一致,平台差异由插件内部处理 |
命令式管理覆盖物,手动维护状态 | ✅ 声明式开发 + 增量更新,状态管理更清晰、更可预测 |
担心第三方插件维护和更新节奏 | ✅ 官方出品,持续维护迭代,兼容性更有保障 |
💡一句话总结:你写业务,跨端的复杂度交给官方插件。
您在使用过程中有任何问题
都可前往腾讯位置服务官网「提交工单」