[譯] 寫一個完整的 Flutter App 是什麼感受

更新:我將會發佈一個新的名爲 Practical Flutter 的 Flutter 課程。它將在 18 年七月底開始。若是你想收到通知,點擊這裏。 🚀前端

今天早上我吃了兩頓早飯,由於我須要發動全部的寫博客用的腦力。從個人上一個帖子之後,我有了不少想說的話,因此咱們開始吧。android

我很是激動,由於我能夠正式繼續寫關於 Flutter 的文章了,由於我即將把個人第一個 Flutter app 投放到 iOS 和 Android 商店——只有一兩週了!由於我在空閒時間裏一直在寫這個 app,因此在過去幾個月我一直拒絕被打擾。ios

自從 Ruby on Rails 或 Go 發佈以來,我從沒有由於一個技術而這麼激動過。 在花了好幾年深刻學習 iOS app 開發以後,我由於對 Android 很是不熟悉而感到不爽。並且,之前的那些跨平臺開發框架都很難吸引我。git

好比在兩年前,前往跨平臺 app 開發的聚會,我會以爲那些東西都很不正規、不穩定、開發者體驗糟糕、難以使用,或者最近一兩年都無法用。github

我剛剛完成第一個 Flutter app,並感到我能夠長期安全地向這個框架投入更多的時間。寫一個 app 是對一個框架最後的檢驗,而 Flutter 經過了這個檢驗。可以熟練地開發 iOS 和 Android app 令我感到驚喜。我也很喜歡服務端的開發與擴容,而個人妻子 Irina 是一名用戶體驗設計師,因此這是一個強大的組合。web

這篇博文將會很長,由於它包括不少內容:編程

  1. 我關於把 iOS app 遷移到 Flutter 的經驗
  2. 目前爲止關於 Flutter 的想法
  3. 對 Google 團隊的建議

我決定儘快寫下個人想法,以便繼續寫教程(以及更多的 app!)。後端

1. 把 iOS 應用遷移到 Flutter

自從個人上一個 關於 Flutter 的帖子 以來,我感受合乎邏輯的下一步是真正深刻地學習 Flutter。我很是喜歡久經考驗、由端到端的實例的教程 (think Digital Ocean 或者甚至 Auth0 教程)。端到端,細緻的,高質量的例子一直是新技術吸引個人方式,由於我能夠看到基本可以正式上線的代碼,而且確信我在使用正確的方式實現功能。我也想作一樣的事,因此我決定寫 Flutter 的教程。安全

有了這些目標以後,我決定最適合個人 app 是重寫一個我已經發布到 App store 上的 iOS app。Steady Calendar(homepageProduct Hunt),是一款個人妻子 Irina 和我設計和開發的習慣養成器。咱們是在幾年前生活在柏林時開發的。從那時候以來,這個產品使咱們爲設計、實現和發佈幫助他人養成健康習慣的產品而着迷。app

把這個 iOS app 遷移到 Flutter 花了我一到兩個月的空閒時間。這使我能夠毫無壓力地寫出優秀的 Flutter 教程。

很酷的是我能夠把如下內容包括在個人教程中,由於我在 app 中實現了它們:

  • 登陸以前的介紹。
  • Facebook/email 註冊與登陸。
  • 展現日曆的網格 view ,用戶能夠在完成一個目標以後高亮某一天。
  • iOS 與 Android 用戶都熟悉的跨平臺表單。
  • 使用 Scoped Model 的 Redux 風格的狀態管理。
  • 具備棧、定位元素、圖像和按鈕的自定義 UI。
  • 列表 view。
  • 簡單、多語言、國際化的 UI。
  • 跨平臺導航欄,一樣是 iOS 和 Android 用戶都很熟悉的。
  • 具備全局樣式的控件。
  • 集成測試。
  • 把 app 提交到 Apple 應用商店。
  • 把 app 提交到 Google Play 商店。

2. 目前爲止關於 Flutter 的想法

我已經在後端和 webapp 開發方面有了 17 年以上的經驗,其中的 4 年我重度參與了 iOS 開發,而且在上一年,我須要花不少的工做時間在 React Native 上 (去年也發佈了一些 React 項目)。

