文 / Tim Sneath,Google Dart & Flutter 產品組產品經理android
今天咱們很是高興的宣佈,Flutter 的 1.0 版本正式發佈!Flutter 是 Google 爲您打造的 UI 工具包,幫助您經過一套代碼同時在 iOS 和 Android 上構建媲美原生體驗的精美應用!ios
現在,移動開發者們在同時兼容 iOS 和 Android 時有兩種選擇:走原生開發路線,把界面和邏輯在不一樣平臺分別實現;抑或用同一套代碼兼容多個平臺,但這每每意味着運行速度和產品保真度的損失。咱們堅信,Flutter 爲您提供了一套一箭雙鵰的解決方案——既能用原生 ARM 代碼直接調用的方式來加速圖形渲染和 UI 繪製,又能同時運行在兩大主流移動操做系統上。Flutter 並非要替代原生應用開發模式,您能夠用 Flutter 開始一個全新的應用,也能夠把 Flutter 理解爲應用內置的一個引擎,把這個引擎引入到現有的工程裏。git
讓我來從如下四個特色爲您介紹 Flutter:github
Flutter 能夠幫助您構建界面精美的應用。咱們但願設計師們都能充分發揮本身的想象,盡情施展精美絕倫的創意,而不受框架侷限性的干擾。經過 Flutter,您能夠在屏幕上有像素級的掌控。Flutter 強大的圖像組合能力讓您近乎能夠不受限制的堆疊任何圖形、視頻、文本和控件。Flutter 內置了一系列的 widgets (在 Flutter 裏,幾乎全部內容都是 widget),這些 widgets 能夠幫助您在 iOS 和 Android 上實現極致的視覺體驗。Flutter 集成並有最大程度的實現了 Material Design —— 這是 Google 爲數字體驗所創做的開放的設計系統。web
Flutter 的另外一個特色的速度快。它基於 Skia 2D 硬件加速圖形引擎,該引擎也一樣用在了 Chrome 和 Android 平臺。媲美原生應用的速度,這是咱們在構建 Flutter 時的初心。Flutter 的代碼基於 Dart 平臺,它能夠被編譯成 iOS 和 Android 平臺上 32 位和 64 位的 ARM 代碼。api
Flutter 很是高效。Flutter 引入了 Stateful Hot Reload(保持應用狀態的熱重載),這個革命性的新特性可讓移動開發者和設計師們實時迭代應用程序。經過 Stateful Hot Reload,無需從新啓動應用,你就能夠在程序運行的時候直接看到代碼修改以後的效果,Stateful Hot Reload 改變了開發者們編寫應用的方式。在咱們的用戶反饋中,開發者們表示該特性使得開發效率提高了三倍。架構
最後,Flutter 是開放的。Flutter 是一個基於 BSD-style 許可的開源項目,全球數百位開發者在爲其貢獻代碼。Flutter 的插件生態系統平臺也充滿活力。有數千款插件已經發布,避免了重複造輪子。因爲 Flutter 應用程序使用標準的 Android 和 iOS 的編譯打包工具 (build tools),所以它的開放還體如今您可使用原生開發資源。好比,您一樣能夠在 Android 上使用 Kotlin 或者 Java,在 iOS 上使用 Swift 或者 Objective-C 來寫邏輯或者界面。app
結合以上這些,再加上您順手的開發工具,好比 Visual Studio Code、Android Studio、IntelliJ 或其餘您青睞開發者編輯器,您就能夠開始使用 Flutter 體驗一套代碼同時在 iOS 和 Android上實現原生應用效果的樂趣了。框架
在 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 如此快速的發展和開發者社區所迸發的熱情所感動。」
在今天的 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 版本所實現的應用,長按下方☟二維碼☟可直接觀看:
自首個 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 Maps 和 WebView 這樣的插件已經能夠享受到這一特性帶來的種種便利了。
與其餘組件同樣,平臺級視圖 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 常見問題及兼容性注意事項"