Flutter七日總結

張風捷特烈發表於2018-12-23

多看星空方知何謂渺小,多看細胞方知何謂浩大,我是巨人,也是沙粒,崇高並謙卑著----張風捷特烈


寫這個系列主要是出於以下目的:
1.給自己一個挑戰,並附加時間限制
2.一直想要表達一下:遇到新技術時的態度,藉此分析一下我對於一件新事物認知的過程  
3.Flutter對於Android開發者,確實需要去稍微瞭解一下 
4.作為一個地道的javaer+Androider,希望可以為想入坑Flutter的朋友鋪條小路  
5.整個7篇文章貫穿著我學習的心+思,基本上敲一段測試程式碼,寫一段文章。對我的學習方式也是一種記錄與沉澱
複製程式碼

七篇文章如下:

下面是一邊學習一邊畫出來的widget樹

雖然離完整版還差一大半,不過入門還是夠用了,常用的基本涉及
當你這些用熟練了,其他控制元件看看屬性也就無師自通了(推薦看原圖,比較清楚)

widget樹

第一天及體悟:
Flutter的環境搭建並沒走多少彎路,網上教程一大堆。  
新建了一個工程,發現程式碼有點不對勁,雖然知道Flutter是跨平臺框架,  
但是程式碼在哪寫?不應該有個單獨的src嗎?以前玩過libgdx,認為應該差不多  
然後全文搜尋一下介面上的字,找到在lib包的main.dart裡
複製程式碼

我要在lib裡寫程式碼?不會這麼奇葩吧?然後我用物件導向的天眼看了一下main.dart
正如第一篇的分析,果然這麼奇葩。而且語法與Java,c++,Python,Js都不一樣, 
好吧,又要學方言了,自從JS的Es6玩轉了以後,我就不怕語言了,
Kotlin也好,Python也好,這些性格"不羈"一些的和ES6都八九不離十  
只要語法通了,之後就是個人能力的問題了,所以Dart入門很快,半天就基本掌握了
想要熟練,那還必須去實際操練才行
複製程式碼

[番外]:分享一些心情-------------
我經常把程式設計當做鍛劍,我一直在精煉Java這把劍,用Android這把劍鞘盛放  
Python也好,C++也好,Js也好我只是玩玩,都被我當做光環對Java之劍進行附加
至今在Android中我遇三次瓶頸期,我選擇暫時離開Android,去擴充一下視野,
死磕已經作用不大了,記得第二次瓶頸是被網路束縛地無法前進一步,
於是一咬牙,暫停安卓,去專門找後端的書和資料去看,也因此萌生了搭建自己網站的念頭  
然後前後並行,兩大光環加持,也上線了我的個人網站,兩端的基礎知識已基本在心中。
複製程式碼

由於個人網站的搭建,我對服務端有了些認識,網路請求與上傳下載也都知道是怎麼回事  
也有了測試的渠道,如果一個對前後端毫不知情的Androider,肯定會卡網路瓶頸上
資料流的概念初步形成,在我的眼中,介面的展示、上傳下載、網路上的一切都是位元組的流動  
然後重歸Android之時,前後端已經像一條線貫穿了,Android順利和伺服器互動時,第二瓶頸已過
有種"斷劍重鑄之日,騎士歸來之時的感覺",具體細節,打算寫個2018年終總結來記錄一下
複製程式碼
[番外]:截止-------------
如何很快地接收一件新事物(新知識)? 用你最擅長的技術去對接新知識,
比如你是個天文迷,如果你想學英語,去看天文方面的讀物會更有利,
因為你有這方面的知識儲備,即使知識儲備是中文又如何?難道英文的地球能出太陽系?
語言和知識本就是兩碼事,語言表述知識並不會更改知識本身。
所以知識對接上,兩種語言之間的交錯,會讓你更快接受語言的本身,也能強化知識
複製程式碼

所以我並沒有一開始就上控制元件,而是基於我最熟悉的Canvas來繪圖,熟悉Dart語法,否則後面工作不好開展,
在Android中Canvas的豐富知識儲備讓我很好的與Flutter中的Canvas對接,這一棋自認為不錯
對接之後,以前畫網格,座標系,n角星的東西又能拿出來秀了,舊知識轉化成新知識
通過Java程式碼更改成Dart程式碼,也讓我更清楚了兩者的異同點,以後把握起來就輕鬆寫  
複製程式碼

