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 使用高德地图定位

高德地图 flutter 报LocationManager:doRequireLocationAuth错误

腾讯地图或高德地图api开发,手机web页面能实现连续定位吗

Android 集成高德地图SDK

Android 集成高德地图SDK