draw method

void draw(
  1. Canvas canvas,
  2. Painter painter
)

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);
    }
  }
}