總的來說第一天還是蠻輕鬆好玩的。


第二天及體悟:
第二天可以說是兵行險招,本打算把基礎控制元件說一下的(依稀聽過Flutter的控制元件超級多) 
但第一天圖畫好之後,非常想玩動畫,如果放在後面,感覺不連貫  
然而並沒有把握把動畫寫好,畢竟才更接觸一天而已。挑戰一下唄,然後就玩動畫了
複製程式碼
第二天可以說是這七天裡我感覺最成功的,動畫+粒子運動全都復刻到Flutter上了
粒子時鐘完成後,挺激動的,然後就拿去分(xian)享(bai),心想,Flutter還是不錯的嘛  
這絕對是Flutter的第一個粒子時鐘(除了我,也許沒有人會這麼無聊做這種特效)
複製程式碼
看上去第二天的文章好像一氣呵成,其實也遇到了些阻礙,
dart的時間處理和三維陣列和Java有些出入,還有就是時鐘的粒子運動,
差一點就放棄了,因為效果總是出不來。心想,搞出個時鐘就算了吧,不也挺好嘛。
可是真的很不甘心,都到這步了。然後輸出小球集合的個數、第一個小球的位置,
資料好好的啊,可為什麼出不來效果……最後發現小球半徑沒有設定……出來才有鬼呢
複製程式碼
有人問我有沒有什麼心得,心得這東西說出來都懂,做起來卻不簡單,
如果你覺得一個人的學習方式很好,你應該去觀察他,然後取長補短。
每個人的境遇都是不同的,別人的學習方法不一定適合你,你沒有必要和別人一樣。
比如我大學喜歡寫詩,然後通讀各大名著,不斷思考世界,如果你沒有這些基礎,
我的心得就不一定適合你。每個人的價值觀也是不同的,我是更傾向提升自我境界的那種人,
物質並不多求。心得這東西,別人的都是廢話,需要的話,網上雞湯自己挑,
一般人豪言壯語,大多隻是自欺欺人。最近看到八個字挺實在:"生死看淡,不服就幹"複製程式碼

總的來說第二天收穫頗豐。


第三、四天及體悟:
第三天基礎控制元件,感覺應該很枯燥,所以我儘可能讓它變得有趣
我喜歡畫體系的樹狀圖,因為這樣看起來很清晰,也助於整理思路
我喜歡卡片,源於遊戲王,對於繁多的事物,感覺用卡片記錄一下比較有趣
複製程式碼

第三天原始碼翻得比較多,基本上是進去看控制元件屬性,程式碼測試
通過Android和html+css的佈局經驗,基本上套路都是那回事
而且Flutter的Flex佈局和css的flex佈局不謀而合,所以入手容易很多
遇到margin的時候,有點感觸,寫了點看到新東西的態度:

新事物往往都與舊事物有聯絡,學習新事物最好快速找到它與你知識庫中舊事物的聯絡,
聯絡的多少取決於你知識庫中內容的多少,連線得越多,你會越快或越能掌握舊事物 
複製程式碼

本以為第四天可以把剩餘的控制元件講完,再寫幾個小案例呢,萬萬沒想到:
Flutter的佈局如此之多,再加上卡了一點小殼,只勉強把控制元件了結(實際上還有很多未涉及)
Flutter裡面29種疊合模式也是嚇到我了,也藉此分析了一下這種多情況的分析方式
第三天把我的激情燃燒殆盡,第四天,三個控制元件一組,一共六組18張,沒那麼多花哨
最後將Flex佈局詳細說明了一下
複製程式碼

這兩天難度不是很大,就是有點麻煩,畫圖,配卡什麼的,
只是敲程式碼的估計一天就夠了,不過那樣會及其無聊,不是我想要的
第四天寫到最後其實還是有不少控制元件沒涉及到呢,但感覺也就那回事
認識一個控制元件可就那點套路,屬性基本上也就那些,遇到新的看看也就明白了
沒有必要全部列出來,這就是"魚與漁"的區別吧,魚是抓不完的,你也放不下
複製程式碼

兩條原始碼翻得比較勤,有點小感悟:

