flutter 集成高德地圖 實現定位

本文主要的目的是獲取當前設備所在的經緯度:
1.直接新建Flutter項目,添加依賴引用:

amap_location_fluttify: 0.4.0+82a2243
permission_handler: 4.0.0
amap_location_fluttify:用來獲取位置,
permission_handler:檢測位置權限

flutter  packages get/Packages get

兩個需要搭配着使用。

import 'package:amap_location_fluttify/amap_location_fluttify.dart';
import 'package:permission_handler/permission_handler.dart';

2.去高德地圖創建一個key:高德地圖key
在這裏插入圖片描述
這裏的發佈版SHA1可以在cmd/PowerShel裏面獲取

cd .android
keytool -v -list -keystore  C:/Users/你的用戶名/.android/debug.keystore

密碼可以輸入android 也可以不輸
在這裏插入圖片描述
3.配置權限和key

  <!-- GPS定位權限 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

  <application>
     <meta-data
        android:name="com.amap.api.v2.apikey"
        android:value="3a5c0d9b04ea2379d7cee9823c614199"/>
  </application>

原來的文件就有 直接賦值進去就可以了。

4.在程序中

void getLocationInfo()async{
  setState(() {
    _locationInfo+="開始定位。。。\n";
  });
   Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
   PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.location);
   ServiceStatus serviceStatus = await PermissionHandler().checkServiceStatus(PermissionGroup.location);
// 單次定位

     if(serviceStatus==ServiceStatus.enabled){
       if (permission==PermissionStatus.granted) {
         setState(() {
           _locationInfo+="取得定位權限...\n";
         });

         final location = await AmapLocation.fetchLocation();
         location.latLng.then((val){
           setState(() => _locationInfo +=  "緯度:${getLat_LngStr(val.latitude)}\n經度:${getLat_LngStr(val.longitude)}");
         });

       }else{
         setState(() {
           _errorINfo+="未取得定位權限...";
         });

       }

     }else{
       setState(() {
         _errorINfo+="未開啓定位...";
       });

     }



 }
///轉換度分秒
 String getLat_LngStr(double degree) {
    String str = "";
    int de = degree.floor(); //整數部分
    int min = ((degree - de) * 60).floor(); //分
    double sec = ((degree - de) * 60 - min) * 60; //秒
    // str="$de°$min′${sec.toStringAsFixed(4)}″";//秒保留4位
    str = "$de ° $min′ $sec″"; //秒保留4位
    print(degree);
    print(str);
    return str;
  }


運行效果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章