????????Element?Tree: Widget?tree的實例化對象,創建出renderObject,并關聯到element.renderobject屬性上,最后完成RenderObject?Tree的創建。
? ? ? ? RenderObject Tree:完成布局和圖層繪制,輸出LayerTree,?然后交給skia渲染。
? ? ? ? Flutter渲染劃分為三棵樹的其核心價值是,?頁面的更新,可以根據Element變化的內容,只修改對應的RenderObject?Tree,即進行增量更新。
? ? ? ?在三棵樹的構建過程中,創建RenderObject是最為耗時的操作。Flutter判斷是否需要重新創建RenderObject節點,主要是根據Element?Tree的?runtimeType和key兩個字段進行判斷。兩者任何一個有變化,RenderObject節點就需要重建,否則只需更新RenderObject節點的屬性即可。
????????如下圖所示:
????????
? ? ? ? 當Widget發生變化時,對比Element?tree上對應位置上新舊Widget是否一致,只有不一致時才會重建Element并重建并重新進行RenderObject實例化。即RenderObject Tree只需進行增量的重建即可,這就大大提升了渲染效率。