5 changed files with 9567 additions and 1 deletions
			
			
		- 
					1assets/animations/confetti.json
- 
					9268assets/animations/lights_purple.json
- 
					295lib/features/level/presentation/ui/widgets/level_path.dart
- 
					2pubspec.lock
- 
					2pubspec.yaml
						
							
						
						
							1
	
						
						assets/animations/confetti.json
						
							File diff suppressed because it is too large
							
							
								
									View File
								
							
						
					
				File diff suppressed because it is too large
							
							
								
									View File
								
							
						
						
							
						
						
							9268
	
						
						assets/animations/lights_purple.json
						
							File diff suppressed because it is too large
							
							
								
									View File
								
							
						
					
				File diff suppressed because it is too large
							
							
								
									View File
								
							
						| @ -0,0 +1,295 @@ | |||||
|  | import 'package:flutter/material.dart'; | ||||
|  | import 'package:path_drawing/path_drawing.dart'; | ||||
|  | 
 | ||||
|  | class LevelPath extends StatelessWidget { | ||||
|  |   const LevelPath({super.key}); | ||||
|  | 
 | ||||
|  |   @override | ||||
|  |   Widget build(BuildContext context) { | ||||
|  |     return CustomPaint(size: Size(361, 2233), painter: CurvedPathPainter()); | ||||
|  |   } | ||||
|  | } | ||||
|  | 
 | ||||
