學起來:Flutter將支援桌面應用開發

ZetaChow曉程式碼發表於2019-04-28

英文原文

學起來:Flutter將支援桌面應用開發

Flutter團隊正在擴充套件Flutter,支援建立macOS、Windows和Linux應用程式。從長遠來看,這項工作將提供一個完全繼承的解決方案,flutter create,flutter run 和 flutter build 在桌面平臺開發上的表現將和現在的移動平臺開發中一樣,但是目前這項工作還在進行中。

當前的狀況

下面提供了平臺狀況的高階概述。

詳細資訊請參閱 原始碼倉庫

重要提示:Flutter桌面API仍處於早期階段,如有更改,恕不另行通知。不會提供API或ABI的向後相容性。Flutter更新之後,所有使用了Flutter的專案的程式碼都需要做更新並且重新編譯。

macOS系統

這是最成熟的桌面平臺(出於一些原因,它非常接近於我們已經支援的iOS)。

桌面版中以Flutter開頭的類與iOS通用,所以應該基本穩定。以FLE開頭的類仍處於早期階段。

Windows系統

當前的 Windows shell 只是 GLFW 佔位符, 以便與前期實驗. 未來它將被 Win32 或者 UWP shell 替代,因為Win32 或者 UWP shell 允許在Flutter應用程式中嵌入view-level。

預計,最終版本的shell APIs和當前實現的方式完全不同。

Linux

和Windows一樣,當前 Linux shell 只是 GLFW 佔位符。我們想建立一個庫,讓開發可以任何部分嵌入Flutter,無論你使用GTK+, Qt, wxWidgets, Motif, 還是其他任意工具包。但是我們還沒有確定一個好方法。

外掛

所有平臺都支援編寫外掛(例如 flutter-desktop-embedding 這些外掛),但是,目前依然很少有外掛實際上具有桌面支援。

工具

Flutter支援桌面的工具開發還在進行中。要使用任何桌面支援工具(例如用flutter devices列出主機)目前必須滿足兩點:

  1. 你不能使用穩定的Flutter channel。因為桌面支援還沒有被認為是穩定的和適合生產環境的
  2. 你必須設定ENABLE_FLUTTER_DESKTOP環境變數為true。這是為了避免在指定長期解決方案時影響現有的移動開發工作流程(參見:#30724

預構建Shell庫

預設情況下,桌面庫未下載,可以通過執行執行flutter precache下載,根據你的你的作業系統帶上引數 --linux,--macos或 --windows。

C++ Wrapper

Windows和Linux庫提供C語言API。為了更容易使用他們,可以使用C++包裝器,將其構建到應用程式,中以便與提供更高階的API呼叫。上面提到的flutter precache命令會將這個包裝器的原始碼下載到與該庫同目錄下的cpp_client_wrapper資料夾中。

使用Shells

由於目前沒有桌面shell工具的支援,你需要自己寫一個應用的執行工具,並且在庫裡連結,就像任何你使用的外掛那樣。這將需要做一些你熟悉所使用的桌面系統的原生開發。如果你在桌面系統系統開發方面沒有經驗,你需要等到flutter桌面開發工具支援可用。

所以,使用Shells請參閱你所使用的作業系統的庫的頭。將來會補充更多的文件。至於現在,可以參考flutter-desktop-embedding示例,也許會有啟發。

另外,你的Flutter桌面應用程式還需要bundle Flutter assets(由flutter build bundle建立)。在Windows和Linux你將還會需要Flutter引擎的ICU資料。(在你的Flutter目錄中下的bin/cache/artifacts/engine查詢icudtl.dat

macOS 注意

目前你必須在XIB中設定FLEView,而不是在程式碼中設定(以後會改)。如下:

  • 拖入一個OpenGL檢視
  • 修改型別為FLEView.
  • 選中Double Buffer選項. 如果你的檢視沒有被繪製出來,可能是因為忘記這個步驟.
  • 選中Hi-Res Backing支援選項. 如果在高DPI顯示器上只顯示部分程式,那麼可能是因為忘記這個步驟。

相關文章