使用flutter的amap_location_flutter进行高德定位

2024-03-04 09:40

本文主要是介绍使用flutter的amap_location_flutter进行高德定位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

按照高德官网走一直拿不到城市信息,改的乱七八糟,反正现在能拿到了,主要代码还是官网给的例子,从github上下载并运行了一下,有把代码粘贴到自己的项目当中,进行了修改,之前一直拿不到city等的信息

配置过程不简单,而且坑很多,自求多福吧
https://lbs.amap.com/api/flutter/summary
https://github.com/amap-demo/amap-location-flutter

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:amap_location_flutter_plugin/amap_location_flutter_plugin.dart';
import 'package:amap_location_flutter_plugin/amap_location_option.dart';String _locationText;
class AmapPage extends StatefulWidget {@override_AmapPageState createState() => new _AmapPageState();
}class _AmapPageState extends State<AmapPage> {Map<String, Object> _locationResult;StreamSubscription<Map<String, Object>> _locationListener;// AMapFlutterLocation _locationPlugin = new AMapFlutterLocation();AmapLocationFlutterPlugin _locationPlugin = new AmapLocationFlutterPlugin();@overridevoid initState() {super.initState();// 这个api是我在网上找的,必须用自己的,我的代码里也是我自己去申请的,ios的可以先不申请,但是要写,我的ios的key是用下面的这个AmapLocationFlutterPlugin.setApiKey('b9f1308d2ad232648d3a5714eacf3a6d', 'b9f1308d2ad232648d3a5714eacf3a6d');/// 动态申请定位权限requestPermission();///设置Android和iOS的apiKey<br>////// 定位Flutter插件提供了单独的设置ApiKey的接口,/// 使用接口的优先级高于通过Native配置ApiKey的优先级(通过Api接口配置后,通过Native配置文件设置的key将不生效),/// 使用时可根据实际情况决定使用哪种方式//////key的申请请参考高德开放平台官网说明<br>//////Android: https://lbs.amap.com/api/android-location-sdk/guide/create-project/get-key//////iOS: https://lbs.amap.com/api/ios-location-sdk/guide/create-project/get-key// AMapFlutterLocation.setApiKey(//     "anroid ApiKey", "ios ApiKey");///iOS 获取native精度类型if (Platform.isIOS) {requestAccuracyAuthorization();}///注册定位结果监听_locationListener = _locationPlugin.onLocationChanged().listen((Map<String, Object> result) {setState(() {_locationResult = result;print('定位结果${result}');_locationText = ' ' +_locationResult['province'] +_locationResult['city'] +_locationResult['district'] +_locationResult['street'];});print('详细信息${_locationText}');});}@overridevoid dispose() {super.dispose();///移除定位监听if (null != _locationListener) {_locationListener.cancel();}///销毁定位if (null != _locationPlugin) {_locationPlugin.destroy();}}///设置定位参数void _setLocationOption() {if (null != _locationPlugin) {AMapLocationOption locationOption = new AMapLocationOption();///是否单次定位locationOption.onceLocation = false;///是否需要返回逆地理信息locationOption.needAddress = true;///逆地理信息的语言类型locationOption.geoLanguage = GeoLanguage.ZH;locationOption.desiredLocationAccuracyAuthorizationMode =AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;locationOption.fullAccuracyPurposeKey = "AMapLocationScene";///设置Android端连续定位的定位间隔locationOption.locationInterval = 2000;///设置Android端的定位模式<br>///可选值:<br>///<li>[AMapLocationMode.Battery_Saving]</li>///<li>[AMapLocationMode.Device_Sensors]</li>///<li>[AMapLocationMode.Hight_Accuracy]</li>locationOption.locationMode = AMapLocationMode.Hight_Accuracy;///设置iOS端的定位最小更新距离<br>locationOption.distanceFilter = -1;///设置iOS端期望的定位精度/// 可选值:<br>/// <li>[DesiredAccuracy.Best] 最高精度</li>/// <li>[DesiredAccuracy.BestForNavigation] 适用于导航场景的高精度 </li>/// <li>[DesiredAccuracy.NearestTenMeters] 10米 </li>/// <li>[DesiredAccuracy.Kilometer] 1000米</li>/// <li>[DesiredAccuracy.ThreeKilometers] 3000米</li>locationOption.desiredAccuracy = DesiredAccuracy.Best;///设置iOS端是否允许系统暂停定位locationOption.pausesLocationUpdatesAutomatically = false;///将定位参数设置给定位插件_locationPlugin.setLocationOption(locationOption);}}///开始定位void _startLocation() {if (null != _locationPlugin) {///开始定位之前设置定位参数_setLocationOption();_locationPlugin.startLocation();}}///停止定位void _stopLocation() {if (null != _locationPlugin) {_locationPlugin.stopLocation();}}Container _createButtonContainer() {return new Container(alignment: Alignment.center,child: new Row(mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[new RaisedButton(onPressed: _startLocation,child: new Text('开始定位'),color: Colors.blue,textColor: Colors.white,),new Container(width: 20.0),new RaisedButton(onPressed: _stopLocation,child: new Text('停止定位'),color: Colors.blue,textColor: Colors.white,)],));}Widget _resultWidget(key, value) {return new Container(child: new Row(mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[new Container(alignment: Alignment.centerRight,width: 100.0,child: new Text('$key :'),),new Container(width: 5.0),new Flexible(child: new Text('$value', softWrap: true)),],),);}@overrideWidget build(BuildContext context) {List<Widget> widgets = new List();widgets.add(_createButtonContainer());if (_locationResult != null) {_locationResult.forEach((key, value) {widgets.add(_resultWidget(key, value));});}return new MaterialApp(home: new Scaffold(appBar: new AppBar(title: new Text('AMap Location plugin example app'),),body: new Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisSize: MainAxisSize.min,children: widgets,),));}///获取iOS native的accuracyAuthorization类型void requestAccuracyAuthorization() async {AMapAccuracyAuthorization currentAccuracyAuthorization =await _locationPlugin.getSystemAccuracyAuthorization();if (currentAccuracyAuthorization ==AMapAccuracyAuthorization.AMapAccuracyAuthorizationFullAccuracy) {print("精确定位类型");} else if (currentAccuracyAuthorization ==AMapAccuracyAuthorization.AMapAccuracyAuthorizationReducedAccuracy) {print("模糊定位类型");} else {print("未知定位类型");}}/// 动态申请定位权限void requestPermission() async {// 申请权限bool hasLocationPermission = await requestLocationPermission();if (hasLocationPermission) {print("定位权限申请通过");} else {print("定位权限申请不通过");}}/// 申请定位权限/// 授予定位权限返回true, 否则返回falseFuture<bool> requestLocationPermission() async {//获取当前的权限var status = await Permission.location.status;if (status == PermissionStatus.granted) {//已经授权return true;} else {//未授权则发起一次申请status = await Permission.location.request();if (status == PermissionStatus.granted) {return true;} else {return false;}}}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于使用flutter的amap_location_flutter进行高德定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772777

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展