1. 程式人生 > >谷歌釋出Flutter Alpha:支援Windows

谷歌釋出Flutter Alpha:支援Windows

![](https://img2020.cnblogs.com/other/467322/202009/467322-20200925072943149-635306570.png) > **老孟導讀**:Windows來了,Mac、Linux、Web還遠嗎? > > 本文翻譯自[https://medium.com/flutter/announcing-flutter-windows-alpha-33982cd0f433](https://medium.com/flutter/announcing-flutter-windows-alpha-33982cd0f433) 我們的使命是為開發人員提供一個開源,高生產率的框架,以便在任何平臺上構建漂亮的本機應用程式。到目前為止,我們已經為Android和iOS提供了正式版本(stable releases),僅Google Play商店就提供了8個穩定版本和100,000多個應用。我們將繼續擴大關注範圍,包括Web,macOS和Linux等其他平臺。今天,我們很高興地宣佈Flutter的另一個目標,即Flutter對Windows的Alpha版本的支援。 Windows仍然是桌上型電腦和膝上型電腦裝置的流行選擇,Microsoft報告了超過[十億臺執行Windows 10的活動裝置](https://blogs.windows.com/windowsexperience/2020/03/16/windows-10-powering-the-world-with-1-billion-monthly-active-devices/)。我們自己的統計資料顯示,所有Flutter開發人員中有超過一半使用Windows,因此,它自然Flutter是的目標。本地桌面支援為Flutter開闢了許多激動人心的可能性,包括改進的開發人員工具,減少了新使用者的負擔,當然,應用程式可以通過單個程式碼庫訪問使用者可能擁有的任何裝置。 # 將Windows新增到Flutter 如我們的[架構概述中所述](https://flutter.dev/docs/resources/architectural-overview)Flutter是一種跨平臺的UI工具包,旨在允許在iOS和Android等作業系統之間重複使用程式碼,同時還允許應用程式直接與基礎平臺服務互動。目的是使開發人員能夠交付在不同平臺上感覺自然的高效能應用程式,在存在儘可能多的程式碼的同時,擁抱它們存在的差異。Flutter的核心是引擎,它支援所有Flutter應用程式所必需的。每當需要繪製新框架時,引擎負責對合成場景進行柵格化。它提供Flutter核心API的低階實現,包括圖形,文字佈局,檔案和網路I / O,可訪問性支援,外掛體系結構以及Dart執行時和編譯工具鏈。 我們新增到Flutter的每個新平臺都會通過新服務擴充套件核心框架,使其能夠在該平臺上發光。我們從使用Material Design以及基於觸控的,以移動裝置為中心的使用者介面開始在Android和iOS上開始,該介面旨在在兩個移動平臺上都達到畫素完美。通過Web,Windows,macOS和Linux新增對臺式機外形的支援,帶來了一整套全新的服務,其中包括對輸入側的鍵盤,滑鼠,滑鼠滾輪和控制器的強大支援,以及在這些方面適應甚至工作得最好的小部件。 Web和桌面應用程式隨附的更大的螢幕尺寸。 此外,每個新平臺不僅會影響Flutter框架和引擎,還會影響很多其他方面: - **工具鏈更新:**向CLI和IDE工具新增新目標(在本例中為Windows) - **Shell:**支援通過`WM_*`訊息處理Windows的輸入和通過[ANGLE的](https://opensource.google/projects/angle)輸出,使用[斯基亞(Skia)](https://skia.org/)以本機速度渲染到底層DirectX表面 - **Runner:**每個專案都會獲得針對受支援目標的Shell應用程式。對於Windows,這是一個Win32 / C ++程式,可載入Flutter程式碼並在執行時執行它。如果需要,可以在此處嚮應用程式新增本機程式碼。 - **外掛:**外掛是Dart程式碼和該外掛支援的每個平臺的本機程式碼的混合。需要為在Windows上Flutter應用程式中編譯的每個外掛新增該原生代碼。 此Alpha版本提供了堅實的基礎,我們將在未來幾個月中穩定該基礎。藉助對Windows 7及更高版本的支援,我們希望這可以為喜歡冒險的開發人員提供一些入門知識。 # 探索一些示例應用 要檢視Flutter對Windows的支援,您可能想嘗試一些我們建立的示例應用程式,這些應用程式在Windows上使用我們新增的支援可以很好地執行。第一個是Flokk應用程式,它是與[gskinner.com](http://gskinner.com/)的設計師和開發人員[共同建立的](http://gskinner.com/)。目的是通過建立創新的,精美的Flutter桌面應用程式來證明Flutter已準備好用於桌面。Flokk是一款可與您的真實Google Contacts資料配合使用並在GitHub和Twitter上顯示聯絡人活動的應用程式。 ![圖片釋出](https://img2020.cnblogs.com/other/467322/202009/467322-20200925072943692-1575130156.png) 如果您想在Windows機器上使用Flokk應用程式,則可以[在GitHub上下載最新版本](https://github.com/gskinnerTeam/Flokk/releases)。如果您想了解gskinner如何構建此應用程式,請參閱其出色的部落格文章:[Flokk-我們如何使用Flutter構建桌面應用程式](https://blog.gskinner.com/archives/2020/09/flokk---how-we-built-a-desktop-app-using-flutter.html)。 此外,Flutter Gallery應用程式(我們用於Flutter的所有事物的展示應用程式)最近已完全重寫,以增加對臺式機尺寸的支援。這使我們能夠檢查它是否可以在[Web](https://gallery.flutter.dev/)以及Windows,macOS和Linux上正常執行。 ![圖片釋出](https://img2020.cnblogs.com/other/467322/202009/467322-20200925072945500-2146664698.png) 庫中的許多研究都展示了在使用Flutter設計自己的Windows應用程式時建議使用的不同應用程式風格的想法。當您找到自己喜歡的東西時,[該程式碼可在GitHub上找到](https://github.com/flutter/gallery)。 # Flutter for Windows入門 根據[Windows安裝說明](https://flutter.dev/docs/get-started/install/windows)開始安裝Flutter SDK 。要定位Windows桌面,首先需要[安裝Desktop docs中描述的工具](https://flutter.dev/desktop#additional-windows-requirements)。預設情況下,Flutter假定您正在構建生產軟體,並且未配置為開發Windows應用程式。但是,可以從命令列輕鬆解決: ``` $ flutter channel dev $ flutter upgrade $ flutter config --enable-windows-desktop ``` 第一條命令將Flutter設定為使用實驗質量的“ dev”通道(而不是預設的“ stable”通道)。這樣,您就可以使用仍在Alpha中的平臺支援,例如Windows。第二條命令下拉該通道上的最新位。第三個命令可在您的PC上進行Windows應用開發。 設定好之後,每次使用[Android Studio](https://flutter.dev/docs/get-started/editor?tab=androidstudio)或[Visual Studio Code](https://flutter.dev/docs/get-started/editor?tab=vscode)的擴充套件支援,或者從命令列建立新的Flutter應用程式時,它都會建立一個Windows子資料夾。 ![圖片釋出](https://img2020.cnblogs.com/other/467322/202009/467322-20200925072946582-311534757.png) 如果您感到好奇,請在Windows上執行預設應用程式,如下所示: ![圖片釋出](https://img2020.cnblogs.com/other/467322/202009/467322-20200925072946860-59959155.png) 最後,一旦建立了應用程式,構建該應用程式將建立一個釋出模式的本機EXE檔案以及必要的支援DLL。到那時,如果您想嘗試在任何Windows 10計算機上執行新的Windows應用程式,即使沒有安裝Flutter的計算機,也可以按照[以下步驟壓縮必要的檔案](https://flutter.dev/desktop#distribution)並執行。 # Windows外掛 即使我們剛剛釋出Alpha版,Flutter社群也已經在為Windows外掛進行開發。這裡有一些: - [url_launcher](https://pub.dev/packages/url_launcher):從您的應用程式在瀏覽器中啟動URL - [path_provider](https://pub.dev/packages/path_provider):在使用者的機器上找到指向特殊方向的路徑,例如Document或temp - [shared_preferences](https://pub.dev/packages/shared_preferences):保持使用者首選項在應用程式會話之間的磁碟上序列化 - [biometric_storage](https://pub.dev/packages/biometric_storage):通過生物識別技術加密的儲存 - [flutter_audio_desktop](https://pub.dev/packages/flutter_audio_desktop):從桌面應用播放音訊 使用這些外掛的好處是它們中的大多數還支援其他Flutter平臺,這使您可以將應用定位到Android,iOS,Web等以及Windows。此外,雖然[pub.dev](http://pub.dev/)(Dart和Flutter的軟體包管理器)上[約有](http://pub.dev/)三分之一的可用軟體包是具有特定於平臺的程式碼的外掛,但大多數不是。例如,[許多最高質量和最常用的軟體包](https://pub.dev/flutter/favorites)是Flutter Favorite程式的一部分,並且大多數都在Windows上執行。如果要檢視在Windows上執行的軟體包的完整列表,可以[在pub.dev上執行此查詢](https://pub.dev/flutter/packages?platform=windows)。 # 與Windows互操作 如果您想為Windows構建自己的外掛,則可以。進入開發人員通道併為計算機啟用Windows後,可以使用以下命令開始: ``` $ flutter create --template plugin --platforms Windows hello_plugin ``` 屆時,您將能夠在外掛專案中將Flutter程式碼新增到`lib`子資料夾中,並將Windows程式碼新增到`windows`子資料夾中。您將使用[Platform Channels](https://flutter.dev/docs/development/platform-integration/platform-channels)在兩個堆疊之間進行通訊,這實際上是Dart和C ++程式碼之間傳遞的訊息。有關此示例的精心製作,[請參見url_launcher實現](https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_windows)。 但是,平臺通道並不是與Windows互操作的唯一選擇。如果願意,可以使用[Dart FFI(外部功能介面)](https://flutter.dev/docs/development/platform-integration/c-interop)載入庫並呼叫C樣式的API,例如Win32 API。與使用平臺通道的url_launcher不同,path_provider外掛是使用FFI實現的,如您在[GitHub repo中](https://github.com/flutter/plugins/tree/master/packages/path_provider/path_provider_windows)所見。FFI無需在Dart和C ++之間來回切換,而是允許您編寫程式碼以直接匯入所需的API。例如,以下是用於呼叫MessageBox API的程式碼: ``` typedef MessageBoxNative = Int32 Function( IntPtr hWnd, Pointer