老孟導讀:Windows來了,Mac、Linux、Web還遠嗎?html
本文翻譯自https://medium.com/flutter/announcing-flutter-windows-alpha-33982cd0f433android
咱們的使命是爲開發人員提供一個開源,高生產率的框架,以便在任何平臺上構建漂亮的本機應用程序。到目前爲止,咱們已經爲Android和iOS提供了正式版本(stable releases),僅Google Play商店就提供了8個穩定版本和100,000多個應用。咱們將繼續擴大關注範圍,包括Web,macOS和Linux等其餘平臺。今天,咱們很高興地宣佈Flutter的另外一個目標,即Flutter對Windows的Alpha版本的支持。git
Windows仍然是臺式機和筆記本電腦設備的流行選擇,Microsoft報告了超過十億臺運行Windows 10的活動設備。咱們本身的統計數據顯示,全部Flutter開發人員中有超過一半使用Windows,所以,它天然Flutter是的目標。本地桌面支持爲Flutter開闢了許多激動人心的可能性,包括改進的開發人員工具,減小了新用戶的負擔,固然,應用程序能夠經過單個代碼庫訪問用戶可能擁有的任何設備。github
如咱們的架構概述中所述Flutter是一種跨平臺的UI工具包,旨在容許在iOS和Android等操做系統之間重複使用代碼,同時還容許應用程序直接與基礎平臺服務交互。目的是使開發人員可以交付在不一樣平臺上感受天然的高性能應用程序,在存在儘量多的代碼的同時,擁抱它們存在的差別。Flutter的核心是引擎,它支持全部Flutter應用程序所必需的。每當須要繪製新框架時,引擎負責對合成場景進行柵格化。它提供Flutter核心API的低級實現,包括圖形,文本佈局,文件和網絡I / O,可訪問性支持,插件體系結構以及Dart運行時和編譯工具鏈。shell
咱們添加到Flutter的每一個新平臺都會經過新服務擴展核心框架,使其可以在該平臺上發光。咱們從使用Material Design以及基於觸摸的,以移動設備爲中心的用戶界面開始在Android和iOS上開始,該界面旨在在兩個移動平臺上都達到像素完美。經過Web,Windows,macOS和Linux添加對臺式機外形的支持,帶來了一整套全新的服務,其中包括對輸入側的鍵盤,鼠標,鼠標滾輪和控制器的強大支持,以及在這些方面適應甚至工做得最好的小部件。 Web和桌面應用程序隨附的更大的屏幕尺寸。windows
此外,每一個新平臺不只會影響Flutter框架和引擎,還會影響不少其餘方面:api
WM_*
消息處理Windows的輸入和經過ANGLE的輸出,使用斯基亞(Skia)以本機速度渲染到底層DirectX表面此Alpha版本提供了堅實的基礎,咱們將在將來幾個月中穩定該基礎。藉助對Windows 7及更高版本的支持,咱們但願這能夠爲喜歡冒險的開發人員提供一些入門知識。瀏覽器
要查看Flutter對Windows的支持,您可能想嘗試一些咱們建立的示例應用程序,這些應用程序在Windows上使用咱們新增的支持能夠很好地運行。第一個是Flokk應用程序,它是與gskinner.com的設計師和開發人員共同建立的。目的是經過建立創新的,精美的Flutter桌面應用程序來證實Flutter已準備好用於桌面。Flokk是一款可與您的真實Google Contacts數據配合使用並在GitHub和Twitter上顯示聯繫人活動的應用程序。微信
若是您想在Windows機器上使用Flokk應用程序,則能夠在GitHub上下載最新版本。若是您想了解gskinner如何構建此應用程序,請參閱其出色的博客文章:Flokk-咱們如何使用Flutter構建桌面應用程序。網絡
此外,Flutter Gallery應用程序(咱們用於Flutter的全部事物的展現應用程序)最近已徹底重寫,以增長對臺式機尺寸的支持。這使咱們可以檢查它是否能夠在Web以及Windows,macOS和Linux上正常運行。
庫中的許多研究都展現了在使用Flutter設計本身的Windows應用程序時建議使用的不一樣應用程序風格的想法。當您找到本身喜歡的東西時,該代碼可在GitHub上找到。
根據Windows安裝說明開始安裝Flutter SDK 。要定位Windows桌面,首先須要安裝Desktop docs中描述的工具。默認狀況下,Flutter假定您正在構建生產軟件,而且未配置爲開發Windows應用程序。可是,能夠從命令行輕鬆解決:
$ flutter channel dev $ flutter upgrade $ flutter config --enable-windows-desktop
第一條命令將Flutter設置爲使用實驗質量的「 dev」通道(而不是默認的「 stable」通道)。這樣,您就可使用仍在Alpha中的平臺支持,例如Windows。第二條命令下拉該通道上的最新位。第三個命令可在您的PC上進行Windows應用開發。
設置好以後,每次使用Android Studio或Visual Studio Code的擴展支持,或者從命令行建立新的Flutter應用程序時,它都會建立一個Windows子文件夾。
若是您感到好奇,請在Windows上運行默認應用程序,以下所示:
最後,一旦建立了應用程序,構建該應用程序將建立一個發佈模式的本機EXE文件以及必要的支持DLL。到那時,若是您想嘗試在任何Windows 10計算機上運行新的Windows應用程序,即便沒有安裝Flutter的計算機,也能夠按照如下步驟壓縮必要的文件並運行。
即便咱們剛剛發佈Alpha版,Flutter社區也已經在爲Windows插件進行開發。這裏有一些:
使用這些插件的好處是它們中的大多數還支持其餘Flutter平臺,這使您能夠將應用定位到Android,iOS,Web等以及Windows。此外,雖然pub.dev(Dart和Flutter的軟件包管理器)上約有三分之一的可用軟件包是具備特定於平臺的代碼的插件,但大多數不是。例如,許多最高質量和最經常使用的軟件包是Flutter Favorite程序的一部分,而且大多數都在Windows上運行。若是要查看在Windows上運行的軟件包的完整列表,能夠在pub.dev上運行此查詢。
若是您想爲Windows構建本身的插件,則能夠。進入開發人員通道併爲計算機啓用Windows後,可使用如下命令開始:
$ flutter create --template plugin --platforms Windows hello_plugin
屆時,您將可以在插件項目中將Flutter代碼添加到lib
子文件夾中,並將Windows代碼添加到windows
子文件夾中。您將使用Platform Channels在兩個堆棧之間進行通訊,這其實是Dart和C ++代碼之間傳遞的消息。有關此示例的精心製做,請參見url_launcher實現。
可是,平臺通道並非與Windows互操做的惟一選擇。若是願意,可使用Dart FFI(外部功能接口)加載庫並調用C樣式的API,例如Win32 API。與使用平臺通道的url_launcher不一樣,path_provider插件是使用FFI實現的,如您在GitHub repo中所見。FFI無需在Dart和C ++之間來回切換,而是容許您編寫代碼以直接導入所需的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 function showMessageBox('Test Message', 'Window Caption'); view rawmbox.dart hosted with ❤ by GitHub
此代碼不會產生在平臺通道之類的兩個線程之間進行轉換的開銷。FFI包括對許多不一樣種類的API的支持,包括Win32,WinRT和COM。可是,在運行幷包裝整個基於C的Windows API以前,請檢查win32插件,該插件已經能夠很好地作到這一點。實際上,path_provider插件自己是使用win32插件實現的。有關win32插件如何開發以及如何工做的詳細信息,請查看博客文章Dart FFI的Windows樂趣。
不管您在Flutter for Windows之旅中的任何地方,都應確保閱讀flutter.dev上的桌面文檔,其中包括最新詳細信息。另外,您將須要熟悉 Flutter代碼實驗室,以編寫Windows,macOS和Windows桌面目標應用程序,其中包括用於真實場景的代碼,例如使用OAuth進行身份驗證,訪問GitHub API和使用GraphQL。或者,對於在Windows上運行的Flutter桌面代碼的另外一個很好的例子,請查看照片搜索示例。
它使用標準的Windows文件打開對話框,樹視圖小部件,拆分器小部件,並將結果與真實世界的REST API集成在一塊兒。
對於其餘有用的面向桌面的小部件,咱們建議使用菜單欄插件,NavigationRail小部件和DataTable小部件。您可能還對InteractiveViewer小部件感興趣,該小部件具備完整的桌面支持,可經過鼠標手勢來平移和縮放子小部件。
能夠探索的另外一組有用的小部件是SyncFusion中的那些,它們已經在Windows開發社區中廣爲人知。它們提供了普遍的企業質量小部件,用於建立圖表,儀表,數據網格等。
這些小部件具備社區和企業許可證,所以您能夠找到最適合您的項目的工具。
除了Windows(一般是Flutter桌面)的軟件包和插件外,Flutter開發人員還一直在開發針對Windows的出色應用,例如Invoice Ninja的實驗性構建:
Invoice Ninja是一家依靠Flutter帶來收入的發票公司。他們的目標是今天生產中的Android和iOS,並具備基於Web的演示供您嘗試,但也期待提供桌面版本。
「在過去的Ninja中,咱們一直在努力僅支持Web和移動設備,一次只能維護三個單獨的代碼庫。藉助Flutter,以及最近的Flutter Desktop,咱們已經可以使用單個代碼庫爲每一個主要平臺構建應用程序。咱們不只能夠從根本上得到應用程序的免費桌面版本,並且還擁有全部應用程序中最好的性能!」
—Invoice Ninja 聯合創始人Hillel Coren
若是您對實現可在移動和臺式機上運行的現實世界中可產生收入的Flutter應用感興趣,則可在GitHub上找到源代碼。
Aartos是另外一家制造出色產品的公司,其中包括帶有Flutter編寫的具備多平臺客戶端的實時無人機檢測系統。這是在移動客戶端旁邊運行的Windows客戶端的早期版本:
視頻地址:https://youtu.be/mGvPCT7Vc2Y
這兩個針對iOS和Windows的版本共享徹底相同的代碼庫。
若是您是經驗豐富的Flutter開發人員,而且發現本身在Flutter的不一樣版本之間進行切換;例如,一個版本用於交付生產型移動應用程序,另外一個版本用於測試Windows alpha,那麼您可能會喜歡Flutter版本管理器,該版本管理器如今帶有Windows GUI,您能夠下載該版本。
視頻地址:https://youtu.be/_WA71wSt2ww
該工具是開源的,所以您能夠親自瞭解Leo如何使其看起來如此出色。
如今,咱們已經發布了Alpha版,咱們的注意力轉移到完成功能集和穩定產品的發佈上。做爲一個開源項目,您能夠在GitHub網站上關注咱們的beta測試進展,尚需完成的其餘工做包括可訪問性,全球化和本地化,加強的鍵盤和文本處理,對命令行參數的支持等等。
除了支持經典的Win32 API外,咱們還在試驗基於UWP的Flutter shell版本,該版本使Flutter能夠訪問更普遍的基於Windows的設備,包括Xbox。做爲該實驗的一部分,本週咱們向Windows應用商店發佈了基於UWP的Flutter Gallery版本。
如下屏幕快照顯示了在Xbox上運行的基於UWP的Flutter Gallery:
這是在Windows 10X模擬器上運行的雙屏Windows設備上運行的同一應用程序:
您能夠在GitHub上了解有關Flutter for UWP的進度的更多信息。
在此版本中,咱們將Flutter的功能引入Windows,它具備聲明式,可組合的,反應式的框架,可提升開發人員的工做效率,並具備適應性的Material規範實現,所以您還可使應用外觀和感受達到您但願的方式做爲Flutter的全套開發和調試工具。完成後,您的應用程序將編譯爲本機64位代碼,您能夠將其打包並帶到其餘Windows計算機上,就像其餘任何本機應用程序同樣。最後,您可使用相同的代碼庫來建立針對Android,iOS,Web,macOS和Linux的應用程序。
若是您想開始使用Flutter構建Windows應用程序,咱們但願收到您的反饋!若是您但願利用Windows的專業知識來構建流行插件的Windows實現,或者爲Flutter構建一些以Windows爲中心的工具(也許是一個CLI,它能夠從flutter build windows
命令的輸出中建立MSIX ……),那也歡迎您!
有了Flutter對Windows的新支持,您將要構建什麼?
版權聲明:本文爲
`
老孟Flutter博客(330個控件用法+實戰入門系列文章):http://laomengit.com
歡迎加入Flutter交流羣(微信:laomengit)、關注公衆號【老孟Flutter】:
![]() |
![]() |