????????閑來(lái)無(wú)事论泛,分享一下最近關(guān)于flutter的研究心得吧骇钦,系列文章將持續(xù)更新辩撑,歡迎拍磚界斜。
????????flutter作為谷歌推出的一種跨平臺(tái)技術(shù),在github上的star數(shù)已經(jīng)超過(guò)react-native合冀,并且數(shù)目還在不斷的快速增加中各薇,其火爆程度由此可見(jiàn)一斑。
????????flutter的優(yōu)秀之處在于其自己實(shí)現(xiàn)的一整套框架君躺,在ui層面與原生系統(tǒng)完全解耦峭判,使用優(yōu)秀的dart語(yǔ)言進(jìn)行編程,flutter官方封裝了大量的炫酷的ui效果供開(kāi)發(fā)者使用棕叫。這些優(yōu)秀的特性是其他跨平臺(tái)解決方案無(wú)法比擬的林螃。
????????flutter為什么能夠?qū)崿F(xiàn)跨平臺(tái)?其實(shí)俺泣,跨平臺(tái)技術(shù)本身就存在疗认,而且很多,比如二維游戲引擎cocos2dx伏钠,三維游戲引擎Unity3D横漏,pc平臺(tái)常用的QT,但熟掂,關(guān)于移動(dòng)app開(kāi)發(fā)的跨平臺(tái)技術(shù)在flutter之前總顯的不是那么完美绊茧,哪怕是facebook出的火爆的reactnative,其原理居然是通過(guò)與原生控件映射的方式打掘,竊以為這種方式的耦合程度是非郴罚可怕的。flutter實(shí)現(xiàn)android和ios的跨平臺(tái)是通過(guò)skia庫(kù)實(shí)現(xiàn)的尊蚁,skia是google提供的2D向量圖形處理函數(shù)庫(kù)亡笑,這個(gè)庫(kù)在很多google的產(chǎn)品中已經(jīng)包含,比如android系統(tǒng)横朋、chrome瀏覽器以及?還處于開(kāi)發(fā)中的Fuchsia系統(tǒng)仑乌。所以,flutter可以直接調(diào)用android的skia庫(kù)琴锭;但晰甚,在ios系統(tǒng)中是不存在這個(gè)庫(kù)的,所以在打包ios安裝包的時(shí)候?qū)?huì)同時(shí)在安裝包中打包skia庫(kù)决帖。
????????flutter使用dart語(yǔ)言厕九,dart同時(shí)支持 JIT 和 AOT,是純面向?qū)ο蟮牡鼗兀萰ava還要面向?qū)ο蟊庠叮琷ava中還有基本數(shù)據(jù)類型俊鱼,但dart一切皆為對(duì)象;dart支持函數(shù)編程畅买,其方法能夠被引用傳遞并闲,dart中的方法支持命名參數(shù),位置參數(shù)谷羞;dart支持?jǐn)?shù)據(jù)類型聲明(var)推斷帝火,動(dòng)態(tài)數(shù)據(jù)類型(dynamic);Dart的泛型類型是在運(yùn)行時(shí)綁定的這一點(diǎn)要比java的泛型擦出要優(yōu)秀的多湃缎;最新的dart語(yǔ)法支持?jǐn)U展函數(shù)犀填,這一點(diǎn)簡(jiǎn)直優(yōu)秀的不要不要的;dart支持類似javascript的promise語(yǔ)法雁歌,這個(gè)特性讓異步編程變得極為簡(jiǎn)潔宏浩,良好的解決了死亡回調(diào)問(wèn)題知残。但是靠瞎,dart不支持內(nèi)部類,讓代碼的封裝有些凌亂求妹;dart移除了反射機(jī)制乏盐,讓反序列框架很難出現(xiàn);dart的語(yǔ)法糖跟kotlin比起來(lái)還是差距太大制恍。
????????flutter官方提供了大量的widget父能,甚至提供了webviewwidget,platformwidget竭盡所能將不同平臺(tái)解耦净神,flutter使用響應(yīng)式編程的思想何吝,當(dāng)然也不是說(shuō)完全不能使用類似android和ios那種dom操作的開(kāi)發(fā)方式;如果你之前有使用過(guò)類似react鹃唯,vue之類的框架將會(huì)很容易上手爱榕;flutter提供了大量的響應(yīng)式編程api,比如Stream等坡慌;
????????flutter總體上是非常優(yōu)秀的黔酥,但本人在開(kāi)發(fā)中也遇到了非常多坑爹的坑;但大多化險(xiǎn)為夷洪橘,如果你也覺(jué)得想來(lái)體驗(yàn)體驗(yàn)跪者,那就一塊來(lái)討論討論吧!
????????今天這一篇先水到此吧熄求,今后將持續(xù)更新渣玲,分享flutter開(kāi)發(fā)中的術(shù)細(xì)節(jié)。