如下是在學習 Flutter 時出現的想法:

  1. 開發者體驗,開發者的團體精神和給個人支持十分驚人。從 Stack Overflow,Google Groups 到博文的全部東西質量都很高,由於人們對 Flutter 很是有熱情。 Google 工程師在平常工做以外,還願意花不少時間在 Google Groups 上回答問題,這就造成了一個了不得的社區。他們在和各類背景的工程師合做時表現得很是禮貌、很是專業,而其餘不少公司就不見得是這樣。開發者社區很是熱鬧,成員們很是積極,並提供深思熟慮的答案。文檔也很是出色。庫很是穩定,Flutter 是基於 Dart 的,而這個語言已經存在了多年,易於學習,而且久經考驗。總而言之,開發者體驗很棒。
  2. 如我所預期的,使用 Dart 的第三方庫還相對稀少。但這些並不說明 Dart 不適合使用,至少在個人經驗中不是這樣。咱們須要的特性中 95% 已經可使用了,僅有的例外是第三方的分析工具,可是對 HTTP 簡單封裝一層便可完成這個功能。
  3. Material Design 控件,Flutter 框架包含了大量的這些東西。它適合迅速開發簡單的 app,但對於專業的、跨平臺的 app,它會使 iOS 用戶感到陌生。我不能把 Material Design 控件呈現給個人 iOS 用戶,由於這將使他們對個人 app 感到陌生。Flutter 固然提供一系列的 iOS 控件,但這些東西都還不夠完整。幸虧,我開發的 Steady app 中的大多數控件已是自定義的了。對於表單之類的東西而言,這仍是頗有挑戰的。因此最後,文檔、示例和整個 Flutter SDK 都很依賴於 Material Design。這很好,但對於像我這樣的人而言,還須要更多的平衡。
  4. 在 Flutter 中開發自定義 UI 很是順暢。在被 CocoaTouch / iOS 寵壞以後,我有了很是高的標準。在接觸了大量 Flutter 代碼並比較了開發自定義 UI 的經驗後,Google 團隊確實作得很好。固然,有一些控件讓我以爲過於複雜,會使學習曲線過於陡峭,但這不是很大的問題。在寫完一個真正的 app 以後,人們將很快可以察覺最關鍵、最經常使用的控件有什麼特徵(嘿,我將在未來的教程中包括這部份內容)。
  5. 做爲一個 iOS 用戶,我花了幾個月的時間開發最初的 iOS app Steady Calendar,我將永遠不會忘記第一次在實體的安卓設備上運行它時的激動之情。我猜這是由於我老是特別不喜歡其它跨平臺移動框架。若是你花了數月的空閒時間,辛辛苦苦開發了一些東西,發現你能夠在兩個主要平臺上運行它,你將會迷上它。這對於不少人來講可能並非有幫助的反饋,但我反正須要分享個人見解!
  6. 開發跨平臺 app 將會讓你遇到更多的設計挑戰 但這和 Flutter 自己真的沒有太多關係,這主要是關於跨平臺開發的。當你計劃開發一個 Flutter app 時,要確保你有一個好的設計師和好的自定義 UI,不然你就要準備好根據狀況判斷你的 app 是該使用 Material Design 仍是 Cupertino 控件了。在前一種狀況下,這和 Flutter 的關係較小,而和開發跨平臺 app 自己的挑戰關係更大。你須要肯定 UI 對於 Android 和 iOS 的用戶而言都很好看,並且他們都能習慣它。
  7. 學習和使用 Dart 很是愉快。我喜歡它和 TypeScript 或 Flow 相比的穩定性和可靠性。說得具體一點,我有一些 React 方面的背景,並在過去幾個月的平常工做中大量(很是大量)學習 React Native。我也有多年使用 Objective-C 而後是 Swift 的經驗。Dart 是一口新鮮的空氣,由於 並不試圖變得過於複雜,而且有可靠的核心庫和包。說真的,我認爲哪怕是高中新生也可使用 Dart 完成基本的編程。我聽見不少人抱怨說他們須要學習一種新的語言,但對於 Dart 而言只須要一兩個小時,最多一天就夠了。
  8. Flutter很棒。 它並非完美的,但按照我我的的觀點,它的學習曲線,易用性,可用的工具使它成爲了比我之前用過的全部框架都更好的移動開發框架。

Google 應該作什麼

  1. Google 的團隊成員和朋友們應該在 Google Groups 中繼續提供有內涵、友好和即時的支持。這是一個很大的加分項,也是使得該框架在易用性和支持方面如此出色的緣由。支持和培育開發者社區的團隊心態良好、使人喜好,並且這是很重要的
  2. 調查開發者社區的成員,以肯定哪些控件可能不太有用。對於那些不太有用的控件,只要把它們從文檔和教程中移除或反對使用它們便可。好比,‘Center’ 控件很適合 Hello, World 容器,但我從沒有理解過它。爲何更經常使用的 「Container」 並無一個實現一樣功能的屬性?這是一個很是低級的例子,但我認爲這是 Go 之因此這麼成功的緣由之一,由於它的核心庫長期保持簡明。
  3. 更專一於 iOS 用戶。 Material Design 很適合快速開發針對安卓用戶的東西。但我從不把它用於 iOS app。我以爲相比於 Swift,Flutter 更加簡便,不須要學習大量的庫。我以爲不少 iOS 用戶會很喜歡學習 Flutter,若是它有更多 iOS 風格控件的話。
  4. 實現更加真實的特性和屏幕的更多教程。我但願看見更多像這樣的教程:flutter.io/get-started… 以及更多「端到端」的教程,其中包括後端的集成。
  5. App 主題應當更少專一於 Material Design。再說一次,我在開發 iOS 時不但願使用 「MaterialApp」 控件。主題看起來和它很緊地耦合,但主題應該是更加普適的。
  6. 文檔中更少使用 Firebase 或不要這樣常常地推進用戶使用。我發現 Firebase 很適合快速開發,而且它對於新用戶來講很是易用。可是很大數量的人已經有一個後端,或者永遠不會考慮使用 Firebase。因此我以爲更側重終於如何使用 JSON 和簡單的 web 服務將頗有幫助。我必須閱讀不少第三方教程,由於我以爲文檔不夠現實。我將在未來的博文中深刻說明這一點。

目前爲止,Flutter 使我感到很是愉快。

接下來,我將會考慮重寫另外一個我在 iOS 應用商店中的 app www.brewswap.co,它更復雜(Tinder 風格的照片滑動,實時聊天,等等)。

目前爲止,這些是我能想到的主要缺點。像全部其它框架同樣,它有不少奇怪的問題,學習曲線也不徹底合理,但總的來講,Flutter 使我感到能夠投入大量時間,並且更重要的是,享受使用它

作好收到最初幾期 Flutter 教程的準備,而且我但願我能夠爲準備投入 Flutter 的人提供一些有用的看法——我說,趕快開始吧!

若是任何人有任何問題,最好在 Twitter 上 ping 我 @seenickcode

更新註冊後能夠在 Practical Flutter 課程上線時收到通知。🚀

使用 Flutter 愉快。

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


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

相關文章
相關標籤/搜索