flutter 当前版本 1.17.5
安装
amap_location_fluttify: ^0.20.0 # 定位 经纬度 地理位置信息 permission_handler: ^5.0.0 # 检测权限,没有权限就申请
集成的高德地图,要先去申请 key 值
android 设置
在android/app/res/src/main/AndroidManifest.xml 设置权限和 key
<!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 高德定位key --> <meta-data android:name="com.amap.api.v2.apikey" android:value="你的key"/>
ios 设置 在 info.plist 中添加权限
<key>NSLocationWhenInUseUsageDescription</key> <string>要用定位</string>
使用方法
// 定位 import 'package:amap_core_fluttify/amap_core_fluttify.dart'; import 'package:amap_location_fluttify/amap_location_fluttify.dart'; import 'package:permission_handler/permission_handler.dart'; // 返回数据方法类型 // issuccess 是否定位成功,data: 定位成功的数据 typedef CbackFunction = void Function(bool issuccess, Map data); class Location { var locationListener; CbackFunction cback; // 传值回调-返回定位结果 Location.init(CbackFunction fun) {
// ios 设置 key AmapLocation.instance.init(iosKey: '你的key');
// 验证权限 getLocationPermission(); cback = fun; } // 验证权限 getLocationPermission() async { bool status = await Permission.location.isGranted; //判断如果还没拥有读写权限就申请获取权限 if (!status) { return await Permission.location.request().isGranted; } else { return status; } } // 定位 startLocation() async { try { final position = await AmapLocation.instance.fetchLocation(); if (position == null) { throw Exception('定位失败!'); } else { Map<String, dynamic> result = { 'latitude': position.latLng.latitude, 'longitude': position.latLng.longitude, 'address': position.address }; // 获取定位结果 if (cback != null) { cback(true, result); } } } catch (e) { cback(false, {}); print(e); } } }
我这里初始化的是 就调用了 验证权限,也可以在每次调用定位之前 验证权限。
该插件定位在android 遇到过一个问题,就是在开发的时候 不能定位,
报错如下
这里又一个 SHA1 码,好像是写死在里面的,如果我用这个 SHA1 去申请 高德定位 android 的key, 那么开发模式也可以定位成功。
用自己android 证书的 SHA1 申请的key 定位不了,后来试了一下打包之后 是能定位成功的,就是开发模式异常 没多大影响,且 ios 是完全正确的
我这里只用到了 单次定位,更多api 可以去包网站查看 https://pub.flutter-io.cn/packages/amap_location_fluttify/example