我使用具有2个属性的CustomPainter: isComplex和willChange 。
使用它们与不使用它们之间没有区别。
请告诉我它们之间的区别。
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return CustomPaint(
isComplex: true,
willChange: false,
painter: MyPainter(),
);
}
}
class MyPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
for (int i = 0; i < size.width; ) {
Color color = Colors.green;
if ((i/10)%2==0){
color = Colors.red;
}
Rect rect = Rect.fromLTWH(
i + 10.0, size.height / 3, size.width / 10, size.height / 3);
canvas.drawRect(rect, Paint()..color = color);
i +=10;
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}
接下来,我尝试更改 isComplex和willChange 的值,没有区别。
提前谢谢!
答案 0 :(得分:1)
您可以查看CustomPainter
的子类CustomPaint class的文档:
isComplex 和 willChange 是对合成器栅格缓存的提示 并且不能为空。
绘画是否足够复杂,可以从缓存中受益。
该合成器包含一个栅格缓存,该栅格缓存中包含图层的位图 为了避免在每个图层上重复渲染这些图层的成本 帧。如果未设置此标志,则合成器将应用自己的标志 启发式决定这一层是否足够复杂 从缓存中受益。
是否应告知栅格缓存此画可能 在下一帧中更改。
因此,基本上您不会看到任何视觉变化,但是正确处理它们将改善缓存的使用,从而提高渲染成本。