首页 > 解决方案 > CustomPainter - shouldRepaint 值得付出努力吗?

问题描述

我实现了一个CustomPainter。在 shouldRepaint 方法中,我必须比较 6 组的深度相等性。我目前正在使用 setsEqual 执行此操作。如果它们完全相等,则无需重新绘制,但真的值得努力检查吗?即使我不必这样做,只返回 true 并绘画会更糟糕吗?

编辑:我忘了提到绘图本身实际上很简单。这些集合包含计算点的对象(每个大约 5 个),然后我将其绘制为圆圈。圆圈的颜色取决于它所属的集合。由于与用户的交互,对象可能会更改为它们所属的集合,如果发生这种情况,持有 CustomPaint 的 StatefulWidget 将使用 setState 重建。我认为复杂的部分是决定是否重绘:每个集合都必须与旧的代表集进行比较,如果一个集合的内容发生了变化,我的 CustomPainter 应该重绘。

标签: flutter

解决方案


CustomPaint 可能会消耗大量电力。此处另一个问题的示例,其中用户由于不断绘制而导致 FPS 大幅下降。

所以这是可以被认为是值得的东西。

但要注意的最重要的事情是:shouldRepaint不是自给自足的。根据文档:

即使 shouldRepaint 返回 false(例如,如果需要重新绘制祖先或后代),paint 方法也可能会被调用。也有可能调用paint方法而根本没有调用shouldRepaint(例如,如果盒子改变了大小)。

一个解决方案是RepaintBoundary按照文档中的说明使用,或者在上面链接的 SO 问题中使用。


推荐阅读