[譯] 我與 Flutter 的一年

這是 Flutter 美好的一年。html

大概恰好一年前,我寫了一篇名爲「爲何 Flutter 2018 年即將起飛」的文章。雖然 Flutter 幾乎通過整個 2018 年的測試階段才達成如今的 1.0 版本,可是它的社區和產品已經在這個過程當中獲得了飛速的成長,如今 Flutter 已經進入 GitHub 倉庫 star 排名前 20。而這篇文章,介紹的是我一年來使用 Flutter 的經驗,以及我在此過程當中發現的 Flutter 的優缺點前端

過去一年我用 Flutter 作了什麼:react

  • 使用 Flutter 重寫了一個以前就已經上架 App Store 的 iOS 應用
  • 發佈免費 Flutter 速成課,錄製超過 5 小時的教學視頻。
  • 使用 Flutter 開發了一些還沒有發佈的小應用。

在我列出個人想法以前,先介紹一下個人技術背景,就移動開發來講我是 iOS 開發。另外,去年我在平常工做中也大量使用了 React Native。我不打算將 Flutter 與這些技術進行比較,但這些移動開發經驗確實會影響我對 Flutter 的印象。android

而後,如下就是我使用 Flutter 一年來學到的:ios

1. Dart 簡單易學,愉快使用

相比去年我在 React Native 開發中普遍使用的 TypeScriptFlow,Dart 更容易學習,語法更簡單。我可以高效開發應用,必不可少的是可靠的編譯器,它有明確的,定義良好的錯誤消息,極少的意外隱藏運行時錯誤。若是有足夠多的人但願瞭解相關內容,我會寫一篇更詳細的例子比較。我要說的是,即便是編寫中等規模的應用程序,開發人員也應該考慮強類型語言,由於這爲高速開發和編寫可靠代碼節省了大量時間。git

2. 有時候仍然須要「本身動手」

涉及新技術的另外一個常見狀況是:須要「本身動手」寫一個庫對接第三方服務。例如,要使用 Mixpanel 分析個人應用程序(由於他們大方地給出了免費套餐,而且 UI 簡單,清晰),我不得不本身動手封裝一個庫:pure_mixpanel,這不難,並且頗有意思。github

我使用 scoped_model 得到了不錯的實踐,由於它很好的去掉了流的使用,使用方法很像 React 剛更新的 Context API。你能夠乾淨利落地將業務邏輯和渲染邏輯完美地分開,而且很是容易上手。web

3. 架構和狀態管理模式仍未成熟

Flutter 是一項新技術,所以在實踐、架構模式和狀態管理等方面仍然難以得到足夠的意見。有些人遵循「BLoC」(business logic component)模式。由於我認爲它有點過於的複雜,因此仍未肯定使用它。還有 RxDartRedux for Flutter,這兩個我還沒用過,由於它們彷佛也太麻煩了。另外一方面,Android 或 React 工程師彷佛有很多成功實踐,多是由於他們已經習慣這種模式。typescript

我認爲整個生態系統將在 2019 年成熟,由於愈來愈多的人正在編寫更復雜的 Flutter 應用程序。編程

4. 熱重載是個重點

關於這一點其實沒什麼好說的,Flutter 這個特性的重要程度,足以在本文增長這一節。Flutter 熱重載很快,並且更可靠。對於其餘技術的熱重載,我真不敢這麼說(告訴本身我沒有黑其餘技術)。

5. 跨平臺設計不容易

Material Design 很美好,可讓咱們快速起步。顯然對於某些類型的 web app 以及 Android 應用來講是個不錯的選擇,可是將它呈現給 iOS 用戶並非一個好主意,除非它是谷歌應用或其餘很是簡單的應用。iOS 用戶習慣使用 CocoaTouch 風格的 UX。

「一次編寫隨處運行」、定製的自定義設計、引入設計常見的設計元素(例如,標籤欄)等狀況愈來愈廣泛。儘管 Flutter 確實提供了大量 iOS 風格的 widget,但爲了使代碼易於維護,大多數人會使用封裝定製後的 Flutter 的 Material Design 庫,這是很容易實現的。

我將撰寫另外一篇關於這個主題的文章,但個人建議是堅持使用 Material Design,能夠在某些方面,試着讓那些 iOS 用戶以爲不那麼「安卓」。以表單爲例,使用 Material Design 樣式的表單字段對兩種類型的用戶都是足夠熟悉的。

6. 在 Flutter 中實現複雜佈局很簡單

我習慣使用 React、CSS Grid、Flexbox 等庫來實現佈局。Flutter 的佈局方法從這些庫中借鑑了許多。若是你已經熟悉這些基於 Web 的佈局概念,那麼學習 Flutter 佈局將會很是簡單。即便不懂 Web 佈局,它仍然很簡單。若是你想感覺一下 Flutter 的佈局方法,能夠觀看此視頻

此外,從代碼可讀性的角度來看,Dart 和 Flutter 中的 UI 邏輯很是出色。總的來講,比起 JSX 我我的更喜歡這種佈局方式。它讓我想起了 Swift 和 iOS 中簡單的佈局邏輯(若是你是以編程方式實現佈局的話)。

7. 仍然須要更多關注端到端應用示例

