import 'package:flutter/material.dart'; import '../../theme/focus_flow_tokens.dart'; class RewardIcon extends StatelessWidget { const RewardIcon({ this.color = FocusFlowTokens.accentMagenta, this.size = 24, super.key, }); final Color color; final double size; @override Widget build(BuildContext context) { return CustomPaint( size: Size.square(size), painter: _RewardIconPainter(color), ); } } class _RewardIconPainter extends CustomPainter { const _RewardIconPainter(this.color); final Color color; @override void paint(Canvas canvas, Size size) { final paint = Paint() ..color = color ..style = PaintingStyle.fill; _drawSparkle( canvas, paint, size.center(Offset.zero), size.shortestSide * 0.44, ); _drawSparkle( canvas, paint, Offset(size.width * 0.78, size.height * 0.24), size.shortestSide * 0.18, ); _drawSparkle( canvas, paint, Offset(size.width * 0.24, size.height * 0.78), size.shortestSide * 0.14, ); } void _drawSparkle(Canvas canvas, Paint paint, Offset center, double radius) { final path = Path() ..moveTo(center.dx, center.dy - radius) ..lineTo(center.dx + radius * 0.24, center.dy - radius * 0.24) ..lineTo(center.dx + radius, center.dy) ..lineTo(center.dx + radius * 0.24, center.dy + radius * 0.24) ..lineTo(center.dx, center.dy + radius) ..lineTo(center.dx - radius * 0.24, center.dy + radius * 0.24) ..lineTo(center.dx - radius, center.dy) ..lineTo(center.dx - radius * 0.24, center.dy - radius * 0.24) ..close(); canvas.drawPath(path, paint); } @override bool shouldRepaint(covariant _RewardIconPainter oldDelegate) { return oldDelegate.color != color; } }