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