老孟導讀:Windows來(lái)了,Mac、Linux、Web還遠嗎?
我們的使命是為開(kāi)發(fā)人員提供一個(gè)開(kāi)源,高生產(chǎn)率的框架,以便在任何平臺上構建漂亮的本機應用程序。到目前為止,我們已經(jīng)為Android和iOS提供了正式版本(stable releases),僅Google Play商店就提供了8個(gè)穩定版本和100,000多個(gè)應用。我們將繼續擴大關(guān)注范圍,包括Web,macOS和Linux等其他平臺。今天,我們很高興地宣布Flutter的另一個(gè)目標,即Flutter對Windows的Alpha版本的支持。
Windows仍然是臺式機和筆記本電腦設備的流行選擇,Microsoft報告了超過(guò)十億臺運行Windows 10的活動(dòng)設備。我們自己的統計數據顯示,所有Flutter開(kāi)發(fā)人員中有超過(guò)一半使用Windows,因此,它自然Flutter是的目標。本地桌面支持為Flutter開(kāi)辟了許多激動(dòng)人心的可能性,包括改進(jìn)的開(kāi)發(fā)人員工具,減少了新用戶(hù)的負擔,當然,應用程序可以通過(guò)單個(gè)代碼庫訪(fǎng)問(wèn)用戶(hù)可能擁有的任何設備。
如我們的架構概述中所述Flutter是一種跨平臺的UI工具包,旨在允許在iOS和Android等操作系統之間重復使用代碼,同時(shí)還允許應用程序直接與基礎平臺服務(wù)交互。目的是使開(kāi)發(fā)人員能夠交付在不同平臺上感覺(jué)自然的高性能應用程序,在存在盡可能多的代碼的同時(shí),擁抱它們存在的差異。Flutter的核心是引擎,它支持所有Flutter應用程序所必需的。每當需要繪制新框架時(shí),引擎負責對合成場(chǎng)景進(jìn)行柵格化。它提供Flutter核心API的低級實(shí)現,包括圖形,文本布局,文件和網(wǎng)絡(luò )I / O,可訪(fǎng)問(wèn)性支持,插件體系結構以及Dart運行時(shí)和編譯工具鏈。
我們添加到Flutter的每個(gè)新平臺都會(huì )通過(guò)新服務(wù)擴展核心框架,使其能夠在該平臺上發(fā)光。我們從使用Material Design以及基于觸摸的,以移動(dòng)設備為中心的用戶(hù)界面開(kāi)始在A(yíng)ndroid和iOS上開(kāi)始,該界面旨在在兩個(gè)移動(dòng)平臺上都達到像素完美。通過(guò)Web,Windows,macOS和Linux添加對臺式機外形的支持,帶來(lái)了一整套全新的服務(wù),其中包括對輸入側的鍵盤(pán),鼠標,鼠標滾輪和控制器的強大支持,以及在這些方面適應甚至工作得最好的小部件。 Web和桌面應用程序隨附的更大的屏幕尺寸。
此外,每個(gè)新平臺不僅會(huì )影響Flutter框架和引擎,還會(huì )影響很多其他方面:
WM_*消息處理Windows的輸入和通過(guò)ANGLE的輸出,使用斯基亞(Skia)以本機速度渲染到底層DirectX表面此Alpha版本提供了堅實(shí)的基礎,我們將在未來(lái)幾個(gè)月中穩定該基礎。借助對Windows 7及更高版本的支持,我們希望這可以為喜歡冒險的開(kāi)發(fā)人員提供一些入門(mén)知識。
要查看Flutter對Windows的支持,您可能想嘗試一些我們創(chuàng )建的示例應用程序,這些應用程序在Windows上使用我們新增的支持可以很好地運行。第一個(gè)是Flokk應用程序,它是與gskinner.com的設計師和開(kāi)發(fā)人員共同創(chuàng )建的。目的是通過(guò)創(chuàng )建創(chuàng )新的,精美的Flutter桌面應用程序來(lái)證明Flutter已準備好用于桌面。Flokk是一款可與您的真實(shí)Google Contacts數據配合使用并在GitHub和Twitter上顯示聯(lián)系人活動(dòng)的應用程序。
如果您想在Windows機器上使用Flokk應用程序,則可以在GitHub上下載最新版本。如果您想了解gskinner如何構建此應用程序,請參閱其出色的博客文章:Flokk-我們如何使用Flutter構建桌面應用程序。
此外,Flutter Gallery應用程序(我們用于Flutter的所有事物的展示應用程序)最近已完全重寫(xiě),以增加對臺式機尺寸的支持。這使我們能夠檢查它是否可以在Web以及Windows,macOS和Linux上正常運行。
庫中的許多研究都展示了在使用Flutter設計自己的Windows應用程序時(shí)建議使用的不同應用程序風(fēng)格的想法。當您找到自己喜歡的東西時(shí),該代碼可在GitHub上找到。
根據Windows安裝說(shuō)明開(kāi)始安裝Flutter SDK 。要定位Windows桌面,首先需要安裝Desktop docs中描述的工具。默認情況下,Flutter假定您正在構建生產(chǎn)軟件,并且未配置為開(kāi)發(fā)Windows應用程序。但是,可以從命令行輕松解決:
$ flutter channel dev$ flutter upgrade$ flutter config --enable-windows-desktop復制代碼第一條命令將Flutter設置為使用實(shí)驗質(zhì)量的“ dev”通道(而不是默認的“ stable”通道)。這樣,您就可以使用仍在A(yíng)lpha中的平臺支持,例如Windows。第二條命令下拉該通道上的最新位。第三個(gè)命令可在您的PC上進(jìn)行Windows應用開(kāi)發(fā)。
設置好之后,每次使用Android Studio或Visual Studio Code的擴展支持,或者從命令行創(chuàng )建新的Flutter應用程序時(shí),它都會(huì )創(chuàng )建一個(gè)Windows子文件夾。
如果您感到好奇,請在Windows上運行默認應用程序,如下所示:
最后,一旦創(chuàng )建了應用程序,構建該應用程序將創(chuàng )建一個(gè)發(fā)布模式的本機EXE文件以及必要的支持DLL。到那時(shí),如果您想嘗試在任何Windows 10計算機上運行新的Windows應用程序,即使沒(méi)有安裝Flutter的計算機,也可以按照以下步驟壓縮必要的文件并運行。
即使我們剛剛發(fā)布Alpha版,Flutter社區也已經(jīng)在為Windows插件進(jìn)行開(kāi)發(fā)。這里有一些:
使用這些插件的好處是它們中的大多數還支持其他Flutter平臺,這使您可以將應用定位到Android,iOS,Web等以及Windows。此外,雖然pub.dev(Dart和Flutter的軟件包管理器)上約有三分之一的可用軟件包是具有特定于平臺的代碼的插件,但大多數不是。例如,許多最高質(zhì)量和最常用的軟件包是Flutter Favorite程序的一部分,并且大多數都在Windows上運行。如果要查看在Windows上運行的軟件包的完整列表,可以在pub.dev上運行此查詢(xún)。
如果您想為Windows構建自己的插件,則可以。進(jìn)入開(kāi)發(fā)人員通道并為計算機啟用Windows后,可以使用以下命令開(kāi)始:
$ flutter create --template plugin --platforms Windows hello_plugin復制代碼屆時(shí),您將能夠在插件項目中將Flutter代碼添加到lib子文件夾中,并將Windows代碼添加到windows子文件夾中。您將使用Platform Channels在兩個(gè)堆棧之間進(jìn)行通信,這實(shí)際上是Dart和C ++代碼之間傳遞的消息。有關(guān)此示例的精心制作,請參見(jiàn)url_launcher實(shí)現。
但是,平臺通道并不是與Windows互操作的唯一選擇。如果愿意,可以使用Dart FFI(外部功能接口)加載庫并調用C樣式的API,例如Win32 API。與使用平臺通道的url_launcher不同,path_provider插件是使用FFI實(shí)現的,如您在GitHub repo中所見(jiàn)。FFI無(wú)需在Dart和C ++之間來(lái)回切換,而是允許您編寫(xiě)代碼以直接導入所需的API。例如,以下是用于調用MessageBox API的代碼:
typedef MessageBoxNative = Int32 Function( IntPtr hWnd, Pointer<Utf16> lpText, Pointer<Utf16> lpCaption, Int32 uType);typedef MessageBoxDart = int Function( int hWnd, Pointer<Utf16> lpText, Pointer<Utf16> lpCaption, int uType);final user32 = DynamicLibrary.open('user32.dll');final win32MessageBox = user32.lookupFunction<MessageBoxNative, MessageBoxDart>('MessageBoxW');void showMessageBox(String message, String caption) => win32MessageBox( 0, // No owner window Utf16.toUtf16(message), // Message Utf16.toUtf16(caption), // Window title 0 // OK button only );...// call just like any other Dart functionshowMessageBox('Test Message', 'Window Caption');view rawmbox.dart hosted with ? by GitHub復制代碼此代碼不會(huì )產(chǎn)生在平臺通道之類(lèi)的兩個(gè)線(xiàn)程之間進(jìn)行轉換的開(kāi)銷(xiāo)。FFI包括對許多不同種類(lèi)的API的支持,包括Win32,WinRT和COM。但是,在運行并包裝整個(gè)基于C的Windows API之前,請檢查win32插件,該插件已經(jīng)可以很好地做到這一點(diǎn)。實(shí)際上,path_provider插件本身是使用win32插件實(shí)現的。有關(guān)win32插件如何開(kāi)發(fā)以及如何工作的詳細信息,請查看博客文章Dart FFI的Windows樂(lè )趣。
無(wú)論您在Flutter for Windows之旅中的任何地方,都應確保閱讀flutter.dev上的桌面文檔,其中包括最新詳細信息。另外,您將需要熟悉 Flutter代碼實(shí)驗室,以編寫(xiě)Windows,macOS和Windows桌面目標應用程序,其中包括用于真實(shí)場(chǎng)景的代碼,例如使用OAuth進(jìn)行身份驗證,訪(fǎng)問(wèn)GitHub API和使用GraphQL?;蛘?,對于在Windows上運行的Flutter桌面代碼的另一個(gè)很好的例子,請查看照片搜索示例。

它使用標準的Windows文件打開(kāi)對話(huà)框,樹(shù)視圖小部件,拆分器小部件,并將結果與真實(shí)世界的REST API集成在一起。
對于其他有用的面向桌面的小部件,我們建議使用菜單欄插件,NavigationRail小部件和DataTable小部件。您可能還對InteractiveViewer小部件感興趣,該小部件具有完整的桌面支持,可通過(guò)鼠標手勢來(lái)平移和縮放子小部件。
可以探索的另一組有用的小部件是SyncFusion中的那些,它們已經(jīng)在Windows開(kāi)發(fā)社區中廣為人知。它們提供了廣泛的企業(yè)質(zhì)量小部件,用于創(chuàng )建圖表,儀表,數據網(wǎng)格等。

這些小部件具有社區和企業(yè)許可證,因此您可以找到最適合您的項目的工具。
除了Windows(通常是Flutter桌面)的軟件包和插件外,Flutter開(kāi)發(fā)人員還一直在開(kāi)發(fā)針對Windows的出色應用,例如Invoice Ninja的實(shí)驗性構建:

Invoice Ninja是一家依靠Flutter帶來(lái)收入的發(fā)票公司。他們的目標是今天生產(chǎn)中的Android和iOS,并具有基于Web的演示供您嘗試,但也期待提供桌面版本。
“在過(guò)去的Ninja中,我們一直在努力僅支持Web和移動(dòng)設備,一次只能維護三個(gè)單獨的代碼庫。借助Flutter,以及最近的Flutter Desktop,我們已經(jīng)能夠使用單個(gè)代碼庫為每個(gè)主要平臺構建應用程序。我們不僅可以從根本上獲得應用程序的免費桌面版本,而且還擁有所有應用程序中最好的性能!”
—Invoice Ninja 聯(lián)合創(chuàng )始人Hillel Coren
如果您對實(shí)現可在移動(dòng)和臺式機上運行的現實(shí)世界中可產(chǎn)生收入的Flutter應用感興趣,則可在GitHub上找到源代碼。
Aartos是另一家制造出色產(chǎn)品的公司,其中包括帶有Flutter編寫(xiě)的具有多平臺客戶(hù)端的實(shí)時(shí)無(wú)人機檢測系統。這是在移動(dòng)客戶(hù)端旁邊運行的Windows客戶(hù)端的早期版本:
視頻地址:youtu.be/mGvPCT7Vc2Y
這兩個(gè)針對iOS和Windows的版本共享完全相同的代碼庫。
如果您是經(jīng)驗豐富的Flutter開(kāi)發(fā)人員,并且發(fā)現自己在Flutter的不同版本之間進(jìn)行切換;例如,一個(gè)版本用于交付生產(chǎn)型移動(dòng)應用程序,另一個(gè)版本用于測試Windows alpha,那么您可能會(huì )喜歡Flutter版本管理器,該版本管理器現在帶有Windows GUI,您可以下載該版本。
視頻地址:youtu.be/_WA71wSt2ww
該工具是開(kāi)源的,因此您可以親自了解Leo如何使其看起來(lái)如此出色。
現在,我們已經(jīng)發(fā)布了Alpha版,我們的注意力轉移到完成功能集和穩定產(chǎn)品的發(fā)布上。作為一個(gè)開(kāi)源項目,您可以在GitHub網(wǎng)站上關(guān)注我們的beta測試進(jìn)展,尚需完成的其他工作包括可訪(fǎng)問(wèn)性,全球化和本地化,增強的鍵盤(pán)和文本處理,對命令行參數的支持等等。
除了支持經(jīng)典的Win32 API外,我們還在試驗基于UWP的Flutter shell版本,該版本使Flutter可以訪(fǎng)問(wèn)更廣泛的基于Windows的設備,包括Xbox。作為該實(shí)驗的一部分,本周我們向Windows應用商店發(fā)布了基于UWP的Flutter Gallery版本。
以下屏幕快照顯示了在Xbox上運行的基于UWP的Flutter Gallery:

這是在Windows 10X模擬器上運行的雙屏Windows設備上運行的同一應用程序:

您可以在GitHub上了解有關(guān)Flutter for UWP的進(jìn)度的更多信息。
在此版本中,我們將Flutter的功能引入Windows,它具有聲明式,可組合的,反應式的框架,可提高開(kāi)發(fā)人員的工作效率,并具有適應性的Material規范實(shí)現,因此您還可以使應用外觀(guān)和感覺(jué)達到您希望的方式作為Flutter的全套開(kāi)發(fā)和調試工具。完成后,您的應用程序將編譯為本機64位代碼,您可以將其打包并帶到其他Windows計算機上,就像其他任何本機應用程序一樣。最后,您可以使用相同的代碼庫來(lái)創(chuàng )建針對Android,iOS,Web,macOS和Linux的應用程序。
如果您想開(kāi)始使用Flutter構建Windows應用程序,我們希望收到您的反饋!如果您希望利用Windows的專(zhuān)業(yè)知識來(lái)構建流行插件的Windows實(shí)現,或者為Flutter構建一些以Windows為中心的工具(也許是一個(gè)CLI,它可以從flutter build windows命令的輸出中創(chuàng )建MSIX ……),那也歡迎您!
有了Flutter對Windows的新支持,您將要構建什么?
版權聲明:本文為原創(chuàng ),依據 CC BY-SA 4.0 許可證進(jìn)行授權,轉載請附上出處鏈接及本聲明。
`
老孟Flutter博客(330個(gè)控件用法+實(shí)戰入門(mén)系列文章):laomengit.com
聯(lián)系客服