Flutter集成高德定位和地圖功能


定位集成

配置高德定位依賴庫

新建 Flutter 項目,使用 Android Studio 打開項目里的 android 工程,或者右鍵 android 目錄-> flutter -> open Android module in Android Studio。

1.png

在 Android 工程里,切換為 Android 視圖:

2.png

打開 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】,需要的朋友自行獲取。

特別認同一句話:只有擁抱變化,才能比別人更早發現機會。

沒有誰甘願薪資增長緩慢或一直被無情壓榨,或早或晚我們都會走上進階之路。與其被動接受,不如主動出擊,先爭取成為技術強+思維深+視野廣的工程師,機會來臨時才能從容不迫地順應而上,比別人更快一步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM