Flutter的魅力:我用它打造了一個(gè)桌面版JSON解析工具
一、前言
自從Flutter支持穩(wěn)定的桌面設(shè)備開發(fā)以來,其多平臺(tái)特性讓我為之傾倒。盡管我并無桌面開發(fā)的經(jīng)驗(yàn),但憑借Flutter,我成功開發(fā)出了一個(gè)桌面版的小程序——一個(gè)JSON解析工具。接下來,讓我?guī)泐I(lǐng)略這個(gè)工具的魅力。

二、開發(fā)環(huán)境與工具
本次開發(fā)環(huán)境如下:
Flutter: 2.8.1
Dart: 2.15.1
IDE: VSCode

對于JSON這種日常開發(fā)中頻繁接觸的數(shù)據(jù)格式,手動(dòng)解析確實(shí)費(fèi)時(shí)費(fèi)力。好在Flutter官方提供了
三、項(xiàng)目切入與界面設(shè)計(jì)
本項(xiàng)目以json解析為切入點(diǎn),展示了flutter如何開發(fā)桌面應(yīng)用。界面設(shè)計(jì)簡潔明了,分為功能模塊、文件選擇模塊、輸入模塊、輸出模塊四大塊。
四、窗口定制與交互設(shè)計(jì)
在創(chuàng)建桌面應(yīng)用時(shí),我們往往需要對窗口進(jìn)行定制化設(shè)計(jì),如拖動(dòng)、最小尺寸、最大尺寸、窗口邊框、頂部放大縮小關(guān)閉按鈕等。這時(shí),第三方組件bitsdojo_window就派上了用場。通過它,我們可以輕松實(shí)現(xiàn)窗口的定制化。利用InkWell組件,我們可以捕捉到手勢、鼠標(biāo)、觸控筆的移動(dòng)和停留位置,實(shí)現(xiàn)豐富的交互效果。

五、功能實(shí)現(xiàn)與組件選擇
項(xiàng)目的一個(gè)重要功能是讀取拖拽的文件。一開始嘗試使用InkWell組件,但發(fā)現(xiàn)它無法識(shí)別拖拽中的鼠標(biāo)及文件信息。后來,通過引入desktop_drop組件,成功實(shí)現(xiàn)了文件拖拽功能。還使用了file_picker組件來選圖片,選完后的操作與拖拽選擇圖片后的操作一致。這樣一個(gè)小巧而實(shí)用的工具就誕生了。
憑借Flutter的多平臺(tái)特性和豐富的組件庫,即使是初學(xué)者也能輕松開發(fā)出實(shí)用的桌面應(yīng)用。這個(gè)JSON解析工具只是一個(gè)小小的嘗試,未來還有更多的可能性等待我們?nèi)ヌ剿鳌?1. 富文本顯示與權(quán)限問題解決方案
遇到保存文件時(shí)的權(quán)限提示,表明程序未能獲得對應(yīng)目錄下的文件訪問權(quán)限。參考Apple的開發(fā)文檔,我們發(fā)現(xiàn)一個(gè)關(guān)鍵的授權(quán)私鑰:com.apple.security.files.downloads.read-write。這個(gè)key賦予了對用戶下載文件夾的讀寫訪問權(quán)限。
針對Flutter項(xiàng)目中的mac應(yīng)用,我們需要在Xcode中修改工程目錄下的DebugProfile.entitlements文件。向該文件添加com.apple.security.files.downloads.read-write權(quán)限并設(shè)置為YES。保存后重啟Flutter項(xiàng)目,即可實(shí)現(xiàn)對下載目錄的讀寫操作。

還有一個(gè)較為高級的“騷操作”——關(guān)閉系統(tǒng)的沙盒機(jī)制。將entitlements文件的App Sandbox設(shè)置為NO,可以訪問任意路徑,但這也意味著關(guān)閉了應(yīng)用的防護(hù)機(jī)制,因此這個(gè)選項(xiàng)需謹(jǐn)慎使用。
2 Flutter與Kotlin:移動(dòng)應(yīng)用開發(fā)的理想選擇
跨平臺(tái)應(yīng)用程序框架在現(xiàn)代開發(fā)領(lǐng)域扮演著重要角色。Kotlin和Flutter作為備受關(guān)注的兩大框架,尤其在Android應(yīng)用開發(fā)領(lǐng)域廣受歡迎。為了幫助開發(fā)者做出明智的選擇,下面我們將深入探討Kotlin和Flutter的特性和優(yōu)勢。
Kotlin:靜態(tài)類型的通用編程語言
Kotlin是一種由谷歌正式支持用于Android開發(fā)的靜態(tài)類型、面向?qū)ο蟮木幊陶Z言。它與Java完全兼容,運(yùn)行在JVM上,由JetBrains的開發(fā)環(huán)境中誕生了Kotlin,旨在通過更簡潔的語法減少40%的代碼量。Kotlin不僅適用于移動(dòng)開發(fā),還廣泛應(yīng)用于后端、Web和桌面等多種應(yīng)用領(lǐng)域。其突出的市場定位是移動(dòng)和服務(wù)器開發(fā),因此在移動(dòng)應(yīng)用程序開發(fā)領(lǐng)域中廣受歡迎。

