CustomPainter - стоит ли усиливать перерисовку? - PullRequest
0 голосов
/ 26 апреля 2018

Я реализовал CustomPainter. В методе shouldRepaint мне нужно сравнить 6 наборов для глубокого равенства. Я делаю это с помощью setsEqual в данный момент. Если они абсолютно равны, перекрашивать не нужно, но стоит ли это проверять? Будет ли намного хуже просто вернуть истину и рисовать, даже если бы мне не пришлось это делать?

Edit: Я забыл упомянуть, что рисование само по себе довольно просто. Наборы содержат объекты, которые вычисляют точки (каждый около 5), которые я затем рисую в виде кругов. Цвет круга зависит от набора, к которому он принадлежит. Из-за взаимодействия с пользователем объекты могут изменить, к какому набору они принадлежат и если это происходит, StatefulWidget, содержащий CustomPaint, перестраивается с помощью setState. Я думаю, что сложная часть состоит в том, чтобы решить, следует ли перекрашивать: каждый набор должен сравниваться со старым набором делегатов, и если содержимое одного набора изменилось, мой CustomPainter должен перерисоваться.

1 Ответ

0 голосов
/ 26 апреля 2018

CustomPaint может стоить много мощности. Пример из другого вопроса здесь , где у пользователя было большое падение FPS из-за постоянного рисования.

Так что это то, что можно считать стоимостью .

Но самое важное, о чем следует помнить: shouldRepaint не самодостаточен. Согласно документам:

Возможно, метод рисования будет вызван, даже если shouldRepaint возвращает false (например, если необходимо перекрасить предка или потомка). Также возможно, что метод рисования будет вызван без вызова shouldRepaint (например, при изменении размера блока).

Решение состоит в том, чтобы использовать RepaintBoundary, как описано в документе, или в вопросе SO, связанном выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...