我实现了一个CustomPainter。在shouldRepaint方法中,我必须比较6组深度相等。我现在正在使用setsEqual这样做。 如果他们非常平等,就没有必要重新粉刷,但是真的值得去检查吗? 即使我没有必要回到真实和油漆会更糟吗?
编辑: 我忘了提到绘图itselfe实际上非常简单。 这些集包含计算点(每个约5个)的对象,然后我将其绘制为圆圈。 圆的颜色取决于它所属的集合。由于与用户的交互,对象可能会改变到它们所属的集合, 如果发生这种情况,持有CustomPaint的StatefulWidget将使用setState进行重建。 我认为复杂的部分是决定是否要重新绘制:每个集合都必须与旧的委托集合进行比较,如果一个集合的内容发生了变化,我的CustomPainter应该重新绘制。
答案 0 :(得分:2)
CustomPaint可能会耗费很多的电力。来自另一个问题here的示例,其中用户由于不断绘制而导致巨大的FPS下降。
所以这可以被视为值得。
但最值得注意的是:shouldRepaint
不够自给自足。
根据文件:
即使shouldRepaint返回false,也可能会调用paint方法(例如,如果需要重新绘制祖先或后代)。在没有调用shouldRepaint的情况下调用paint方法也是可能的(例如,如果框改变了大小)。
解决方案是使用文档中解释的RepaintBoundary
或上面链接的SO问题。