framework
Framework底層是Flutter引擎,引擎主要負責圖形繪制(Skia)萝挤、文字排版(libtxt)和提供Dart運行時喳瓣,引擎全部使用C++實現(xiàn)欣福,F(xiàn)ramework層使我們可以用Dart語言調(diào)用引擎的強大能力替饿。
- Framework的最底層叫做Foundation语泽,其中定義的大都是非常基礎(chǔ)的视卢、提供給其他所有層使用的工具類和方法踱卵。
- 繪制庫(Painting)封裝了Flutter Engine提供的繪制接口,主要是為了在繪制控件等固定樣式的圖形時提供更直觀据过、更方便的接口惋砂,比如繪制縮放后的位圖、繪制文本绳锅、插值生成陰影以及在盒子周圍繪制邊框等等西饵。
- Animation是動畫相關(guān)的類,提供了類似Android系統(tǒng)的ValueAnimator的功能鳞芙,并且提供了豐富的內(nèi)置插值器眷柔。
- Gesture提供了手勢識別相關(guān)的功能,包括觸摸事件類定義和多種內(nèi)置的手勢識別器原朝。GestureBinding類是Flutter中處理手勢的抽象服務(wù)類驯嘱,繼承自BindingBase類。Binding系列的類在Flutter中充當著類似于Android中的SystemService系列(ActivityManager喳坠、PackageManager)功能宙拉,每個Binding類都提供一個服務(wù)的單例對象,App最頂層的Binding會包含所有相關(guān)的Bingding抽象類丙笋。如果使用Flutter提供的控件進行開發(fā)谢澈,則需要使用WidgetsFlutterBinding,如果不使用Flutter提供的任何控件御板,而直接調(diào)用Render層锥忿,則需要使用RenderingFlutterBinding。
- 渲染庫(Rendering)
Flutter的控件樹在實際顯示時會轉(zhuǎn)換成對應(yīng)的渲染對象(RenderObject)樹來實現(xiàn)布局和繪制操作怠肋。渲染庫主要提供的功能類有:
// RendererBinding 渲染樹和Flutter引擎的膠水層敬鬓,負責管理幀重繪、窗口尺寸和渲染相關(guān)參數(shù)變化的監(jiān)聽笙各。
abstract class RendererBinding extends BindingBase with ServicesBinding, SchedulerBinding, HitTestable { ... }
// RenderObject 渲染樹中所有節(jié)點的基類钉答,定義了布局、繪制和合成相關(guān)的接口杈抢。
abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin implements HitTestTarget { ... }
// RenderBox和其三個常用的子類RenderParagraph数尿、RenderImage、RenderFlex則是具體布局和繪制邏輯的實現(xiàn)類惶楼。
abstract class RenderBox extends RenderObject { ... }
class RenderParagraph extends RenderBox { ... }
class RenderImage extends RenderBox { ... }
class RenderFlex extends RenderBox with ContainerRenderObjectMixin<RenderBox, FlexParentData>,
RenderBoxContainerDefaultsMixin<RenderBox, FlexParentData>,
DebugOverflowIndicatorMixin { ... }
在Flutter界面渲染過程分為三個階段:布局右蹦、繪制诊杆、合成,布局和繪制在Flutter框架中完成何陆,合成則交由引擎負責晨汹。
渲染過程
下文待續(xù)