drawShadows method

void drawShadows(
  1. Canvas canvas,
  2. Path path,
  3. List<BoxShadow> shadows
)

Implementation

void drawShadows(Canvas canvas, Path path, List<BoxShadow> shadows) {
  for (final BoxShadow shadow in shadows) {
    final Paint shadowPainter = shadow.toPaint();
    if (shadow.spreadRadius == 0) {
      canvas.drawPath(path.shift(shadow.offset), shadowPainter);
    } else {
      Rect zone = path.getBounds();
      double xScale = (zone.width + shadow.spreadRadius) / zone.width;
      double yScale = (zone.height + shadow.spreadRadius) / zone.height;
      Matrix4 m4 = Matrix4.identity();
      m4.translate(zone.width / 2, zone.height / 2);
      m4.scale(xScale, yScale);
      m4.translate(-zone.width / 2, -zone.height / 2);
      canvas.drawPath(
          path.shift(shadow.offset).transform(m4.storage), shadowPainter);
    }
  }
  Paint whitePaint = Paint()..color = decoration.color ?? Colors.black;
  canvas.drawPath(path, whitePaint);
}