将CustomPainter与isComplex和willChange配合使用

时间:2019-10-31 07:47:36

标签: flutter

我使用具有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 的值,没有区别。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以查看CustomPainter的子类CustomPaint class的文档:

  

isComplex willChange 是对合成器栅格缓存的提示   并且不能为空。

isComplex

  

绘画是否足够复杂,可以从缓存中受益。

     

该合成器包含一个栅格缓存,该栅格缓存中包含图层的位图   为了避免在每个图层上重复渲染这些图层的成本   帧。如果未设置此标志,则合成器将应用自己的标志   启发式决定这一层是否足够复杂   从缓存中受益。

willChange

  

是否应告知栅格缓存此画可能   在下一帧中更改。

因此,基本上您不会看到任何视觉变化,但是正确处理它们将改善缓存的使用,从而提高渲染成本。