在flutter中使用高德地圖,突然報(bào)如標(biāo)題的錯(cuò)誤,一開(kāi)始我以為是plist文件沒(méi)有加位置授權(quán),一檢查發(fā)現(xiàn)權(quán)限都有,想著以前這定位都正常的,應(yīng)該是改了其他地方引起定位不了的,一一對(duì)比,是我permission_handler這個(gè)插件升級(jí)了,升級(jí)后ios這邊要在podfile文件下加一下權(quán)限配置

專注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)崇義免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎ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支持穩(wěn)定的桌面設(shè)備開(kāi)發(fā)已經(jīng)一段時(shí)間了,不得不說(shuō),F(xiàn)lutter多平臺(tái)支持的特性真的很香。我本人并沒(méi)有任何桌面開(kāi)發(fā)的經(jīng)驗(yàn),但仍然使用Flutter開(kāi)發(fā)出了一個(gè)桌面版小程序,功能很簡(jiǎn)單,就是對(duì)輸入的json做格式化處理和轉(zhuǎn)模型。
話不多說(shuō),先來(lái)看看實(shí)際效果。 項(xiàng)目源碼地址
開(kāi)發(fā)環(huán)境如下:
Flutter : 2.8.1
Dart : 2.15.1
IDE : VSCode
JSON作為我們?nèi)粘i_(kāi)發(fā)工作中經(jīng)常要打交道的一種數(shù)據(jù)格式,它共有6種數(shù)據(jù)類型: null , num , string , object , array , bool 。我們勢(shì)必對(duì)它又愛(ài)又恨。愛(ài)他因?yàn)樗鳛閿?shù)據(jù)處理的一種格式確實(shí)非常方便簡(jiǎn)潔。但是在我們做Flutter開(kāi)發(fā)中,又需要接觸到j(luò)son解析時(shí),就會(huì)感覺(jué)非常棘手,因?yàn)閒lutter沒(méi)有反射,導(dǎo)致json轉(zhuǎn)模型這塊需要手寫(xiě)那繁雜的映射關(guān)系。就像下面這樣子。
數(shù)據(jù)量少還能接受,一旦量大,那么光手寫(xiě)這個(gè)解析方法都能讓你懷疑人生。更何況手寫(xiě)還有出錯(cuò)的可能。好在官方有個(gè)工具**json_serializable**可以自動(dòng)生成這塊轉(zhuǎn)換代碼,也解決了flutter界json轉(zhuǎn)模型的空缺。當(dāng)然,業(yè)界也有專門(mén)解析json的網(wǎng)站,可以自動(dòng)生成dart代碼,使用者在生成后復(fù)制進(jìn)項(xiàng)目中即可,也是非常方便的。
本項(xiàng)目以json解析為切入點(diǎn),和大家一起來(lái)看下flutter是如何開(kāi)發(fā)桌面應(yīng)用的。
要讓我們的flutter項(xiàng)目支持桌面設(shè)備。我們首先需要修改下flutter的設(shè)置。如下,讓我們的項(xiàng)目支持 windows 和 macos 系統(tǒng)。
接下來(lái)使用 flutter create 命令創(chuàng)建我們的模版工程。
創(chuàng)建完項(xiàng)目后,我們就可以 run 起來(lái)了。
先來(lái)看下整體界面,界面四塊,分別為功能模塊、文件選擇模塊、輸入模塊、輸出模塊。
我們?cè)谛陆ㄒ粋€(gè)桌面應(yīng)用時(shí),默認(rèn)的模版又一個(gè)Appbar,此時(shí)應(yīng)用可以用鼠標(biāo)拖拽移動(dòng),放大縮小,還可以縮到很小。但是,我們一旦去掉這個(gè)導(dǎo)航欄,那么窗口就不能用鼠標(biāo)拖動(dòng)了,并且我們往往不希望用戶將我們的窗口縮放的很小,這會(huì)導(dǎo)致頁(yè)面異常,一些重要信息都展示不全。因此這里需要借助第三方組件 bitsdojo_window 。通過(guò) bitsdojo_window ,我們可以實(shí)現(xiàn)窗口的定制化,拖動(dòng),最小尺寸,最大尺寸,窗口邊框,窗口頂部放大、縮小、關(guān)閉的按鈕等。
通過(guò) InkWell 組件,可以捕捉到手勢(shì)、鼠標(biāo)、觸控筆的移動(dòng)和停留位置
這個(gè)功能是鼠標(biāo)移動(dòng)后的UI交互界面。要在窗口上顯示一個(gè)提示框,可以使用 Overlay 。需要注意的是,由于在 Overlay 上的 text 的根結(jié)點(diǎn)不是 Material 風(fēng)格的組件,因此會(huì)出現(xiàn)黃色的下劃線。因此一定要用 Material 包一下 text 。并且你必須給創(chuàng)建的 OverlayEntry 一個(gè)位置,否則它將全屏顯示。
讀取說(shuō)表拖拽的文件一開(kāi)始想嘗試使用 InkWell 組件,但是這個(gè)組件無(wú)法識(shí)別拖拽中的鼠標(biāo),并且也無(wú)法從中拿到文件信息。因此放棄。后來(lái)從文章《Flutter-2天寫(xiě)個(gè)桌面端APP》中發(fā)現(xiàn)一個(gè)可讀取拖拽文件的組件 desktop_drop ,能滿足要求。
使用開(kāi)源組件 file_picker ,選完圖片后的操作和拖拽選擇圖片后的操作一致。
Textfield 如果要顯示富文本,那么需要自定義 TextEditingController 。并重寫(xiě) buildTextSpan 方法。
在做導(dǎo)出功能時(shí)遇到下列報(bào)錯(cuò),保存提示為沒(méi)有權(quán)限訪問(wèn)對(duì)應(yīng)目錄下的文件。
通過(guò)Apple的開(kāi)發(fā)文檔找到有關(guān)權(quán)限問(wèn)題的說(shuō)明。其中有個(gè)授權(quán)私鑰的key為 com.apple.security.files.downloads.read-write ,表示 對(duì)用戶的下載文件夾的讀/寫(xiě)訪問(wèn)權(quán)限 。那么,使用Xcode打開(kāi)Flutter項(xiàng)目中的mac應(yīng)用,修改工程目錄下的 DebugProfile.entitlements 文件,向 entitlements 文件中添加 com.apple.security.files.downloads.read-write ,并將值設(shè)置為YES,保存后重啟Flutter項(xiàng)目。發(fā)現(xiàn)已經(jīng)可以向下載目錄中讀寫(xiě)文件了。
當(dāng)然,這是正常操作。還有個(gè)騷操作就是關(guān)閉系統(tǒng)的沙盒機(jī)制。將 entitlements 文件的 App Sandbox 設(shè)置為NO。這樣我們就可以訪問(wèn)任意路徑了。當(dāng)然關(guān)閉應(yīng)用的沙盒也就相當(dāng)于關(guān)閉了應(yīng)用的防護(hù)機(jī)制,因此這個(gè)選項(xiàng)慎用。
原文地址:
我是初學(xué)者小白,所以很多看法不深,理解也不夠透徹。但是很適合小白們一起從低角度往高處探索。文中有錯(cuò)誤的,感謝指正,一起進(jìn)步。
趁著假期做一個(gè)Flutter的地圖功能,因?yàn)楹蠖诉x用了百度地圖,所以前端沒(méi)得挑。找了遍插件,并沒(méi)有現(xiàn)成可用的。(不過(guò)發(fā)現(xiàn)了百度官方也自開(kāi)發(fā)Flutter插件,目前功能只有一個(gè)獲取本地位置信息,后期會(huì)繼續(xù)增加吧?很期待!)
參考帖子:
這個(gè)實(shí)際上跟功能之間沒(méi)太大關(guān)系,只是我按照個(gè)人摸索的過(guò)程來(lái)寫(xiě)。
當(dāng)對(duì)一個(gè)“領(lǐng)域/知識(shí)塊”完全不懂的時(shí)候,360°的方向都不確定的話。先了解基礎(chǔ)概念,有利于你確定自己的摸索方向。
參考帖子:
中間我跳過(guò)了幾十,上百個(gè)帖子的摸索過(guò)程。這個(gè)才是關(guān)鍵能夠真正做事的參考。
因?yàn)榘俣鹊膕dk還算是很完善的,所以一旦出問(wèn)題,都會(huì)有對(duì)應(yīng)的報(bào)錯(cuò)提示。
我是使用flutter插件:permission_handler,來(lái)解決安卓的動(dòng)態(tài)授權(quán)問(wèn)題,用法簡(jiǎn)單而且設(shè)計(jì)合理。
這個(gè)錯(cuò)誤直接來(lái)看,就是簽名有問(wèn)題。怎么查看SHA1碼和包名,這里不多說(shuō),網(wǎng)上有極其多的方法,百度Sdk開(kāi)發(fā)指南里也有。沒(méi)那么復(fù)雜,也沒(méi)那么麻煩。按照流程操作就是對(duì)的。
實(shí)在不放心?跟我一樣,flutter打包后,把a(bǔ)pk反過(guò)來(lái)解SHA1碼不就行了?
參考帖子:
紅色框框基本就是帖子講解的那樣。
藍(lán)色框框見(jiàn)下圖:release標(biāo)簽里好像是自己設(shè)置了。所以debug標(biāo)簽里面,箭頭指向的位置,是我多設(shè)置的一個(gè)參數(shù)。
uid: -1 appid -1 msg: httpsPost failed,IOException:Unable to resolve host "api.map.baidu.com": No address associated with hostname
這一步我是哭笑不得,一開(kāi)始老是和問(wèn)題(2)混淆,導(dǎo)致浪費(fèi)很多時(shí)間。仔細(xì)閱讀后,發(fā)現(xiàn)是不能連接到“api.map.baidu.com”。
我打開(kāi)模擬器的chrome瀏覽器,發(fā)現(xiàn)不能上網(wǎng)。查看手機(jī)的dns是10.0.2.3(默認(rèn)的),和家里wifi不一樣,所以不能上網(wǎng)也正常,之前居然沒(méi)發(fā)現(xiàn)這個(gè)問(wèn)題!!!
終端執(zhí)行:adb shell? 和? getprop,就可以查看所有的屬性參數(shù)了。(window小伙伴自行百度,這個(gè)沒(méi)多大差別。如果你有多個(gè)設(shè)備,記得自己選好設(shè)備。)
在里面找到這一項(xiàng),就是你的dns參數(shù)。有些人是net.dns1,我的是net.eth0.dns1。這個(gè)沒(méi)關(guān)系,只是等下指令 稍微改動(dòng) 就行。
修改dns指令:setprop net.eth0.dns1 192.168.2.1
后面的192.168.2.1是我自己的dns,這個(gè)根據(jù)自己的情況來(lái)填寫(xiě)。不懂的百度下怎么查看自己的dns。
雖然提示設(shè)置失敗,但是回到模擬器一看,地圖已經(jīng)顯示出來(lái)了。
嘿嘿,在flutter設(shè)定多大的區(qū)域,地圖就是多大的區(qū)域。用起來(lái)就很方便了。
過(guò)程十分痛苦,因?yàn)閷?duì)flutter不是很熟悉,對(duì)Android原生更是了解很少。所以自己就像突然不能講話,被丟到一個(gè)陌生的環(huán)境,卻要我去找一個(gè)人。所以細(xì)心很重要,一定要看清楚錯(cuò)誤提示,不要錯(cuò)過(guò)每一個(gè)細(xì)節(jié)和可能性。
幸好最后解決了問(wèn)題,開(kāi)心~
其實(shí)如果你仔細(xì)閱讀過(guò)百度官方的文檔,會(huì)發(fā)現(xiàn)里面有關(guān)于 地圖的生命周期管理 。然后在這里面沒(méi)有提及到,這一點(diǎn)雖然沒(méi)提,但不可或缺,小伙伴就自行思考吧。
最后還有一點(diǎn),其實(shí)我的初衷是想實(shí)現(xiàn)一個(gè)百度地圖的plugin,但是苦于能力有限,對(duì)Android的不熟悉,最后折戟。我不得已另起項(xiàng)目,然后重新實(shí)現(xiàn)地圖sdk接入。經(jīng)過(guò)這次對(duì)于這些有更多更全面的認(rèn)知后,有空會(huì)再次研究flutter 插件的開(kāi)發(fā),共勉,奧利給!!!
授權(quán)失敗:請(qǐng)求google授權(quán),翻出去,登錄了賬號(hào),授權(quán)了,但是終端依舊報(bào)錯(cuò)如下:
1.查看Http端口(mac默認(rèn)為1087,Windows為1080)
2.打開(kāi)終端,設(shè)置http和https代理
3.如何測(cè)試是否成功
切記不要用ping 測(cè)試,你就是Ping到明年也ping不通
4.關(guān)閉國(guó)內(nèi)鏡像
在裝flutter環(huán)境的時(shí)候,大部分用戶都是安裝了國(guó)內(nèi)鏡像的,可以打開(kāi)環(huán)境變量文件看一下不同shell環(huán)境變量設(shè)置地方不一樣,我用的是zsh。
5.插件倉(cāng)庫(kù)根目錄(最關(guān)鍵的一步)
這時(shí)候就會(huì)把你的插件里的lock文件中的國(guó)內(nèi)鏡像轉(zhuǎn)到官方源上了
6.進(jìn)行正常發(fā)布操作
發(fā)布命令:
理論上應(yīng)該能正常發(fā)布成功了,就會(huì)看到我們期待已久的Successfully
發(fā)布完成后,國(guó)內(nèi)鏡像的注釋可以放開(kāi)了,代理去恢復(fù)到原來(lái)。
提前申請(qǐng)和準(zhǔn)備要要用的證書(shū)
用HBuilderX打正式包。
1)要在manifest.json里面配置App圖標(biāo)和啟動(dòng)圖片
2)App圖標(biāo)尺寸:png 格式圖片 256*256
啟動(dòng)圖片尺寸:png 格式圖片 480762 7201242 1080*1882
3. app上架材料梳理:
一般看個(gè)人要求,在騰訊、華為、小米各個(gè)平臺(tái)上線。
每個(gè)平臺(tái)都要注冊(cè)開(kāi)發(fā)者賬號(hào),用企業(yè)信息注冊(cè),注意開(kāi)發(fā)者賬號(hào)公司和軟著要一致,否則華為、騰訊會(huì)讓你重新按軟著上的公司名稱注冊(cè)開(kāi)發(fā)者賬號(hào)。小米要提供一個(gè)代理授權(quán)書(shū)。
1)共同提交的材料:
1.公司名稱
2.公司營(yíng)業(yè)執(zhí)照、其中百度需要營(yíng)業(yè)執(zhí)照復(fù)印件并且在文字的地方加蓋公章。
3.企業(yè)法人身份證照片(正反兩面),其中百度另外要求上傳手持身份證照片(正反兩面)。
4.企業(yè)對(duì)公賬號(hào),其中華為和小米打錢(qián)驗(yàn)證,利用金額進(jìn)行驗(yàn)證。
5.企業(yè)地址。
2)?提交應(yīng)用審核資料:
1.軟著,jpg,png,pdf,3種格式。
2.企業(yè)營(yíng)業(yè)執(zhí)照,pg,png,pdf,種格式。
3.圖標(biāo),尺寸不一致。216216 jpg 512512 jpg
4.應(yīng)用內(nèi)截圖,多截幾張,最后用測(cè)試賬號(hào)截圖。
5.應(yīng)用簡(jiǎn)介和應(yīng)用描述。
9.icp備案截圖。
7.如果軟著公司和開(kāi)發(fā)者賬號(hào)不一致,需要提供代理授權(quán)書(shū),簽字蓋章。
8.隱私政策網(wǎng)址。
上架成功后需要在各個(gè)商城自行下載。
??因?yàn)槲覀兪褂肍lutter跨平臺(tái)技術(shù)開(kāi)發(fā)App時(shí),會(huì)有很多公用組件,因?yàn)镕lutter中一切皆為Widget,widget也比較細(xì)粒度,所以我們需要進(jìn)行封裝,用于一個(gè)項(xiàng)目或者公司不同項(xiàng)目中去~
??那么今天寫(xiě)寫(xiě)如何發(fā)布package或者插件到Pub.dev上,扯扯談O(∩_∩)O哈哈~
《Flutter的撥云見(jiàn)日》系列文章如下:
1、Flutter中指定字體(全局或者局部,自有字庫(kù)或第三方)
2、Flutter發(fā)布Package(Pub.dev或私有Pub倉(cāng)庫(kù))
首先,我們知道flutter有四種工程模式:Flutter Application、Flutter Module、Flutter Plugin和Flutter Package。
我們這里就主要講Package 純Dart插件的發(fā)布吧,都差不多。
創(chuàng)建工程后,就可以編寫(xiě)你的公共組件,或者公用字體庫(kù)呀啥的, 都行。
在更改下你的pubspec.yaml文件,修改下你的versionCode,項(xiàng)目名稱,項(xiàng)目描述,作者等
如果上傳失敗試試????的命令:
在執(zhí)行該命令時(shí),可能會(huì)中途調(diào)到網(wǎng)頁(yè),要求你登錄google賬號(hào),登錄授權(quán),到時(shí)候登錄賬號(hào)并授權(quán)就可以了。
因?yàn)槲覀冎苯邮褂胒lutter packages pub publish是發(fā)布到Pub.dev上,并不是發(fā)布到私有倉(cāng)庫(kù),該怎么辦呢?
其實(shí)呢,也很簡(jiǎn)單!像versionCode,項(xiàng)目名,等都和發(fā)布Pub.dev是一樣的。沒(méi)啥區(qū)別。
有兩種方式:
就是這么簡(jiǎn)單o( @ )o
相信大家引用Pub.dev上的第三方庫(kù)都會(huì)了哈,到處都是這里不講了
在使用flutter pub get就可以拉到私有倉(cāng)庫(kù)項(xiàng)目了
以上就差不多聊了聊package發(fā)布和獲取的事兒了,都很明了,大家可以試試,挺簡(jiǎn)單的。
PS: 寫(xiě)文不易,覺(jué)得沒(méi)有浪費(fèi)你時(shí)間,請(qǐng)給個(gè)點(diǎn)贊~ ????
文章標(biāo)題:flutter授權(quán),flutter 開(kāi)源app
網(wǎng)頁(yè)地址:http://www.chinadenli.net/article22/dsdejcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)公司、微信小程序、域名注冊(cè)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)