0

我对函数的 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逻辑与以前相同,如何防止重绘?

4

1 回答 1

0

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

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

于 2020-04-04T06:26:12.410 回答