雖然有大量可靠的文檔,教程,社區以及與其餘 Flutter 使用者的幫助,可是這些都太着重於 widget 了。Flutter 剛出來時這確實很必要。但最終,愈來愈多的人不只僅是實現純 UI 和動畫,而是開始編寫更多更完善的應用程序,我認爲 Flutter 的網站上應該突出介紹更多的端到端教程。這也是我本身開設課程網站的主要緣由。

我學習編寫 Flutter 應用並不侷限於僅僅使用控件。我發現有許多更高級的 Dart 功能很是有用,你必須挖掘它們。我提到的架構模式也值得挖掘。最後,集成 Web 服務和其餘 Dart 最佳實踐集成仍須要更多文檔和教程。

8. 下一個項目我將使用 GraphQL 或 gRPC

我老是爭取更少的模版代碼。雖然某些工具在一些簡單項目中解決了個人問題,但我想個人下一個項目我會使用 GraphQLgRPC。我認爲對這二者的投入都是值得的。關於 gRPC,我不推薦將它用於較小的項目,但對於中大型項目,一旦你使用它,就會愛上它。gRPC 在個人一個 Swift 項目行之有效,已經投入生產環境運行好幾年了。

9. 在兩個平臺提交應用程序都很簡單

你須要必定時間習慣爲每一個平臺(特別是 Google Play 商店和 iTunes Connect)提交應用程序所需的工具和步驟,但這很是簡單。我會說爲 iOS 提交應用程序確定更符合學習曲線。

10. Flutter 有太多的 widget

在 Flutter 應用開發過程我認爲有必要學習的那些控件中,實際被我用到的大概只有 20%。例如 Center widget,爲何須要一個具有使子控件居中這樣單一功能的控件?雖然它使新手很容易上手,可是在實現複雜的佈局時,widget 會產生太多嵌套的Dart代碼。相反,我會回到基本的 Container 佈局,由於這相比起來更靈活。

個人建議先關注於簡單,基本的 widget,真正須要時再學習其餘 widget。

11. 我正在從 Firebase 轉移(推送通知除外)

Firebase 彷佛是一款出色的產品。它讓我想起了當年的 Parse。Firebase 對這些狀況是比較好的選擇:簡單的項目,或者你將要把項目移交到沒有足夠後端技術人員的客戶時。

但事實上,大多數產品已經有現成的後端,或者技術團隊編寫本身的後端。無論大型公司或者甚至是初創企業都是如此。

對於獨立開發者或小團體,若是你的流量激增,每個月 Firebase 帳單會發生什麼變化?這就是我避免使用 Firebase 的主要緣由,若是個人應用真的如夢想通常被用戶瘋傳,Firebase 找我要錢怎麼辦?

請注意,個人職業是編寫後端系統,因此這僅僅是個人我的見解。若是你是初級開發人員,想要將簡單的後端交付給客戶,或者你只是不想編寫後端 API,我仍然推薦使用 Firebase。

12. Flutter 的文檔愈來愈完善

Widget 和 class 文檔如今有愈來愈多的示例(例如)。這是對比其餘缺少適當示例的庫是巨大的優點,更不用說編寫良好的文檔了。

除了文檔以外,去年 Stack Overflow 上還有不少熱情、知識豐富的人爲我提供技術支持。

13. 即便被 iOS 開發慣壞了,也能使用 Flutter

我當 iOS 工程師不少年了,因此我有點被 iOS 開發慣壞了。不只是文檔和支持,仍是 iOS 生態系統的總體質量,從庫到 Xcode,再到 CocoaTouch SDK 的組織方式。

Flutter 也符合我以前的體驗。它也很是簡單,同時也考慮了某些 React Native 組件的簡單性,好比 ListView(朋友,你使用過 iOS 的 UITableViewController 嗎?Yuck)因此總的來講,有了成熟的工具來配合 Flutter,學習和使用它會很是流暢。再也不須要像 Xcode 這樣複雜的工具真的讓人眼前一亮。

14.我不會再回到「單平臺」開發

遊戲開發者可能永遠不會只爲一個平臺編寫一套代碼。React Native 和 Flutter 出現後,「非遊戲開發者」也能作到一樣的事。

例如,在空閒時,我會參與夫妻經營的小項目,與個人 UX 設計師妻子編寫應用程序。Flutter 重構這個 iOS 應用後,用戶基數變爲雙倍,如今它已經在兩個平臺上發佈,我確定不會再考慮回到單平臺了。

最後的想法

一年以後,我將開始編寫下一個 Flutter 應用程序時(以後將會發布記錄開發過程的視頻!),我仍然很是高興我將時間投入到學習 Flutter 中。我如今已經不能回到以前的開發模式。對於企業來講,做爲一種用於多平臺編寫技術的可行選擇是有意義的,並且,做爲開發人員使用跨平臺技術也是一種樂趣。再加上網頁 Flutter 技術,好比 Hummingbird 以及谷歌爲全新 Fuschia 操做系統 長期投入 Flutter,這些事實都代表谷歌注重這項技術。

歡迎隨時經過 Twitter 與我聯繫。另外若是你感興趣,能夠看看個人網站 fluttercrashcourse.com 上的免費 Flutter 課程!

2019 編程快樂!

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


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

相關文章
相關標籤/搜索