diff --git a/docs/chapter10/custom_paint.html b/docs/chapter10/custom_paint.html index 8aebe010..0a1825ba 100644 --- a/docs/chapter10/custom_paint.html +++ b/docs/chapter10/custom_paint.html @@ -33,7 +33,7 @@ this.willChange = false, Widget child, //子节点,可以为空 }) -
painter
: 背景画笔,会显示在子节点后面;foregroundPainter
: 前景画笔,会显示在子节点前面size
:当child为null时,代表默认绘制区域大小,如果有child则忽略此参数,画布尺寸则为child尺寸。如果有child但是想指定画布为特定大小,可以使用SizeBox包裹CustomPaint实现。isComplex
:是否复杂的绘制,如果是,Flutter会应用一些缓存策略来减少重复渲染的开销。willChange
:和isComplex
配合使用,当启用缓存时,该属性代表在下一帧中绘制是否会改变。可以看到,绘制时我们需要提供前景或背景画笔,两者也可以同时提供。我们的画笔需要继承CustomPainter
类,我们在画笔类中实现真正的绘制逻辑。
如果CustomPaint
有子节点,为了避免子节点不必要的重绘并提高性能,通常情况下都会将子节点包裹在RepaintBoundary
组件中,这样会在绘制时就会创建一个新的绘制层(Layer),其子组件将在新的Layer上绘制,而父组件将在原来Layer上绘制,也就是说RepaintBoundary
子组件的绘制将独立于父组件的绘制,RepaintBoundary
会隔离其子节点和CustomPaint
本身的绘制边界。示例如下:
CustomPaint(
+
painter
: 背景画笔,会显示在子节点后面;foregroundPainter
: 前景画笔,会显示在子节点前面size
:当child为null时,代表默认绘制区域大小,如果有child则忽略此参数,画布尺寸则为child尺寸。如果有child但是想指定画布为特定大小,可以使用SizedBox包裹CustomPaint实现。isComplex
:是否复杂的绘制,如果是,Flutter会应用一些缓存策略来减少重复渲染的开销。willChange
:和isComplex
配合使用,当启用缓存时,该属性代表在下一帧中绘制是否会改变。可以看到,绘制时我们需要提供前景或背景画笔,两者也可以同时提供。我们的画笔需要继承CustomPainter
类,我们在画笔类中实现真正的绘制逻辑。
如果CustomPaint
有子节点,为了避免子节点不必要的重绘并提高性能,通常情况下都会将子节点包裹在RepaintBoundary
组件中,这样会在绘制时就会创建一个新的绘制层(Layer),其子组件将在新的Layer上绘制,而父组件将在原来Layer上绘制,也就是说RepaintBoundary
子组件的绘制将独立于父组件的绘制,RepaintBoundary
会隔离其子节点和CustomPaint
本身的绘制边界。示例如下:
CustomPaint(
size: Size(300, 300), //指定画布大小
painter: MyPainter(),
child: RepaintBoundary(child:...)),