如何对飞镖中的函数进行相等性检查(在自定义画家的 shouldRepaint 方法中使用)?



我在函数上的dart相等检查有问题。

我有一个CustomPainter,我想有效地实现它的shouldRepaint()方法。

画家中有一个函数字段(ColorResolver(,它给出了一个y值,并获得了用于在线上绘制的颜色,我希望在画家之外处理这个逻辑。

检查这个代码:

typedef ColorResolver = Color Function(double value);
class MyPainter extends CustomPainter {
final ColorResolver colorResolver;
MyPainter(this.colorResolver);
@override
void paint(Canvas canvas, Size size) {
for (double y = 0; y <= size.height; y += 10) {
final paint = Paint()..color = colorResolver(y);
canvas.drawLine(Offset(0, y), Offset(size.width, y), paint);
}
}
@override
bool shouldRepaint(MyPainter old) => old.colorResolver != colorResolver;
}

只要提供的ColorResolver逻辑与以前相同,我如何防止重新绘制?

您不能覆盖Dart中函数的==。您唯一的选择是缓存函数实例。

缓存函数在很大程度上取决于它的作用,因此这里没有有限的答案来解决您的问题。但总的来说,StatefulWidget是一个良好的开端。

相关内容

  • 没有找到相关文章

最新更新