Flutter 創建伊始,我們就致力於打造一個能夠構建精美的、可高度定制的、並且可以編譯為機器碼的跨平台應用解決方案,以充分發揮設備底層硬件的全部圖形渲染能力。今天,Flutter 對 Windows 生產版本的正式支持是對這一願景實現的重要標志。它使 Windows 開發者也能享受到移動開發的相同生產力和功能。
Flutter 的目標是在任何平台上為你提供出色的構建體驗,並且我們想要打造的是:只需要使用同一套核心框架和工具完成這個目標。通過 Flutter,你可以自由打造 優美 的使用體驗,使你的品牌和設計脫穎而出;它還擁有 極高 的執行速度,因為它會被直接編譯為機器碼;而通過支持有狀態的熱重載功能以提供交互式的體驗,讓你可以在應用運行時直接看到代碼更改后的結果,從而獲得 生產力 提升。Flutter 是開放的,成千上萬的貢獻者參與到核心框架的構建,或是通過 package 和插件生態系統對其進行擴展。
迄今為止,我們看到這股趨勢已經超出了我們的預期。包括一些大公司例如 Betterment、寶馬以及字節跳動等,還有 Google 內部三十多個團隊都使用了 Flutter。根據 Statista 以及 SlashData 的統計,Flutter 在 2021 年已經成為了最流行的跨端 UI 工具包。
我們自己的數據也能支持這一點,在 2021 年四個季度的開發者調查中,有 92% 的 Flutter 開發者對我們提供的工具表示滿意。(對於另外 8% 的人,我們正在傾聽你的反饋,希望也能得到你的滿意)。
這其中共同的需求之一就是對 Windows 的支持,
今天,我們很高興的宣布,我們此次發布的 Flutter 穩定版中,已經全面支持構建 Windows 桌面端應用程序了!
Windows 與 Flutter
幾年前,我們為 Flutter 制定了一個宏大的願景,即從 iOS 和 Android 的移動端應用上擴展到其他平台,其中就包括 Web 端和桌面端。
Flutter 的核心部分是跨平台的:從可移植的硬件加速的 Skia 圖形渲染引擎,到 Flutter 的渲染系統的核心單元,例如動畫、主題、文本輸入以及國際化,Flutter 提供了上百個 widgets。
然而桌面端並不只是移動應用運行在一個更大的屏幕上這么簡單,它們從設計上來說就很不一樣。從輸入設備角度來看,桌面端有鍵盤和鼠標,它們會在顯示器上運行多個可變大小的窗口。而對於輔助功能 (Accessibility)、輸入法、視覺樣式等關鍵內容都有不同的規則約束。並且它們還和底層操作系統中不同的 API 進行集成:桌面應用支持從系統的文件選擇器到設備硬件再到 Windows 注冊表等數據存儲的所有內容。
所以當我們把 Flutter 帶到 Windows 上時,我們也需要為它進行定制。
正如我們對 Android 和 iOS 的支持那樣,對 Windows 的實現也包括了 Dart 框架以及 C++ 的引擎。Windows 與 Flutter 通過承載了 Flutter 引擎的 嵌入層(Embedder) 進行通信,翻譯以及發送 Windows 都是 嵌入層 的職責范圍。Flutter 與 Windows 共同將你的 UI 繪制到屏幕上,處理窗口大小調整和 DPI 更改等事件,並與已有的 Windows (如輸入法編輯器) 配合使用。
在 Windows 上,Flutter 使用了一套完全相同的 Dart 代碼,但是能夠使用 Windows 的 API。
你的應用能夠使用 Flutter 框架的全部功能,在 Windows 上,它還可以直接通過 Dart 的 C 互操作層或使用用 C++ 編寫的平台插件與 Win32、COM 和 Windows 運行時 API 進行通信。我們還適配了許多常用插件以包含對 Windows 的支持,包括camera
,file_picker
和shared_preferences
。更重要的是,社區已經添加了各種其他 package 對 Windows 的支持,涵蓋了從 Windows 任務欄集成到串行端口訪問的全部內容。
要完全為 Windows 的 UI 進行定制,你也可以使用例如像是 fluent_ui 以及 flutter_acrylic 這樣的 package 創造具有 Microsoft Fluent 設計美學的應用。而且使用 msix 工具能將你的應用包裝進安裝器,這樣就可以上傳到 Windows 上的 Microsoft Store。
總的來說,這促進了在 Window 平台上創建應用程序。以極快的速度在 Windows 上運行的同時還能轉到其他桌面或者移動應用以及 web 平台上運行。讓我們來看看到目前為止的一些早期樣例:
Microsoft 與 Flutter
我們曾詢問過 Windows 團隊是否願意分享一些對 Flutter 支持的話。這是微軟公司 Windows 開發者平台副總裁 Kevin Gallo 的評論:
"我們很高興看到 Flutter 增加了對創建 Windows 應用程序的支持。Windows 是一個開放的平台,我們歡迎所有開發人員。我們很高興看到 Flutter 開發人員將他們的體驗帶到 Windows 上,並發布到 Microsoft Store。對 Windows 的支持是 Flutter 社區的一大步,我們迫不及待地想看看你能為 Windows 帶來哪些令人驚嘆的應用!
事實上,許多 Microsoft 的團隊也都為今天的發布做出了很大貢獻。我們特別想要感謝 Fluent design 團隊對於支持 Windows 上 Flutter 應用的圖標做出的貢獻。他們高質量的 fluentui_system_icons package 已經加入到 Flutter Favorite 項目中了。
同時,Microsoft 圍繞 Windows 可訪問性所做的投入也給我們留下了深刻的印象,非常感謝該團隊的幫助,以確保 Flutter 從第一天起就能夠為屏幕閱讀器提供支持。將無障礙功能視為額外的需求是錯誤的。正如 Microsoft 包容性設計工具包 中的這張圖片所示,我們必須要關注提供永久、臨時或不同情境下需求的體驗。
下面的視頻演示了 Flutter 如何集成 Windows 講述人 (Windows Narrator) 功能。出於本視頻的目的,我們特意模糊了屏幕,讓你了解此功能對需要它的用戶的價值。
Windows 講述人是一個為 Windows 打造的屏幕閱讀器,它同樣能夠在 Flutter 應用中良好的運行。
Windows 開發生態工具集
我們的開發工具合作伙伴們也開始為 Windows 桌面端應用程序開發增加支持,比如:
- FlutterFlow 是低代碼、拖拽式生成 Flutter 應用的工具,FlutterFlow 今天正式宣布支持了 Windows 平台,同時還宣布了一些幫助 Flutter 開發者建立桌面應用的很多功能。
- Realm 是一個快速的本地數據存儲服務。今天發布的最新版本支持使用 Flutter 構建Windows 桌面端應用程序,他們使用 Dart FFI 快速訪問底層數據庫,並增加了他們對 iOS 和Android 等移動平台的現有支持。
- Nevercode 團隊更新了他們的 Codemagic CI/CD tool 工具並開始支持 Windows 桌面端,你可以在雲端測試和構建 Windows 應用,並將其發布到 Microsoft Store。
- Syncfusion 更新了工具套件以充分發揮在 Windows 平台的優勢。如果你在使用他們提供的服務,你會發現他們的數據可視化組件,比如樹狀圖、線性規、火花圖表,日歷組件甚至是 PDF 和 Excel 生成組件都已經支持了 Flutter,Syncfusion Flutter widget 是用 Dart 原生構建的。
- 近期,Rive 宣布推出其流行的圖形工具套件的 Windows 版本,它能夠讓設計人員和開發人員創建交互式矢量動畫,這些動畫可以使用狀態機實時響應代碼。即將推出的 Windows 版本的應用程序提供了驚人的性能和更低的內存占用,並將很快將在 Microsoft Store 中提供下載。
看到圍繞着 Flutter 的建立的成熟生態,我們非常激動,在你開始使用 Flutter 構建 Windows 應用的時候,我們鼓勵你多嘗試一下生態里的這些合作伙伴的服務和工具。
Flutter 2.10 中的 Windows 平台支持
作為 Flutter 2.10 正式版的一部分,Flutter 已經可以為 Windows 平台構建應用程序提供穩定的、具備生產質量的支持,Flutter 2.10 還包含諸多其他新特性和性能改進以及錯誤修復,在今天的另一篇推文中已經詳細介紹。
在未來幾個月里,我們會發布更多為 macOS 和 Linux 平台提供穩定版支持的消息,讓你可以通過 Flutter 為更全的桌面平台、Web 平台和移動端平台構建精美應用!
再次感謝大家對 Flutter 的支持,期待看到你為 Windows 平台構建的精彩應用程序!
- 如果你想將上面這個圖片當作桌面背景,請點擊點擊這個鏈接下載原圖: https://files.flutter-io.cn/images/branding/desktop/dash2022_4k.png
致謝
- 原文: Announcing Flutter for Windows
- 鏈接: https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed
- 翻譯: Vadaski
- 審校: Luke
- 制圖: Lynn