108 lines
2.9 KiB
Dart
108 lines
2.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import '../tokens/unionflow_colors.dart';
|
|
|
|
/// Background avec motifs géométriques africains subtils
|
|
class AfricanPatternBackground extends StatelessWidget {
|
|
final Widget child;
|
|
final Color? patternColor;
|
|
final double opacity;
|
|
|
|
const AfricanPatternBackground({
|
|
super.key,
|
|
required this.child,
|
|
this.patternColor,
|
|
this.opacity = 0.03,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Stack(
|
|
children: [
|
|
// Background avec motifs
|
|
Positioned.fill(
|
|
child: IgnorePointer(
|
|
child: CustomPaint(
|
|
painter: AfricanPatternPainter(
|
|
color: (patternColor ?? UnionFlowColors.unionGreen).withOpacity(opacity),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
// Contenu
|
|
child,
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
/// Painter pour dessiner les motifs africains
|
|
class AfricanPatternPainter extends CustomPainter {
|
|
final Color color;
|
|
|
|
AfricanPatternPainter({required this.color});
|
|
|
|
@override
|
|
void paint(Canvas canvas, Size size) {
|
|
final paint = Paint()
|
|
..color = color
|
|
..style = PaintingStyle.stroke
|
|
..strokeWidth = 2;
|
|
|
|
final fillPaint = Paint()
|
|
..color = color
|
|
..style = PaintingStyle.fill;
|
|
|
|
// Espacement entre les motifs
|
|
const double spacing = 80.0;
|
|
const double patternSize = 40.0;
|
|
|
|
// Dessiner la grille de motifs
|
|
for (double y = 0; y < size.height + spacing; y += spacing) {
|
|
for (double x = 0; x < size.width + spacing; x += spacing) {
|
|
final offset = Offset(x, y);
|
|
|
|
// Alterner entre différents motifs
|
|
final patternType = ((x ~/ spacing) + (y ~/ spacing)) % 3;
|
|
|
|
switch (patternType) {
|
|
case 0:
|
|
_drawDiamondPattern(canvas, offset, patternSize, paint);
|
|
break;
|
|
case 1:
|
|
_drawTrianglePattern(canvas, offset, patternSize, fillPaint);
|
|
break;
|
|
case 2:
|
|
_drawCirclePattern(canvas, offset, patternSize, paint);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void _drawDiamondPattern(Canvas canvas, Offset offset, double size, Paint paint) {
|
|
final path = Path()
|
|
..moveTo(offset.dx, offset.dy - size / 2)
|
|
..lineTo(offset.dx + size / 2, offset.dy)
|
|
..lineTo(offset.dx, offset.dy + size / 2)
|
|
..lineTo(offset.dx - size / 2, offset.dy)
|
|
..close();
|
|
canvas.drawPath(path, paint);
|
|
}
|
|
|
|
void _drawTrianglePattern(Canvas canvas, Offset offset, double size, Paint paint) {
|
|
final path = Path()
|
|
..moveTo(offset.dx, offset.dy - size / 3)
|
|
..lineTo(offset.dx + size / 3, offset.dy + size / 3)
|
|
..lineTo(offset.dx - size / 3, offset.dy + size / 3)
|
|
..close();
|
|
canvas.drawPath(path, paint);
|
|
}
|
|
|
|
void _drawCirclePattern(Canvas canvas, Offset offset, double size, Paint paint) {
|
|
canvas.drawCircle(offset, size / 4, paint);
|
|
}
|
|
|
|
@override
|
|
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
|
|
}
|