我們的使命是為開發(fā)人員提供一個開源,高生產(chǎn)率的框架看铆,以便在任何平臺上構(gòu)建漂亮的本機應(yīng)用程序理张。到目前為止,我們已經(jīng)為Android和iOS提供了正式版本(stable releases)阿纤,僅Google Play商店就提供了8個穩(wěn)定版本和100,000多個應(yīng)用。我們將繼續(xù)擴大關(guān)注范圍夷陋,包括Web欠拾,macOS和Linux等其他平臺。今天骗绕,我們很高興地宣布Flutter的另一個目標(biāo)藐窄,即Flutter對Windows的Alpha版本的支持。
Windows仍然是臺式機和筆記本電腦設(shè)備的流行選擇酬土,Microsoft報告了超過十億臺運行Windows 10的活動設(shè)備荆忍。我們自己的統(tǒng)計數(shù)據(jù)顯示,所有Flutter開發(fā)人員中有超過一半使用Windows撤缴,因此刹枉,它自然Flutter是的目標(biāo)。本地桌面支持為Flutter開辟了許多激動人心的可能性屈呕,包括改進的開發(fā)人員工具微宝,減少了新用戶的負擔(dān),當(dāng)然虎眨,應(yīng)用程序可以通過單個代碼庫訪問用戶可能擁有的任何設(shè)備蟋软。
將Windows添加到Flutter
如我們的架構(gòu)概述中所述Flutter是一種跨平臺的UI工具包,旨在允許在iOS和Android等操作系統(tǒng)之間重復(fù)使用代碼嗽桩,同時還允許應(yīng)用程序直接與基礎(chǔ)平臺服務(wù)交互岳守。目的是使開發(fā)人員能夠交付在不同平臺上感覺自然的高性能應(yīng)用程序,在存在盡可能多的代碼的同時碌冶,擁抱它們存在的差異湿痢。Flutter的核心是引擎,它支持所有Flutter應(yīng)用程序所必需的种樱。每當(dāng)需要繪制新框架時蒙袍,引擎負責(zé)對合成場景進行柵格化。它提供Flutter核心API的低級實現(xiàn)嫩挤,包括圖形害幅,文本布局,文件和網(wǎng)絡(luò)I / O岂昭,可訪問性支持以现,插件體系結(jié)構(gòu)以及Dart運行時和編譯工具鏈。
我們添加到Flutter的每個新平臺都會通過新服務(wù)擴展核心框架约啊,使其能夠在該平臺上發(fā)光邑遏。我們從使用Material Design以及基于觸摸的,以移動設(shè)備為中心的用戶界面開始在Android和iOS上開始恰矩,該界面旨在在兩個移動平臺上都達到像素完美记盒。通過Web,Windows外傅,macOS和Linux添加對臺式機外形的支持纪吮,帶來了一整套全新的服務(wù),其中包括對輸入側(cè)的鍵盤萎胰,鼠標(biāo)碾盟,鼠標(biāo)滾輪和控制器的強大支持,以及在這些方面適應(yīng)甚至工作得最好的小部件技竟。 Web和桌面應(yīng)用程序隨附的更大的屏幕尺寸冰肴。
此外,每個新平臺不僅會影響Flutter框架和引擎榔组,還會影響很多其他方面:
- 工具鏈更新:向CLI和IDE工具添加新目標(biāo)(在本例中為Windows)
-
Shell:支持通過
WM_*
消息處理Windows的輸入和通過ANGLE的輸出熙尉,使用斯基亞(Skia)以本機速度渲染到底層DirectX表面 - Runner:每個項目都會獲得針對受支持目標(biāo)的Shell應(yīng)用程序。對于Windows搓扯,這是一個Win32 / C ++程序骡尽,可加載Flutter代碼并在運行時執(zhí)行它。如果需要擅编,可以在此處向應(yīng)用程序添加本機代碼攀细。
- 插件:插件是Dart代碼和該插件支持的每個平臺的本機代碼的混合。需要為在Windows上Flutter應(yīng)用程序中編譯的每個插件添加該本地代碼爱态。
此Alpha版本提供了堅實的基礎(chǔ)谭贪,我們將在未來幾個月中穩(wěn)定該基礎(chǔ)。借助對Windows 7及更高版本的支持锦担,我們希望這可以為喜歡冒險的開發(fā)人員提供一些入門知識俭识。
探索一些示例應(yīng)用
要查看Flutter對Windows的支持,您可能想嘗試一些我們創(chuàng)建的示例應(yīng)用程序洞渔,這些應(yīng)用程序在Windows上使用我們新增的支持可以很好地運行套媚。第一個是Flokk應(yīng)用程序缚态,它是與gskinner.com的設(shè)計師和開發(fā)人員共同創(chuàng)建的。目的是通過創(chuàng)建創(chuàng)新的堤瘤,精美的Flutter桌面應(yīng)用程序來證明Flutter已準(zhǔn)備好用于桌面玫芦。Flokk是一款可與您的真實Google Contacts數(shù)據(jù)配合使用并在GitHub和Twitter上顯示聯(lián)系人活動的應(yīng)用程序。
如果您想在Windows機器上使用Flokk應(yīng)用程序本辐,則可以在GitHub上下載最新版本桥帆。如果您想了解gskinner如何構(gòu)建此應(yīng)用程序,請參閱其出色的博客文章:Flokk-我們?nèi)绾问褂肍lutter構(gòu)建桌面應(yīng)用程序慎皱。
此外老虫,F(xiàn)lutter Gallery應(yīng)用程序(我們用于Flutter的所有事物的展示應(yīng)用程序)最近已完全重寫,以增加對臺式機尺寸的支持茫多。這使我們能夠檢查它是否可以在Web以及Windows祈匙,macOS和Linux上正常運行。
庫中的許多研究都展示了在使用Flutter設(shè)計自己的Windows應(yīng)用程序時建議使用的不同應(yīng)用程序風(fēng)格的想法天揖。當(dāng)您找到自己喜歡的東西時菊卷,該代碼可在GitHub上找到。
Flutter for Windows入門
根據(jù)Windows安裝說明開始安裝Flutter SDK 宝剖。要定位Windows桌面洁闰,首先需要安裝Desktop docs中描述的工具。默認情況下万细,F(xiàn)lutter假定您正在構(gòu)建生產(chǎn)軟件扑眉,并且未配置為開發(fā)Windows應(yīng)用程序。但是赖钞,可以從命令行輕松解決:
$ flutter channel dev
$ flutter upgrade
$ flutter config --enable-windows-desktop
復(fù)制代碼
第一條命令將Flutter設(shè)置為使用實驗質(zhì)量的“ dev”通道(而不是默認的“ stable”通道)腰素。這樣,您就可以使用仍在Alpha中的平臺支持雪营,例如Windows弓千。第二條命令下拉該通道上的最新位。第三個命令可在您的PC上進行Windows應(yīng)用開發(fā)献起。
設(shè)置好之后洋访,每次使用Android Studio或Visual Studio Code的擴展支持,或者從命令行創(chuàng)建新的Flutter應(yīng)用程序時谴餐,它都會創(chuàng)建一個Windows子文件夾姻政。
如果您感到好奇,請在Windows上運行默認應(yīng)用程序岂嗓,如下所示:
最后汁展,一旦創(chuàng)建了應(yīng)用程序,構(gòu)建該應(yīng)用程序?qū)?chuàng)建一個發(fā)布模式的本機EXE文件以及必要的支持DLL。到那時食绿,如果您想嘗試在任何Windows 10計算機上運行新的Windows應(yīng)用程序侈咕,即使沒有安裝Flutter的計算機,也可以按照以下步驟壓縮必要的文件并運行器紧。
Windows插件
即使我們剛剛發(fā)布Alpha版耀销,F(xiàn)lutter社區(qū)也已經(jīng)在為Windows插件進行開發(fā)。這里有一些:
- url_launcher:從您的應(yīng)用程序在瀏覽器中啟動URL
- path_provider:在用戶的機器上找到指向特殊方向的路徑品洛,例如Document或temp
- shared_preferences:保持用戶首選項在應(yīng)用程序會話之間的磁盤上序列化
- biometric_storage:通過生物識別技術(shù)加密的存儲
- flutter_audio_desktop:從桌面應(yīng)用播放音頻
使用這些插件的好處是它們中的大多數(shù)還支持其他Flutter平臺树姨,這使您可以將應(yīng)用定位到Android摩桶,iOS桥状,Web等以及Windows。此外硝清,雖然pub.dev(Dart和Flutter的軟件包管理器)上約有三分之一的可用軟件包是具有特定于平臺的代碼的插件辅斟,但大多數(shù)不是。例如芦拿,許多最高質(zhì)量和最常用的軟件包是Flutter Favorite程序的一部分士飒,并且大多數(shù)都在Windows上運行。如果要查看在Windows上運行的軟件包的完整列表蔗崎,可以在pub.dev上運行此查詢酵幕。
與Windows互操作
如果您想為Windows構(gòu)建自己的插件,則可以缓苛。進入開發(fā)人員通道并為計算機啟用Windows后芳撒,可以使用以下命令開始:
$ flutter create --template plugin --platforms Windows hello_plugin
復(fù)制代碼
屆時,您將能夠在插件項目中將Flutter代碼添加到lib
子文件夾中未桥,并將Windows代碼添加到windows
子文件夾中笔刹。您將使用Platform Channels在兩個堆棧之間進行通信,這實際上是Dart和C ++代碼之間傳遞的消息冬耿。有關(guān)此示例的精心制作舌菜,請參見url_launcher實現(xiàn)。
但是亦镶,平臺通道并不是與Windows互操作的唯一選擇日月。如果愿意,可以使用Dart FFI(外部功能接口)加載庫并調(diào)用C樣式的API缤骨,例如Win32 API山孔。與使用平臺通道的url_launcher不同,path_provider插件是使用FFI實現(xiàn)的荷憋,如您在GitHub repo中所見台颠。FFI無需在Dart和C ++之間來回切換,而是允許您編寫代碼以直接導(dǎo)入所需的API。例如串前,以下是用于調(diào)用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
復(fù)制代碼
此代碼不會產(chǎn)生在平臺通道之類的兩個線程之間進行轉(zhuǎn)換的開銷瘫里。FFI包括對許多不同種類的API的支持,包括Win32荡碾,WinRT和COM谨读。但是,在運行并包裝整個基于C的Windows API之前坛吁,請檢查win32插件劳殖,該插件已經(jīng)可以很好地做到這一點。實際上拨脉,path_provider插件本身是使用win32插件實現(xiàn)的哆姻。有關(guān)win32插件如何開發(fā)以及如何工作的詳細信息,請查看博客文章Dart FFI的Windows樂趣玫膀。
Windows資源Flutter
無論您在Flutter for Windows之旅中的任何地方矛缨,都應(yīng)確保閱讀flutter.dev上的桌面文檔,其中包括最新詳細信息帖旨。另外箕昭,您將需要熟悉 Flutter代碼實驗室,以編寫Windows解阅,macOS和Windows桌面目標(biāo)應(yīng)用程序落竹,其中包括用于真實場景的代碼,例如使用OAuth進行身份驗證货抄,訪問GitHub API和使用GraphQL述召。或者碉熄,對于在Windows上運行的Flutter桌面代碼的另一個很好的例子桨武,請查看照片搜索示例。
它使用標(biāo)準(zhǔn)的Windows文件打開對話框锈津,樹視圖小部件呀酸,拆分器小部件,并將結(jié)果與真實世界的REST API集成在一起琼梆。
對于其他有用的面向桌面的小部件性誉,我們建議使用菜單欄插件,NavigationRail小部件和DataTable小部件茎杂。您可能還對InteractiveViewer小部件感興趣错览,該小部件具有完整的桌面支持,可通過鼠標(biāo)手勢來平移和縮放子小部件煌往。
可以探索的另一組有用的小部件是SyncFusion中的那些倾哺,它們已經(jīng)在Windows開發(fā)社區(qū)中廣為人知轧邪。它們提供了廣泛的企業(yè)質(zhì)量小部件,用于創(chuàng)建圖表羞海,儀表忌愚,數(shù)據(jù)網(wǎng)格等。
這些小部件具有社區(qū)和企業(yè)許可證却邓,因此您可以找到最適合您的項目的工具硕糊。
適用于Windows的Flutter
除了Windows(通常是Flutter桌面)的軟件包和插件外,F(xiàn)lutter開發(fā)人員還一直在開發(fā)針對Windows的出色應(yīng)用腊徙,例如Invoice Ninja的實驗性構(gòu)建:
Invoice Ninja是一家依靠Flutter帶來收入的發(fā)票公司简十。他們的目標(biāo)是今天生產(chǎn)中的Android和iOS,并具有基于Web的演示供您嘗試撬腾,但也期待提供桌面版本螟蝙。
“在過去的Ninja中,我們一直在努力僅支持Web和移動設(shè)備时鸵,一次只能維護三個單獨的代碼庫胶逢。借助Flutter厅瞎,以及最近的Flutter Desktop饰潜,我們已經(jīng)能夠使用單個代碼庫為每個主要平臺構(gòu)建應(yīng)用程序。我們不僅可以從根本上獲得應(yīng)用程序的免費桌面版本和簸,而且還擁有所有應(yīng)用程序中最好的性能彭雾!”
—Invoice Ninja 聯(lián)合創(chuàng)始人Hillel Coren
如果您對實現(xiàn)可在移動和臺式機上運行的現(xiàn)實世界中可產(chǎn)生收入的Flutter應(yīng)用感興趣,則可在GitHub上找到源代碼锁保。
Aartos是另一家制造出色產(chǎn)品的公司薯酝,其中包括帶有Flutter編寫的具有多平臺客戶端的實時無人機檢測系統(tǒng)。這是在移動客戶端旁邊運行的Windows客戶端的早期版本:
視頻地址:youtu.be/mGvPCT7Vc2Y
這兩個針對iOS和Windows的版本共享完全相同的代碼庫爽柒。
如果您是經(jīng)驗豐富的Flutter開發(fā)人員吴菠,并且發(fā)現(xiàn)自己在Flutter的不同版本之間進行切換;例如浩村,一個版本用于交付生產(chǎn)型移動應(yīng)用程序做葵,另一個版本用于測試Windows alpha,那么您可能會喜歡Flutter版本管理器心墅,該版本管理器現(xiàn)在帶有Windows GUI酿矢,您可以下載該版本。
視頻地址:youtu.be/_WA71wSt2ww
該工具是開源的怎燥,因此您可以親自了解Leo如何使其看起來如此出色瘫筐。
下一步是什么
現(xiàn)在,我們已經(jīng)發(fā)布了Alpha版铐姚,我們的注意力轉(zhuǎn)移到完成功能集和穩(wěn)定產(chǎn)品的發(fā)布上策肝。作為一個開源項目,您可以在GitHub網(wǎng)站上關(guān)注我們的beta測試進展,尚需完成的其他工作包括可訪問性之众,全球化和本地化篇梭,增強的鍵盤和文本處理,對命令行參數(shù)的支持等等酝枢。
除了支持經(jīng)典的Win32 API外恬偷,我們還在試驗基于UWP的Flutter shell版本,該版本使Flutter可以訪問更廣泛的基于Windows的設(shè)備帘睦,包括Xbox袍患。作為該實驗的一部分,本周我們向Windows應(yīng)用商店發(fā)布了基于UWP的Flutter Gallery版本竣付。
以下屏幕快照顯示了在Xbox上運行的基于UWP的Flutter Gallery:
這是在Windows 10X模擬器上運行的雙屏Windows設(shè)備上運行的同一應(yīng)用程序:
您可以在GitHub上了解有關(guān)Flutter for UWP的進度的更多信息诡延。
摘要
在此版本中,我們將Flutter的功能引入Windows古胆,它具有聲明式肆良,可組合的,反應(yīng)式的框架逸绎,可提高開發(fā)人員的工作效率惹恃,并具有適應(yīng)性的Material規(guī)范實現(xiàn),因此您還可以使應(yīng)用外觀和感覺達到您希望的方式作為Flutter的全套開發(fā)和調(diào)試工具棺牧。完成后巫糙,您的應(yīng)用程序?qū)⒕幾g為本機64位代碼,您可以將其打包并帶到其他Windows計算機上颊乘,就像其他任何本機應(yīng)用程序一樣参淹。最后,您可以使用相同的代碼庫來創(chuàng)建針對Android乏悄,iOS浙值,Web,macOS和Linux的應(yīng)用程序檩小。
如果您想開始使用Flutter構(gòu)建Windows應(yīng)用程序开呐,我們希望收到您的反饋!如果您希望利用Windows的專業(yè)知識來構(gòu)建流行插件的Windows實現(xiàn)识啦,或者為Flutter構(gòu)建一些以Windows為中心的工具(也許是一個CLI负蚊,它可以從flutter build windows
命令的輸出中創(chuàng)建MSIX ……),那也歡迎您颓哮!
有了Flutter對Windows的新支持家妆,您將要構(gòu)建什么?
版權(quán)聲明:本文為原創(chuàng)冕茅,依據(jù) CC BY-SA 4.0 許可證進行授權(quán)伤极,轉(zhuǎn)載請附上出處鏈接及本聲明蛹找。
作者:老孟Flutter
鏈接:https://juejin.im/post/6876032757450047496