flutter_amap_navi 1.0.3 copy "flutter_amap_navi: ^1.0.3" to clipboard
flutter_amap_navi: ^1.0.3 copied to clipboard

A Flutter plugin for AMap drive, walk, ride navigation and cruise events.

flutter_amap_navi #

面向 Android、iOS 的 Flutter 高德导航插件,支持驾车、步行、骑行导航,路线规划页面、智能巡航与导航事件流。

本包可独立使用,不依赖 flutter_amap_plus。如果应用同时需要地图,请分别初始化两个插件,并向两边传入相同的平台 Key 与隐私授权状态。

功能清单 #

以下清单与仓库根目录 example/lib/features/navigation/index.dart 的菜单保持一致。 表示示例已经实现, 表示尚未实现或该平台不支持。

导航组件(新) #

功能 Android iOS
起终点算路
无起点算路
途经点算路
组件直接导航
自定义 Activity 的导航组件(Android 原生容器)
选取地点(POI)示例

路径规划 #

功能 Android iOS
驾车路径规划
步行路径规划
骑行路径规划
货车导航路径规划
独立路径规划

多类型导航 #

功能 Android iOS
内置语音导航
实时导航
模拟导航
货车导航
智能巡航
HUD 导航

导航 UI 自定义 #

功能 Android iOS
自定义车标
自定义路线 UI
自定义路线纹理
自定义路口转向提示
正北模式
自定义全览模式
自定义指南针
自定义路况按钮
自定义放大缩小按钮
自定义路口放大图
自定义导航光柱(new)
自定义车道信息

导航完全自定义示例 #

功能 Android iOS
自车改变位置和绘制路线示例
路名、剩余距离、转向图标示例
绘制导航路况条示例
自定义车道信息示例
路口放大图示例
摄像头违章提醒示例
各组件整合导航示例

导航扩展 #

功能 Android iOS
传入 GPS 数据导航
展示导航路径详情
主辅路切换
科大讯飞语音集成

自定义 Activity 是 Android 原生容器能力;选取地点示例由联合示例中的 flutter_amap_plus 提供地点选择,再将坐标传给本导航包。

安装 #

dependencies:
  flutter_amap_navi: ^1.0.3

初始化与启动导航 #

import 'package:flutter_amap_navi/flutter_amap_navi.dart';

await AMapNavi.init(
  config: const NaviSdkConfig(
    apiKey: NaviApiKey(
      iosKey: 'your-ios-key',
      androidKey: 'your-android-key',
    ),
    agreePrivacy: true,
    preloadNaviIcons: true,
  ),
);

await AMapNavi.startNavigation(
  config: NaviConfig(
    naviType: NaviType.driver,
    start: NaviPoint(
      name: '起点',
      position: NaviPosition(latitude: 39.9841, longitude: 116.3075),
    ),
    end: NaviPoint(
      name: '终点',
      position: NaviPosition(latitude: 39.9087, longitude: 116.3975),
    ),
    drivingStrategy: NaviDrivingStrategy.drivingMultipleRoutesDefault,
  ),
);

AMapNavi.init 可重复调用,后一次配置会重新应用。未初始化就启动导航或巡航会抛出 StateError;插件不会替应用静默同意隐私协议。

Android 自定义导航 Activity #

自定义容器需继承 AMapFlutterRouteActivity(间接继承高德 AmapRouteActivity)并在宿主 Manifest 注册,然后传入完整类名:

await AMapNavi.startNavigation(
  config: NaviConfig(
    end: destination,
    androidActivityClassName: 'com.example.app.CustomNaviActivity',
  ),
);

插件会在启动前检查类是否存在、是否继承正确且已启用。该参数仅在 Android 生效;为空时继续使用插件默认容器。

与地图包联合使用 #

两个包刻意不共享 Dart 模型。请在应用边界显式转换:

NaviPosition toNaviPosition(Position value) => NaviPosition(
  latitude: value.latitude,
  longitude: value.longitude,
);

final naviStrategy = NaviDrivingStrategy.fromId(mapStrategy.id);

平台配置 #

Android #

  • minSdk 24,Java/JVM 17。
  • 宿主按业务声明网络、粗略/精确定位、前后台定位和 WAKE_LOCK 权限,并在运行时请求定位权限。
  • 插件 Manifest 自动合并 AMapFlutterRouteActivity 及导航主题。
  • 导航 SDK 作为 Android API 依赖暴露,以便宿主实现自定义 AmapRouteActivity 容器。
  • 本包固定使用 com.amap.api:navi-3dmap-location-search:11.2.100_3dmap11.2.100_loc11.2.100_sea9.8.1
  • flutter_amap 联合使用时,插件会自动用该导航合包替换纯地图合包,防止重复类。

Release 混淆配置

导航合包内含地图与定位能力。高德 11.2.100 定位库会通过 JNI 和反射访问内部类;若宿主 release 构建启用了 R8/ProGuard,而规则没有覆盖新版的 com.amap.locationcom.amap.api.col 命名空间,可能出现 debug 正常、release 首次定位、路线规划或启动导航时直接闪退。典型日志包含 libapssdk.soJNI DETECTED ERROR IN APPLICATION: java_class == nullSIGABRT

插件源码已通过 consumer-rules.pro 自动向宿主传递规则。仍固定使用 flutter_amap_navi 1.0.2 或更早版本的应用,还应在 android/app/proguard-rules.pro 中确认包含:

-keep class com.amap.api.col.** { *; }
-keep class com.amap.location.** { *; }
-dontwarn com.amap.**
-dontwarn com.autonavi.**
-dontwarn net.jafama.**

前两条防止 JNI/反射目标被改名或移除;后三条只忽略高德合包中未提供的可选能力告警,避免 R8 因 GnssSoftLocatorFastMath 等非当前合包必需类终止构建。

修改后必须用 release 包在真机上验证定位、路线规划与导航启动;仅验证 debug 包不能覆盖这类问题。

iOS #

  • 最低 iOS 12.0。
  • Info.plist 中声明定位用途;巡航或导航需要后台定位时,再启用 Location Background Mode 并提供 Always 权限说明。
  • Pod 固定使用 AMapNavi 11.2.100
  • flutter_amap 联合使用时,在宿主 Podfileflutter_ios_podfile_setup 之前设置 ENV['FLUTTER_AMAP_USE_NAVI_SDK'] = 'true',避免同时引入 AMap3DMap

可运行的最小工程见 example。从原单包 API 迁移请阅读 2.0 迁移指南

License #

LICENSE

1
likes
140
points
59
downloads

Documentation

API reference

Publisher

verified publisherdev.cquni.com

Weekly Downloads

A Flutter plugin for AMap drive, walk, ride navigation and cruise events.

Repository (GitHub)
View/report issues

License

BSD-3-Clause (license)

Dependencies

flutter, plugin_platform_interface, stream_transform

More

Packages that depend on flutter_amap_navi

Packages that implement flutter_amap_navi