Flutter框架結(jié)構(gòu)

本節(jié)我們先對Flutter的框架做一個(gè)整體介紹,旨在讓讀者心中有一個(gè)整體的印象,這對初學(xué)者來說非常重要。如果一下子便深入到Flutter中,就會像是一個(gè)在沙漠中沒有地圖的人,即使可以找到一個(gè)綠洲,但是他也不會知道下一個(gè)綠洲在哪。因此,無論學(xué)什么技術(shù),都要先有一張清晰的“地圖”,而我們的學(xué)習(xí)過程就是“按圖索驥”,這樣我們才不會陷于細(xì)節(jié)而“目無全牛”。言歸正傳,我們看一下Flutter官方提供的Flutter框架圖,如圖1-1所示:


Flutter Framework


這是一個(gè)純 Dart實(shí)現(xiàn)的 SDK,它實(shí)現(xiàn)了一套基礎(chǔ)庫,自底向上,我們來簡單介紹一下:

底下兩層(Foundation和Animation、Painting、Gestures)在Google的一些視頻中被合并為一個(gè)dart UI層,對應(yīng)的是Flutter中的dart:ui包,它是Flutter引擎暴露的底層UI庫,提供動畫、手勢及繪制能力。

Rendering層,這一層是一個(gè)抽象的布局層,它依賴于dart UI層,Rendering層會構(gòu)建一個(gè)UI樹,當(dāng)UI樹有變化時(shí),會計(jì)算出有變化的部分,然后更新UI樹,最終將UI樹繪制到屏幕上,這個(gè)過程類似于React中的虛擬DOM。Rendering層可以說是Flutter UI框架最核心的部分,它除了確定每個(gè)UI元素的位置、大小之外還要進(jìn)行坐標(biāo)變換、繪制(調(diào)用底層dart:ui)。

Widgets層是Flutter提供的的一套基礎(chǔ)組件庫,在基礎(chǔ)組件庫之上,F(xiàn)lutter還提供了 Material 和Cupertino兩種視覺風(fēng)格的組件庫。而我們Flutter開發(fā)的大多數(shù)場景,只是和這兩層打交道

Flutter Engine

這是一個(gè)純 C++實(shí)現(xiàn)的 SDK,其中包括了 Skia引擎、Dart運(yùn)行時(shí)、文字排版引擎等。在代碼調(diào)用?dart:ui庫時(shí),調(diào)用最終會走到Engine層,然后實(shí)現(xiàn)真正的繪制邏輯。


總結(jié)

Flutter框架本身有著良好的分層設(shè)計(jì),本節(jié)旨在讓讀者對Flutter整體框架有個(gè)大概的印象,相信到現(xiàn)在為止,讀者已經(jīng)對Flutter有一個(gè)初始印象,在我們正式動手之前,我們還需要了解一下Flutter的開發(fā)語言Dart。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容