|  | class CurvedPathPainter extends CustomPainter { | ||||
|  |   @override | ||||
|  |   void paint(Canvas canvas, Size size) { | ||||
|  |     // Scale factor to fit the design | ||||
|  |     final scaleX = size.width / 361; | ||||
|  |     final scaleY = size.height / 2233; | ||||
|  | 
 | ||||
|  |     final paint = Paint() | ||||
|  |       ..color = Colors.white | ||||
|  |       ..strokeWidth = 3 | ||||
|  |       ..style = PaintingStyle.stroke | ||||
|  |       ..strokeCap = StrokeCap.round; | ||||
|  | 
 | ||||
|  |     // First path (bottom curve) | ||||
|  |     final path1 = Path(); | ||||
|  |     path1.moveTo(86.9641 * scaleX, 2231.26 * scaleY); | ||||
|  |     path1.cubicTo( | ||||
|  |       195.179 * scaleX, | ||||
|  |       2177.98 * scaleY, | ||||
|  |       178.692 * scaleX, | ||||
|  |       2126.01 * scaleY, | ||||
|  |       178.692 * scaleX, | ||||
|  |       2126.01 * scaleY, | ||||
|  |     ); | ||||
|  |     path1.cubicTo( | ||||
|  |       164.374 * scaleX, | ||||
|  |       2080.87 * scaleY, | ||||
|  |       102.793 * scaleX, | ||||
|  |       2100.22 * scaleY, | ||||
|  |       94.3613 * scaleX, | ||||
|  |       2069.15 * scaleY, | ||||
|  |     ); | ||||
|  |     path1.cubicTo( | ||||
|  |       79.334 * scaleX, | ||||
|  |       2013.78 * scaleY, | ||||
|  |       112.538 * scaleX, | ||||
|  |       2035.55 * scaleY, | ||||
|  |       109.368 * scaleX, | ||||
|  |       1964.11 * scaleY, | ||||
|  |     ); | ||||
|  |     path1.cubicTo( | ||||
|  |       107.037 * scaleX, | ||||
|  |       1911.59 * scaleY, | ||||
|  |       170.879 * scaleX, | ||||
|  |       1904.82 * scaleY, | ||||
|  |       206.38 * scaleX, | ||||
|  |       1866.04 * scaleY, | ||||
|  |     ); | ||||
|  |     path1.cubicTo( | ||||
|  |       242.924 * scaleX, | ||||
|  |       1826.13 * scaleY, | ||||
|  |       297.122 * scaleX, | ||||
|  |       1847.48 * scaleY, | ||||
|  |       330.868 * scaleX, | ||||
|  |       1805.17 * scaleY, | ||||
|  |     ); | ||||
|  |     path1.cubicTo( | ||||
|  |       369.124 * scaleX, | ||||
|  |       1757.21 * scaleY, | ||||
|  |       356.865 * scaleX, | ||||
|  |       1650.25 * scaleY, | ||||
|  |       356.865 * scaleX, | ||||
|  |       1650.25 * scaleY, | ||||
|  |     ); | ||||
|  |     path1.cubicTo( | ||||
|  |       356.865 * scaleX, | ||||
|  |       1650.25 * scaleY, | ||||
|  |       327.352 * scaleX, | ||||
|  |       1579.89 * scaleY, | ||||
|  |       320.723 * scaleX, | ||||
|  |       1532.1 * scaleY, | ||||
|  |     ); | ||||
|  |     path1.cubicTo( | ||||
|  |       313.484 * scaleX, | ||||
|  |       1479.91 * scaleY, | ||||
|  |       325.584 * scaleX, | ||||
|  |       1397.26 * scaleY, | ||||
|  |       325.584 * scaleX, | ||||
|  |       1397.26 * scaleY, | ||||
|  |     ); | ||||
|  | 
 | ||||
|  |     // Second path (top curve) | ||||
|  |     final path2 = Path(); | ||||
|  |     path2.moveTo(140.464 * scaleX, 1.50636 * scaleY); | ||||
|  |     path2.cubicTo( | ||||
|  |       140.464 * scaleX, | ||||
|  |       1.50636 * scaleY, | ||||
|  |       139.141 * scaleX, | ||||
|  |       -0.0589981 * scaleY, | ||||
|  |       114.441 * scaleX, | ||||
|  |       45.9425 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       91.5014 * scaleX, | ||||
|  |       88.6635 * scaleY, | ||||
|  |       57.6838 * scaleX, | ||||
|  |       106.774 * scaleY, | ||||
|  |       55.4723 * scaleX, | ||||
|  |       155.213 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       52.7912 * scaleX, | ||||
|  |       213.94 * scaleY, | ||||
|  |       128.813 * scaleX, | ||||
|  |       286.676 * scaleY, | ||||
|  |       128.813 * scaleX, | ||||
|  |       286.676 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       128.813 * scaleX, | ||||
|  |       286.676 * scaleY, | ||||
|  |       155.78 * scaleX, | ||||
|  |       337.75 * scaleY, | ||||
|  |       151.85 * scaleX, | ||||
|  |       372.064 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       148.066 * scaleX, | ||||
|  |       405.109 * scaleY, | ||||
|  |       112.75 * scaleX, | ||||
|  |       447.729 * scaleY, | ||||
|  |       112.75 * scaleX, | ||||
|  |       447.729 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       112.75 * scaleX, | ||||
|  |       447.729 * scaleY, | ||||
|  |       16.9303 * scaleX, | ||||
|  |       455.877 * scaleY, | ||||
|  |       6.0151 * scaleX, | ||||
|  |       501.202 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       -1.31338 * scaleX, | ||||
|  |       531.634 * scaleY, | ||||
|  |       29.8983 * scaleX, | ||||
|  |       577.713 * scaleY, | ||||
|  |       29.8983 * scaleX, | ||||
|  |       577.713 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       29.8983 * scaleX, | ||||
|  |       577.713 * scaleY, | ||||
|  |       -18.1423 * scaleX, | ||||
|  |       654.926 * scaleY, | ||||
|  |       10.665 * scaleX, | ||||
|  |       687.618 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       34.3963 * scaleX, | ||||
|  |       714.549 * scaleY, | ||||
|  |       101.548 * scaleX, | ||||
|  |       701.356 * scaleY, | ||||
|  |       101.548 * scaleX, | ||||
|  |       701.356 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       101.548 * scaleX, | ||||
|  |       701.356 * scaleY, | ||||
|  |       234.377 * scaleX, | ||||
|  |       670.297 * scaleY, | ||||
|  |       258.796 * scaleX, | ||||
|  |       727.564 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       270.16 * scaleX, | ||||
|  |       754.214 * scaleY, | ||||
|  |       258.796 * scaleX, | ||||
|  |       801.75 * scaleY, | ||||
|  |       258.796 * scaleX, | ||||
|  |       801.75 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       258.796 * scaleX, | ||||
|  |       801.75 * scaleY, | ||||
|  |       248.847 * scaleX, | ||||
|  |       848.935 * scaleY, | ||||
|  |       254.781 * scaleX, | ||||
|  |       878.261 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       261.069 * scaleX, | ||||
|  |       909.339 * scaleY, | ||||
|  |       291.345 * scaleX, | ||||
|  |       950.756 * scaleY, | ||||
|  |       291.345 * scaleX, | ||||
|  |       950.756 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       291.345 * scaleX, | ||||
|  |       950.756 * scaleY, | ||||
|  |       282.736 * scaleX, | ||||
|  |       1008.09 * scaleY, | ||||
|  |       258.796 * scaleX, | ||||
|  |       1032.97 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       240.05 * scaleX, | ||||
|  |       1052.46 * scaleY, | ||||
|  |       198.137 * scaleX, | ||||
|  |       1066.37 * scaleY, | ||||
|  |       198.137 * scaleX, | ||||
|  |       1066.37 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       198.137 * scaleX, | ||||
|  |       1066.37 * scaleY, | ||||
|  |       166.656 * scaleX, | ||||
|  |       1088.74 * scaleY, | ||||
|  |       143.819 * scaleX, | ||||
|  |       1097.44 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       121.262 * scaleX, | ||||
|  |       1106.03 * scaleY, | ||||
|  |       83.3713 * scaleX, | ||||
|  |       1110.33 * scaleY, | ||||
|  |       83.3713 * scaleX, | ||||
|  |       1110.33 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       83.3713 * scaleX, | ||||
|  |       1110.33 * scaleY, | ||||
|  |       32.7909 * scaleX, | ||||
|  |       1133.78 * scaleY, | ||||
|  |       25.8826 * scaleX, | ||||
|  |       1163.59 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       18.5162 * scaleX, | ||||
|  |       1195.38 * scaleY, | ||||
|  |       59.4881 * scaleX, | ||||
|  |       1240.1 * scaleY, | ||||
|  |       59.4881 * scaleX, | ||||
|  |       1240.1 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       59.4881 * scaleX, | ||||
|  |       1240.1 * scaleY, | ||||
|  |       110.19 * scaleX, | ||||
|  |       1264.23 * scaleY, | ||||
|  |       143.819 * scaleX, | ||||
|  |       1276.88 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       172.99 * scaleX, | ||||
|  |       1287.85 * scaleY, | ||||
|  |       219.696 * scaleX, | ||||
|  |       1301.61 * scaleY, | ||||
|  |       219.696 * scaleX, | ||||
|  |       1301.61 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       219.696 * scaleX, | ||||
|  |       1301.61 * scaleY, | ||||
|  |       288.856 * scaleX, | ||||
|  |       1304.54 * scaleY, | ||||
|  |       312.964 * scaleX, | ||||
|  |       1328.51 * scaleY, | ||||
|  |     ); | ||||
|  |     path2.cubicTo( | ||||
|  |       330.039 * scaleX, | ||||
|  |       1345.48 * scaleY, | ||||
|  |       325.464 * scaleX, | ||||
|  |       1397.51 * scaleY, | ||||
|  |       325.464 * scaleX, | ||||
|  |       1397.51 * scaleY, | ||||
|  |     ); | ||||
|  | 
 | ||||
|  |     final dashArray = CircularIntervalList<double>(const [3.08, 13.1]); | ||||
|  |     final dashArray2 = CircularIntervalList<double>(const [3.08, 13.1]); | ||||
|  | 
 | ||||
|  |     // Simply pass the Path objects directly to dashPath | ||||
|  |     final dashed = dashPath(path1, dashArray: dashArray); | ||||
|  |     final dashed2 = dashPath(path2, dashArray: dashArray2); | ||||
|  | 
 | ||||
|  |     canvas.drawPath(dashed, paint); | ||||
|  |     canvas.drawPath(dashed2, paint); | ||||
|  |   } | ||||
|  | 
 | ||||
|  |   @override | ||||
|  |   bool shouldRepaint(covariant CustomPainter oldDelegate) => false; | ||||
|  | } | ||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue