[譯] 為什麼你需要關注一下 Flutter

DateBro發表於2018-07-19

[譯] 為什麼你需要關注一下 Flutter

跨平臺移動應用開發新方式

什麼是 Flutter

Flutter 是由 Google 開發,完全開源的一款幫助開發者短時間內在 iOS 和 Android 上開發高質量原生介面的移動應用 SDK。

Flutter 剛剛釋出了 釋出預覽 1

為什麼選擇 Flutter 呢?

瞭解為什麼選擇 Flutter 需要明白其用途和各個平臺中的開發歷史。

誰是 Flutter 的目標使用者

  • 希望打造高效能使用者介面的開發者。
  • 不想學習各種原生平臺語言但希望進入移動應用程式開發層的 Web 應用開發者。
  • 希望通過一次開發吸引更多使用者的公司。
  • 希望應用程式設計與他們願景一致的設計師。

歷史

原生應用程式開發與跨平臺開發始終有明顯區別,有著各種優點和缺點。

跨平臺應用的確非常有吸引力。儘管如此,它仍然在不斷變化,最終填補了原生應用程式開發空間的空白。一般來說,移動開發也比較年輕(不到十年)。

這篇文章 詳細介紹了移動開發中使用的檢視技術的歷史。

第一個跨平臺框架使用了 Web 技術並顯示 Web 檢視

在 Apple 釋出 iOS SDK 之前,他們鼓勵第三方開發人員為 iPhone 搭建 web 應用,因此用 Web 技術搭建跨平臺應用是一個明顯的階段。

響應式程式設計 是一種強調非同步資料流與事件資料流的程式設計正規化。在動畫和其他渲染要求方面,它已經越來越多地被用於使用者介面開發。

像 ReactJS 這樣的響應式 Web 框架使用響應式程式設計技術來簡化 Web 檢視的構建。

根據編譯機制和檢視型別進行技術分類

[譯] 為什麼你需要關注一下 Flutter

“橋”

傳統上,構建跨平臺應用會因為在不同領域執行而面臨效能損失。應用程式是用 JavaScript 開發但介面是完全原生的。不同領域的變數不能互相訪問。不同領域的變數和資料互動都必須通過“橋”來完成。

例如,如果你在 Chrome 中除錯 React Native 應用,這就意味著程式將在兩個不同的領域執行(桌面和移動)。而這些領域通過 WebSocket 連線起來。

React Native 的優化嘗試在執行時通過“橋”將資料交換保持在最低值。最終,每個環境下的執行都很流暢但跨橋的交換的延遲會增大。

Flutter 依賴 Dart 語言的靜態編譯解決這個問題。這意味著在執行時不再需要“橋”,因為程式會被編譯成原生程式碼。

元件

視窗元件是控制和影響應用程式的檢視和介面的元素。Flutter 中萬物皆元件。這使它更加自包含,可重用和可擴充套件。

佈局

傳統的佈局依靠的是不同 CSS 檔案中定義的多項樣式規則。這些規則適用於標記,因此能夠為所應用的規則創造多種可能的互動和矛盾。CSS3 有大約 375 項規則。不考慮規則中可能存在的矛盾,佈局的可能性通常為 N 階平方。

Flutter 重新設計的佈局更高效也更直觀。佈局資訊由元件在建模時單獨指定。這不僅使檢視程式碼的開發者更容易理解正在發生的事,而且還意味著視窗元件沒有處理可能不適用於它的規則的開銷。

Flutter 團隊提供了很多他們覺得用起來不錯的佈局元件。Flutter 也有很多圍繞佈局的優化,像為了只在有必要生成大體積元件時的快取。

Dart

Flutter 團隊使用 Dart 有以下幾個原因:

  • 靜態編譯 Dart 是靜態編譯的。Dart VM 可以為你正在開發的平臺構建本機 ARM 程式碼。這意味著與使用即時編譯器,在程式執行時編譯的應用程式相比,程式要快得多。
  • 動態編譯: Dart 也可以即時編譯。Flutter 利用這種開發能力來縮短開發週期。像熱過載這樣的功能是可行的,因為應用程式可以輕鬆編譯更新,從而更容易測試和迭代產品。
  • 強型別: Dart 是一種 強型別 語言。如果你用過 Java 或 C#,有幾個原因使得過渡到 Dart 非常理想,其中一個就是是,Dart 看起來比較熟悉,以及它的型別安全,所以你不必犧牲程式的完整性。
  • 服務端的潛力: Dart 非常適合很多事情,包括在伺服器上執行。伺服器端的 Dart 越來越受人們關注。考慮到統一程式碼庫的可能性,在 Flutter 中使用它就是一個很好的例子。

你可以從 這裡 瞭解更多關於 Flutter 上使用的 Dart 語言。

Flutter 的結構

[譯] 為什麼你需要關注一下 Flutter

Flutter 應用的結構

在 Fuchsia 上的潛力

能夠在 Fuchsia 上使用。Fuchsia 是一個新的 開源 作業系統,現在由谷歌開發,這在科技愛好者圈子引起了不少的關注。不像 Android 和其他流行的作業系統,它基於一個叫做“Zircon”的微核心。Flutter 已經和 Armadillo 一起用來測試 Fuchsia 使用者介面 的開發了。

目前的不足之處

現在能感覺出的缺點是基於過去的開發者經驗。這部分只用於突出 Flutter 專案的重要性和解決方案。證明了 Flutter 團隊的發展速度。

你可以檢視本文,以瞭解原生移動開發者在測試駕駛 Flutter 時面臨的挑戰。他們強調的一些問題在我看來非常有爭議,比如缺乏 OpenGL 支援,允許 Flutter 使用 Skia,支援 OpenGL 作為其後端之一。

由於 Flutter 處於剛釋出不久,其他你可能面臨的可能的挑戰包括:

  • 動畫的低階實現。這在過去對於一些需要降低水平以創作想要的動畫的人來說就是一種挑戰。
  • 仍然缺少資料操作庫。Flutter 一開始專注視覺渲染。如果你是一個非常依賴現成的社群模組和元件來實現的人,那麼你可能會因為稀缺的資料操作庫而艱難前行。然而,我個人覺得這個領域正在穩步成熟,Flutter 提供了很多關於構建應用程式的建議,併為人們構建庫以使其產品與最佳約定保持一致鋪平了道路。

Flutter 入門

前往 Flutter.io 瞭解怎樣入門 Flutter 。你還也檢視底部參考資料部分中的內容。

總之,Flutter 入門將涉及下載 SDK 並配置使用它的路徑。在你使用的編輯器中安裝必要的外掛是必要的下一步。


你可能在 Mac OS 上遇到依賴缺失問題 ,這可以通過執行 pip install six 來解決。

當你嘗試執行 flutter upgrade 時,你可能遇到的另一個問題是合併衝突。如果你已經測試了與 SDK 捆綁在一起的 Flutter 示例,就會出現這種情況。在這種情況下,在執行 Flutter 升級命令之前進入 Flutter SDK 資料夾,儲存已更改的檔案(git add.| git stash)非常有用。

一些資源

  • Rohan Taneja 在這篇文章 中提供了珍貴資源的一套相當詳細的連結。
  • Fluttery 是一系列為想入門 Flutter 的人準備的教程,挑戰和模式集合。
  • Flutter studio 也是為想簡化開發過程的人準備的優秀資源。

我很高興嘗試它。如果你也是,請告訴我! ❤️?

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章