使用這些外掛的好處是,它們中的大多數也支援其他 Flutter 平台,這使您可以將應用程式定位到 Android、iOS、網頁等以及 Windows。此外,儘管 pub.dev(Dart 和 Flutter 的套件管理器)上約三分之一的可用套件是包含平台特定程式碼的外掛,但大多數卻不是。例如,許多品質最高、使用最廣泛的套件 是 Flutter Favorite 程式的一部分,它們中的大多數都在 Windows 上運行。如果您想查看在 Windows 上運行的套件的完整列表,您可以 在 pub.dev 上運行此查詢。
與 Windows 互操作
如果您想為 Windows 建立自己的外掛,您可以。在您位於 dev 頻道並為您的電腦啟用 Windows 後,您可以使用以下命令開始:
1
$ flutter create --template plugin --platforms windows hello_plugin
在那之後,您就可以將 Flutter 程式碼添加到外掛專案中的 lib 子資料夾,以及將 Windows 程式碼添加到 Windows 子資料夾中。您將透過 平台通道 在兩個堆疊之間進行通訊,平台通道本質上是 Dart 和 C++ 程式碼之間的訊息傳遞。若要查看此方面的精心製作的範例,請 查看 url_launcher 實作。
但是,平台通道並不是您與 Windows 互操作的唯一選擇。如果您願意,可以使用 Dart FFI(外部函數介面) 來載入函式庫並呼叫 C 樣式的 API,例如 Win32 API。與使用平台通道的 url_launcher 不同,path_provider 外掛是使用 FFI 實作的,如您在 GitHub 儲存庫 中看到的那樣。FFI 不需要在 Dart 和 C++ 之間來回切換,它讓您能夠撰寫程式碼來直接匯入您想要的 API。例如,以下是呼叫 MessageBox API 的程式碼:
此程式碼不會像平台通道那樣在兩個執行緒之間轉換時產生額外的開銷。FFI 包括對許多不同類型的 API 的支援,包括 Win32、WinRT 和 COM。但在您開始運作並封裝整個基於 C 的 Windows API 之前,請查看 win32 外掛,它已經在進行這項工作。事實上,path_provider 外掛本身是使用 win32 外掛實作的。有關 win32 外掛的開發方式及其運作方式的詳細資訊,請查看部落格文章:使用 Dart FFI 的 Windows 樂趣。
透過此版本,我們將 Flutter 的強大功能帶到了 Windows,它具有用於開發人員生產力的宣告式、可組合、反應式框架,以及 Material 規格的適應性實作,因此您可以讓應用程式以您想要的方式呈現和感覺,以及完整的 Flutter 開發和除錯工具集。完成後,您的應用程式將編譯為原生 64 位程式碼,您可以像任何其他原生應用程式一樣將其封裝並帶到其他 Windows 電腦。最後,您可以使用相同的程式碼庫來建立一個以 Android、iOS、網頁、macOS 和 Linux 為目標的應用程式。
如果您想開始使用 Flutter 建立 Windows 應用程式,我們非常歡迎您的 回饋!如果您想使用您的 Windows 專業知識來 構建熱門外掛的 Windows 實作,或者為 Flutter 建立一些以 Windows 為中心的工具(也許是一個從 flutter build windows 命令的輸出建立 MSIX 的 CLI…),也非常歡迎!
Stream<String> get idStream => Stream.fromIterable(['1','2','3']); Future<List<String>> gatherIds(Stream<String> ids) async { return [ awaitfor (var id in ids) id ]; }
Dart pub.dev 團隊與我們的內部創意團隊 Google Developer Studio 合作,Jeremy Sie 擔任主要設計師。除了功能更新之外,團隊還仔細研究了視覺設計,分享了他們對該專案的想法。為了提供一致的、易於存取的、以使用者為中心的體驗,我們根據 Google 的 Material Design 系統 進行了一系列改進。我們的目標是建立一個輕量級且簡化的介面,為套件發布者和使用者提供清晰簡潔的工作流程。
更新後的設計採用了 Material 元件,例如卡片和晶片,可以清晰地顯示套件詳細資訊,並讓單個套件的功能更加透明。我們更新了排版系統,並改進了整個網站的 字體比例,使搜尋結果更加清晰,並改進了套件資訊的顯示方式。套件分數等元件也經過重新設計,使其更加清晰,並以一種使評分過程更加透明且更容易理解的方式進行組織。
Expected: ‘Hi ’ Actual: ‘Hi 🇩???’ Which: is different. Both strings start the same, but the actual value also has the following trailing characters: 🇩???