Flutter 開發桌面應用——遷移已有App應用到桌面版

前言

最近用flutter作了一款App,已經發布了Android和iOS的版本,由於有計劃支持所有平臺。因此開始嘗試flutter desktop的解決方案。在github上咱們能發現兩個方案,一個是flutter官方的方案flutter-desktop-embedding還有一個是使用go和glfw開發的go-flutterlinux

兩種方案對比

在選擇使用flutter-desktop仍是go-flutter以前,咱們先對兩種方案作一些介紹和對比。git

兩種方式的項目結構:

Flutter Desktop Embedding:

在flutter desktop中咱們能夠看到目錄結構和flutter開發手機App的結構是相似的,一個主項目下有各個平臺的殼工程(這裏面也能夠包含Android和iOS),而後由殼工程集成flutter的渲染引擎。flutter的代碼寫在lib目錄中。github

若是咱們懂一些macOS開發或者windows開發,能夠直接在項目中修改原生代碼,好比你想修改整個程序的window的樣式直接在原工程中就能修改,又好比macOS你要集成蘋果的IAP,能夠直接在原生項目中實現便可。golang

它的缺點就是三個平臺的開發你最好都得懂一些windows

Go Flutter:

Go Flutter因爲自己Go語言就是跨平臺的,全部它只有一個desktop目錄,表示桌面版,相比於flutter desktop它讓開發者徹底不須要去關心macOS或者windows開發了,desktop中全是go語言編寫的內容,最後desktop能夠編譯成三中平臺的可執行文件。開發者只須要會Go語言便可。markdown

它的缺點就是若是win或者mac或者linux你要在不一樣的平臺作一些特殊的功能或者界面,會特別麻煩,不像在Flutter desktop中直接在宿主項目中實現便可。app

對比結果如何選擇

首先咱們要明確,兩種方案都不太成熟,可是若是要用來開發,也不是用不了。你們選擇的時候能夠根據自身技術棧,以及產品的特性來選擇。ide

若是你懂Go語言,同時你的程序是閱讀類,或者偏業務類,基本不須要和自己Native交互的,選 Go Flutter真的很爽。工具

若是你懂一點macOS或者windows開發,同時你的程序常常三個桌面端各有特點,並且須要修改自己整個window的一些樣式,那麼選擇Flutter desktop embedding。oop

Go Flutter實際使用

上面說了這麼多,咱們來實際體驗一下Go flutter。先說一下背景,我已經使用flutter開發了一款App,如今我要把App變成能夠運行到桌面的版本。我寫的軟件叫作Everything是一款記錄類軟件,在這裏能夠下載到everything.apppills.com你們能夠先看一下效果。

  1. 安裝Go ,因爲Go flutter使用Go編寫,因此須要安裝Go工具包。你們能夠在官網下載安裝

  2. 安裝hover,hover是 Go Flutter的一個命令行工具,簡化了項目初始化以及運行等步驟。

    使用下面命令安裝

    go get -u github.com/go-flutter-desktop/hover
    複製代碼

    注意若是上面的命令卡住下載不下來,你們能夠設置一下代理,設置命令行代理,而後在命令行輸入命令設置

    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監聽的端口
    複製代碼

    ⚠️ 注意:安裝好hover以後,官網上說就可使用hover命令了,可是可能你在命令行裏敲hover可能仍是獲得的是command not found。 這裏我用的是mac系統,在安裝好以後,在home目錄多了一個go的目錄,須要在你的環境變量里加入一下go的包路徑。

    export PATH=$PATH:/usr/local/go/bin
    export PATH=$PATH:/Users/{你的用戶名}/go/bin
    //能夠檢查一下你的home目錄是否有了go的目錄,裏面有個bin,將那個目錄加入到環境變量便可
    複製代碼
  3. 進入你之前開發App的flutter項目,執行命令初始化項目

    hover init github.com/my-organization/simpleApplication
    //後面這個github.com xxxx就是你的項目倉庫地址。沒有的話隨便寫也行
    複製代碼

    初始化項目完成後,你會在你的項目中發現一個desktop目錄,和之前的iOS和Android是平級的。這個desktop目錄就是桌面版的項目。

  4. 把你的main.dart複製一份名字改成main_desktop.dart,Go flutter有個特別的地方,就是程序的入口不是用的main.dart,而是用的main_desktop.dart。

    修改main_desktop.dart爲使用桌面版運行

    void main() {
      // 關鍵是下面這一句
      debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
      runApp(new MyApp());
    }
    複製代碼
  5. 大功告成,運行項目吧。

    hover run
    //執行 hover run 能夠運行項目
    複製代碼

咱們先來看一下運行效果下面是App的運行效果和桌面版的運行效果。

手機版自己效果:

Go Flutter運行的桌面版效果:

FAQ:

1.程序按照上面那樣遷移完成就能跑?

固然不是,咱們都知道咱們用了不少插件,實際上是隻支持Android或者iOS的,若是你用得比較多的這種插件,那麼你可能遷移到桌面端過來會比較麻煩。個人總體遷移的時間大概只用了2-3個小時,我用到了sqflite和shared preference,這兩個插件Go flutter已有實現,因此很容易替換。

2.如何使用Go flutter的插件

咱們知道咱們全部和原生通訊都是經過定義一個method channel來通訊的。若是你用到的插件只支持Android或者iOS,那麼你就須要在desktop中去實現這個插件的method channel的全部方法。目前Go flutter只有三個插件能夠用,在這裏能夠找到。github.com/go-flutter-… 點擊某個插件,就能夠看到使用方法,就是把對應代碼貼到,desktop裏面的option文件中便可,不要找錯地方了,官網沒說得太清楚。

最後

感謝你們的閱讀,我用flutter開發了個小App也歡迎你們試用:

Everything 把記帳本日記本,行程,待辦等等都裝進一個App裏。

everything.apppills.com/

相關文章
相關標籤/搜索