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