Flutter 三棵樹

學(xué)習(xí)此好文章記錄

Widget

控件層,在flutter中,Container髓迎、Text等組件都屬于Widget,所以我們將這種樹稱為Widget樹建丧,也可以叫做控件樹排龄,他就表示我們在dart代碼中所寫的控件的結(jié)構(gòu)

Element

Widget的另一種抽象,也可以把它看作一個更為實(shí)際控件翎朱,因?yàn)樵谖覀兊氖謾C(jī)屏幕上顯示的控件并非我們代碼中所寫的Widget橄维,我們在代碼中所使用的像 Container、Text等這類組件和其屬性只不過是我們想要構(gòu)建的組件的配置信息拴曲,當(dāng)我們第一次調(diào)用 build()方法想要在屏幕上顯示這些組件時争舞,F(xiàn)lutter會根據(jù)這些信息生成該Widget控件對應(yīng)的Element,同樣地澈灼,Element 也會被放到相應(yīng)的Element樹中竞川,在Flutter中,一個Widget通過多次復(fù)用可以對應(yīng)多個Element實(shí)例蕉汪,Element才是我們真正在屏幕上顯示的元素流译。

Element 與 Widget 另一個區(qū)別在于,Widget天然是不可變的(immutable)者疤,他如要更新便需要重建福澡,如果想要把可變狀態(tài)與Widget聯(lián)系起來,可以使用StatefulWidget驹马,StatefulWidget通過使用StatefulWidget.createState 方法創(chuàng)建 State對象革砸,并將之?dāng)U充到Element以及合并到樹中;

Widget統(tǒng)治者Element除秀,Widget有點(diǎn)像class生成對象Element

Widget【將軍】 ->Element 【百夫長】->RenderObject【士兵】

RenderObject

在flutter中做組件布局渲染的工作,其為了組件間的渲染搭配及布局約束也有對應(yīng)的RenderObject樹算利,我們稱之為渲染樹册踩。

組件渲染過程簡述

我們知道控件樹中的每個控件都會實(shí)現(xiàn)一個RenderObject對象做渲染任務(wù),并將所有RenderObject組成渲染樹效拭。Flutter渲染組件的過程如下:
Full Pipeline
User Input -> Animation -> Build -> Layout -> Paint -> Composite -> Rasterize

Flutter的渲染過程由用戶的輸入開始暂吉,當(dāng)接受到用戶輸入的信號時,就會觸發(fā)動畫的進(jìn)度更新缎患,例如我們第一次渲染時的啟動動畫慕的,或者我們在滾動手機(jī)屏幕時單個列表項(xiàng)復(fù)用時的移動動畫。之后便需要開始視圖數(shù)據(jù)的構(gòu)建挤渔,(build)肮街,這一步中Flutter創(chuàng)建了前文描述的三顆視圖樹

在這之后,視圖才會進(jìn)行布局(layout)判导,計(jì)算各個部分的大小嫉父,然后進(jìn)行繪制(paint),生成每個視圖的視覺數(shù)據(jù)眼刃,這部分的任務(wù)主要就是由 RenderObject所做 绕辖。這里,flutter中的布局過程可用下圖表示鸟整,在上述構(gòu)建完成渲染樹后引镊,父渲染對象會將布局約束信息向下傳遞朦蕴,子渲染對象根據(jù)自己的渲染情況返回Size篮条,Size數(shù)據(jù)會向上傳遞,最終父渲染對象完成布局過程
[圖片上傳失敗...(image-69c615-1567218514793)]

最后一步進(jìn)行“光柵化”(Rasterize)吩抓,前一步得到合成的視圖數(shù)據(jù)其實(shí)還是一份矢量描述數(shù)據(jù)涉茧,光柵化幫助把這份數(shù)據(jù)真正的生成一個一個的像素填充數(shù)據(jù)。在flutter中疹娶,光柵化這個步驟被放在Engine層中伴栓。

在日常開發(fā)學(xué)習(xí)中,我們只需要在代碼層中配置好我們的Widget樹雨饺,了解各種Widget特性及使用方法钳垮,其余的工作都可以交給我們的框架層去實(shí)現(xiàn)。

渲染樹詳解

渲染樹上每個節(jié)點(diǎn)都是一個繼承自 RenderObject 類的對象额港,其由Element中的renderObject或

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饺窿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子移斩,更是在濱河造成了極大的恐慌肚医,老刑警劉巖绢馍,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肠套,居然都是意外死亡舰涌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門你稚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓷耙,“玉大人,你說我怎么就攤上這事刁赖〔富玻” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵乾闰,是天一觀的道長落追。 經(jīng)常有香客問我,道長涯肩,這世上最難降的妖魔是什么轿钠? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮病苗,結(jié)果婚禮上疗垛,老公的妹妹穿的比我還像新娘。我一直安慰自己硫朦,他們只是感情好贷腕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咬展,像睡著了一般泽裳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上破婆,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天涮总,我揣著相機(jī)與錄音,去河邊找鬼祷舀。 笑死瀑梗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裳扯。 我是一名探鬼主播抛丽,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饰豺!你這毒婦竟也來了亿鲜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤哟忍,失蹤者是張志新(化名)和其女友劉穎狡门,沒想到半個月后陷寝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡其馏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年凤跑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叛复。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仔引,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褐奥,到底是詐尸還是另有隱情咖耘,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布撬码,位于F島的核電站儿倒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呜笑。R本人自食惡果不足惜夫否,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叫胁。 院中可真熱鬧凰慈,春花似錦、人聲如沸驼鹅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽输钩。三九已至豺型,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間张足,已是汗流浹背触创。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工坎藐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留为牍,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓岩馍,卻偏偏與公主長得像碉咆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛀恩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容