Initial commit: unionflow-mobile-apps
Application Flutter complète (sans build artifacts). Signed-off-by: lions dev Team
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user