有問題就去解決,即使牽涉出十個新問題,你就想象成問題棧,
有問題就進棧,解決了就出棧,這樣不會亂,你可見的就是棧頂而已,
一個一個來,這樣會相對於11個問題擺在你面前更容易接受。
至於什麼時候stackover(棧溢位)就看你的決心和耐力了。
當然新手感覺hold不住時,可以深呼吸,咬一下牙堅持一下。
還是不行的話,記錄下問題,果斷退出。也許你現在等級不夠,
這個boss你打不過,那就去刷怪升級吧。短劍重鑄之日,騎士歸來之時。
現在回頭來看以前困擾我的問題,其實也並沒有什麼,這樣你才能感覺成長
複製程式碼

總的來說第三、四天挺苦悶,但也是必經之路


第五、六、七天及體悟:
經過前四天,基本上語法、控制元件也就熟悉了,接下來統一說一下:
第五天可以說非常有料,網上很少有詳細分析Flutter怎麼佈局的
中文網的例子有點小複雜,我打算循序漸進地由簡到難進行陳述
首先是最簡單的條目入手一步步遞進成掘金的條目,
互動操作看似很多,其實常用的也就那幾個,操作也是widget這點非常有趣

複製程式碼
第六天Dart的io,以及網路和json的處理,這是一門語言的基礎
Java和Python還有node的io有所接觸,所以dart這方面並不麻煩  
但一在Flutter上,路徑不好拿,背景是跨平臺,還好有三根救命稻草:`path_provider`
然後是許可權問題,當然也有相應的依賴庫`simple_permissions`,
網路庫用起來比較簡單,基本上和前端的網路庫操作一致
複製程式碼
第七天是前六天的知識整合,並掃一下其他小的知識點
Flutter與安卓的原生互動讓我感覺它還是蠻好的,雖然有點麻煩
不過要跨平臺,只與Android互動只是有半壁江山,ios那塊就不好辦了
雖說Flutter可以跨平臺,但如果要玩得轉,需要一個人兼具Android和ios
這樣算來,這個跨平臺代價還是有的,你也許會說,有外掛包啊
但是外掛包只能解決一部分問題,各種業務千差萬別,如果只靠外掛包,有點牽強
畢竟有些邏輯上的小修小補,具體問題框架無能為力,只能"湊合用"
Flutter是一個很好的UI框架,但可操作性,略有不足
複製程式碼

結束語
React玩的好的人入手Flutter可以說會輕鬆很多,因為思想非常相似
任何人都會有不足,不可能對這個世界全識全知,也就是"術業有專攻"
但並不意味這要閉關鎖國,排斥外物。程式設計師讀讀詩,看看史也沒有什麼不可
多看星空方知何謂渺小,多看細胞方知何謂浩大,你是巨人也是沙,崇高並謙卑著
程式源於對這個世界的認知,何為境界,你眼中所視之物,究竟為何? 
學無止境,不要飄,腳踏實地,一步一印,殊途同歸,新即遠方,思之將至。
複製程式碼

最後插播一段感悟:我經常思考工具與使用者間的關係:
`用工具`和`會用工具`之差異:[良庖歲更刀,割也;族庖月更刀,折也],
工具的使用方法體現了一位`工匠`的技藝  

《庖丁解牛》是我最喜歡的一篇古文,如何在做任何事上:
[以無厚入有間,恢恢乎其於遊刃必有餘地矣]是我的思考  

文中的八字成為我接觸新事物的律典:[依乎天理,因其固然]。
通其理,方用之,是`匠者`與`匠師`的差異   

如果你不懂牛的構造原理,拿一把屠刀固然可殺牛取肉,
但庖丁的[以神遇而不以目視,官知止而神欲行]  
[提刀而立,為之四顧,為之躊躇滿志,善刀而藏之]感覺也就與你無緣,
而這是一位匠者的自豪。 

寫一個程式就像打造一件藝術品,製造的過程便是`解牛`,
IDE、API、執行環境就是我手中的劍  

普通屠夫遇牛則斬,好肉壞肉在一起切,煮成一大雜燴。
庖丁的匠心獨運是我追求的境界:  
[吾生也有涯,而知也無涯,以有涯隨無涯] 願君且行且珍惜。
複製程式碼

相關文章