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