定位集成
配置高德定位依赖库
新建 Flutter 项目,使用 Android Studio 打开项目里的 android 工程,或者右键 android 目录-> flutter -> open Android module in Android Studio。
在 Android 工程里,切换为 Android 视图:
打开 build.gradle 文件,添加定位依赖包:
implementation('com.amap.api:location:5.2.0')
点击 Sync Now 或者 工具栏上的图标同步依赖包:
打开清单文件AndroidManifest.xml
,配置权限和服务:
配置签名文件
高德平台需要签名的 sha1 ,所以需要配置签名文件,debug 模式调试和正式包各需要一个,也可以使用同一个 keystore 。
工具栏 Build -> Generate Signed Bundle / APK -> 选择 APK -> Next -> Create new ,打开 New Key Store 窗口:
key store path 选择当前项目根目录或者你喜欢的任何目录,命名为 debug.keystore 或者你喜欢的名字,两个地方的 Password 可以一样,Alias 需要填写,下面的 Certificate 填写一项即可:
点击 ok -> 点击 Next,选择 debug ,当然如果 debug 和 release 使用同一个签名文件的话也可同时选择 debug 和 release,并勾选 V2 签名:
完成后可以看到项目里的 debug.keystore 文件:
重复上面方法,再创建一个 release.keystore 文件。点击 Project Structure:
选择 Modules -> app -> Signing Configs -> + -> 默认有 debug,再添加一个 release ,分别选择对应的 keystore:
点击 ok 后再次打开 build.gradle 文件,可以看到签名配置对应刚才配置的签名文件:
signingConfigs {
debug {
storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/debug.keystore')
storePassword '123456'
keyAlias 'amap'
keyPassword '123456'
}
release {
storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/release.keytore')
storePassword '123456'
keyAlias 'amap'
keyPassword '123456'
}
}
高德平台 Key 申请
打开高德开放平台 | 高德地图API (amap.com),注册成为高德开放平台用户,打开控制台创建一个应用,填入对应的信息,这里有个错误,SHA1 其实是 MD5 ,不要填写 SHA1。
获取MD5:
在刚才的项目里,打开 Terminal,输入下面命令,路径就是 debug.keystore 和 release.keystore的路径:
keytool -list -v -keystore ./debug.keystore
输入秘钥库口令,就是设置的 Password ,复制 MD5 ,去高德开放平台粘贴。
发布版和调试版都设置后,复制 key 。
在清单文件里,配置apikey
:
Flutter 文件配置
回到 Flutter 项目,添加高德定位库和权限申请依赖,执行pub get
:
amap_flutter_location: ^2.0.0
permission_handler:
在获取定位的入口配置权限申请,注册监听:
/// 动态申请定位权限
requestPermission();
///注册定位结果监听
_locationListener = _locationPlugin
.onLocationChanged()
.listen((Map result) {
setState(() {
_locationResult = result;
});
});
只要获取到定位,这里都会回调,result
包含了很全的定位信息。
如果运行报错:INVALID_USER_KEY
,说明你的 keystore 的 MD5 不正确,也许平台会把 SHA1 改为真正的 SHA1 ,所以不妨试试填入 SHA1。
地图集成
Android工程添加地图依赖
回到 Android 工程,添加地图依赖:
implementation 'com.amap.api:3dmap:5.0.0'
回到 Flutter 工程,在pubspec.yaml
里添加插件依赖:
amap_flutter_map: ^2.0.1
在布局中使用 map :
final AMapWidget map = AMapWidget(
onMapCreated: onMapCreated,
// 定位小蓝点配置
myLocationStyleOptions: MyLocationStyleOptions(true),
// 是否指南针
// compassEnabled: true,
);
源码传送门