前言
最近用flutter做了一款A(yù)pp辱志,已經(jīng)發(fā)布了Android和iOS的版本,因?yàn)橛杏?jì)劃支持全部平臺(tái)习劫。所以開始嘗試flutter desktop的解決方案许溅。在github上我們能發(fā)現(xiàn)兩個(gè)方案,一個(gè)是flutter官方的方案flutter-desktop-embedding還有一個(gè)是使用go和glfw開發(fā)的go-flutter
兩種方案對(duì)比
在選擇使用flutter-desktop還是go-flutter之前保屯,我們先對(duì)兩種方案做一些介紹和對(duì)比手负。
兩種方式的項(xiàng)目結(jié)構(gòu):
Flutter Desktop Embedding:
在flutter desktop中我們可以看到目錄結(jié)構(gòu)和flutter開發(fā)手機(jī)App的結(jié)構(gòu)是類似的,一個(gè)主項(xiàng)目下有各個(gè)平臺(tái)的殼工程(這里面也可以包含Android和iOS)姑尺,然后由殼工程集成flutter的渲染引擎竟终。flutter的代碼寫在lib目錄中。
如果我們懂一些macOS開發(fā)或者windows開發(fā)切蟋,可以直接在項(xiàng)目中修改原生代碼统捶,比如你想修改整個(gè)程序的window的樣式直接在原工程中就能修改,又比如macOS你要集成蘋果的IAP柄粹,可以直接在原生項(xiàng)目中實(shí)現(xiàn)即可喘鸟。
它的缺點(diǎn)就是三個(gè)平臺(tái)的開發(fā)你最好都得懂一些
Go Flutter:
Go Flutter由于本身Go語(yǔ)言就是跨平臺(tái)的,所有它只有一個(gè)desktop目錄驻右,表示桌面版什黑,相比于flutter desktop它讓開發(fā)者完全不需要去關(guān)心macOS或者windows開發(fā)了,desktop中全是go語(yǔ)言編寫的內(nèi)容堪夭,最后desktop可以編譯成三中平臺(tái)的可執(zhí)行文件愕把。開發(fā)者只需要會(huì)Go語(yǔ)言即可。
它的缺點(diǎn)就是如果win或者mac或者linux你要在不同的平臺(tái)做一些特殊的功能或者界面森爽,會(huì)特別麻煩恨豁,不像在Flutter desktop中直接在宿主項(xiàng)目中實(shí)現(xiàn)即可。
對(duì)比結(jié)果如何選擇
首先我們要明確爬迟,兩種方案都不太成熟橘蜜,但是如果要用來(lái)開發(fā),也不是用不了付呕。大家選擇的時(shí)候可以根據(jù)自身技術(shù)棧扮匠,以及產(chǎn)品的特性來(lái)選擇捧请。
如果你懂Go語(yǔ)言凡涩,同時(shí)你的程序是閱讀類棒搜,或者偏業(yè)務(wù)類,基本不需要和本身Native交互的活箕,選 Go Flutter真的很爽力麸。
如果你懂一點(diǎn)macOS或者windows開發(fā),同時(shí)你的程序經(jīng)常三個(gè)桌面端各有特色育韩,而且需要修改本身整個(gè)window的一些樣式克蚂,那么選擇Flutter desktop embedding。
Go Flutter實(shí)際使用
上面說(shuō)了這么多筋讨,我們來(lái)實(shí)際體驗(yàn)一下Go flutter埃叭。先說(shuō)一下背景,我已經(jīng)使用flutter開發(fā)了一款A(yù)pp悉罕,現(xiàn)在我要把App變成可以運(yùn)行到桌面的版本赤屋。我寫的軟件叫做Everything是一款記錄類軟件,在這里可以下載到https://everything.apppills.com大家可以先看一下效果壁袄。
- 安裝Go 类早,由于Go flutter使用Go編寫,所以需要安裝Go工具包嗜逻。大家可以在官網(wǎng)下載安裝
-
安裝hover涩僻,hover是 Go Flutter的一個(gè)命令行工具,簡(jiǎn)化了項(xiàng)目初始化以及運(yùn)行等步驟栈顷。
使用下面命令安裝
go get -u github.com/go-flutter-desktop/hover
注意如果上面的命令卡住下載不下來(lái)逆日,大家可以設(shè)置一下代理,設(shè)置命令行代理可以開啟ss或者v2ray萄凤,然后在命令行輸入命令設(shè)置
export http_proxy="http://127.0.0.1:8001"; export HTTP_PROXY="http://127.0.0.1:8001"; export https_proxy="http://127.0.0.1:8001"; export HTTPS_PROXY="http://127.0.0.1:8001" //8001改成你的ss或者v2ray監(jiān)聽的端口
?? 注意:安裝好hover之后室抽,官網(wǎng)上說(shuō)就可以使用hover命令了,但是可能你在命令行里敲hover可能還是得到的是command not found蛙卤。 這里我用的是mac系統(tǒng)狠半,在安裝好之后,在home目錄多了一個(gè)go的目錄颤难,需要在你的環(huán)境變量里加入一下go的包路徑神年。
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:/Users/{你的用戶名}/go/bin //可以檢查一下你的home目錄是否有了go的目錄,里面有個(gè)bin行嗤,將那個(gè)目錄加入到環(huán)境變量即可
-
進(jìn)入你以前開發(fā)App的flutter項(xiàng)目已日,執(zhí)行命令初始化項(xiàng)目
hover init github.com/my-organization/simpleApplication //后面這個(gè)github.com xxxx就是你的項(xiàng)目倉(cāng)庫(kù)地址。沒(méi)有的話隨便寫也行
初始化項(xiàng)目完成后栅屏,你會(huì)在你的項(xiàng)目中發(fā)現(xiàn)一個(gè)desktop目錄飘千,和以前的iOS和Android是平級(jí)的堂鲜。這個(gè)desktop目錄就是桌面版的項(xiàng)目。
-
把你的main.dart復(fù)制一份名字改為main_desktop.dart护奈,Go flutter有個(gè)特別的地方缔莲,就是程序的入口不是用的main.dart,而是用的main_desktop.dart霉旗。
修改main_desktop.dart為使用桌面版運(yùn)行
void main() { // 關(guān)鍵是下面這一句 debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia; runApp(new MyApp()); }
-
大功告成痴奏,運(yùn)行項(xiàng)目吧。
hover run //執(zhí)行 hover run 可以運(yùn)行項(xiàng)目
我們先來(lái)看一下運(yùn)行效果下面是App的運(yùn)行效果和桌面版的運(yùn)行效果厌秒。
手機(jī)版本身效果:
Go Flutter運(yùn)行的桌面版效果:
FAQ:
1.程序按照上面那樣遷移完成就能跑读拆?
當(dāng)然不是,我們都知道我們用了很多插件鸵闪,其實(shí)是只支持Android或者iOS的檐晕,如果你用得比較多的這種插件,那么你可能遷移到桌面端過(guò)來(lái)會(huì)比較麻煩蚌讼。我的整體遷移的時(shí)間大概只用了2-3個(gè)小時(shí)辟灰,我用到了sqflite和shared preference,這兩個(gè)插件Go flutter已有實(shí)現(xiàn)啦逆,所以很容易替換伞矩。
2.如何使用Go flutter的插件
我們知道我們所有和原生通信都是通過(guò)定義一個(gè)method channel來(lái)通信的。如果你用到的插件只支持Android或者iOS夏志,那么你就需要在desktop中去實(shí)現(xiàn)這個(gè)插件的method channel的所有方法乃坤。目前Go flutter只有三個(gè)插件可以用,在這里可以找到沟蔑。https://github.com/go-flutter-desktop/plugins 點(diǎn)擊某個(gè)插件湿诊,就可以看到使用方法,就是把對(duì)應(yīng)代碼貼到瘦材,desktop里面的option文件中即可厅须,不要找錯(cuò)地方了,官網(wǎng)沒(méi)說(shuō)得太清楚食棕。
最后
感謝大家的閱讀朗和,我們用flutter開發(fā)了個(gè)小App也歡迎大家試用:
Everything 把記賬本日記本,行程簿晓,待辦等等都裝進(jìn)一個(gè)App里眶拉。