Flutter集成高德定位和地图功能
Posted 上马定江山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter集成高德定位和地图功能相关的知识,希望对你有一定的参考价值。
定位集成
配置高德定位依赖库
新建 Flutter 项目,使用 android Studio 打开项目里的 android 工程,或者右键 android 目录-> flutter -> open Android module in Android Studio。
在 Android 工程里,切换为 Android 视图:
打开 build.gradle 文件,添加定位依赖包:
implementation('com.amap.api:location:5.2.0')
点击 Sync Now 或者 工具栏上的🐘图标同步依赖包:
打开清单文件AndroidManifest.xml
,配置权限和服务:
<!--访问网络-->
<uses-permission android:name="android.permission.INTERNET" />
<!--粗略定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--精确定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService"/>
配置签名文件
高德平台需要签名的 sha1 ,所以需要配置签名文件,debug 模式调试和正式包各需要一个,也可以使用同一个 keystore 。 工具栏 Build -> Generate Signed Bundle / APK -> 选择 APK -> Next -> Create new ,打开 New Key Store 窗口:
key store path 选择当前项目根目录或者你喜欢的任何目录,命名为 debug.keystore 或者你喜欢的名字,两个地方的 Password 可以一样,Alias 需要填写,下面的 Certificate 填写一项即可:
点击 ok -> 点击 Next,选择 debug ,当然如果 debug 和 release 使用同一个签名文件的话也可同时选择 debug 和 release,并勾选 V2 签名:
完成后可以看到项目里的 debug.keystore 文件:
重复上面方法,再创建一个 release.keystore 文件。点击 Project Structure:
选择 Modules -> app -> Signing Configs -> + -> 默认有 debug,再添加一个 release ,分别选择对应的 keystore:
点击 ok 后再次打开 build.gradle 文件,可以看到签名配置对应刚才配置的签名文件:
signingConfigs {
debug {
storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/debug.keystore')
storePassword '123456'
keyAlias 'amap'
keyPassword '123456'
}
release {
storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/release.keytore')
storePassword '123456'
keyAlias 'amap'
keyPassword '123456'
}
}
高德平台 Key 申请
打开高德开放平台 | 高德地图API (amap.com),注册成为高德开放平台用户,打开控制台创建一个应用,填入对应的信息,这里有个错误,SHA1 其实是 MD5 ,不要填写 SHA1。
获取MD5: 在刚才的项目里,打开 Terminal,输入下面命令,路径就是 debug.keystore 和 release.keystore的路径:
keytool -list -v -keystore ./debug.keystore
输入秘钥库口令,就是设置的 Password ,复制 MD5 ,去高德开放平台粘贴。
发布版和调试版都设置后,复制 key 。
在清单文件里,配置apikey
:
<!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService"/>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="f6c46787c43cb7df5510d9f4c530fd1e"/>
Flutter 文件配置
回到 Flutter 项目,添加高德定位库和权限申请依赖,执行 pub get
:
amap_flutter_location: ^2.0.0
permission_handler:
在获取定位的入口配置权限申请,注册监听:
/// 动态申请定位权限
requestPermission();
///注册定位结果监听
_locationListener = _locationPlugin
.onLocationChanged()
.listen((Map<String, Object> result) {
setState(() {
_locationResult = result;
});
});
只要获取到定位,这里都会回调,result
包含了很全的定位信息。 如果运行报错:INVALID_USER_KEY
,说明你的 keystore 的 MD5 不正确,也许平台会把 SHA1 改为真正的 SHA1 ,所以不妨试试填入 SHA1。
地图集成
Android工程添加地图依赖
回到 Android 工程,添加地图依赖:
implementation 'com.amap.api:3dmap:5.0.0'
回到 Flutter 工程,在pubspec.yaml
里添加插件依赖:
amap_flutter_map: ^2.0.1
在布局中使用 map :
final AMapWidget map = AMapWidget(
onMapCreated: onMapCreated,
// 定位小蓝点配置
myLocationStyleOptions: MyLocationStyleOptions(true),
// 是否指南针
// compassEnabled: true,
);
Android开发该如何快速上手Flutter?
我们可以利用 Flutter 官方网站的教程,搭建好环境,写出一些 Demo 示例,在此之后需要了解如何混合开发,“万物皆 Widget”到底怎么理解?对于 State 的理解等原理知识…
这些对我们Android开发来说都有一定的难度。
为了让大家快速无痛上手 Flutter,给大家分享一份阿里大神总结的《Flutter进阶学习笔记》。
整理大纲
-
为什么Flutter是跨平台开发的终极之选
-
在Windows上搭建Flutter开发环境
-
编写您的第一个 Flutter App
-
Flutter开发环境搭建和调试
-
Dart语法篇之基础语法(一)
-
Dart语法篇之集合的使用与源码解析(二)
-
Dart语法篇之集合操作符函数与源码分析(三)
-
Dart语法篇之函数的使用(四)
-
Dart语法篇之面向对象基础(五)
-
Dart语法篇之面向对象继承和Mixins(六)
-
Dart语法篇之类型系统与泛型(七)
-
Flutter中的widget
第一章 为什么Flutter是跨平台开发的终极之选
-
这是为什么?
-
跨平台开发
-
什么是 Flutter
-
Flutter 的特性
-
Flutter 构建应用的工具
-
使用 Flutter 构建的热门应用
-
构建 Flutter 应用的成本
-
……
第二章 在Windows上搭建Flutter开发环境
-
使用镜像
-
系统要求
-
获取Flutter SDK
-
编辑器设置
-
Android设置
-
起步: 配置编辑器
-
起步: 体验
-
体验热重载
-
创建新的应用
-
运行应用程序
-
……
第三章 编写您的第一个 Flutter App
-
第1步: 创建 Flutter app
-
第2步: 使用外部包(package)
-
第3步: 添加一个 有状态的部件(Stateful widget)
-
第4步: 创建一个无限滚动ListView
-
第5步: 添加交互
-
第6步: 导航到新页面
-
第7步:使用主题更改UI
-
……
第四章 Flutter开发环境搭建和调试
-
开发环境的搭建
-
模拟器的安装与调试
-
开发环境的搭建
-
模拟器的安装与调试
-
……
第五章 Dart语法篇之基础语法(一)
-
Hello Dart
-
数据类型
-
变量和常量
-
集合(List、Set、Map)
-
流程控制
-
运算符
-
异常
-
函数
-
……
第六章 Dart语法篇之集合的使用与源码解析(二)
-
List
-
Set
-
Map
-
Queue
-
LinkedList
-
HashMap
-
Map、HashMap、LinkedHashMap、SplayTreeMap区别
-
命名构造函数from和of的区别以及使用建议
-
……
第七章 Dart语法篇之集合操作符函数与源码分析(三)
-
Iterable
Iterable类关系图
Iterable类方法图
-
forEach
介绍
使用方式
源码解析
-
map
介绍
使用方式
源码解析
-
any
介绍
使用方式
源码解析
-
every
介绍
使用方式
源码解析
-
where
介绍
使用方式
源码解析
-
firstWhere和singleWhere和lastWhere
介绍
使用方式
源码解析
-
join
介绍
使用方式
源码解析
-
take
介绍
使用方式
源码解析
-
takeWhile
介绍
使用方式
源码解析
……
第八章 Dart语法篇之函数的使用(四)
-
函数参数
-
匿名函数(闭包,lambda)
-
箭头函数
-
局部函数
-
顶层函数和静态函数
-
main函数
-
……
第九章 Dart语法篇之面向对象基础(五)
-
属性访问器(accessor)函数setter和getter
-
面向对象中的变量
-
构造函数
-
抽象方法、抽象类和接口
-
类函数
-
……
第十章 Dart语法篇之面向对象继承和Mixins(六)
-
类的单继承
-
基于Mixins的多继承
-
……
第十一章 Dart语法篇之类型系统与泛型(七)
-
可选类型
-
接口类型
-
泛型
-
类型具体化
-
……
第十二章 Flutter中的widget
-
Flutter页面-基础Widget
-
Widget
-
StatelessWidget
-
Stateful Widget
-
State生命周期
-
基础widget
-
文本显示
-
……
文中篇幅有限,仅仅展示了一部分内容,所有资料都放在了【GitHub】,需要的朋友自行获取。
特别认同一句话:只有拥抱变化,才能比别人更早发现机会。
没有谁甘愿薪资增长缓慢或一直被无情压榨,或早或晚我们都会走上进阶之路。与其被动接受,不如主动出击,先争取成为技术强+思维深+视野广的工程师,机会来临时才能从容不迫地顺应而上,比别人更快一步。
以上是关于Flutter集成高德定位和地图功能的主要内容,如果未能解决你的问题,请参考以下文章
高德地图 flutter 报LocationManager:doRequireLocationAuth错误