本文已受權「玉剛說」微信公衆號獨家原創發佈前端
本文筆者將嘗試分享我的針對Flutter
的 學習 並 搭建一個Flutter應用 的過程。android
在這一個月學習Flutter
的過程當中,我不可避免的走了不少彎路,也許這並不是壞事,可是仍是但願將這些經歷表述出來,有兩個目的:git
Flutter
的讀者必定實質性的參考。關於筆者總結的
Flutter
入門學習計劃,可直接跳轉文末的 Flutter入門學習計劃 小節進行查看。github
上個月25號,任玉剛老師聯繫我,問我有沒有興趣翻譯一篇Flutter
的技術博客。編程
當時我尚未接觸Flutter
,以爲這是一個督促本身學習的機會,就嘗試接下了這個任務。截止今天爲止(6月25日)恰好一個月,在第一週保證翻譯任務 完成 以後,三週以後的今天,我基本實現了本身的另一個目標——搭建一個 Github客戶端。微信
這個項目運行以後,App總體效果是這樣的:markdown
我將代碼託管在了本身的Github
上:架構
FlutterGitHubApp: Flutter開發的跨平臺Github客戶端.app
由於這是一個入門的項目,因此接下來也會從各方面深刻學習Flutter
,並反過來繼續完善和優化它。異步
最初學習Flutter
的方式是經過學習 wendux 老師的 《Flutter實戰》。
這是一本很是優秀的中文Flutter
教程,對我的學習Flutter
入門有很是大的幫助。
我根據這本小冊中的內容完成了第一個 計數器 的入門案例,並對最經常使用的一些控件進行了熟悉和了解:
正如讀者所見,我跟着《Flutter實戰》 寫了若干的demo代碼,遺憾的是,效果並無想象的那麼好,緣由也很明顯,那就是我尚未徹底熟悉Dart
的語法。
學習Flutter
的最開始,語法並不是是最大的阻礙因素,由於對於熟悉Java
語法的咱們來講,Dart
有不少類似之處,但隨着Flutter
學習的不斷深刻,有時一些Dart
獨有的語法特性會給我帶來困惑,好比 級聯操做符 、 var和dynamic關鍵字的區別 等等。
正如標題所言,我發現我走入了一個誤區,Dart
語法的學習勢在必行。
我學習語法的方式是經過翻閱Dart
中文網:
Dart中文社區:http://dart.goodev.org/
由於是空閒時間學習,所以嚴格來講學習時間並無那麼多,最初的第一週,筆者花了幾個晚上,天天9點下班以後學2~3個小時,熟悉了Dart
基本的語法和Flutter
的最經常使用的基礎組件。
嚴格來講,此時我的依然處於小白水平,勉強摸到了入門的門檻。
私下裏也會偷偷吐槽一下Dart
和Flutter
,佈局寫着寫着下面連續十數行的 ),),),);),),},),},);),),),;),},);
真的使人毛骨悚然......
由於當初接翻譯任務時,本身給本身設定了10天的期限(也是爲了督促本身學習),所以第二週我須要在前3天內翻譯完這篇博客:
坦白來講,第二週的開始,這篇文章我看不懂,所以我須要學習Flutter
開發過程當中的架構思想。
正所謂窺一斑而知全豹,雖然尚未真正着手Flutter
項目的開發,可是經過學習Flutter
的核心——狀態管理,以及將 業務邏輯 和 UI的渲染 分開學習,再加上做爲一個Android
開發者,理解這些概念自己就有很大的優點,學習效率天然很是的高。
學習Flutter
中狀態管理的資料,我強烈推薦 Vadaski 的系列文章。
冒昧推薦這幾篇關於狀態管理的文章,實際上 Vadaski 老師關於Flutter
還有不少優秀的博客,這裏不一一列舉了,有興趣的朋友能夠去拜讀一下。
若是讀者以前學習或者瞭解過Redux
和ReactiveX
相關的思想,狀態管理並非很是難理解的概念。
熟悉了一系列Flutter
狀態管理的實現方式以後,翻譯文章時就順暢不少了,幸不辱命,最終在第十天的凌晨將文章翻譯完畢:
完成以後,由於工做和私人的緣由,第二週接下來幾天就沒有什麼時間學習Flutter
了。
第二週的學習成果實際上和第一週差很少,由於前三天全神貫注,同時天天晚上多學了一會,再加上吃了以前的老本(以前對於Redux
的狀態管理和RxJava
有必定的儲備),學習效率仍是比較高的。
這周的感受就是,雖然本身沒怎麼上手項目,可是看了一些文章,對Flutter
有了一些初步的認識,總結以下:
Flutter
自己採用的是React
的思路,和咱們認知的 過程式開發 是不同的, 狀態管理 和 響應式編程 是很是重要的概念,若是以前有相關的知識儲備,這個關鍵的知識點基本不會有什麼難度,只須要關注API
的使用就行了;固然,沒了解過也不要緊,本小節上方的幾篇關於狀態管理優秀的博客,也可以幫助開發者很是快的進入Flutter
的節奏中去。Flutter
中的一些概念或者庫而言:2.1
RxDart
和Stream
相關的API
和RxJava
很類似;
2.2Future
相關的API能夠參考Kotlin
的協程,經過同步的方式編寫異步的代碼;
2.3Provider
其實也就是另外一種方式的依賴注入.
2.4Redux
就是參考前端的Redux
引進的,沒有什麼變化......
從結果來看,第三週我走了很多彎路。
第三週的最初,我認爲我須要開始深刻學習Flutter
中的Widget
,所以我選擇fork
了著名的 flutter-go, 而且開始嘗試跟着這個項目敲代碼。
在敲了幾天以後,我發現一個嚴重的問題,那就是這個學習過程當中很是枯燥無聊,知識點之間沒有關聯性,感受本身學了一個新的Widget
,就忘了上一個Widget
,沒堅持多久,我就hold
不住了......
這也難怪,這個項目自己的目的就是 經常使用組件的demo演示與中文文檔
, 我一個Widget
一個Widget
的用法跟着敲,這給了我一種 學習碎片沒有組織起來 的感受,說白了就是不成系統,效果並不明顯。
所以我將 flutter-go 這個項目的定位變成了 工具書 ,接下來的學習過程當中,每當我對一個Widget
的使用有了疑問,就隨手打開這個APP進行查閱這個Widget
的用法,效果還不錯。
第四周我選擇了實戰開發,瞭解個人朋友應該知道,我曾經經過不一樣的開發模式(MVVM
和MVI
)開發過兩次Github
的客戶端,此次我也不例外。
選擇以Github
客戶端做爲實戰的練手項目還有一個緣由,那就是 戀貓de小郭 老師已經開源了一個更強大的Github
客戶端能夠做爲參考:
GSYGithubAppFlutter: 超完整的Flutter項目
同時,戀貓de小郭 老師也有很是優秀的Flutter
系列博客,由於該系列文章太多了,就不一一列出了,強烈建議收藏閱讀。
所謂前人栽樹後人乘涼,GSYGithubAppFlutter 確實在我實踐過程當中提供了很大的幫助,同時,由於第四周工做階段性告一段落,我有更多時間去學習Flutter
,所以很快就把一個簡單的Github
客戶端敲了出來:
在一個月的學習過程當中,我學習到了不少東西,也感受不少地方須要慢慢改進,也感受到有不少知識點須要去補。
可是令我振奮的一點是,我成功從溫馨區跳了出來,而且度過了學習新知識過程當中最痛苦的一段時間(畏難情緒+新領域的陌生感);
如今面對諸如 Kotlin
和Flutter
我學哪一個比較好? 的問題,我也能夠這樣回答了:
小孩子才作選擇,成年人固然是全都要啦!
最後,衷心感謝文中提到的各位老師對我的的幫助,其實在學習過程當中,我還參考了更多Flutter
先驅者們優秀的博客和代碼,實在難以一一列舉,在此深表感謝。
如何入門Flutter
? 以我的經驗來看,入門學習Flutter
能夠參考下面步驟:
Flutter
基本概念;flutter-go
,將App
下載到手機中做爲工具書隨時隨地查閱;Flutter
博客系列,好比上文中 Vadaski 和 戀貓de小郭 兩位老師的文章;Flutter
開源項目學習源碼;這個學習計劃 必定是有改進空間 的,也誠摯的但願您能在評論區留下寶貴的想法和建議,這也可以爲讀者提供更多參考性的建議,感謝!
Hello,我是卻把清梅嗅,若是您以爲文章對您有價值,歡迎 ❤️,也歡迎關注個人博客或者Github。
若是您以爲文章還差了那麼點東西,也請經過關注督促我寫出更好的文章——萬一哪天我進步了呢?