我在函数上的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
是一个良好的开端。