Flutter for Desktop
Flutter for Desktop最初是為了開發Flutter
的Windows
,macOS
和Linux
嵌入而建立的專案,這項工作後來成為Flutter的一部分。而此專案現在只是在當前狀態下使用這些庫構建Flutter
應用程式的示例和測試環境,它還包括一些實驗性的早期桌面外掛。
Flutter for Desktop
仍處於早期階段。 此專案的程式碼並不穩定,並且也不適合生產使用。
桌面shell
Flutter team
正在開展以擴充套件Flutter
支援桌面應該作為目標的工作,允許開發人員使用Flutter
建立macOS
,Windows
和Linux
應用程式。
從長遠來看,將建立一個完全整合的解決方案,用於桌面平臺的Flutter
建立,Flutter
執行和Flutter
構建工作,但目前此專案仍在進行中。
當前的狀態
Flutter
桌面API
仍處於開發的早期階段,如有更改,恕不另行通知。 也不會提供API
或ABI
的向後相容性。 在任何Flutter
更新之後,使用這些庫的任何程式碼都需要更新和重新編譯。
macOS
這是最成熟的桌面平臺(出於各種原因,包括它與已經支援的iOS非常接近)。
以Flutter
開頭的類與iOS
共享,應該基本穩定。以FLE
開頭的類仍處於早期階段。
Windows
當前的Windows shell
是GLFW
佔位符,以便進行早期實驗。它將在未來被Win32
或UWP shell
替換,允許在應用程式中嵌入Flutter
檢視。最終shell
的API
與當前實現將完全不同。
Linux
當前的Linux shell
是GLFW
佔位符,以便進行早期實驗。Flutter team
計劃建立一個庫,讓你可以嵌入Flutter
,無論是使用GTK +
,Qt
,wxWidgets
,Motif
還是其他任意用於應用程式的其他部分的工具包,但還沒有確定一個好的方案。 所以,目前的計劃是支援GTK +
,其中新增對其他工具包的支援將非常簡單。最終shell
的API
與當前實現將完全不同。
Plugins
所有平臺都支援編寫外掛,但是,目前很少有外掛實際上具有桌面支援(例如flutter-desktop-embedding專案中的這些外掛)。
Tooling
在Flutter
工具中支援桌面是一項正在進行的工作。要使用任何支援(例如flutter
裝置列出的主機),目前必須要求:
- 不能在穩定的
Flutter channel
上。這是為了表明桌面支援尚未被認為是穩定的。- 應該始終及時更新此庫和
Flutter
,因為桌面的重大更改經常發生。
- 應該始終及時更新此庫和
- 必須將
ENABLE_FLUTTER_DESKTOP
環境變數設定為true
。這是為了避免在制定長期解決方案時干擾現有的移動開發工作流程。- macOS/Linux:
export ENABLE_FLUTTER_DESKTOP=true
- Windows:
$env:ENABLE_FLUTTER_DESKTOP="true"
(PowerShell) 或者set NABLE_FLUTTER_DESKTOP=true
(CMD).
- macOS/Linux:
預構建的Shell庫
預設情況下,桌面庫不會被下載,但可以通過執行帶有--linux
, - macos
或--windows
標誌的Flutter
預快取下載到Flutter的引擎工件快取中,具體取決於開發平臺。目前只有debug
庫可用。
C++ Wrapper
Windows
和Linux
庫提供了C
API
。 為了更容易使用它們,可以使用C ++ Wrapper
,可以將其構建到應用程式中以提供更高階別的API
。precache
命令會將此Wrapper
的原始碼下載到庫旁邊的cpp_client_wrapper
資料夾中。
使用Shells
由於flutter create
還不支援桌面,因此需要一個runner
應用程式。 flutter-desktop-embedding專案為每個桌面平臺提供了簡單的執行程式,可以使用flutter
工具進行這些桌面支援。
或者,如果熟悉在平臺上進行原生開發,則可以使用shell
編寫自己的應用程式。 有關使用它們的資訊,可以參閱適用於平臺的庫附帶的標頭。將來會有更多檔案; 現在,檢視flutter-desktop-embedding
示例以檢視它是如何使用它們的。 除了連結Flutter
庫之外,應用程式還需要捆綁您的Flutter assets
。 在Windows
和Linux
上,還需要來自Flutter
引擎的ICU
資料(在Flutter
資料夾bin/cache/ artifacts/engine
目錄下查詢icudtl.dat
)。
Plugins
macOS
在設定FLEViewController
之前,在呼叫launchEngine
之前...,在每個要使用的外掛上呼叫-registerWithRegistrar
: 例如:
[XYZMyAwesomePlugin registerWithRegistrar:
[myFlutterViewController registrarForPlugin:"XYZMyAwesomePlugin"]];
複製程式碼
Windows/Linux
建立Flutter
視窗控制器後,請呼叫外掛的註冊功能。 例如:
MyAwesomePluginRegisterWithRegistrar(
flutter_controller.GetRegistrarForPlugin("MyAwesomePlugin"));
複製程式碼
Flutter的應用要求
由於Flutter
框架尚未完全支援桌面平臺,因此現有的Flutter
應用程式可能需要稍加修改才能執行。
目標平臺
大多數應用程式需要將應用程式的目標平臺覆蓋到其中一個支援的,以避免“未知平臺”異常。可以對單個目標進行編碼:
import 'package:flutter/foundation.dart'
show debugDefaultTargetPlatformOverride;
[...]
void main() {
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
[...]
}
複製程式碼
如果程式碼需要在移動裝置和桌面上執行,或者您希望在不同的桌面平臺上執行不同的程式碼,則可以使用Platform
進行區別。 例如,上面main()
中的行可以替換為:
/// If the current platform is desktop, override the default platform to
/// a supported platform (iOS for macOS, Android for Linux and Windows).
/// Otherwise, do nothing.
void _setTargetPlatformForDesktop() {
TargetPlatform targetPlatform;
if (Platform.isMacOS) {
targetPlatform = TargetPlatform.iOS;
} else if (Platform.isLinux || Platform.isWindows) {
targetPlatform = TargetPlatform.android;
}
if (targetPlatform != null) {
debugDefaultTargetPlatformOverride = targetPlatform;
}
}
複製程式碼
注意,使用的目標平臺不僅會影響視窗小部件的行為和外觀,還會影響
Flutter
對平臺上的可用內容,例如字型;
Fonts
Flutter
應用程式可能預設為目標平臺標準的字型,但在桌面上不可用。例如,如果目標平臺是TargetPlatform.iOS
,那麼Material
庫將預設為San Francisco
,它可以在macOS
上使用,但不能在Linux
或Windows
上使用。
大多數應用程式需要基於主機平臺設定字型(例如,通過ThemeData
),或者設定與應用程式捆綁在一起的特定字型。如果沒有額外的字型規範(例如,DEBUG橫幅的文字),其他不使用ThemeData
的小部件可能無法顯示。
Tools
執行flutter doctor
,並確保沒有報告與平臺相關的部分的問題。
doctor
對Windows
和Linux
的支援即將推出; 要求是:
- Linux:
Make
,以及最新版本的clang
。 - Windows:
Visual Studio 2017
或2019
,包括Desktop development with C++
。
執行git倉庫的專案
Example
設定好所有內容後只需在示例目錄中執行桌面Flutter
應用程式;
注意:目前只有除錯模式可用。 使用
--release
執行會成功,但結果仍然是使用除錯Flutter
配置:asserts
將觸發等等。
IDEs
如果要使用IDE
在桌面上執行Flutter
專案,則需要為IDE
設定ENABLE_FLUTTER_DESKTOP
:
VS Code
: 在VS Code
settings.json
中新增dart.env
:"dart.env": { "ENABLE_FLUTTER_DESKTOP": true, } 複製程式碼
IntelliJ / Android Studio
:需要使用作業系統的常規過程為應用程式設定環境變數。 如果裝置選單將開發機器列為裝置,該變數就已正確設定。