MIF_E31222656/lib/screens/shared/leaf_pattern_painter.dart

66 lines
1.7 KiB
Dart

import 'package:flutter/material.dart';
import 'dart:math' as math;
class LeafPatternPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final random = math.Random(42); // Fixed seed for consistent pattern
final leafCount = (size.width * size.height / 15000).round().clamp(10, 50);
for (int i = 0; i < leafCount; i++) {
final x = random.nextDouble() * size.width;
final y = random.nextDouble() * size.height;
final rotation = random.nextDouble() * 2 * math.pi;
final scale = random.nextDouble() * 0.5 + 0.5; // 0.5 to 1.0
final opacity = (random.nextDouble() * 0.15 + 0.05).clamp(
0.05,
0.2,
); // 0.05 to 0.2
canvas.save();
canvas.translate(x, y);
canvas.rotate(rotation);
canvas.scale(scale);
_drawLeaf(canvas, opacity);
canvas.restore();
}
}
void _drawLeaf(Canvas canvas, double opacity) {
final paint =
Paint()
..color = Colors.green.shade800.withOpacity(opacity)
..style = PaintingStyle.fill
..strokeWidth = 1.0;
final path = Path();
// Leaf shape
path.moveTo(0, 0);
path.cubicTo(5, -10, 10, -15, 20, -20);
path.cubicTo(10, -10, 5, -5, 0, 0);
path.cubicTo(-5, -5, -10, -10, -20, -20);
path.cubicTo(-10, -15, -5, -10, 0, 0);
path.close();
// Draw leaf
canvas.drawPath(path, paint);
// Draw vein
paint.color = Colors.green.shade800.withOpacity(opacity * 1.5);
paint.style = PaintingStyle.stroke;
paint.strokeWidth = 0.5;
final veinPath = Path();
veinPath.moveTo(0, 0);
veinPath.lineTo(0, -15);
canvas.drawPath(veinPath, paint);
}
@override
bool shouldRepaint(LeafPatternPainter oldDelegate) => false;
}