draw method
Calls painter once per enabled paint, in ascending priority order, with
canvas translated to that entry's offset and back again.
Pass a function that already exists rather than a literal, so a node drawing every frame allocates nothing:
void painter(Canvas canvas, Paint paint) { ... }
draw((canvas) {
palette.draw(canvas, painter);
});
Implementation
void draw(Canvas canvas, Painter painter) {
for (final entry in _paints) {
if (!entry.enabled) continue;
final offset = entry.offset;
if (!offset.isZero) {
canvas.translate(offset.x, offset.y);
painter(canvas, entry.paint);
canvas.translate(-offset.x, -offset.y);
} else {
painter(canvas, entry.paint);
}
}
}