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;
  }


运行效果:
在这里插入图片描述

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