APP集成百度地圖后,開發(fā)者模式直接連接真機(jī)可以打開地圖,打包成apk后安裝,應(yīng)用直接閃退
成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、芒康網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城網(wǎng)站定制開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為芒康等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
驗證了3個環(huán)境
a、Android 6.0
b、Android 9.0
c、Android 8.1
真機(jī)USB線連接
選擇Logcat,將日志級別選擇未error,日志太多,或者用自定義的過濾規(guī)則
先清除日志,后迅速點擊手機(jī)上的APP,觀察日志
發(fā)現(xiàn)需要監(jiān)控的APP報出異常信息,這個很關(guān)鍵,有異常就是有線索,couldn't find "libflutter.so"
這個時候問度娘就可以了
未明白具體的原因,臨時先解決了問題,馬克一下
這里實現(xiàn)flutter第三方地圖導(dǎo)航,選用最簡單的方式--調(diào)用第三方地圖客戶端;但各種地圖客戶端用的坐標(biāo)系不一定相同,先了解下常見的坐標(biāo)系:
地圖應(yīng)用api坐標(biāo)系:
在 pubspec.yaml 文件中添加依賴插件:
一般android和ios調(diào)起第三方應(yīng)用是通過scheme方式,這里調(diào)起第三方地圖客戶端導(dǎo)航也一樣,如高德地圖,ios scheme為iosamap,android scheme為androidamap; 所以flutter需要引用url_launcher;
未完待續(xù)~~
2017年底因公司業(yè)務(wù)組合部門調(diào)整,新的團(tuán)隊部分維護(hù)的項目用React Native技術(shù)混合開發(fā)。為適應(yīng)環(huán)境變化,開啟瘋狂RN學(xué)習(xí)之旅,晚上回來啃資料看視頻。可能由于本身對RN技術(shù)體驗不感冒或者在環(huán)境之下強(qiáng)迫學(xué)習(xí)有點不爽。開始尋找代替方案,F(xiàn)luter像一束曙光引起了我的注意,之后一直關(guān)注并利用閑余時間開始探索。2018年一直學(xué)習(xí)到使用Flutter寫項目,從0.2.0開始到現(xiàn)在1.5版本的發(fā)布,終于開始慢慢的爬出坑位了,但是因為部分控件感覺還是不如原生控件好用,因而Flutter提供了PlatformView部件。近期因項目中嚴(yán)重使用依賴地圖,故而做了Fluterr使用原生IOS高德地圖調(diào)研。因為我本身是一名android開發(fā)人員,初學(xué)IOS并記錄下來。
PlatformView是 flutter 官方提供的一個可以嵌入 Android 和 iOS 平臺原生 view 的小部件。
在我們實際開發(fā)中,我們遇到一些 flutter 官方?jīng)]有提供的插件可以自己創(chuàng)建編寫插件來實現(xiàn)部分功能,但是原生View在 flutter 中會遮擋住flutter 中的小部件,比如你想使用高德地圖sdk、視頻播放器、直播等原生控件,就無法很好的與 flutter 項目結(jié)合。
1、info.plist文件設(shè)置
2、 ios 端實現(xiàn)原生組件PlatformView提供原生view
3 、ios 端創(chuàng)建PlatformViewFactory用于生成PlatformView
4、 ios 端創(chuàng)建FlutterPlugin用于注冊原生組件
5 、flutter 平臺嵌入 原生view
iOS端的UiKitView目前還只是preview狀態(tài), 默認(rèn)是不支持的, 需要手動打開開關(guān), 在info.plist文件中新增一行io.flutter.embedded_views_preview為true.
創(chuàng)建類 FlutterMapView 并實現(xiàn)FlutterPlatformView 協(xié)議
FlutterMapView.h
FlutterMapView.m
FlutterMapFactory.h
FlutterMapFactory.m
FlutterMapPlugin.h
FlutterMapPlugin.m
請前往 高德開放平臺控制臺 申請 iOS Key。
注意:Bundle Identifier需要與申請的時候填寫的一致
地圖依賴的庫列舉如下:
基礎(chǔ) SDK AMapFoundationKit.framework
第一步:將解壓后的MAMapKit.framework 文件 copy 或 拖拽 到工程文件夾中,左側(cè)目錄選中工程名,在 TARGETS-Build Phases- Link Binary With Libaries 中點擊“+”按鈕,在彈出的窗口中點擊“Add Other”按鈕,選擇工程目錄下的 MAMapKit.framework 文件添加到工程中。
千萬不要忘記將AMapFoundationKit也一起加入工程。
3D地圖正確配置應(yīng)如下圖所示:
需要引入的資源文件包括:AMap.bundle,其中:AMap.bundle 在 MAMapKit.framework 包中,AMap.bundle資源文件中存儲了定位、默認(rèn)大頭針標(biāo)注視圖等圖片,可利用這些資源圖片進(jìn)行開發(fā)。
左側(cè)目錄中選中工程名,在右鍵菜單中選擇Add Files to “工程名”…,從MAMapKit.framework中選擇AMap.bundle文件,并勾選“Copy items if needed”復(fù)選框,單擊“Add”按鈕,將資源文件添加到工程中。
成功跑起來 。。 。
我是初學(xué)者小白,所以很多看法不深,理解也不夠透徹。但是很適合小白們一起從低角度往高處探索。文中有錯誤的,感謝指正,一起進(jìn)步。
趁著假期做一個Flutter的地圖功能,因為后端選用了百度地圖,所以前端沒得挑。找了遍插件,并沒有現(xiàn)成可用的。(不過發(fā)現(xiàn)了百度官方也自開發(fā)Flutter插件,目前功能只有一個獲取本地位置信息,后期會繼續(xù)增加吧?很期待!)
參考帖子:
這個實際上跟功能之間沒太大關(guān)系,只是我按照個人摸索的過程來寫。
當(dāng)對一個“領(lǐng)域/知識塊”完全不懂的時候,360°的方向都不確定的話。先了解基礎(chǔ)概念,有利于你確定自己的摸索方向。
參考帖子:
中間我跳過了幾十,上百個帖子的摸索過程。這個才是關(guān)鍵能夠真正做事的參考。
因為百度的sdk還算是很完善的,所以一旦出問題,都會有對應(yīng)的報錯提示。
我是使用flutter插件:permission_handler,來解決安卓的動態(tài)授權(quán)問題,用法簡單而且設(shè)計合理。
這個錯誤直接來看,就是簽名有問題。怎么查看SHA1碼和包名,這里不多說,網(wǎng)上有極其多的方法,百度Sdk開發(fā)指南里也有。沒那么復(fù)雜,也沒那么麻煩。按照流程操作就是對的。
實在不放心?跟我一樣,flutter打包后,把a(bǔ)pk反過來解SHA1碼不就行了?
參考帖子:
紅色框框基本就是帖子講解的那樣。
藍(lán)色框框見下圖:release標(biāo)簽里好像是自己設(shè)置了。所以debug標(biāo)簽里面,箭頭指向的位置,是我多設(shè)置的一個參數(shù)。
uid: -1 appid -1 msg: httpsPost failed,IOException:Unable to resolve host "api.map.baidu.com": No address associated with hostname
這一步我是哭笑不得,一開始老是和問題(2)混淆,導(dǎo)致浪費(fèi)很多時間。仔細(xì)閱讀后,發(fā)現(xiàn)是不能連接到“api.map.baidu.com”。
我打開模擬器的chrome瀏覽器,發(fā)現(xiàn)不能上網(wǎng)。查看手機(jī)的dns是10.0.2.3(默認(rèn)的),和家里wifi不一樣,所以不能上網(wǎng)也正常,之前居然沒發(fā)現(xiàn)這個問題?。?!
終端執(zhí)行:adb shell? 和? getprop,就可以查看所有的屬性參數(shù)了。(window小伙伴自行百度,這個沒多大差別。如果你有多個設(shè)備,記得自己選好設(shè)備。)
在里面找到這一項,就是你的dns參數(shù)。有些人是net.dns1,我的是net.eth0.dns1。這個沒關(guān)系,只是等下指令 稍微改動 就行。
修改dns指令:setprop net.eth0.dns1 192.168.2.1
后面的192.168.2.1是我自己的dns,這個根據(jù)自己的情況來填寫。不懂的百度下怎么查看自己的dns。
雖然提示設(shè)置失敗,但是回到模擬器一看,地圖已經(jīng)顯示出來了。
嘿嘿,在flutter設(shè)定多大的區(qū)域,地圖就是多大的區(qū)域。用起來就很方便了。
過程十分痛苦,因為對flutter不是很熟悉,對Android原生更是了解很少。所以自己就像突然不能講話,被丟到一個陌生的環(huán)境,卻要我去找一個人。所以細(xì)心很重要,一定要看清楚錯誤提示,不要錯過每一個細(xì)節(jié)和可能性。
幸好最后解決了問題,開心~
其實如果你仔細(xì)閱讀過百度官方的文檔,會發(fā)現(xiàn)里面有關(guān)于 地圖的生命周期管理 。然后在這里面沒有提及到,這一點雖然沒提,但不可或缺,小伙伴就自行思考吧。
最后還有一點,其實我的初衷是想實現(xiàn)一個百度地圖的plugin,但是苦于能力有限,對Android的不熟悉,最后折戟。我不得已另起項目,然后重新實現(xiàn)地圖sdk接入。經(jīng)過這次對于這些有更多更全面的認(rèn)知后,有空會再次研究flutter 插件的開發(fā),共勉,奧利給?。?!
在flutter中使用高德地圖,突然報如標(biāo)題的錯誤,一開始我以為是plist文件沒有加位置授權(quán),一檢查發(fā)現(xiàn)權(quán)限都有,想著以前這定位都正常的,應(yīng)該是改了其他地方引起定位不了的,一一對比,是我permission_handler這個插件升級了,升級后ios這邊要在podfile文件下加一下權(quán)限配置
target.build_configurations.eachdo |config|
# You can remove unused permissions here
# for more infomation:
# e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS']||= [
'$(inherited)',
## dart: PermissionGroup.calendar
? ? 'PERMISSION_EVENTS=1',
## dart: PermissionGroup.reminders
? ? 'PERMISSION_REMINDERS=1',
## dart: PermissionGroup.contacts
? ? 'PERMISSION_CONTACTS=1',
## dart: PermissionGroup.camera
? ? 'PERMISSION_CAMERA=1',
## dart: PermissionGroup.microphone
? ? 'PERMISSION_MICROPHONE=1',
## dart: PermissionGroup.speech
? ? 'PERMISSION_SPEECH_RECOGNIZER=1',
## dart: PermissionGroup.photos
? ? 'PERMISSION_PHOTOS=1',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
? ? 'PERMISSION_LOCATION=1',
## dart: PermissionGroup.notification
? ? 'PERMISSION_NOTIFICATIONS=1',
## dart: PermissionGroup.mediaLibrary
? ? 'PERMISSION_MEDIA_LIBRARY=1',
## dart: PermissionGroup.sensors
? ? 'PERMISSION_SENSORS=1',
## dart: PermissionGroup.bluetooth
#? ? ? ? 'PERMISSION_BLUETOOTH=1',
## dart: PermissionGroup.appTrackingTransparency
? ? 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
## dart: PermissionGroup.criticalAlerts
? ? 'PERMISSION_CRITICAL_ALERTS=1',
]
end
在編寫幾個 Flutter 項目后,發(fā)現(xiàn) Flutter 的強(qiáng)大之處在于業(yè)務(wù)中所有用到的控件以及場景都有對應(yīng)的處理方案;而 Dart 語言也與 Java 、 Kotlin 類似,所以對 Android 開發(fā)者來說門檻非常低;特意記錄一下常用的控件及其使用:
StatelessWidget 不需要額外的創(chuàng)建 State
StatefulWidget 創(chuàng)建 State 類,并可以在其中保存一些狀態(tài)
only 可以單獨(dú)設(shè)置每個方向的內(nèi)邊距
類似于 LinearLayout 中的 orientation 設(shè)置為 vertical , mainAxisAlignment 表示豎向的一個對齊方式, crossAxisAlignment 表示橫向的對齊方式
與 Column 相反,主軸是橫向,對齊方式類似, crossAxisAlignment 表示豎向的對齊方式
類似 SizedBox ,一個容器,但是主要功能是有一個 decoration —— 裝飾器,作用是繪制背景,或者使用 item 中的陰影
棧,先入后出,類似于 Android 上的 FrameLayout
通常配合 Stack 使用,固定顯示在某一個位置
配合多 child 使用,會填充剩余的空間
Image 功能強(qiáng)大,使用不同的方法可以加載不同來源的圖片
看到這些方法,突然覺得 Flutter 太香了,而且 Image 可以配置 clip 等裁剪出不同形狀的圖片,無論是圓形還是五角星都不在話下,然而 Android 要實現(xiàn)不規(guī)則的形狀,可是要下不少功夫的。
名字和 Android 的一模一樣,但是用法卻比 Android 的簡單很多:
主要就是 itemCount 與 itemBuilder ,其余就是配置樣式, itemBuilder 需要返回一個 widget ,當(dāng)然了,每個 ListView 都有其對應(yīng)的 item ,在里面的方法中編寫 widget 即可
與 ListView 類似,但是需要有一個 delegate 類,作用是設(shè)置有多少列,每一列之間的間距是多少
GridView 沒有 build , children 表示所有的子 view
最常用的控件之一,有非常多的樣式, Flutter 中通常是使用裝飾器來處理控件的,如背景使用 BoxDecoration , TextFiled 使用 InputDecoration ; 使用如下
當(dāng)前文章:flutter地圖使用的簡單介紹
文章路徑:http://m.rwnh.cn/article0/dscddio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、全網(wǎng)營銷推廣、微信小程序、網(wǎng)站改版、網(wǎng)站制作、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)