Flutter:全面的開發(fā)套件
Flutter是谷歌于2017年創(chuàng)建的開源用戶界面工具包。它提供了一套完整的庫、工具和文檔,支持開發(fā)各種應(yīng)用程序。其核心是Dart編程語言,專為移動(dòng)和Web應(yīng)用程序設(shè)計(jì)。結(jié)合Skia圖形庫,F(xiàn)lutter實(shí)現(xiàn)了快速、流暢的用戶體驗(yàn)。其一大優(yōu)勢在于跨平臺(tái)的代碼重用性,這大大簡化了開發(fā)過程,使開發(fā)者能夠更快、更高效地創(chuàng)建應(yīng)用程序。
在選擇Kotlin或Flutter時(shí),很難給出一個(gè)絕對的答案,因?yàn)樗鼈兏髯該碛歇?dú)特的優(yōu)勢和適用場景。Kotlin在市場份額和使用率方面可能領(lǐng)先,但最適合開發(fā)者的工具取決于開發(fā)者的具體需求和偏好。開發(fā)者應(yīng)根據(jù)項(xiàng)目的需求、團(tuán)隊(duì)的技能以及目標(biāo)受眾等因素來做出最佳選擇。無論是Kotlin還是Flutter,都能為開發(fā)者提供強(qiáng)大的工具,助力打造出色的移動(dòng)應(yīng)用。無論是選擇Kotlin還是Flutter進(jìn)行開發(fā),開發(fā)者們都可以參考以下資源,以助其入門學(xué)習(xí)和深化技能:
Kotlin入門到精通
一、基礎(chǔ)類和對象

二、函數(shù)和lambda表達(dá)式
三、其他互用性工具
四、FAQ
Flutter完整開發(fā)目錄
一、Dart語言和Flutter基礎(chǔ)

二、快速開發(fā)實(shí)戰(zhàn)篇
三、打包與填坑篇
四、Redux、主題、國際化
五、深入探索
六、Widget原理

七、布局原理
八、實(shí)用技巧與填坑
九、繪制原理
十、圖片加載流程
十一、Stream原理與狀態(tài)管理設(shè)計(jì)

十二、觸摸和滑動(dòng)原理
十三、混合開發(fā)打包Android篇
這些資源為開發(fā)者提供了從基礎(chǔ)到進(jìn)階的全面指導(dǎo),幫助深入理解并掌握Kotlin和Flutter的應(yīng)用。選擇哪種技術(shù)關(guān)鍵在于理解其優(yōu)勢、適用場景,并結(jié)合自身項(xiàng)目需求靈活運(yùn)用。對于Flutter開發(fā)者來說,有一個(gè)特別的功能需求是點(diǎn)擊返回鍵回到桌面但不退出APP的實(shí)現(xiàn)。下面將詳細(xì)介紹這一功能的實(shí)現(xiàn)方法。
Flutter點(diǎn)擊返回鍵,回到桌面,但不退出APP的實(shí)現(xiàn)
此功能主要針對Flutter在Android平臺(tái)上的開發(fā)。隨著flutter版本的升級(現(xiàn)已升級到1.22.0以上),許多舊的方法已經(jīng)無法使用。我們需要?jiǎng)?chuàng)建一個(gè)新的插件——app_util_plugin,用于處理返回桌面的功能。關(guān)于插件的編寫,網(wǎng)絡(luò)上有很多教程可以參考。

插件模塊
編寫插件調(diào)用方法。在main.dart中,我們需要監(jiān)聽系統(tǒng)的返回鍵。當(dāng)點(diǎn)擊返回鍵時(shí),先將其攔截下來,然后調(diào)用插件中的返回桌面的方法。這樣就可以實(shí)現(xiàn)不退出APP就能回到桌面的功能。
整個(gè)過程的實(shí)現(xiàn)并不復(fù)雜,但對于Flutter初學(xué)者來說,可能會(huì)遇到一些困難。建議初學(xué)者們先掌握好Flutter的基礎(chǔ)知識(shí),再逐步嘗試實(shí)現(xiàn)更復(fù)雜的功能。也可以參考網(wǎng)上的教程和案例,以加快學(xué)習(xí)進(jìn)度。
以上內(nèi)容就是對Flutter和Kotlin學(xué)習(xí)資源的整合,以及對Flutter中點(diǎn)擊返回鍵回到桌面功能的詳細(xì)介紹。希望這些內(nèi)容能對開發(fā)者們有所幫助,無論是初學(xué)者還是資深開發(fā)者,都能從中獲得有價(jià)值的信息和啟示。
