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 p>
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