Это способ дать подсказке фреймворку, нужно ли ему вызывать метод paint
вашего CustomPainter
.
Допустим, у вас есть виджет, который принимает цвет.
class SomeWidget extends StatelessWidget {
final Color color;
SomeWidget(this.color);
@override
Widget build(BuildContext context) {
return new CustomPaint(
painter: new MyPainter(color),
);
}
}
Этот виджет может быть перестроен фреймворком несколько раз, но пока цвет, передаваемый конструктору, не изменяется, а CustomPainter не зависит ни от чего другого, нет смысла перекрашивать CustomPaint. Когда цвет изменится, мы хотим сообщить каркасу, что он должен называть paint.
Таким образом, CustomPainter может подсказывать каркасу, возвращая true, если цвет изменился.
class MyPainter extends CustomPainter {
final Color color;
MyPainter(this.color);
@override
void paint(Canvas canvas, Size size) {
// this paint function uses color
// as long as color is the same there's no point painting again
// so shouldRepaint only returns true if the color has changed
}
@override
bool shouldRepaint(MyPainter oldDelegate) => color != oldDelegate.color;
}