Флаттер по индивидуальному заказу - PullRequest
0 голосов
/ 13 мая 2018

Как работает методReReaint из пользовательского класса живописца во флаттере?Я прочитал документацию , но я не понимаю, как и когда нам это сделать.

1 Ответ

0 голосов
/ 13 мая 2018

Это способ дать подсказке фреймворку, нужно ли ему вызывать метод 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;
}
...