- 原文地址:What It Was Like to Write a Full Blown Flutter App
- 原文作者:Nick Manning
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:tanglie1993
- 校對者:Park-ma, atuooo
更新:我將會釋出一個新的名為 Practical Flutter 的 Flutter 課程。它將在 18 年七月底開始。如果你想收到通知,點選這裡。 ?
今天早上我吃了兩頓早飯,因為我需要發動所有的寫部落格用的腦力。從我的上一個帖子以後,我有了很多想說的話,所以我們開始吧。
我非常激動,因為我可以正式繼續寫關於 Flutter 的文章了,因為我即將把我的第一個 Flutter app 投放到 iOS 和 Android 商店——只有一兩週了!因為我在空閒時間裡一直在寫這個 app,所以在過去幾個月我一直拒絕被打擾。
自從 Ruby on Rails 或 Go 釋出以來,我從沒有因為一個技術而這麼激動過。 在花了好幾年深入學習 iOS app 開發之後,我因為對 Android 非常不熟悉而感到不爽。而且,以前的那些跨平臺開發框架都很難吸引我。
比如在兩年前,前往跨平臺 app 開發的聚會,我會覺得那些東西都很不正規、不穩定、開發者體驗糟糕、難以使用,或者最近一兩年都沒法用。
我剛剛完成第一個 Flutter app,並感到我可以長期安全地向這個框架投入更多的時間。寫一個 app 是對一個框架最後的檢驗,而 Flutter 通過了這個檢驗。能夠熟練地開發 iOS 和 Android app 令我感到驚喜。我也很喜歡服務端的開發與擴容,而我的妻子 Irina 是一名使用者體驗設計師,所以這是一個強大的組合。
這篇博文將會很長,因為它包括很多內容:
- 我關於把 iOS app 遷移到 Flutter 的經驗
- 目前為止關於 Flutter 的想法
- 對 Google 團隊的建議
我決定儘快寫下我的想法,以便繼續寫教程(以及更多的 app!)。
1. 把 iOS 應用遷移到 Flutter
自從我的上一個 關於 Flutter 的帖子 以來,我感覺合乎邏輯的下一步是真正深入地學習 Flutter。我非常喜歡久經考驗、由端到端的例項的教程 (think Digital Ocean 或者甚至 Auth0 教程)。端到端,細緻的,高質量的例子一直是新技術吸引我的方式,因為我可以看到基本能夠正式上線的程式碼,並且確信我在使用正確的方式實現功能。我也想做同樣的事,所以我決定寫 Flutter 的教程。
有了這些目標之後,我決定最適合我的 app 是重寫一個我已經發布到 App store 上的 iOS app。Steady Calendar(homepage,Product Hunt),是一款我的妻子 Irina 和我設計和開發的習慣養成器。我們是在幾年前生活在柏林時開發的。從那時候以來,這個產品使我們為設計、實現和釋出幫助他人養成健康習慣的產品而著迷。
把這個 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 時出現的想法:
- 開發者體驗,開發者的團體精神和給我的支援十分驚人。從 Stack Overflow,Google Groups 到博文的所有東西質量都很高,因為人們對 Flutter 非常有熱情。 Google 工程師在日常工作之外,還願意花很多時間在 Google Groups 上回答問題,這就形成了一個了不起的社群。他們在和各種背景的工程師合作時表現得非常禮貌、非常專業,而其他很多公司就不見得是這樣。開發者社群非常熱鬧,成員們非常積極,並提供深思熟慮的答案。文件也非常出色。庫非常穩定,Flutter 是基於 Dart 的,而這個語言已經存在了多年,易於學習,並且久經考驗。總而言之,開發者體驗很棒。
- 如我所預期的,使用 Dart 的第三方庫還相對稀少。但這些並不說明 Dart 不適合使用,至少在我的經驗中不是這樣。我們需要的特性中 95% 已經可以使用了,僅有的例外是第三方的分析工具,但是對 HTTP 簡單封裝一層即可完成這個功能。
- Material Design 控制元件,Flutter 框架包含了大量的這些東西。它適合迅速開發簡單的 app,但對於專業的、跨平臺的 app,它會使 iOS 使用者感到陌生。我不能把 Material Design 控制元件呈現給我的 iOS 使用者,因為這將使他們對我的 app 感到陌生。Flutter 當然提供一系列的 iOS 控制元件,但這些東西都還不夠完整。幸好,我開發的 Steady app 中的大多數控制元件已經是自定義的了。對於表單之類的東西而言,這還是很有挑戰的。所以最後,文件、示例和整個 Flutter SDK 都很依賴於 Material Design。這很好,但對於像我這樣的人而言,還需要更多的平衡。
- 在 Flutter 中開發自定義 UI 非常順暢。在被 CocoaTouch / iOS 寵壞之後,我有了非常高的標準。在接觸了大量 Flutter 程式碼並比較了開發自定義 UI 的經驗後,Google 團隊確實做得很好。當然,有一些控制元件讓我覺得過於複雜,會使學習曲線過於陡峭,但這不是很大的問題。在寫完一個真正的 app 之後,人們將很快能夠察覺最關鍵、最常用的控制元件有什麼特徵(嘿,我將在將來的教程中包括這部分內容)。
- 作為一個 iOS 使用者,我花了幾個月的時間開發最初的 iOS app Steady Calendar,我將永遠不會忘記第一次在實體的安卓裝置上執行它時的激動之情。我猜這是因為我總是特別不喜歡其它跨平臺移動框架。如果你花了數月的空閒時間,辛辛苦苦開發了一些東西,發現你可以在兩個主要平臺上執行它,你將會迷上它。這對於很多人來說可能並不是有幫助的反饋,但我反正需要分享我的看法!
- 開發跨平臺 app 將會讓你遇到更多的設計挑戰 但這和 Flutter 本身真的沒有太多關係,這主要是關於跨平臺開發的。當你計劃開發一個 Flutter app 時,要確保你有一個好的設計師和好的自定義 UI,否則你就要準備好根據情況判斷你的 app 是該使用 Material Design 還是 Cupertino 控制元件了。在前一種情況下,這和 Flutter 的關係較小,而和開發跨平臺 app 本身的挑戰關係更大。你需要確定 UI 對於 Android 和 iOS 的使用者而言都很好看,而且他們都能習慣它。
- 學習和使用 Dart 非常愉快。我喜歡它和 TypeScript 或 Flow 相比的穩定性和可靠性。說得具體一點,我有一些 React 方面的背景,並在過去幾個月的日常工作中大量(非常大量)學習 React Native。我也有多年使用 Objective-C 然後是 Swift 的經驗。Dart 是一口新鮮的空氣,因為 並不試圖變得過於複雜,並且有可靠的核心庫和包。說真的,我認為哪怕是高中新生也可以使用 Dart 完成基本的程式設計。我聽見很多人抱怨說他們需要學習一種新的語言,但對於 Dart 而言只需要一兩個小時,最多一天就夠了。
- Flutter很棒。 它並不是完美的,但按照我個人的觀點,它的學習曲線,易用性,可用的工具使它成為了比我以前用過的所有框架都更好的移動開發框架。
Google 應該做什麼
- Google 的團隊成員和朋友們應該在 Google Groups 中繼續提供有內涵、友好和即時的支援。這是一個很大的加分項,也是使得該框架在易用性和支援方面如此出色的原因。支援和培育開發者社群的團隊心態良好、令人喜愛,而且這是很重要的。
- 調查開發者社群的成員,以確定哪些控制元件可能不太有用。對於那些不太有用的控制元件,只要把它們從文件和教程中移除或反對使用它們即可。比如,‘Center’ 控制元件很適合 Hello, World 容器,但我從沒有理解過它。為什麼更常用的 “Container” 並沒有一個實現同樣功能的屬性?這是一個非常低階的例子,但我認為這是 Go 之所以這麼成功的原因之一,因為它的核心庫長期保持簡明。
- 更專注於 iOS 使用者。 Material Design 很適合快速開發針對安卓使用者的東西。但我從不把它用於 iOS app。我覺得相比於 Swift,Flutter 更加簡便,不需要學習大量的庫。我覺得很多 iOS 使用者會很喜歡學習 Flutter,如果它有更多 iOS 風格控制元件的話。
- 實現更加真實的特性和螢幕的更多教程。我希望看見更多像這樣的教程:flutter.io/get-started… 以及更多“端到端”的教程,其中包括後端的整合。
- App 主題應當更少專注於 Material Design。再說一次,我在開發 iOS 時不希望使用 “MaterialApp” 控制元件。主題看起來和它很緊地耦合,但主題應該是更加普適的。
- 文件中更少使用 Firebase 或不要這樣經常地推動使用者使用。我發現 Firebase 很適合快速開發,並且它對於新使用者來說非常易用。但是很大數量的人已經有一個後端,或者永遠不會考慮使用 Firebase。所以我覺得更側重終於如何使用 JSON 和簡單的 web 服務將很有幫助。我必須閱讀很多第三方教程,因為我覺得文件不夠現實。我將在將來的博文中深入說明這一點。
目前為止,Flutter 使我感到非常愉快。
接下來,我將會考慮重寫另一個我在 iOS 應用商店中的 app www.brewswap.co,它更復雜(Tinder 風格的照片滑動,實時聊天,等等)。
目前為止,這些是我能想到的主要缺點。像所有其它框架一樣,它有很多奇怪的問題,學習曲線也不完全合理,但總的來說,Flutter 使我感到可以投入大量時間,而且更重要的是,享受使用它。
做好收到最初幾期 Flutter 教程的準備,並且我希望我可以為準備投入 Flutter 的人提供一些有用的見解——我說,趕快開始吧!
如果任何人有任何問題,最好在 Twitter 上 ping 我 @seenickcode。
更新:註冊後可以在 Practical Flutter 課程上線時收到通知。?
使用 Flutter 愉快。
如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。