1. 程式人生 > >Flutter 1.0 正式版: Google 的便攜 UI 工具包

Flutter 1.0 正式版: Google 的便攜 UI 工具包

文 / Tim Sneath,Google Dart & Flutter 產品組產品經理

今天我們非常高興的宣佈,Flutter 的 1.0 版本正式釋出!Flutter 是 Google 為您打造的 UI 工具包,幫助您通過一套程式碼同時在 iOS 和 Android 上構建媲美原生體驗的精美應用!

如今,移動開發者們在同時相容 iOS 和 Android 時有兩種選擇:走原生開發路線,把介面和邏輯在不同平臺分別實現;抑或用同一套程式碼相容多個平臺,但這往往意味著執行速度和產品保真度的損失。我們堅信,Flutter 為您提供了一套兩全其美的解決方案——既能用原生 ARM 程式碼直接呼叫的方式來加速圖形渲染和 UI 繪製,又能同時執行在兩大主流移動作業系統上。

「正式」向您介紹 Flutter

Flutter 並不是要替代原生應用開發模式,您可以用 Flutter 開始一個全新的應用,也可以把 Flutter 理解為應用內建的一個引擎,把這個引擎引入到現有的工程裡。

讓我來從以下四個特點為您介紹 Flutter:

  1. Flutter 可以幫助您構建介面精美的應用。我們希望設計師們都能充分發揮自己的想象,盡情施展精美絕倫的創意,而不受框架侷限性的干擾。通過 Flutter,您可以在螢幕上有畫素級的掌控。Flutter 強大的影象組合能力讓您近乎可以不受限制的堆疊任何圖形、視訊、文字和控制元件。Flutter 內建了一系列的 widgets (在 Flutter 裡,幾乎所有內容都是 widget),這些 widgets 可以幫助您在 iOS 和 Android 上實現極致的視覺體驗。Flutter 整合並有最大程度的實現了 Material Design —— 這是 Google 為數字體驗所創作的開放的設計系統。

  2. Flutter 的另一個特點的速度快。它基於 Skia 2D 硬體加速圖形引擎,該引擎也同樣用在了 Chrome 和 Android 平臺。媲美原生應用的速度,這是我們在構建 Flutter 時的初心。Flutter 的程式碼基於 Dart 平臺,它可以被編譯成 iOS 和 Android 平臺上 32 位和 64 位的 ARM 程式碼。

  3. Flutter 非常高效。Flutter 引入了 Stateful Hot Reload(保持應用狀態的熱過載),這個革命性的新特性可以讓移動開發者和設計師們實時迭代應用程式。通過 Stateful Hot Reload,無需重新啟動應用,你就可以在程式執行的時候直接看到程式碼修改之後的效果,Stateful Hot Reload 改變了開發者們編寫應用的方式。在我們的使用者反饋中,開發者們表示該特性使得開發效率提升了三倍。

  4. 最後,Flutter 是開放的。Flutter 是一個基於 BSD-style 許可的開源專案,全球數百位開發者在為其貢獻程式碼。Flutter 的外掛生態系統平臺也充滿活力。有數千款外掛已經發布,避免了重複造輪子。由於 Flutter 應用程式使用標準的 Android 和 iOS 的編譯打包工具 (build tools),因此它的開放還體現在您可以使用原生開發資源。比如,您同樣可以在 Android 上使用 Kotlin 或者 Java,在 iOS 上使用 Swift 或者 Objective-C 來寫邏輯或者介面。

結合以上這些,再加上您順手的開發工具,比如 Visual Studio Code、Android Studio、IntelliJ 或其他您青睞開發者編輯器,您就可以開始使用 Flutter 體驗一套程式碼同時在 iOS 和 Android上實現原生應用效果的樂趣了。

Flutter 勢頭正旺

在 10 個月前的世界移動大會 (MWC) 上,我們釋出了 Flutter 的第一個 Beta 版本,在正式版本尚未推出之前,已經有成百上千的基於 Flutter 開發的應用在 Apple Store 和 Google Play 上架,很顯然,廣大的開發者們也已經準備好迎接這種全新的 UI 開發方式了。

在 Google 內部,Flutter 已經被廣泛用於多個產品,比如 Google Ads 已經將其產品的 iOS 版本和 Android 版本轉向使用 Flutter。在正式版本之前,全世界已經有多個公司開始使用 Flutter 來開發應用,包括 Abbey Road Studios、阿里巴巴、Capital One、Groupon、Hamilton、京東、Philips Hue、Reflectly 以及騰訊等。

Capital One 團隊的高階工程總監 Michael Jones 對於 Flutter 提到了如下的使用心得:

