使用Flutter一年後,這是我得到的經驗
作者 | Nick Manning
譯者 | 薛命燈
在這篇文章中,我將分享我使用 Flutter 的經驗,以及我在整個過程中發現的所有 Flutter 的優缺點。
在過去的一年裡,我是如何使用 Flutter 的呢?我做了以下這些事情:
使用 Flutter 重寫一款已經發布到 App Store 的 iOS 應用程序。
開發了一個 Flutter 免費速成課程,錄製 5 個多小時的教學視頻內容。
使用 Flutter 開發一些小型尚未發布的應用程序。
以下是在過去一年中,我通過使用 Flutter 學到的東西。
1
Dart 易學易用
與 TypeScript 或 Flow 相比,Dart 更容易學,語法也更簡單。我能夠快速地進行開發,因為編譯器提供了明確的錯誤消息,具有更少隱藏的非預期運行時錯誤。在開發中型應用程序時,開發人員應該擁抱強類型語言,因為它在加快開發速度和編寫可靠代碼方面起到很大作用。
2
偶爾還要「自己動手」
在採用新技術時,有時候需要「推出自己的」庫,以便與第三方服務集成。例如,為了在我的應用程序中集成 Mixpanel(因為它們提供了一個免費套餐選項和一個非常簡單清晰的 UI),我不得不開發我自己的庫 pure_mixpanel(https://pub.dartlang.org/packages/pure_mixpanel)。這不是什麼大不了的事情,實際上它很有趣。
我個人在使用 scoped_model 方面有很多成功的經驗,它很好地抽象出需要使用流的地方,並且很像 React 的新 Context API。你可以乾淨利落地將業務邏輯和渲染邏輯完美地分開,並且它非常容易學。
3
架構和狀態管理模式還不夠成熟
首先,Flutter 是一項新技術,因此在實際應用、可信的架構模式和狀態管理工具方面仍然有待發展。有些人會遵循「BLoC」(或「業務邏輯組件」,https://www.youtube.com/watch?v=fahC3ky_zW0)模式。在我看來,它有點太過複雜了,而且有些複雜性是不必要的。
還有 RxDart(https://github.com/ReactiveX/rxdart)和 Redux for Flutter(https://pub.dartlang.org/packages/flutter_redux),不過我還沒有用過它們,因為它們看起來也過於複雜了。但是,Android 或 React 開發者似乎有很多成功使用它們的經驗,他們可能已經習慣使用它們了。
我認為整個生態系統在 2019 年會更加成熟,因為越來越多的人正在開發越來越複雜的 Flutter 應用程序。
4
熱重載仍然很重要
關於這一點沒什麼好說的,只是 Flutter 的這個特性太重要了,所以有必要在這裡單獨提及。它更快,也更可靠了。
5
跨平台設計很難
Material Design 非常棒,對於某些類型的 Web 應用程序和 Android 應用程序來說,它都是一個明智的選擇。但對於 iOS 用戶來說並不是一個好主意,除非它是谷歌應用程序或非常簡單的東西,iOS 用戶已經習慣使用 CocoaTouch 風格的 UX。
在基於同一個代碼庫開發兩個平台的應用程序時,越來越多的人使用某種定製的自定義設計,並引入了常見的設計元素(例如標籤欄)。儘管 Flutter 也提供了大量 iOS 風格的小部件,但為了降低代碼的維護成本,大多數人選擇定製 Flutter 的 Material Design 庫,這實現起來非常容易。
我想再寫一篇有關這個主題的文章,我的建議是堅持使用 Material Design,讓那些 iOS 用戶不會覺得太「像 Android」了。例如表單,使用 Material Design 的樣式來裝扮表單欄位,對兩種類型的用戶來說都足夠熟悉。
6
使用 Flutter 實現複雜的布局其實容易
我習慣使用 React、CSS Grid、Flexbox 等庫來實現布局。Flutter 的布局方式從這些工具中獲取了很多靈感。如果你已經熟悉這些基於 Web 的布局概念,那麼學習 Flutter 的布局就會非常簡單。即使不熟悉,學起來也很容易。如果你想感受一下,可以看一下這個視頻:
https://fluttercrashcourse.com/lessons/container-layout-column-row
此外,Dart 和 Flutter 的 UI 邏輯在代碼可讀性方面表現得都非常出色。總的來說,我更喜歡自己實現布局,而不是使用 JSX 之類的東西。它讓我想起了 Swift 和 iOS 中的布局邏輯是多麼的簡單,如果你是通過編程的方式實現布局的話。
7
將會有更多端到端的應用示例
雖然現在有很多與 Flutter 相關的文檔、教程、社區,但我認為人們對小部件的關注有點過頭了。這點是可以理解的,畢竟 Flutter 還很年輕。但是,最終越來越多的人不僅用 Flutter 來實現純粹的 UI 和動畫,而且還會用來開發更多完整的應用程序。我認為,Flutter 的網站上將會有更多端到端的示例教程。
我學會了使用 Flutter 開發整個應用程序,而不僅僅是小部件。我發現了很多非常有用的 Dart 高級功能。我提到的架構模式也是值得你去深究的。最後,與 Web 服務集成和其他 Dart 最佳實踐仍然需要更多的文檔和教程。
8
我的下一個項目將使用 GraphQL 或 gRPC
我總是希望能夠減少樣板代碼的使用,雖然有一些工具(https://flutter.io/docs/development/data-and-backend/json)可以幫我解決這個問題,但對於我的下一個項目,我將使用 GraphQL 或 gRPC。我認為對這兩項技術的投入都是值得的。至於 gRPC,我不推薦將它用於較小的項目,但對於中型或大型項目,一旦你用了它,就很難再退回去了。gRPC 在我的一個使用 Swift 開發的項目中非常有效,已經在生產環境中運行了好幾年。
9
提交應用程序都非常簡單
為每個平台提交應用程序所需的工具和步驟需要花一些時間來學習,特別是谷歌 Play 商店和 iTunes Connect,但其實它們非常簡單。
10
Flutter 提供了太多的小部件
我之前學習了所有我認為必須學習的小部件,但最終只使用了大約 20%。例如,Center 小部件(https://docs.flutter.io/flutter/widgets/Center-class.html)。
為什麼要單獨使用一個小部件來讓元素居中?雖然它讓新手很容易上手,但在用它實現更複雜的布局時,會產生太多嵌套的 Dart 代碼。相反,我會選擇基本的 Container 布局(https://docs.flutter.io/flutter/widgets/Container-class.html),因為它們非常靈活。
我的建議是專註於基本的簡單小部件,只有到了真正需要的時候才去了解更多的小部件。
11
放棄 Firebase(只用來實現推送通知)
Firebase 看起來像是一款出色的產品,它讓我想起了之前的 Parse(https://parseplatform.org/)。對於簡單的項目,或者在後續需要將項目移交給沒有足夠專業開發人員的客戶來說,它似乎是一個不錯的選擇。
現實情況是,大多數公司都已經有自己的後端,還有一些技術團隊選擇自己開發後端。大型公司或初創公司傾向於這麼做。
對於獨立開發者,如果你的流量激增,能承受每月的 Firebase 賬單嗎?這實際上也是我避免使用 Firebase 的主要原因,因為如果我遇到了病毒傳播式的「夢想問題」,並且 Firebase 根據使用情況收取費用,我將如何應對?
因為我是以開發後端系統為生,所以會存在這樣的偏見。如果你是初級開發人員,你開發的後端到最後會移交給客戶,或者你不開發後端 API,那麼我仍然會強烈建議你關注 Firebase。
12
Flutter 的文檔越來越好了
窗口小部件和類文檔現在有越來越多的示例:
https://docs.flutter.io/flutter/widgets/Container-class.html
相比其他缺乏文檔的庫,這是 Flutter 的一個勝利,而且更不用說編寫良好的文檔了。
除了文檔之外,在去年的大部分時間裡,Stack Overflow 上有很多熱情、知識淵博的人為我提供了幫助。
13
我被 iOS 和 Flutter 的開發體驗寵壞了
我從事 iOS 開發已經很多年了,所以我有點被 iOS 的開發者體驗寵壞了。不只是文檔和支持,還有 iOS 生態系統的整體質量,從庫到 Xcode,再到 CocoaTouch SDK 的組織方式。
Flutter 也提供了類似的體驗。它也非常簡單,同時也借鑒了某些 React Native 組件的簡單性,比如 ListView。所以,整體來說,有了成熟的工具的配合,學習和使用 Flutter 會非常順利。
14
無法回到「單平台」移動開發
視頻遊戲開發人員可能永遠不會考慮單獨為一個平台開發一個代碼庫。現在,因為 React Native 和 Flutter 的出現,「非視頻遊戲」開發人員也可以這麼做。
例如,在空閑時間,我會與妻子(她是一名用戶體驗設計師)一起開發應用程序。將 iOS 應用程序轉為 Flutter 後,我們的用戶翻了一倍,現在它已經運行在兩個平台上,所以無法再回到單平台上。
15
最後的想法
經過一年的折騰,當我開始開發下一個 Flutter 應用程序時。我非常慶幸將時間花在學習 Fluttet 上。對於企業來說,現在有了一種可用於開發多平台應用程序的選項,而對於開發人員來說,使用它是一種樂趣。如果你將這個事實與谷歌在 Fuschia 操作系統上對 Flutter 所做的投入相結合,你就可以知道,這些事實本身就表明谷歌非常重視這項技術。
英文原文:
https://hackernoon.com/one-year-with-flutter-my-experience-5bfe64acc96f
Q 新聞好看嗎?
※從2019年開始,終結數據結構與演算法的噩夢
※託管近2億行代碼的Apache年度報告出爐
TAG:InfoQ |