Flutter for Desktop最初是爲了開發Flutter
的Windows
,macOS
和Linux
嵌入而建立的項目,這項工做後來成爲Flutter的一部分。而此項目如今只是在當前狀態下使用這些庫構建Flutter
應用程序的示例和測試環境,它還包括一些實驗性的早期桌面插件。linux
Flutter for Desktop
仍處於早期階段。 此項目的代碼並不穩定,而且也不適合生產使用。android
Flutter team
正在開展以擴展Flutter
支持桌面應該做爲目標的工做,容許開發人員使用Flutter
建立macOS
,Windows
和Linux
應用程序。git
從長遠來看,將建立一個徹底集成的解決方案,用於桌面平臺的Flutter
建立,Flutter
運行和Flutter
構建工做,但目前此項目仍在進行中。github
Flutter
桌面API
仍處於開發的早期階段,若有更改,恕不另行通知。 也不會提供API
或ABI
的向後兼容性。 在任何Flutter
更新以後,使用這些庫的任何代碼都須要更新和從新編譯。shell
這是最成熟的桌面平臺(出於各類緣由,包括它與已經支持的iOS很是接近)。macos
以Flutter
開頭的類與iOS
共享,應該基本穩定。以FLE
開頭的類仍處於早期階段。json
當前的Windows shell
是GLFW
佔位符,以便進行早期實驗。它將在將來被Win32
或UWP shell
替換,容許在應用程序中嵌入Flutter
視圖。最終shell
的API
與當前實現將徹底不一樣。windows
當前的Linux shell
是GLFW
佔位符,以便進行早期實驗。Flutter team
計劃建立一個庫,讓你能夠嵌入Flutter
,不管是使用GTK +
,Qt
,wxWidgets
,Motif
仍是其餘任意用於應用程序的其餘部分的工具包,但尚未肯定一個好的方案。 因此,目前的計劃是支持GTK +
,其中添加對其餘工具包的支持將很是簡單。最終shell
的API
與當前實現將徹底不一樣。緩存
全部平臺都支持編寫插件,可是,目前不多有插件實際上具備桌面支持(例如flutter-desktop-embedding項目中的這些插件)。bash
在Flutter
工具中支持桌面是一項正在進行的工做。要使用任何支持(例如flutter
設備列出的主機),目前必需要求:
Flutter channel
上。這是爲了代表桌面支持還沒有被認爲是穩定的。
Flutter
,由於桌面的重大更改常常發生。ENABLE_FLUTTER_DESKTOP
環境變量設置爲true
。這是爲了不在制定長期解決方案時干擾現有的移動開發工做流程。
export ENABLE_FLUTTER_DESKTOP=true
$env:ENABLE_FLUTTER_DESKTOP="true"
(PowerShell) 或者 set NABLE_FLUTTER_DESKTOP=true
(CMD). 默認狀況下,桌面庫不會被下載,但能夠經過運行帶有--linux
, - macos
或--windows
標誌的Flutter
預緩存下載到Flutter的引擎工件緩存中,具體取決於開發平臺。目前只有debug
庫可用。
Windows
和Linux
庫提供了C
API
。 爲了更容易使用它們,可使用C ++ Wrapper
,能夠將其構建到應用程序中以提供更高級別的API
。precache
命令會將此Wrapper
的源代碼下載到庫旁邊的cpp_client_wrapper
文件夾中。
因爲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
)。
在設置FLEViewController
以前,在調用launchEngine
以前...,在每一個要使用的插件上調用-registerWithRegistrar
: 例如:
[XYZMyAwesomePlugin registerWithRegistrar:
[myFlutterViewController registrarForPlugin:"XYZMyAwesomePlugin"]];
複製代碼
建立Flutter
窗口控制器後,請調用插件的註冊功能。 例如:
MyAwesomePluginRegisterWithRegistrar(
flutter_controller.GetRegistrarForPlugin("MyAwesomePlugin"));
複製代碼
因爲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
對平臺上的可用內容,例如字體;
Flutter
應用程序可能默認爲目標平臺標準的字體,但在桌面上不可用。例如,若是目標平臺是TargetPlatform.iOS
,那麼Material
庫將默認爲San Francisco
,它能夠在macOS
上使用,但不能在Linux
或Windows
上使用。
大多數應用程序須要基於主機平臺設置字體(例如,經過ThemeData
),或者設置與應用程序捆綁在一塊兒的特定字體。若是沒有額外的字體規範(例如,DEBUG橫幅的文本),其餘不使用ThemeData
的小部件可能沒法顯示。
運行flutter doctor
,並確保沒有報告與平臺相關的部分的問題。
doctor
對Windows
和Linux
的支持即將推出; 要求是:
Make
,以及最新版本的clang
。Visual Studio 2017
或2019
,包括Desktop development with C++
。 設置好全部內容後只需在示例目錄中運行桌面Flutter
應用程序;
注意:目前只有調試模式可用。 使用
--release
運行會成功,但結果仍然是使用調試Flutter
配置:asserts
將觸發等等。
若是要使用IDE
在桌面上運行Flutter
項目,則須要爲IDE
設置ENABLE_FLUTTER_DESKTOP
:
VS Code
: 在VS Code
settings.json
中添加dart.env
:"dart.env": {
"ENABLE_FLUTTER_DESKTOP": true,
}
複製代碼
IntelliJ / Android Studio
:須要使用操做系統的常規過程爲應用程序設置環境變量。 若是設備菜單將開發機器列爲設備,該變量就已正確設置。