“我們對於 Flutter 所帶來的高效的跨平臺開發體驗感到十分興奮。我們的工程師對其中的快速開發和 hot reload 給予了極高的評價。而且在過去的一年裡,我們也看到了整體平臺巨大的變化,尤其是和原生系統深度整合的效果。”

“Flutter 使 Capital One 研發團隊擺脫了 iOS 優先還是 Android 優先的固定思維,而是真正的移動端優先的開發模式。非常高興能看到 Flutter 1.0 的釋出,並且也對 Flutter 如此快速的發展和開發者社群所迸發的熱情所感動。”

  • 注: Capital One 是美國十大銀行之一,《財富》世界 500 強企業。

在今天的 Flutter Live 活動中,知名的支付服務商 Square 正式公佈了兩個全新的 Flutter SDK。它們可以更加簡化基於 Flutter 的支付操作和服務,無論是使用 Square 支付識讀器直接支付還是使用手機應用進行支付。Square 演示了一款基於它們的支付 SDK 所開發的應用。該應用來自 Collins Family Orchards,這是一家在太平洋西北部種植和銷售水果的家族農場。

Collins Family Orchards 應用的開發者 Dean Papastrat 認為:

“應用在生產環境下的動畫流暢度和頁面的切換速度真的讓我大開眼界。作為一個 Web 開發者,上手使用 Flutter 非常簡單。真的沒想到能夠在短短的一週時間就完成了一個能夠實現完整功能的應用。”

同樣是在今天的 Flutter Live 活動上,2Dimensions 宣佈了一款全新的工具 Flare,該工具可以將向量動畫直接嵌入到 Flutter 應用中,並且用程式碼來控制。Flare 打破了傳統的模式,無需再單獨開發應用和動畫,然後再轉換成裝置資源和程式碼。

使用 Flare 實現的動畫可以作為 widget 嵌入到已有的 Flutter 應用中。使其能夠融入整體的介面中,和文字、圖形渲染層以及其它 UI widget 疊加在一起。通過這種整合方式,可以將動畫從其他平臺的 “黑盒” 侷限性解放出來,持續促進開發者與設計師協作完成應用。Flutter 和 Flare 的緊密整合激發了設計師和動畫師的熱情來構建設計精美的移動應用。

為您介紹另外一位 Flutter 的合作伙伴 Nevercode,這是一家快速成長的,為移動應用提供持續整合和推送工具的提供商。今天,他們正式釋出了 Codemagic。該工具針對 Flutter 設計,簡化了 Android 和 iOS 平臺上的應用編譯和打包的處理過程。現在已經發布 beta 版本。使用 Codemagic,開發者只需要在 GitHub 裡選擇一個含有 Flutter 專案的倉庫,僅需簡單的幾個點選即可生成一整套處理流程,包括執行測試,生成應用軟體包並上傳至 Apple Store 和 Google Play。

這裡我們整理了一個短視訊,為大家展示開發者們基於 Flutter 的 Beta 版本所實現的應用,長按下方☟二維碼☟可直接觀看:

1.0 版本中引入的新特性

首個 Beta 版釋出以來,我們持續為 Flutter 添磚加瓦,精雕細琢。尤其是今年 PR2 版本的釋出,我們為 iOS 風格提供了全新的 widgets,接入了近 20 種 Firebase 服務,以及不斷優化效能、壓縮由 Flutter 打包的應用大小。此外,我們也悉心聽取 Flutter 社群反饋,解決了大量的問題。

此時,Flutter 正式開始使用 Dart 平臺新的 2.1 版本,這是對 Dart 2 的一次更新。它不僅生成更小的程式碼,還能夠提供更快的型別檢查以及更有用的型別錯誤提示資訊。Dart 2.1 也帶來了新的語言特性,讓開發構建過程事半功倍。這是來自開發者們的好評聲,他們在切換到新的引擎後感受到了顯著的速度提升:

1.0 正式版的主要目的是修復 Bug 和提高穩定性,但我們也非常高興地宣佈:將有兩個新功能隨 1.0 正式版的預覽模式提供給廣大開發者。它們將會於 2019 年二月的季度更新中正式推出,兩個特性分別是:

引入 Flutter 到現有工程 (Add to App)

起初在構思 Flutter 的時候,我們主要關注於從零開始構建應用的場景。但事實上受制於很多因素,並不是所有開發者都能從零構建。顯然,他們更需要能夠在現有的應用中用 Flutter 新增新的功能,或者分步驟、分階段將現有的應用程式遷移到 Flutter。 Flutter 的架構非常適合於這樣的場景,畢竟每個 Flutter 應用都包含了一個用於託管 Flutter 的 Android 或 iOS 容器。但精益求精方能上一層樓,我們在不斷努力改善漸進式接入 Flutter 的體驗,包括更新模板、優化工具、完善指南等等。現在,將素材在 Flutter 與宿主程式碼之間共享變得非常簡單了。另一方面,Flutter 的工具現在能讓您輕鬆在不使用偵錯程式啟動應用的情況下介入和監測現有的 Flutter 程序。

