一个小部件,提供在绘制阶段在其上绘制的画布。其父类是SingleChildRenderObjectWidget。
在绘制时,CustomPaint首先让字段painter进行绘制,然后再来绘制child,最后让foregroundPainter来绘制。画布的卡迪尔坐标系与当前类对象的卡迪尔坐标系相匹配。属性painter被期望在一个矩形内绘制,从原点开始并包含给定大小的区域。(如果painter在这些边界之外绘制,可能会分配不够的内存来栅格化绘制命令,并且产生的行为是未知的。)为了强制在指定区域内绘画,可以考虑将此组件包裹在ClipRect中。
通过实现CustomPainter来创建画家(painter)。
因为在绘制期间,自定义的paint调用它的painter,所以在回调期间对于当前帧的布局已经完成,也就不能够调用setState或markNeedsLayout。
自定义的painter通常根据他们的子元素来调整自己的尺寸。如果他们没有子节点,他们尝试将自己的大小调整为size,默认为Size.zero。属性size不能为空。
isComplex和 willChange是对组合器的光栅化缓存的提示,它们不能为空。
构造器
CustomPaint({Key? key, CustomPainter? painter, CustomPainter? foregroundPainter, Size size, bool isComplex, bool willChange, Widget? child}) 创建代理绘画的组件。
属性
foregroundPainter → CustomPainter? 在绘制完child组件后进行的绘制。
isComplex → bool 绘画是否复杂到需要缓存。
组合器包含一个栅格缓存,用来保存层的位图,以避免在每帧上重复渲染这些层的成本。如果没有设置此标志,组合器会使用自己的算法来决定是否需要对该层进行缓存。
如果painter和foregroundPainter都是null,这个属性值将会被忽略。
size → Size 给定布局约束,如果没有子元素,CustomPaint应该绘制的大小。默认值为Size.zero。如果属性child不为null,此属性值会被child的size代替。
willChange → bool 是否需要通知光栅缓存,在下一帧中,绘制需要变化。如果painter和foregroundPainter都是null,这个属性值将会被忽略。
方法
createRenderObject(BuildContext context) → RenderCustomPaint 使用RenderObjectWidget描述的配置,创建这个RenderObjectWidget表示的RenderObject类的实例。
这个方法不应该做任何与render object子元素相关的事。这应该由覆盖RenderObjectElement的方法来处理。这应该由该对象的createElement方法在呈现的对象中覆盖RenderObjectElement.mount的方法来处理。可在SingleChildRenderObjectElement.mount中查看。
didUnmountRenderObject(<wbr style="box-sizing: inherit;">covariant RenderCustomPaint renderObject) → void 以前与此小部件关联的渲染对象已从树中删除。
updateRenderObject(BuildContext context, covariant RenderCustomPaint renderObject) → void 将当前对象的配置拷贝给参数renderObject,参数与方法createRenderObject的返回值类型应该相同。
网友评论