flutter - CustomPainter - shouldRepaint 值得吗?

标签 flutter

我实现了一个 CustomPainter。在 shouldRepaint 方法中,我必须比较 6 组深度相等性。我现在正在使用 setsEqual 来做这件事。 如果它们非常相等,则无需重新绘制,但真的值得检查一下吗? 即使我不必这样做,只返回 true 并绘画会不会更糟?

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

最佳答案

CustomPaint 会消耗很多的电量。来自另一个问题的例子 here由于持续绘图,用户的 FPS 大幅下降。

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

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

It's possible that the paint method will get called even if shouldRepaint returns false (e.g. if an ancestor or descendant needed to be repainted). It's also possible that the paint method will get called without shouldRepaint being called at all (e.g. if the box changes size).

一种解决方案是使用 RepaintBoundary,如文档或上面链接的 SO 问题中所述。

关于flutter - CustomPainter - shouldRepaint 值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50043748/

相关文章:

flutter - 如何在全局范围内使用这种方法?

dart - flutter 引脚输入字段

flutter - 如何在Flutter中禁用DropDown

flutter - flutter 中的单子(monad)布局 Widget 和多子布局 Widget 有什么区别?

Flutter BloC 不刷新我的 View (计数器应用程序)

firebase - Flutter Firestore 检索和设置嵌套对象

android - 运行flutter应用程序时如何解决 'dart:ui'错误?

Flutter - 如何更改 TextField 提示颜色?

flutter - 让小部件比视口(viewport)更大?

Flutter:在调用 super.dispose() 之前必须处理 Ticker