Flutter 開發(fā)桌面應(yīng)用——遷移已有應(yīng)用到桌面版

前言

最近用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ì)比手负。

image-20190609214047338.png

兩種方式的項(xiàng)目結(jié)構(gòu):

image-20190609213521705的副本.png

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大家可以先看一下效果壁袄。

  1. 安裝Go 类早,由于Go flutter使用Go編寫,所以需要安裝Go工具包嗜逻。大家可以在官網(wǎng)下載安裝
  1. 安裝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)境變量即可
    
  2. 進(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)目。

  3. 把你的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());
    }
    
  4. 大功告成痴奏,運(yùn)行項(xiàng)目吧。

    hover run
    //執(zhí)行 hover run 可以運(yùn)行項(xiàng)目
    

我們先來(lái)看一下運(yùn)行效果下面是App的運(yùn)行效果和桌面版的運(yùn)行效果厌秒。

手機(jī)版本身效果:

bbbb.gif

Go Flutter運(yùn)行的桌面版效果:

ccc.gif

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里眶拉。

https://everything.apppills.com/

image-20190609223616844.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市憔儿,隨后出現(xiàn)的幾起案子忆植,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朝刊,死亡現(xiàn)場(chǎng)離奇詭異耀里,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拾氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門冯挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痪枫,你說(shuō)我怎么就攤上這事织堂。” “怎么了奶陈?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)附较。 經(jīng)常有香客問(wèn)我吃粒,道長(zhǎng),這世上最難降的妖魔是什么拒课? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任徐勃,我火速辦了婚禮,結(jié)果婚禮上早像,老公的妹妹穿的比我還像新娘僻肖。我一直安慰自己,他們只是感情好卢鹦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布臀脏。 她就那樣靜靜地躺著,像睡著了一般冀自。 火紅的嫁衣襯著肌膚如雪揉稚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天熬粗,我揣著相機(jī)與錄音搀玖,去河邊找鬼。 笑死驻呐,一個(gè)胖子當(dāng)著我的面吹牛灌诅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播含末,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猜拾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了答渔?” 一聲冷哼從身側(cè)響起关带,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宋雏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芜飘,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年磨总,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗦明。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚪燕,死狀恐怖娶牌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馆纳,我是刑警寧澤诗良,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站鲁驶,受9級(jí)特大地震影響鉴裹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钥弯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一径荔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脆霎,春花似錦总处、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至玖院,卻和暖如春菠红,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背难菌。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工试溯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人郊酒。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓遇绞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親燎窘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摹闽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容