作為 Flutter 的一次重大版本升級,Flutter 2 將幫助開發人員立足任意平臺創建起美觀、快速且能夠輕松移植的應用程序。在 Flutter2 的支持下,用戶可以使用相同的代碼庫將原生應用程序發布至 iOS、Android、Windows、macOS 以及 Linux 五大系統陣營之上。此外,Flutter 2 還能夠完美契合 Chrome、Firefox、Safari 以及 Edge 等網絡瀏覽器,甚至可以被嵌入至汽車、電視與智能家居當中,借此帶來最普遍、最具便攜性的計算體驗。
1專為 Web、移動與臺式機環境構建
在移動互聯網時代,Android 和 iOS 兩大陣營長期共存,再加上體系成熟的 Web 前端技術,導致出現同一個應用需多端重復開發的人力成本問題。對于一個大型企業而言,要想讓自己的服務覆蓋所有客戶,必須反復多次構建同一款應用程序。這種重復還缺乏良好的并行性——他們不會構建多種計費系統或者多種工資平臺。整個過程涉及巨大的浪費,而且往往會導致各種二階問題:如何將多個應用同時遷移至多個平臺,要求各個開發團隊只能以最慢的速度推進以實現彼此匹配等等。
針對跨平臺開發問題,當下還沒有比較完美的解決方案,這也導致框架層出不窮:小程序(WebView)、React Native 、Weex、Kotlin Native 等等。同時它們又都存在一定的缺陷,比如小程序(WebView)渲染耗時過長,白屏率會影響轉化收益,能實現的功能非常受限;再比如 React Native 的性能不足、問題排除難、維護成本高等。
2018 年 12 月 5 日,谷歌公開發布 Flutter 1.0 版本。
Flutter 通過自底向上自研框架來盡可能減少平臺差異,并且 “一出生”就以“UI 漂亮、像素級可控、性能流暢、可媲美原生性能”等特點吸引廣大開發者的眼球,自渲染引擎甚至具備開發游戲的能力。
雖然目標是提供快速且統一的跨平臺編碼能,但 Flutter 1.0 發布的時候,僅支持 Android 與 iOS 應用。之后兩年多,谷歌開始將 Flutter 的支持能力逐步擴展至 Web 應用程序、MacOS、Linux、Windows 乃至嵌入式設備當中。不過之前的支持僅處于早期開發階段,并未向開發人員全面公開,自然也談不到為生產級應用程序提供支持。但這一切正隨著 2.0 版本的落地而有所變化。
Flutter 的 Web 開發工具包自 2019 年以來一直處于測試階段,此番終于獲得了 Android 及 iOS 等環境的同等地位。對于桌面開發人員,谷歌還著手將面向 Windows、MacOS 以及 Linux 的 Flutter 過渡至“穩定”版本。
Flutter 產品經理 Tim Sneath 在采訪中表示,“對我們來說,這代表著一個巨大的里程碑。不僅代碼本身能夠滿足嚴苛的生產質量標準,同時也將軟件開發套件真正交付至每一位 Flutter 用戶手中。”
在應用程序的設計環節,開發人員需要針對平臺上的獨特因素做出諸多考量——包括用戶與設備之間的交互方式(例如在手機上進行觸摸與滑動、在臺式機上使用鍵盤加鼠標)、用戶查看內容時匹配的屏幕尺寸、乃至不同平臺慣常使用的編程語言等。正因為如此,谷歌需要投入不少精力逐步改進 Flutter 開發套件。
Sneath 表示,“為了達到這個階段,我們已經付出了大量努力,包括添加國際化支持,例如在 IME 編輯器中支持中文;為桌面支持設計出 TreeView 與 DataTable 等新的功能部件;同時為采用蘋果芯片的開發設備提供更好的支持。”
以 Linux 為例,Ubuntu 項目商業化公司 Canonical 透露,Flutter 目前已經成為其默認框架,用于為 Ubuntu 操作系統開發桌面與移動應用程序。去年 7 月,谷歌與 Canonical 已經共同發布公告,宣布 Flutter 將向 Linux 領域擴展,且 Canonical 工程師也將為 Flutter 項目貢獻代碼。
作為最新擴展的一部分,Canonical 還推出了基于 Flutter 的全新 Ubuntu 安裝器應用的早期演示。
Flutter 上的 Ubuntu 安裝器
Flutter 此次公布的其他重要更新,還包括 Google Mobile Ads SDK 的 beta 測試版。這套測試版之前一直處于早期試水階段,新版本將為 AdMob 以及 AdManager 提供多種廣告格式。谷歌還推出 Flutter 插件更新,全面涵蓋 Authentication、Crashlytics、云消息收發以及云存儲等多種 Firebase 服務。
2Dart: Flutter 背后的獨門絕技
Flutter 2 擁有靈活的多平臺與多設備可移植能力,而這種輕松過渡至 Web、桌面與嵌入式設備的優勢,在很大程度上要歸功于 Dart——針對多平臺開發并進行優化的谷歌編程語言。
在構建應用方面,Dart 提供一套獨特的功能組合:
穩健的可移植表現 ,其編譯器能夠面向移動與臺式機設備生成高性能的英特爾與 ARM 機器碼,并為 Web 環境提供經過嚴格優化的 Java 輸出。所有目標皆可使用相同的 Flutter 框架源代碼。
支持有狀態熱重載的迭代開發 ,充分支持桌面與移動設備,同時提供現代 UI 編程中的異步、并發模式設計提供相應的語言構造。
谷歌級性能水平 ,可跨越一切平臺實現良好性能表現,提供 sound null safety 以保證運行時與開發過程中的 null 約束能力。
從目前來看,還沒有哪種語言能夠像 Dart 這樣將所有功能優勢融合起來。也正因為如此,Dart 成為 GitHub 上發展速度最快的語言之一。
Dart 2.12 現已正式發布,也是自 2.0 版本之后我們推出的最大規模發行版,可充分支持 sound null safety。Sound null safety 有望消除 null 引用引發的異常,為開發及運行時提供良好保障,允許開發人員明確指定哪些類型中可以包含 null 值。最重要的是,這項功能并非空降落地:用戶可以按自己熟悉的方式將其逐步添加至代碼內,而后配合遷移工具實現 null 值保護。
此次更新還包含 FFI 穩定實現,允許用戶編寫出能夠與基于 C 語言的 API 進行互操作的高性能代碼;由 Flutter 編寫的全新集成化開發者與分析器工具;外加眾多性能與體量方面的改進,能夠在無需重新編譯的前提下進一步實現代碼升級。
3Flutter 生態現狀
去年 4 月,谷歌表示 Fluuter 的月度開發者用戶已經達到 50 萬。近一年之后,谷歌只是提到“采用率仍在不斷增長”,但并沒有提供任何更新數字。在本次發布中,谷歌強調 Google Play 軟件商店中已經存在 15 萬種 Flutter 驅動型應用程序。但蘋果 App Store 等外部商店擁有自己的統計系統,因此相關數據尚不明確。
Sneath 提到,“有趣的是,我們發現部分應用程序會面向特定移動平臺添加 Flutter 應用,之后再將其回滾至其他平臺。”
目前,世界各地的客戶都在積極嘗試使用 Flutter,包括微信、Grab、Yandex Go、Nubank、Sonos、Fastic、Betterment 以及 realtor.com 等高人氣應用。在谷歌,同樣有 1000 多名工程師正在使用 Dart 與 Flutter 構建應用產品,其中的代表包括 Stadia、Google One 以及 Google Nest Hub。
就在幾個月前,Google Pay 剛剛轉投 Flutter 的懷抱,借此在生產力與質量方面取得了重大進步。通過統一代碼庫,項目團隊消除了不同平臺之間的功能差異,并削減了超過 100 萬行代碼。Google Pay 還報告稱,如今團隊工程師們的效率大為提升、技術債務顯著減少,發布流程也變得更為統一(例如 iOS 與 Android 上的安全審查與試驗)。
另一方面,雖然 Flutter 希望提供快速且統一的跨平臺編碼能力,但對于體量更大、復雜度更高的企業及應用程序,對于 Flutter 這款相對年輕的框架而言,第三方軟件庫與軟件包的匱乏限制了開發人員的手腳。因此對于大多數企業而言,原生軟件開發方法仍然占據主流。
Sneath 提到,“生態系統不可能一夜之間構建完畢,從某些標準來看,Flutter 仍然是個年輕的平臺。但我們認為,超過 15000 個軟件包的涌現已經代表著 Nubank 與 Realtor.com 等廠商在填補這方面空白上做出的持續努力。我們為這種持續增長感到非常振奮。”








