Flutter 获取定位
由于众所周知的原因,国内无法使用location提供的谷歌定位服务,所以只能使用百度地图或者高德地图提供的定位服务。
所幸双方都已经实现了对flutter的支持。百度地图的api和配置比高德要简单那么一丢丢,不过包好像很久没更新,以至于错误很多。最终还是选了高德地图来实现。
官方文档地址
https://lbs.amap.com/api/flutter/gettingstarted
1. 获取高德Key
在控制台创建新的应用获取key
创建新应用
应用名称自定义,可以随便写。类型选择相符的就可以,这个不会严格审查的。
应用下面可以有好几个key,key的名称可以自定义,平台选择对应的平台。
调试版安全码SHA1
进入当前用户文件夹下的.android目录,通常是 C:\Users\**\.android,运行命令
keytool -list -v -keystore debug.keystore
输入密钥口令,默认是 android,即可获得SHA1安全码
发布版安全码SHA1
同样的方法,找到发布过程中生成的upload-keystore.jks文件,在文件目录下运行
keytool -list -v -keystore upload-keystore.jks
即可得到发布版安全码。
PackageName
在 android/app/build.gradle 中获取包名
提交保存后即可获得Key。
集成SDK
在 android/build.gradle 文件中,添加mavenCentral()或者 jcenter()
allprojects { repositories { jcenter() // 或者 mavenCentral() } }
在 android/app/build.gradle 中,配置依赖:
dependencies {
...
implementation 'com.amap.api:location:latest.integration'
}
添加高德 Key
在 android/app/src/main/AndroidManifest.xml 文件中,添加刚刚获取到的key,并配置定位服务。
声明定位权限
在 android/app/src/main/AndroidManifest.xml 文件中,声明权限
点击查看代码
引入高德定位Flutter插件
# 高德地图
amap_flutter_location: ^3.0.0
获取定位
点击查看代码
import 'dart:async';
import 'package:amap_flutter_location/amap_flutter_location.dart';
import 'package:amap_flutter_location/amap_location_option.dart';
import 'package:permission_handler/permission_handler.dart';
class LocationService {
StreamSubscription
在main.dart中使用
点击查看代码
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State {
final LocationService _locationService = LocationService();
@override
void initState() {
super.initState();
_locationService.run();
}
@override
void dispose() {
_locationService.cancel();
super.dispose();
}
}