paintFlagElements method

  1. @override
FlagParentBounds paintFlagElements(
  1. Canvas canvas,
  2. Size size
)
override

Paints the custom flag elements on the given canvas and size.

  • canvas: The canvas on which to paint.
  • size: The size of the area to paint.

Returns a FlagParentBounds object representing the bounds of the painted elements.

Implementation

@override
FlagParentBounds paintFlagElements(Canvas canvas, Size size) {
  final horizontal = (customProperties.offset.dx + 1) * size.width / 2;
  final vertical = (customProperties.offset.dy + 1) * size.height / 2;
  final center = Offset(horizontal, vertical);
  final height = size.height * customProperties.heightFactor;
  final width = size.width * (customProperties.widthFactor ?? 1);

  final path = Path()
    ..moveTo(width * 0.29, height * 0.27)
    ..lineTo(width * 0.01, height * 0.19)
    ..lineTo(width * 0.01, height * 0.13)
    ..lineTo(width * 0.5, 0)
    ..lineTo(width * 0.71, 0)
    ..lineTo(width * 0.99, height * 0.08)
    ..lineTo(width * 0.99, height * 0.13)
    ..lineTo(width * 0.5, height * 0.27)
    ..lineTo(width * 0.29, height * 0.27)
    ..lineTo(width * 0.29, height * 0.27);

  final path2 = Path()
    ..moveTo(width * 0.5, 0)
    ..lineTo(width * 0.29, 0)
    ..lineTo(width * 0.01, height * 0.08)
    ..lineTo(width * 0.01, height * 0.13)
    ..lineTo(width * 0.5, height * 0.13)
    ..lineTo(width * 0.5, 0)
    ..lineTo(width * 0.5, 0)
    ..moveTo(width * 0.5, height * 0.27)
    ..lineTo(width * 0.71, height * 0.27)
    ..lineTo(width * 0.99, height * 0.19)
    ..lineTo(width * 0.99, height * 0.13)
    ..lineTo(width * 0.5, height * 0.13)
    ..lineTo(width * 0.5, height * 0.27)
    ..lineTo(width * 0.5, height * 0.27);

  final path3 = Path()
    ..moveTo(width * 0.29, height * 0.97)
    ..lineTo(width * 0.01, height * 0.89)
    ..lineTo(width * 0.01, height * 0.78)
    ..lineTo(width * 0.29, height * 0.7)
    ..lineTo(width * 0.71, height * 0.7)
    ..lineTo(width * 0.99, height * 0.78)
    ..lineTo(width * 0.99, height * 0.89)
    ..lineTo(width * 0.71, height * 0.97)
    ..lineTo(width * 0.29, height * 0.97)
    ..lineTo(width * 0.29, height * 0.97)
    ..moveTo(width, height * 1.14)
    ..lineTo(width * 0.87, height * 1.14)
    ..lineTo(width * 0.87, height * 1.09)
    ..lineTo(width * 0.65, height * 1.09)
    ..lineTo(width * 0.5, height * 1.04)
    ..lineTo(width * 0.35, height * 1.09)
    ..lineTo(width * 0.13, height * 1.09)
    ..lineTo(width * 0.13, height * 1.14)
    ..lineTo(0, height * 1.14)
    ..lineTo(0, height * 1.23)
    ..lineTo(width * 0.13, height * 1.23)
    ..lineTo(width * 0.13, height * 1.28)
    ..lineTo(width * 0.35, height * 1.28)
    ..lineTo(width * 0.5, height * 1.34)
    ..lineTo(width * 0.65, height * 1.28)
    ..lineTo(width * 0.87, height * 1.28)
    ..lineTo(width * 0.87, height * 1.23)
    ..lineTo(width, height * 1.23)
    ..lineTo(width, height * 1.14)
    ..lineTo(width, height * 1.14)
    ..moveTo(width, height * 0.44)
    ..lineTo(width * 0.87, height * 0.44)
    ..lineTo(width * 0.87, height * 0.39)
    ..lineTo(width * 0.65, height * 0.39)
    ..lineTo(width * 0.5, height * 0.34)
    ..lineTo(width * 0.35, height * 0.39)
    ..lineTo(width * 0.13, height * 0.39)
    ..lineTo(width * 0.13, height * 0.44)
    ..lineTo(0, height * 0.44)
    ..lineTo(0, height * 0.53)
    ..lineTo(width * 0.13, height * 0.53)
    ..lineTo(width * 0.13, height * 0.58)
    ..lineTo(width * 0.35, height * 0.58)
    ..lineTo(width * 0.5, height * 0.63)
    ..lineTo(width * 0.65, height * 0.58)
    ..lineTo(width * 0.87, height * 0.58)
    ..lineTo(width * 0.87, height * 0.53)
    ..lineTo(width, height * 0.53)
    ..lineTo(width, height * 0.44)
    ..lineTo(width, height * 0.44);

  final path4 = Path()
    ..moveTo(width * 0.36, height * 0.78)
    ..lineTo(width * 0.64, height * 0.78)
    ..lineTo(width * 0.64, height * 0.89)
    ..lineTo(width * 0.36, height * 0.89)
    ..lineTo(width * 0.36, height * 0.78)
    ..lineTo(width * 0.36, height * 0.78)
    ..moveTo(width * 0.5, height * 0.54)
    ..cubicTo(
      width * 0.61,
      height * 0.54,
      width * 0.68,
      height * 0.49,
      width * 0.62,
      height * 0.46,
    )
    ..cubicTo(
      width * 0.6,
      height * 0.44,
      width * 0.55,
      height * 0.43,
      width * 0.5,
      height * 0.43,
    )
    ..cubicTo(
      width * 0.39,
      height * 0.43,
      width * 0.32,
      height * 0.47,
      width * 0.38,
      height * 0.51,
    )
    ..cubicTo(
      width * 0.4,
      height * 0.53,
      width * 0.45,
      height * 0.54,
      width * 0.5,
      height * 0.54,
    )
    ..lineTo(width * 0.5, height * 0.54)
    ..moveTo(width * 0.5, height * 1.24)
    ..cubicTo(
      width * 0.61,
      height * 1.24,
      width * 0.68,
      height * 1.2,
      width * 0.62,
      height * 1.16,
    )
    ..cubicTo(
      width * 0.6,
      height * 1.15,
      width * 0.55,
      height * 1.14,
      width * 0.5,
      height * 1.14,
    )
    ..cubicTo(
      width * 0.39,
      height * 1.14,
      width * 0.32,
      height * 1.18,
      width * 0.38,
      height * 1.21,
    )
    ..cubicTo(
      width * 0.4,
      height * 1.23,
      width * 0.45,
      height * 1.24,
      width * 0.5,
      height * 1.24,
    )
    ..lineTo(width * 0.5, height * 1.24);

  final path5 = Path()
    ..moveTo(width * 0.29, height * 1.67)
    ..lineTo(width * 0.01, height * 1.59)
    ..lineTo(width * 0.01, height * 1.54)
    ..lineTo(width * 0.5, height * 1.4)
    ..lineTo(width * 0.71, height * 1.4)
    ..lineTo(width * 0.99, height * 1.48)
    ..lineTo(width * 0.99, height * 1.54)
    ..lineTo(width * 0.5, height * 1.67)
    ..lineTo(width * 0.29, height * 1.67)
    ..lineTo(width * 0.29, height * 1.67);

  final path6 = Path()
    ..moveTo(width * 0.5, height * 1.4)
    ..lineTo(width * 0.29, height * 1.4)
    ..lineTo(width * 0.01, height * 1.48)
    ..lineTo(width * 0.01, height * 1.54)
    ..lineTo(width * 0.5, height * 1.54)
    ..lineTo(width * 0.5, height * 1.4)
    ..lineTo(width * 0.5, height * 1.4)
    ..moveTo(width * 0.5, height * 1.67)
    ..lineTo(width * 0.71, height * 1.67)
    ..lineTo(width * 0.99, height * 1.59)
    ..lineTo(width * 0.99, height * 1.54)
    ..lineTo(width * 0.5, height * 1.54)
    ..lineTo(width * 0.5, height * 1.67)
    ..lineTo(width * 0.5, height * 1.67);

  final bounds = path.getBounds();
  final compensation = -size.height / 40;
  final rect = Rect.fromLTWH(
    bounds.left + compensation,
    compensation * 1.2,
    bounds.width - compensation * 2,
    size.height,
  );
  canvas
    ..save()
    ..translate(center.dx - bounds.center.dx, center.dy - bounds.center.dy)
    ..drawRect(rect, paintCreator(customColors[1])) // Red.
    ..drawPath(path, paintCreator(customColors.first)) // White.
    ..drawPath(path2, paintCreator(customColors[3])) // Yellow.
    ..drawPath(path3, paintCreator(customProperties.mainColor)) // Green.
    ..drawPath(path4, paintCreator(customColors[1])) // Red.
    ..drawPath(path5, paintCreator(customColors.first)) // White.
    ..drawPath(path6, paintCreator(customColors[3])) // Yellow.
    ..restore();

  return (canvas: canvas, bounds: rect, child: property.child);
}