Как я могу проверить равенство для функции в дротике (для использования в методе CustomRainter shouldRepaint)? - PullRequest
0 голосов
/ 04 апреля 2020

У меня проблема с проверкой равенства дротиков для функции.

У меня есть CustomPainter, и я хочу эффективно реализовать его метод shouldRepaint().

Есть поле функции (ColorResolver) в художнике, который дает значение y и получает цвет для рисования на линии, я хочу, чтобы эта логика c обрабатывалась вне художника.

проверьте этот код:

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 logi c такие же, как и раньше?

1 Ответ

0 голосов
/ 04 апреля 2020

Вы не можете переопределить == функции в Dart. Ваш единственный выбор - кэшировать экземпляр функции.

Кэширование функции во многом зависит от того, что она делает, поэтому здесь нет окончательного решения вашей проблемы. Но в целом, StatefulWidget - хорошее начало.

...