Colección de citas famosas - Consulta de diccionarios - 3. Mecanismo de renderizado de Flutter: RenderObjectWidget, RenderObjectElement, RenderObject.

3. Mecanismo de renderizado de Flutter: RenderObjectWidget, RenderObjectElement, RenderObject.

RenderObjectWidget es un Widget como SizeBox, Column, etc.

RenderObjectElement es el tipo de Elemento generado por este tipo de Widget,

Por ejemplo, SizeBox corresponde a SingleChildRenderObjectElement (Elemento de un solo nodo secundario)

RenderObject es el objeto real responsable del dibujo, que incluye pintura, diseño y otros métodos ~

Tome el componente Texto como ejemplo:

clase Text extiende StatelessWidget

La compilación de texto devuelve

clase RichText extiende MultiChildRenderObjectWidget

MultiChildRenderObjectWidget -> MultiChildRenderObjectElement

RenderObjectElement anulará el montaje

Atraviesa _parent (que es el elemento del nodo anterior, este _parent se establece en cada método de montaje) y continúa atravesando hasta encontrar el RenderObjectElement más cercano

revise inflateWidget

SingleChildRenderObjectElement

MultiChildRenderObjectElement

inflateWidget activará createElement de RenderObjectWidget para crear RenderObjectElement,

y luego llamará al método de montaje de RenderObjectElement

El método mount llama al método createRenderObject del RenderObjectWidget para crear RenderObject

Luego busque el RenderObjectElement principal más cercano y llame a insertRenderObjectChild para insertar el RenderObject

(Nota: esto es no el hijo de RenderObjectElement, sino el hijo del RenderObject asociado con RenderObjectElement, que está en el árbol de elementos (el árbol de RenderObject está lleno de RenderObject)

Lógica de montaje de nodos múltiples de MultiChildRenderObjectElement

Lógica de nodo secundario para agregar múltiples nodos

Los datos parentales de cada nodo secundario posterior se usan para apuntar al nodo secundario anterior y anterior para apuntar al siguiente nodo secundario