我們會持續不斷地改善這一體驗。雖然已經有不少客戶已經成功實踐了我們針對“應用引入”提供的指南,但絕不會就此止步,我們會一如既往增加更多優秀的案例,併為更加複雜的場景進行延伸。同時,您可以在 Wiki 頁面檢視關於將 Flutter 引入現有應用的文章,也可以在這個 GitHub 的專案看板上關注我們的進展。

平臺級檢視 (Platform Views)

上面提到的 Add to App 功能非常適合於逐漸引入 Flutter 到現有應用中,但有時候我們反倒需要將 Android 或 iPhone 平臺的控制元件嵌入到 Flutter 應用當中。 我們引入了 AndroidView 和 UiKitView 這兩個平臺級檢視的 widget 到 Flutter,您可以將它們分別嵌入到指定的平臺中。我們已經在 Android 平臺上預覽這一功能數個月了,現在是時候將這一特性推廣到 iOS 平臺了。此外,像 Google MapsWebView 這樣的外掛已經可以享受到這一特性帶來的種種便利了。

與其他元件一樣,平臺級檢視 widget 也屬於 UI 組合模型的一部分。這意味著您可以將它與其他的 Flutter 元件結合使用。舉個例子,上面的截圖中,右下角的浮動按鈕是一個 50% 透明度的 Flutter widget。這也充分展示了 Flutter 這一獨特架構的優勢。

當前這一功能已經開放給開發者們嚐鮮了,而我們仍需要不斷提升效能和改善裝置相容性。所以我們建議您在構建依賴 Platform Views 的應用時要謹慎小心。我們會堅持完善這一特性,並且期待能夠在下一次季度更新的時候將這一成果正式釋出給所有使用者。

不止步於移動平臺

就目前而言,Flutter 的首要目標平臺是 iOS 和 Android,但我們也在不斷探索將 Flutter 拓展到手機端以外的更多平臺上。事實上,Flutter 的設計理念就是希望它可以作為一個靈活且便攜的 UI 工具包,以適應各種需要繪製螢幕內容的平臺。

一些進展已經公佈,Flutter Desktop Embedding 就是其中的一個,這是一個使 Flutter 運行於 macOS、Linux 和 Windows 等桌面作業系統的專案。前不久,我們嘗試在樹莓派平臺運行了 Flutter 應用,以非正式和探索的形式向用戶展示 Flutter 是有可能執行在一些沒有完整桌面環境的小型裝置中的。

同時在本週,我們在內部預覽了一個還處於實驗室開發階段實驗性專案,未來它將極大拓展 Flutter 的執行平臺。

Hummingbird 是一個基於 Web 實現的 Flutter 執行時環境。它利用了 Dart 語言能被編譯成 JavaScript 的特性。這個專案讓 Flutter 應用程式能夠無需改動地執行在標準 Web 平臺。

我們在 Medium 部落格上釋出了一篇關於 Hummingbird 的技術實現文章,更多的內容會在 2019 年的 I/O 大會分享給大家。

當然,移動平臺一直都會是我們的首要目標。接下來的幾個月,我們會不斷公佈 Flutter 在這些核心平臺上取得的成果。

總結一下

伴隨著 Flutter 1.0 正式釋出,我們會在當前的 beta、dev 和 master 通道之外新增一個叫 stable 的穩定版通道。它的更新不如其他通道那麼頻繁,預計將以季度更新的形式將每一階段的穩定更新收納進去。

請前往 flutter.io 下載 Flutter 1.0 版本。我們的網站還提供了豐富的文件幫您從其他的框架中遷移過來,也提供了 codelabs 幫助您更好理解開發 Flutter 應用的過程。另外我們的 cookbook 收錄了常見案例的指南及大量的技術性視訊也一定能幫助您認識與瞭解 Flutter。

我們深知,那些從一開始就伴隨我們踏上征程的開發者們是如此令人敬佩。你們向我們提交了大量的反饋建議,幫助找到了諸多問題,產出了大量內容,更和我們一起讓 Flutter 專案越來越好。Flutter 社群是我們最寶貴的財富,在這裡,我們認識了很多來自不同地區和不同開發生態的積極熱情、樂於奉獻的你們。你們因為愛而為這個開源專案無私的奉獻著,我們真誠地感謝你們!

最後,為 Flutter 吟詩一首: 今朝東風拂(Flutter)大地,問君幾時揚帆去何方?

點選這裡前往Flutter 官網檢視更多資訊

點選這裡下載 "Android 9 Pie 開發者手冊"和"Android 9 Pie 常見問題及相容性注意事項"