
老孟導讀:Windows來了,Mac、Linux、Web還遠嗎?
本文翻譯自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的活動設備,我們自己的統計資料顯示,所有Flutter開發人員中有超過一半使用Windows,因此,它自然Flutter是的目標,本地桌面支持為Flutter開辟了許多激動人心的可能性,包括改進的開發人員工具,減少了新用戶的負擔,當然,應用程式可以通過單個代碼庫訪問用戶可能擁有的任何設備,
將Windows添加到Flutter
如我們的架構概述中所述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的輸出,使用斯基亞(Skia)以本機速度渲染到底層DirectX表面 - Runner:每個專案都會獲得針對受支持目標的Shell應用程式,對于Windows,這是一個Win32 / C ++程式,可加載Flutter代碼并在運行時執行它,如果需要,可以在此處向應用程式添加本機代碼,
- 插件:插件是Dart代碼和該插件支持的每個平臺的本機代碼的混合,需要為在Windows上Flutter應用程式中編譯的每個插件添加該本地代碼,
此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上找到,
Flutter for Windows入門
根據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的計算機,也可以按照以下步驟壓縮必要的檔案并運行,
Windows插件
即使我們剛剛發布Alpha版,Flutter社區也已經在為Windows插件進行開發,這里有一些:
- url_launcher:從您的應用程式在瀏覽器中啟動URL
- path_provider:在用戶的機器上找到指向特殊方向的路徑,例如Document或temp
- shared_preferences:保持用戶首選項在應用程式會話之間的磁盤上序列化
- biometric_storage:通過生物識別技術加密的存盤
- flutter_audio_desktop:從桌面應用播放音頻
使用這些插件的好處是它們中的大多數還支持其他Flutter平臺,這使您可以將應用定位到Android,iOS,Web等以及Windows,此外,雖然pub.dev(Dart和Flutter的軟體包管理器)上約有三分之一的可用軟體包是具有特定于平臺的代碼的插件,但大多數不是,例如,許多最高質量和最常用的軟體包是Flutter Favorite程式的一部分,并且大多數都在Windows上運行,如果要查看在Windows上運行的軟體包的完整串列,可以在pub.dev上運行此查詢,
與Windows互操作
如果您想為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樂趣,
Windows資源Flutter
無論您在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
除了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】:
![]() |
![]() |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/124187.html
標籤:其他
上一篇:legend圖例
下一篇:24點游戲


