layout, painting, compositing and hit-testing render tree Every widget bears an optional direct connection to a specific instance of RenderObject
performLayout paint describeSemanticsConfiguration
widget 充当用户界面的声明性模型, RenderObject 屏幕上表示widget.
计算自身和子Widget大小
@override
void performLayout() {
Size size = constraints.biggest;
assert(size.width >= 0);
assert(size.height >= 0);
width = size.width;
height = size.height;
hasSize = true;
}
绘制不会改变Widget属性, 绘制命令由底层 Skia 图形库执行和捕获.
@override
void paint(PaintingContext context, Offset offset) {
if (_image == null) return;
context.canvas.drawImage(_image, offset, new Paint());
}
合成阶段是渲染管道的最后一步。 在这里,布局步骤中计算的所有属性和绘制步骤中生成的绘制命令都组合在一起形成图层,这些图层被转换为 GPU 友好的格式,以实现高效绘图。 可以处理图层位置或几何形状的变化,而无需完全重新生成图层,从而实现快速高效的渲染过程。