前言:在2019年7月份公司要求開發(fā)app,通過對比rn、mui等幾種開發(fā)框架后充边,最終選用2018年谷歌在移動大會上發(fā)布的flutter培漏。在開發(fā)過程中我們需要用到百度地圖的定位及地圖展示功能,由于百度官方并未提供flutter組件条获,在11月份我們開發(fā)了自己的百度地圖插件件,主要功能包括定位及地圖展示,由于網(wǎng)絡(luò)原因上傳到pub上一直報錯闪朱,我們采用git方式引用月匣。在flutter更新到1.17.5的版本時Android端的獲取activity的方式發(fā)生改版,導(dǎo)致我們自己的插件發(fā)生問題奋姿,無法使用锄开,這時我發(fā)現(xiàn)百度官網(wǎng)有了新東西了!
在7月份開始使用百度地圖flutter plugin称诗,但是使用中一直不盡人意萍悴。在上一個百度官方plugin中定位與地圖安卓端兩個plugin無法同時使用(ps:雖然理解部分人可能只用其中一個,但是應(yīng)該兩個寫在一起不也是挺好)寓免,8月17日之后百度定位plugin更新到1.0.2后安卓端可以同時使用癣诱,但是今天(2020年8月27日)在ios端也是發(fā)現(xiàn)了部分問題,我通過解決以下問題成功的使用了官方plugin袜香。
一撕予、引入百度插件
根據(jù)百度地圖[插件集成](http://lbsyun.baidu.com/index.php?title=flutter/loc/download)引入plugin
執(zhí)行flutter pub get 后一切正常,但是ios的下一步就開始了
二蜈首、執(zhí)行pod install
我們在執(zhí)行pod install 或者flutter build ios時會拋出以下錯誤实抡。
錯誤信息:
[!] No podspec found for 'flutter_bmflocation' in '.symlinks/plugins/flutter_bmflocation/ios'
意思是在flutter_bmfloaction/ios的目錄下找不到flutter_bmflocation.podspec的文件,打開.symlinks/plugins/flutter_bmflocation/ios路徑欢策,在這個目錄下看到了bdmap_location_flutter_plugin.podspec這個文件(不知道是不是百度開發(fā)人員未進行ios測試吆寨,只修改了flutter_bmflocation中pubspec.yml的name字段,都沒有跑起來看一下)踩寇。此時我們只需要:
1啄清、復(fù)制bdmap_location_flutter_plugin.podspec為flutter_bmflocation.podspec或者直接修改名字。
2俺孙、打開flutter_bmflocation.podspec文件辣卒,在文件中將第6行修改為以下內(nèi)容:
s.name = 'flutter_bmflocation'
這個時候我們pod install就可以通過了,但是就可以編譯通過了嗎鼠冕?接下來修改下一個錯誤吧添寺!
三、執(zhí)行flutter build ios或使用xcode編譯
錯誤信息:
... flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_bmflocation-1.0.2/ios/Classes/BdmapLocationFlutterPlugin.m:3:9: fatal error: 'BMKLocationkit/BMKLocationComponent.h' file not found ...
意思是在BdmapLocationFlutterPlugin.m這個文件的第3行中BMKLocationkit/BMKLocationComponment.h這個引用無法找到懈费,這個問題容易解決:
打開BdmapLocationFlutterPlugin.m這個文件计露,將第三行改為:
#import "BMKLocationComponent.h"
至此,編譯能夠正常通過,根據(jù)官網(wǎng)文檔提示配置相關(guān)AK后可以進行定位票罐。
四叉趣、開始定位
此時app已經(jīng)能夠正常運行,并且百度引擎已經(jīng)初始化完成该押,但是還是拋了一個異常疗杉,導(dǎo)致app閃退了。
錯誤信息:
terminating with uncaught exception of type NSException
意思是有一個空指針異常被賦值蚕礼,導(dǎo)致無法捕獲而異常終止烟具。經(jīng)過排查代碼發(fā)現(xiàn) BdmapLocationFlutterPlugin.m文件中定位成功后將周邊poi信息賦值到dic中是報錯。
[dic setObject: poilist forKey:@"poiList"]; // 周邊poi信息
修改為:
///判斷poilist是否為nil
if(poilist){
[dic setObject: poilist forKey:@"poiList"]; // 周邊poi信息
}
定位成功5斓拧3!
五囤躁、總結(jié)
今天花了一上午的時間處理flutter百度地圖插件冀痕,主要還是自己的android與ios開發(fā)經(jīng)驗基本沒有,一邊用一邊學(xué)狸演。導(dǎo)致在flutter升級后言蛇,自己開發(fā)的flutter plugin無法使用。
不過今天文章中的內(nèi)容已經(jīng)通過百度地圖的工單反饋給官方宵距,并且回復(fù)明天的版本就會將這些問題修復(fù)了腊尚!所以趕著今天寫個文章紀(jì)念一下,我自己寫的plugin在ios中是可以正常使用的满哪,但是在Android中由于activity無法正確傳入跟伏,導(dǎo)致無法創(chuàng)建baiduMap,所以就沒用了。