Browse Source

Merge pull request 'fix: level feature' (#32) from fix/level into develop

Reviewed-on: https://git.nwhco.ir/amirreza.chegini/hade_hoda_flutter/pulls/32
develop
amirreza.chegini 12 hours ago
parent
commit
1b0367df75
  1. BIN
      assets/images/map_background.png
  2. BIN
      assets/images/planet_1.png
  3. BIN
      assets/images/planet_10.png
  4. BIN
      assets/images/planet_2.png
  5. BIN
      assets/images/planet_3.png
  6. BIN
      assets/images/planet_4.png
  7. BIN
      assets/images/planet_5.png
  8. BIN
      assets/images/planet_6.png
  9. BIN
      assets/images/planet_7.png
  10. BIN
      assets/images/planet_8.png
  11. BIN
      assets/images/planet_9.png
  12. BIN
      assets/images/planet_final.png
  13. BIN
      assets/images/satellite.png
  14. 116
      assets/svg/diamond_container.svg
  15. 156
      assets/svg/home_button.svg
  16. 30
      assets/svg/icon_play.svg
  17. 17
      lib/common_ui/resources/my_assets.dart
  18. 1
      lib/common_ui/resources/my_audios.dart
  19. 1
      lib/core/routers/my_routes.dart
  20. 4
      lib/core/widgets/inkwell/my_inkwell.dart
  21. 72
      lib/features/level/presentation/bloc/level_bloc.dart
  22. 227
      lib/features/level/presentation/ui/level_page.dart
  23. 50
      lib/features/level/presentation/ui/widgets/diamond_level.dart
  24. 61
      lib/features/level/presentation/ui/widgets/hint_level_widget.dart
  25. 26
      lib/features/level/presentation/ui/widgets/level_path.dart
  26. 39
      lib/features/level/presentation/ui/widgets/level_widget.dart
  27. 64
      lib/features/level/presentation/ui/widgets/play_button.dart
  28. 3
      lib/l10n/app_en.arb
  29. 6
      lib/l10n/app_localizations.dart
  30. 3
      lib/l10n/app_localizations_en.dart

BIN
assets/images/map_background.png

Before

Width: 928  |  Height: 4096  |  Size: 706 KiB

After

Width: 834  |  Height: 5243  |  Size: 306 KiB

BIN
assets/images/planet_1.png

After

Width: 374  |  Height: 374  |  Size: 151 KiB

BIN
assets/images/planet_10.png

After

Width: 118  |  Height: 118  |  Size: 22 KiB

BIN
assets/images/planet_2.png

After

Width: 260  |  Height: 260  |  Size: 83 KiB

BIN
assets/images/planet_3.png

After

Width: 634  |  Height: 637  |  Size: 367 KiB

BIN
assets/images/planet_4.png

After

Width: 269  |  Height: 266  |  Size: 63 KiB

BIN
assets/images/planet_5.png

After

Width: 632  |  Height: 632  |  Size: 381 KiB

BIN
assets/images/planet_6.png

After

Width: 110  |  Height: 110  |  Size: 22 KiB

BIN
assets/images/planet_7.png

After

Width: 195  |  Height: 195  |  Size: 48 KiB

BIN
assets/images/planet_8.png

After

Width: 486  |  Height: 486  |  Size: 195 KiB

BIN
assets/images/planet_9.png

After

Width: 209  |  Height: 209  |  Size: 64 KiB

BIN
assets/images/planet_final.png

After

Width: 509  |  Height: 511  |  Size: 288 KiB

BIN
assets/images/satellite.png

After

Width: 171  |  Height: 91  |  Size: 18 KiB

116
assets/svg/diamond_container.svg

@ -0,0 +1,116 @@
<svg width="120" height="55" viewBox="0 0 120 55" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.17057 49.2279C6.29881 58.1331 106.268 56.2288 114.822 46.9789C122.583 38.5633 118.851 10.8317 112.18 4.82837C103.131 -3.35144 14.3572 0.00391071 7.02539 6.44256C0.189013 12.4459 -2.12281 40.0142 2.17057 49.2279Z" fill="url(#paint0_radial_145_11453)"/>
<path d="M2.21031 47.6696C6.35928 56.2633 106.2 52.4661 114.764 43.5272C122.564 35.3877 118.913 10.8239 112.241 5.11902C103.18 -2.78427 14.2921 0.358871 6.95671 6.59066C0.119205 12.3864 -2.10462 38.7489 2.21031 47.6696Z" fill="url(#paint1_linear_145_11453)"/>
<path d="M3.01784 46.6218C7.09956 54.9338 105.563 51.1309 113.994 42.4749C121.689 34.6156 118.075 11.0197 111.485 5.40594C102.552 -2.23602 14.9284 0.733837 7.76864 6.7641C0.910007 12.3598 -1.23117 38.002 3.01784 46.6218Z" fill="url(#paint2_linear_145_11453)"/>
<path style="mix-blend-mode:screen" d="M61.5301 42.8221C43.7638 50.6754 23.9025 52.5813 4.94727 48.2519C4.94727 48.2519 25.244 47.1659 34.4068 43.8538C49.9579 38.1526 57.4415 36.4875 61.5301 42.8221Z" fill="url(#paint3_linear_145_11453)"/>
<path style="mix-blend-mode:screen" d="M19.4025 14.1896C19.6134 14.1766 19.8249 14.2048 20.0248 14.2728C20.2247 14.3407 20.4092 14.4471 20.5677 14.5857C20.7261 14.7244 20.8556 14.8927 20.9485 15.0809C21.0414 15.2691 21.0959 15.4737 21.1091 15.6828C21.1223 15.892 21.0938 16.1017 21.0253 16.2999C20.9567 16.4981 20.8495 16.681 20.7097 16.8382C20.5698 16.9953 20.4001 17.1236 20.2103 17.2157C20.0205 17.3079 19.8142 17.362 19.6033 17.3751C19.1773 17.4015 18.7582 17.259 18.4381 16.979C18.1181 16.6989 17.9233 16.3043 17.8967 15.8819C17.8701 15.4595 18.0137 15.0439 18.2961 14.7265C18.5785 14.4092 18.9765 14.216 19.4025 14.1896Z" fill="url(#paint4_radial_145_11453)"/>
<path d="M19.6029 15.3295C19.7209 15.3245 19.8364 15.365 19.9249 15.4427C20.0134 15.5203 20.0681 15.629 20.0774 15.7458C20.0824 15.8043 20.0754 15.8632 20.0567 15.919C20.0381 15.9747 20.0082 16.0261 19.969 16.0701C19.9298 16.1141 19.8819 16.1497 19.8284 16.1749C19.7749 16.2 19.7168 16.2141 19.6576 16.2164C19.5396 16.2214 19.4241 16.1809 19.3356 16.1032C19.2471 16.0256 19.1924 15.9169 19.183 15.8001C19.1779 15.683 19.2189 15.5686 19.2972 15.4808C19.3755 15.393 19.4851 15.3388 19.6029 15.3295Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M20.3155 27.0045C20.6325 26.9871 20.9476 27.0633 21.2209 27.2234C21.4942 27.3835 21.7136 27.6203 21.8513 27.904C21.989 28.1876 22.0389 28.5053 21.9946 28.8171C21.9503 29.1288 21.8138 29.4205 21.6024 29.6553C21.391 29.8902 21.1142 30.0577 20.8069 30.1366C20.4996 30.2156 20.1756 30.2025 19.8758 30.0989C19.576 29.9954 19.3139 29.8061 19.1225 29.5549C18.9311 29.3037 18.8191 29.002 18.8006 28.6877C18.7883 28.4785 18.8177 28.2689 18.8872 28.071C18.9567 27.873 19.065 27.6906 19.2057 27.5343C19.3465 27.3779 19.5169 27.2506 19.7074 27.1597C19.8978 27.0688 20.1045 27.016 20.3155 27.0045Z" fill="url(#paint5_radial_145_11453)"/>
<path d="M20.498 28.144C20.616 28.139 20.7315 28.1795 20.82 28.2572C20.9085 28.3348 20.9632 28.4435 20.9725 28.5603C20.9775 28.6188 20.9705 28.6777 20.9518 28.7335C20.9332 28.7892 20.9033 28.8407 20.8641 28.8846C20.8249 28.9286 20.777 28.9643 20.7235 28.9894C20.67 29.0145 20.6119 29.0287 20.5527 29.0309C20.4347 29.036 20.3192 28.9954 20.2307 28.9177C20.1422 28.8401 20.0875 28.7314 20.0781 28.6146C20.0774 28.4987 20.1198 28.3865 20.1973 28.2997C20.2748 28.2128 20.3818 28.1574 20.498 28.144Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M12.7222 3.81929C13.613 3.76349 14.5004 3.97112 15.272 4.41585C16.0436 4.86057 16.6648 5.52241 17.0568 6.31749C17.4488 7.11258 17.594 8.00515 17.4739 8.88212C17.3539 9.75909 16.9741 10.581 16.3825 11.2437C15.791 11.9064 15.0144 12.3802 14.1512 12.6049C13.2879 12.8296 12.3768 12.7951 11.5333 12.5059C10.6898 12.2167 9.95178 11.6857 9.41285 10.9803C8.87392 10.2748 8.55827 9.42663 8.50591 8.54315C8.46884 7.95821 8.54862 7.3718 8.74064 6.8175C8.93265 6.2632 9.23313 5.75195 9.62486 5.31307C10.0166 4.87419 10.4918 4.51631 11.0234 4.25998C11.5549 4.00364 12.1322 3.85387 12.7222 3.81929Z" fill="url(#paint6_radial_145_11453)"/>
<path style="mix-blend-mode:screen" d="M25.5906 37.9361C26.0156 37.9118 26.4382 38.0129 26.8053 38.2267C27.1723 38.4405 27.4672 38.7573 27.6527 39.1372C27.8383 39.5171 27.9062 39.9429 27.8478 40.361C27.7895 40.7791 27.6075 41.1707 27.3248 41.4863C27.0422 41.8019 26.6716 42.0274 26.2598 42.1343C25.848 42.2412 25.4135 42.2247 25.0112 42.0869C24.6089 41.9491 24.2567 41.6962 23.9993 41.3601C23.7418 41.024 23.5905 40.6197 23.5646 40.1984C23.5473 39.9179 23.586 39.6367 23.6786 39.371C23.7711 39.1053 23.9156 38.8603 24.1039 38.6501C24.2921 38.4399 24.5203 38.2687 24.7755 38.1461C25.0306 38.0236 25.3076 37.9522 25.5906 37.9361Z" fill="url(#paint7_radial_145_11453)"/>
<path d="M25.8463 39.4742C26.0049 39.469 26.1596 39.5242 26.2784 39.6286C26.3972 39.733 26.4712 39.8785 26.4851 40.0353C26.4901 40.1129 26.4792 40.1906 26.4532 40.2639C26.4272 40.3372 26.3866 40.4045 26.3338 40.462C26.281 40.5194 26.2171 40.5657 26.1459 40.5981C26.0747 40.6305 25.9976 40.6484 25.9193 40.6507C25.8402 40.6556 25.7608 40.6449 25.6859 40.6194C25.6109 40.5938 25.5417 40.5538 25.4824 40.5017C25.423 40.4496 25.3747 40.3863 25.34 40.3156C25.3053 40.2449 25.2851 40.1681 25.2805 40.0896C25.2755 40.0121 25.2864 39.9343 25.3124 39.861C25.3384 39.7877 25.379 39.7203 25.4318 39.6629C25.4846 39.6055 25.5485 39.5592 25.6197 39.5268C25.6909 39.4944 25.768 39.4765 25.8463 39.4742Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M6.80884 47.9809C6.94938 47.9711 7.09048 47.9892 7.22388 48.0342C7.35727 48.0792 7.48026 48.1501 7.58566 48.2428C7.69106 48.3355 7.77673 48.4481 7.83766 48.5741C7.89859 48.7001 7.93354 48.8368 7.94048 48.9763C7.95467 49.1877 7.90515 49.3984 7.79822 49.5818C7.69129 49.7652 7.53181 49.9128 7.34001 50.0061C7.14822 50.0993 6.93277 50.1339 6.72111 50.1054C6.50944 50.0769 6.31112 49.9866 6.15133 49.8461C5.99154 49.7055 5.87751 49.521 5.82374 49.316C5.76998 49.111 5.77888 48.8948 5.84937 48.6949C5.91985 48.4949 6.04872 48.3203 6.21956 48.1932C6.39041 48.066 6.59554 47.9922 6.80884 47.9809Z" fill="url(#paint8_radial_145_11453)"/>
<path d="M6.93594 48.7418C6.97431 48.7394 7.01275 48.7444 7.04913 48.7568C7.08551 48.7691 7.11912 48.7884 7.14794 48.8136C7.17677 48.8389 7.20026 48.8695 7.21713 48.9038C7.23399 48.938 7.24388 48.9752 7.2462 49.0133C7.2462 49.0901 7.21547 49.1638 7.1607 49.2181C7.10593 49.2724 7.03161 49.3029 6.95416 49.3029C6.8767 49.3029 6.80244 49.2724 6.74767 49.2181C6.6929 49.1638 6.66211 49.0901 6.66211 49.0133C6.66644 48.9427 6.69667 48.8761 6.74711 48.8261C6.79755 48.7761 6.86474 48.7461 6.93594 48.7418Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M36.7239 25.2486C36.9357 25.2384 37.1459 25.2904 37.328 25.3982C37.51 25.5059 37.656 25.6646 37.7476 25.8542C37.8391 26.0439 37.8721 26.2561 37.8425 26.4644C37.8129 26.6726 37.7219 26.8675 37.581 27.0246C37.4401 27.1818 37.2556 27.2942 37.0506 27.3478C36.8455 27.4013 36.6291 27.3937 36.4284 27.3258C36.2277 27.2579 36.0517 27.1328 35.9224 26.9661C35.7932 26.7994 35.7164 26.5986 35.7018 26.3888C35.6919 26.2471 35.7107 26.1048 35.7569 25.9703C35.8032 25.8359 35.8761 25.7119 35.9713 25.6057C36.0665 25.4995 36.182 25.4133 36.3113 25.3519C36.4405 25.2906 36.5808 25.2555 36.7239 25.2486Z" fill="url(#paint9_radial_145_11453)"/>
<path d="M36.8522 26.0268C36.8906 26.0243 36.929 26.0294 36.9654 26.0418C37.0018 26.0541 37.0354 26.0734 37.0642 26.0986C37.093 26.1238 37.1166 26.1545 37.1334 26.1887C37.1503 26.223 37.1602 26.2602 37.1625 26.2983C37.1677 26.3368 37.1645 26.3761 37.1531 26.4133C37.1418 26.4505 37.1224 26.4849 37.0964 26.5141C37.0705 26.5433 37.0385 26.5666 37.0026 26.5824C36.9668 26.5983 36.928 26.6063 36.8887 26.6059C36.8113 26.6059 36.737 26.5754 36.6822 26.5211C36.6274 26.4668 36.5967 26.3932 36.5967 26.3164C36.5967 26.2396 36.6274 26.1659 36.6822 26.1116C36.737 26.0573 36.8113 26.0268 36.8887 26.0268H36.8522Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M21.7939 42.008C21.8985 42.0007 22.0035 42.0142 22.1027 42.0477C22.202 42.0813 22.2934 42.1342 22.3717 42.2034C22.4499 42.2725 22.5134 42.3565 22.5584 42.4504C22.6034 42.5443 22.6289 42.6462 22.6335 42.7501C22.6335 42.9613 22.549 43.1639 22.3983 43.3132C22.2477 43.4625 22.0435 43.5464 21.8305 43.5464C21.6175 43.5464 21.4132 43.4625 21.2626 43.3132C21.112 43.1639 21.0273 42.9613 21.0273 42.7501C21.0406 42.5545 21.1261 42.3707 21.2676 42.2338C21.409 42.0969 21.5964 42.0165 21.7939 42.008Z" fill="url(#paint10_radial_145_11453)"/>
<path d="M21.8855 42.5695C21.9208 42.5595 21.9579 42.5577 21.994 42.5644C22.0301 42.5711 22.0642 42.5859 22.0935 42.6079C22.1228 42.6298 22.1466 42.6582 22.163 42.6908C22.1794 42.7234 22.1879 42.7593 22.1879 42.7957C22.1879 42.8321 22.1794 42.8681 22.163 42.9007C22.1466 42.9333 22.1228 42.9616 22.0935 42.9835C22.0642 43.0055 22.0301 43.0204 21.994 43.027C21.9579 43.0337 21.9208 43.032 21.8855 43.022C21.8502 43.032 21.813 43.0337 21.7769 43.027C21.7407 43.0204 21.7067 43.0055 21.6774 42.9835C21.648 42.9616 21.6243 42.9333 21.6079 42.9007C21.5915 42.8681 21.583 42.8321 21.583 42.7957C21.583 42.7593 21.5915 42.7234 21.6079 42.6908C21.6243 42.6582 21.648 42.6298 21.6774 42.6079C21.7067 42.5859 21.7407 42.5711 21.7769 42.5644C21.813 42.5577 21.8502 42.5595 21.8855 42.5695Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M34.2606 41.3572C34.4841 41.3374 34.7093 41.3623 34.923 41.4303C35.1367 41.4983 35.3345 41.6081 35.5046 41.7532C35.6748 41.8983 35.8139 42.0758 35.9137 42.2751C36.0135 42.4744 36.0721 42.6916 36.0858 42.9137C36.106 43.2404 36.0287 43.5658 35.8634 43.8492C35.6981 44.1326 35.4523 44.3614 35.1566 44.507C34.8609 44.6527 34.5285 44.7086 34.2009 44.6679C33.8733 44.6272 33.5651 44.4916 33.3148 44.2782C33.0645 44.0647 32.8832 43.7828 32.7935 43.4677C32.7039 43.1527 32.7099 42.8184 32.8109 42.5067C32.9118 42.195 33.1031 41.9197 33.361 41.7152C33.6188 41.5108 33.9317 41.3863 34.2606 41.3572Z" fill="url(#paint11_radial_145_11453)"/>
<path d="M34.4609 42.5512C34.5552 42.544 34.6495 42.565 34.7317 42.6113C34.8139 42.6577 34.8802 42.7274 34.9222 42.8114C34.9642 42.8954 34.9799 42.9899 34.9674 43.0829C34.9548 43.1758 34.9145 43.2629 34.8517 43.333C34.7889 43.4031 34.7064 43.453 34.6148 43.4762C34.5232 43.4995 34.4267 43.4951 34.3376 43.4636C34.2485 43.4321 34.171 43.3749 34.1149 43.2994C34.0588 43.2239 34.0268 43.1335 34.0229 43.0398C34.0178 42.918 34.0606 42.7989 34.1423 42.7077C34.2241 42.6166 34.3383 42.5604 34.4609 42.5512Z" fill="#FFFFAB"/>
<path d="M60.0518 44.4147C60.4418 42.4176 61.4575 40.5935 62.954 39.2021C63.5928 39.2021 62.9539 42.0618 62.6254 42.7134C62.2968 43.3649 60.1978 44.9034 60.0518 44.4147Z" fill="white"/>
<defs>
<radialGradient id="paint0_radial_145_11453" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(74.2854 51.1141) scale(45.7724 47.4284)">
<stop stop-color="#B8BCE0"/>
<stop offset="1" stop-color="#99A7E0"/>
</radialGradient>
<linearGradient id="paint1_linear_145_11453" x1="59.5989" y1="52.5024" x2="59.5989" y2="0.413378" gradientUnits="userSpaceOnUse">
<stop stop-color="#CADCFF"/>
<stop offset="1" stop-color="white"/>
</linearGradient>
<linearGradient id="paint2_linear_145_11453" x1="59.5931" y1="51.2577" x2="59.5931" y2="0.82438" gradientUnits="userSpaceOnUse">
<stop stop-color="#FAFAFD"/>
<stop offset="1" stop-color="#C4DAE2"/>
</linearGradient>
<linearGradient id="paint3_linear_145_11453" x1="61.5301" y1="44.614" x2="4.91076" y2="44.614" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF6140"/>
<stop offset="0.1" stop-color="#EF5B3C"/>
<stop offset="0.29" stop-color="#C54B31"/>
<stop offset="0.55" stop-color="#813120"/>
<stop offset="0.88" stop-color="#240E09"/>
<stop offset="1"/>
</linearGradient>
<radialGradient id="paint4_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0963722 -1.59273 1.6062 -0.0955635 10.2282 9.57797)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint5_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0963724 -1.59273 1.60621 -0.0955636 11.1339 22.4214)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint6_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.270502 -4.47047 4.50837 -0.268228 3.71025 2.06477)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint7_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.129229 -2.13569 2.15381 -0.128141 16.4453 33.9119)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint8_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0646139 -1.06784 1.0769 -0.0640702 -2.40979 42.8987)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint9_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0646146 -1.06785 1.07691 -0.064071 27.5363 20.1374)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint10_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0481852 -0.79635 0.803087 -0.047781 12.5628 36.6493)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint11_radial_145_11453" cx="0" cy="0" r="1" gradientTransform="matrix(-0.100755 -1.66511 1.67925 -0.0999069 25.1054 36.8664)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
</defs>
</svg>

156
assets/svg/home_button.svg

@ -0,0 +1,156 @@
<svg width="65" height="55" viewBox="0 0 65 55" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_145_9448)">
<path d="M1.19184 49.1218C3.44747 58.0084 58.07 56.1081 62.7437 46.8775C66.9843 38.4796 64.9452 10.8061 61.3 4.81532C56.3557 -3.34735 7.85048 0.000972935 3.84447 6.42614C0.109134 12.4169 -1.15402 39.9275 1.19184 49.1218Z" fill="url(#paint0_radial_145_9448)"/>
<path d="M1.37256 47.5652C3.6282 56.1261 57.9079 52.3434 62.5635 43.4386C66.8041 35.3302 64.8191 10.8603 61.192 5.17722C56.2657 -2.69587 7.94096 0.435265 3.953 6.64324C0.235706 12.4168 -0.973303 38.6786 1.37256 47.5652Z" fill="url(#paint1_linear_145_9448)"/>
<path d="M2.05828 46.8048C4.25979 55.1122 57.3665 51.3114 61.9138 42.6601C66.0642 34.8051 64.1153 11.222 60.5605 5.61133C55.7424 -2.02647 8.48231 0.941776 4.62066 6.96876C0.921413 12.5614 -0.233443 38.1896 2.05828 46.8048Z" fill="url(#paint2_linear_145_9448)"/>
<path style="mix-blend-mode:screen" d="M60.8304 42.8231C43.2661 50.6764 23.6304 52.5823 4.89062 48.2528C4.89062 48.2528 24.9567 47.1669 34.0154 43.8548C49.3898 38.1536 56.7883 36.4885 60.8304 42.8231Z" fill="url(#paint3_linear_145_9448)"/>
<path style="mix-blend-mode:screen" d="M19.1832 14.1896C19.3917 14.1766 19.6008 14.2048 19.7984 14.2728C19.9961 14.3407 20.1785 14.4471 20.3351 14.5857C20.4918 14.7244 20.6197 14.8927 20.7116 15.0809C20.8034 15.2691 20.8574 15.4737 20.8704 15.6828C20.8834 15.892 20.8553 16.1017 20.7875 16.2999C20.7198 16.4981 20.6137 16.681 20.4755 16.8382C20.3373 16.9953 20.1695 17.1236 19.9818 17.2157C19.7941 17.3079 19.5903 17.362 19.3817 17.3751C18.9606 17.4015 18.5462 17.259 18.2298 16.979C17.9134 16.6989 17.7208 16.3043 17.6945 15.8819C17.6682 15.4595 17.8102 15.0439 18.0894 14.7265C18.3686 14.4092 18.762 14.216 19.1832 14.1896Z" fill="url(#paint4_radial_145_9448)"/>
<path d="M19.3813 15.3304C19.498 15.3253 19.6121 15.3659 19.6997 15.4435C19.7872 15.5212 19.8412 15.6298 19.8504 15.7466C19.8554 15.8052 19.8484 15.8641 19.83 15.9198C19.8116 15.9756 19.7821 16.027 19.7433 16.071C19.7045 16.115 19.6572 16.1506 19.6043 16.1757C19.5514 16.2009 19.4939 16.215 19.4354 16.2172C19.3187 16.2223 19.2046 16.1817 19.1171 16.1041C19.0296 16.0265 18.9755 15.9178 18.9662 15.801C18.9612 15.6839 19.0017 15.5694 19.0791 15.4816C19.1565 15.3939 19.2648 15.3396 19.3813 15.3304Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M21.3485 7.33087C21.7716 7.30607 22.1874 7.45005 22.5051 7.73146C22.8229 8.01286 23.0169 8.40886 23.0447 8.8331C23.0617 9.1466 22.986 9.45817 22.827 9.72863C22.668 9.9991 22.4328 10.2164 22.1511 10.3532C21.8694 10.49 21.5536 10.5403 21.2434 10.4977C20.9333 10.4551 20.6426 10.3215 20.408 10.1136C20.1733 9.90583 20.0052 9.63307 19.9246 9.32968C19.844 9.02628 19.8547 8.70578 19.9552 8.40843C20.0556 8.11108 20.2415 7.85013 20.4894 7.65841C20.7373 7.46669 21.0362 7.35274 21.3485 7.33087Z" fill="url(#paint5_radial_145_9448)"/>
<path d="M21.5473 8.43458C21.6629 8.43381 21.7747 8.47588 21.8613 8.5527C21.9478 8.62952 22.0031 8.73568 22.0164 8.85085C22.0215 8.96793 21.981 9.08242 21.9036 9.17019C21.8262 9.25796 21.7179 9.31218 21.6014 9.32144C21.543 9.32638 21.4843 9.3194 21.4287 9.30093C21.3732 9.28245 21.3219 9.25284 21.278 9.21393C21.2342 9.17502 21.1987 9.12759 21.1736 9.07452C21.1486 9.02145 21.1345 8.96383 21.1323 8.90515C21.1272 8.78807 21.1676 8.67361 21.245 8.58584C21.3224 8.49807 21.4308 8.44385 21.5473 8.43458Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M20.0854 27.0044C20.3988 26.987 20.7102 27.0632 20.9805 27.2233C21.2507 27.3834 21.4676 27.6202 21.6037 27.9038C21.7398 28.1875 21.7891 28.5052 21.7453 28.8169C21.7015 29.1286 21.5666 29.4203 21.3576 29.6552C21.1487 29.89 20.875 30.0575 20.5712 30.1365C20.2674 30.2154 19.947 30.2023 19.6506 30.0988C19.3542 29.9953 19.0951 29.8059 18.9059 29.5548C18.7167 29.3036 18.606 29.0019 18.5877 28.6876C18.5755 28.4784 18.6046 28.2688 18.6733 28.0708C18.742 27.8729 18.849 27.6905 18.9882 27.5342C19.1273 27.3778 19.2959 27.2505 19.4841 27.1596C19.6724 27.0687 19.8767 27.0159 20.0854 27.0044Z" fill="url(#paint6_radial_145_9448)"/>
<path d="M20.2657 28.145C20.3824 28.1399 20.4965 28.1805 20.584 28.2581C20.6715 28.3357 20.7256 28.4444 20.7348 28.5612C20.7398 28.6197 20.7328 28.6787 20.7144 28.7344C20.6959 28.7902 20.6664 28.8416 20.6276 28.8856C20.5888 28.9295 20.5415 28.9652 20.4886 28.9903C20.4357 29.0154 20.3783 29.0296 20.3198 29.0318C20.2031 29.0369 20.0889 28.9963 20.0014 28.9186C19.9139 28.841 19.8598 28.7323 19.8506 28.6155C19.8498 28.4996 19.8918 28.3874 19.9684 28.3006C20.045 28.2138 20.1508 28.1583 20.2657 28.145Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M12.5785 3.81944C13.4591 3.76364 14.3364 3.97127 15.0993 4.416C15.8622 4.86073 16.4763 5.52256 16.8638 6.31765C17.2514 7.11274 17.3949 8.0053 17.2762 8.88227C17.1575 9.75924 16.782 10.5811 16.1972 11.2439C15.6124 11.9066 14.8447 12.3803 13.9912 12.605C13.1377 12.8297 12.237 12.7953 11.4031 12.5061C10.5691 12.2169 9.83955 11.6859 9.30674 10.9804C8.77394 10.275 8.46187 9.42678 8.4101 8.5433C8.37346 7.95837 8.45234 7.37195 8.64217 6.81765C8.832 6.26336 9.12906 5.7521 9.51634 5.31322C9.90361 4.87434 10.3735 4.51646 10.899 4.26013C11.4244 4.00379 11.9952 3.85403 12.5785 3.81944Z" fill="url(#paint7_radial_145_9448)"/>
<path d="M13.1562 7.02265C13.4024 7.00517 13.6482 7.06146 13.8624 7.18438C14.0766 7.30729 14.2496 7.49128 14.3594 7.71299C14.4691 7.93471 14.5107 8.18413 14.4789 8.4296C14.447 8.67506 14.3431 8.9055 14.1804 9.09163C14.0177 9.27776 13.8035 9.41121 13.565 9.47501C13.3266 9.53881 13.0746 9.53009 12.8411 9.44996C12.6076 9.36983 12.4031 9.2219 12.2536 9.02496C12.1041 8.82803 12.0162 8.59096 12.0013 8.34387C11.9815 8.01547 12.0917 7.69247 12.3079 7.44508C12.5242 7.19769 12.829 7.04589 13.1562 7.02265Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M25.3 37.9361C25.7201 37.9119 26.138 38.013 26.5008 38.2268C26.8637 38.4406 27.1552 38.7574 27.3386 39.1373C27.5221 39.5172 27.5892 39.943 27.5315 40.3611C27.4738 40.7792 27.2939 41.1708 27.0145 41.4864C26.7351 41.802 26.3687 42.0275 25.9616 42.1344C25.5545 42.2413 25.1249 42.2248 24.7271 42.087C24.3294 41.9492 23.9812 41.6963 23.7267 41.3602C23.4721 41.024 23.3226 40.6198 23.2969 40.1985C23.2798 39.918 23.3182 39.6368 23.4097 39.3711C23.5012 39.1054 23.644 38.8604 23.8301 38.6502C24.0162 38.44 24.2419 38.2688 24.4941 38.1462C24.7463 38.0237 25.0202 37.9523 25.3 37.9361Z" fill="url(#paint8_radial_145_9448)"/>
<path d="M25.5527 39.475C25.7096 39.4697 25.8625 39.525 25.98 39.6293C26.0974 39.7337 26.1706 39.8793 26.1843 40.036C26.1892 40.1136 26.1785 40.1913 26.1528 40.2646C26.1271 40.3379 26.0869 40.4053 26.0347 40.4627C25.9825 40.5201 25.9193 40.5664 25.8489 40.5988C25.7785 40.6312 25.7024 40.6491 25.6249 40.6514C25.5467 40.6563 25.4682 40.6457 25.3941 40.6201C25.32 40.5945 25.2516 40.5545 25.193 40.5024C25.1343 40.4503 25.0865 40.387 25.0522 40.3163C25.0179 40.2456 24.9979 40.1688 24.9933 40.0903C24.9885 40.0128 24.9992 39.9351 25.0249 39.8618C25.0506 39.7885 25.0908 39.7211 25.143 39.6637C25.1952 39.6062 25.2583 39.56 25.3287 39.5275C25.3991 39.4951 25.4753 39.4772 25.5527 39.475Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M6.73182 47.9811C6.87077 47.9713 7.01026 47.9894 7.14214 48.0344C7.27402 48.0793 7.39562 48.1503 7.49982 48.243C7.60401 48.3357 7.68871 48.4483 7.74895 48.5743C7.80919 48.7003 7.84375 48.837 7.85061 48.9765C7.86463 49.1879 7.81567 49.3986 7.70996 49.582C7.60425 49.7653 7.44658 49.913 7.25696 50.0063C7.06734 50.0995 6.85434 50.1341 6.64509 50.1056C6.43583 50.0771 6.23976 49.9868 6.08178 49.8463C5.92381 49.7057 5.81107 49.5212 5.75792 49.3162C5.70477 49.1112 5.71357 48.895 5.78325 48.6951C5.85293 48.4951 5.98034 48.3205 6.14924 48.1933C6.31814 48.0662 6.52094 47.9923 6.73182 47.9811Z" fill="url(#paint9_radial_145_9448)"/>
<path d="M6.85861 48.7416C6.89654 48.7391 6.93454 48.7442 6.97051 48.7565C7.00648 48.7688 7.0397 48.7882 7.0682 48.8134C7.09671 48.8386 7.11993 48.8693 7.1366 48.9035C7.15328 48.9378 7.16305 48.975 7.16535 49.013C7.16535 49.0898 7.13496 49.1635 7.08082 49.2178C7.02667 49.2721 6.95319 49.3026 6.87662 49.3026C6.80005 49.3026 6.72662 49.2721 6.67248 49.2178C6.61833 49.1635 6.58789 49.0898 6.58789 49.013C6.59217 48.9424 6.62206 48.8759 6.67193 48.8259C6.72179 48.7758 6.78822 48.7459 6.85861 48.7416Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M36.308 25.2493C36.5174 25.2391 36.7251 25.2912 36.9051 25.3989C37.0852 25.5066 37.2295 25.6653 37.32 25.855C37.4105 26.0446 37.4431 26.2569 37.4138 26.4651C37.3845 26.6733 37.2946 26.8682 37.1553 27.0253C37.0161 27.1825 36.8336 27.2949 36.6309 27.3485C36.4282 27.4021 36.2142 27.3944 36.0158 27.3265C35.8174 27.2586 35.6434 27.1335 35.5156 26.9668C35.3878 26.8001 35.3119 26.5993 35.2975 26.3896C35.2877 26.2478 35.3062 26.1055 35.352 25.9711C35.3977 25.8366 35.4698 25.7127 35.5639 25.6065C35.658 25.5003 35.7722 25.414 35.9 25.3527C36.0278 25.2913 36.1665 25.2562 36.308 25.2493Z" fill="url(#paint10_radial_145_9448)"/>
<path d="M36.4342 26.0267C36.4722 26.0243 36.5102 26.0294 36.5462 26.0417C36.5822 26.054 36.6153 26.0733 36.6438 26.0986C36.6723 26.1238 36.6956 26.1544 36.7123 26.1887C36.729 26.2229 36.7387 26.2601 36.741 26.2982C36.7462 26.3368 36.743 26.376 36.7318 26.4132C36.7205 26.4505 36.7014 26.4848 36.6757 26.514C36.6501 26.5432 36.6184 26.5665 36.583 26.5824C36.5475 26.5982 36.5092 26.6062 36.4704 26.6059C36.3938 26.6059 36.3203 26.5754 36.2662 26.5211C36.212 26.4668 36.1816 26.3931 36.1816 26.3163C36.1816 26.2395 36.212 26.1658 36.2662 26.1115C36.3203 26.0572 36.3938 26.0267 36.4704 26.0267H36.4342Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M21.5469 42.0088C21.6503 42.0014 21.7541 42.0149 21.8522 42.0485C21.9503 42.082 22.0407 42.135 22.1181 42.2041C22.1955 42.2733 22.2582 42.3573 22.3027 42.4512C22.3472 42.5451 22.3724 42.647 22.377 42.7509C22.377 42.9621 22.2934 43.1646 22.1445 43.314C21.9956 43.4633 21.7936 43.5472 21.5831 43.5472C21.3725 43.5472 21.1705 43.4633 21.0216 43.314C20.8727 43.1646 20.7891 42.9621 20.7891 42.7509C20.8022 42.5553 20.8867 42.3715 21.0266 42.2346C21.1664 42.0976 21.3517 42.0173 21.5469 42.0088Z" fill="url(#paint11_radial_145_9448)"/>
<path d="M21.6369 42.5696C21.6718 42.5596 21.7086 42.5579 21.7442 42.5645C21.7799 42.5712 21.8136 42.5861 21.8426 42.608C21.8716 42.6299 21.8951 42.6583 21.9113 42.6909C21.9275 42.7235 21.9359 42.7594 21.9359 42.7958C21.9359 42.8323 21.9275 42.8682 21.9113 42.9008C21.8951 42.9334 21.8716 42.9617 21.8426 42.9837C21.8136 43.0056 21.7799 43.0205 21.7442 43.0272C21.7086 43.0338 21.6718 43.0321 21.6369 43.0221C21.602 43.0321 21.5652 43.0338 21.5295 43.0272C21.4938 43.0205 21.4602 43.0056 21.4312 42.9837C21.4022 42.9617 21.3787 42.9334 21.3625 42.9008C21.3463 42.8682 21.3379 42.8323 21.3379 42.7958C21.3379 42.7594 21.3463 42.7235 21.3625 42.6909C21.3787 42.6583 21.4022 42.6299 21.4312 42.608C21.4602 42.5861 21.4938 42.5712 21.5295 42.5645C21.5652 42.5579 21.602 42.5596 21.6369 42.5696Z" fill="#FFFFAB"/>
<path style="mix-blend-mode:screen" d="M33.8721 41.357C34.0931 41.3373 34.3158 41.3621 34.527 41.4302C34.7383 41.4982 34.9338 41.608 35.102 41.7531C35.2702 41.8982 35.4077 42.0757 35.5064 42.275C35.6051 42.4743 35.663 42.6914 35.6766 42.9136C35.6966 43.2403 35.6201 43.5657 35.4567 43.8491C35.2933 44.1325 35.0503 44.3613 34.7579 44.5069C34.4656 44.6525 34.137 44.7085 33.8131 44.6678C33.4892 44.6271 33.1845 44.4915 32.9371 44.278C32.6896 44.0646 32.5103 43.7827 32.4217 43.4676C32.3331 43.1525 32.3391 42.8183 32.4388 42.5066C32.5386 42.1949 32.7278 41.9196 32.9827 41.7151C33.2376 41.5107 33.547 41.3861 33.8721 41.357Z" fill="url(#paint12_radial_145_9448)"/>
<path d="M34.0702 42.5514C34.1634 42.5443 34.2566 42.5652 34.3379 42.6116C34.4191 42.658 34.4848 42.7276 34.5263 42.8116C34.5678 42.8957 34.5833 42.9902 34.5709 43.0831C34.5585 43.1761 34.5187 43.2632 34.4566 43.3332C34.3944 43.4033 34.3129 43.4532 34.2223 43.4765C34.1317 43.4997 34.0363 43.4953 33.9483 43.4638C33.8602 43.4323 33.7835 43.3752 33.7281 43.2997C33.6727 43.2242 33.641 43.1338 33.6371 43.0401C33.6321 42.9182 33.6745 42.7991 33.7552 42.708C33.836 42.6168 33.9489 42.5607 34.0702 42.5514Z" fill="#FFFFAB"/>
<path d="M59.3691 44.4157C59.7548 42.4186 60.7589 40.5945 62.2384 39.2031C62.8699 39.2031 62.2383 42.0628 61.9135 42.7143C61.5887 43.3659 59.5135 44.9043 59.3691 44.4157Z" fill="white"/>
<path style="mix-blend-mode:screen" d="M4.43983 7.00494C4.43983 7.00494 41.3601 -4.83186 60.7044 5.73799C60.7044 5.73799 62.7255 7.3669 63.5014 13.6835C63.5014 13.6835 61.9495 8.12708 50.3826 8.92344C40.4217 9.5931 24.9932 26.3528 8.87891 20.9593C0.75862 18.2444 4.43983 7.00494 4.43983 7.00494Z" fill="url(#paint13_linear_145_9448)"/>
<path d="M4.44038 11.8736C4.44038 11.8736 2.63586 7.33074 6.06443 5.70183C9.493 4.07291 20.6449 2.55259 21.1862 2.95076C21.7276 3.34894 16.4764 5.28554 13.7516 6.28098C11.0268 7.27643 5.81181 12.6337 4.44038 11.8736Z" fill="white"/>
<g filter="url(#filter0_i_145_9448)">
<path d="M45.724 25.6299L42.1674 26.2503L40.4471 38.313H36.1226C35.9831 35.6248 35.3553 28.8696 32.5422 29.1224C29.7291 29.3751 29.2874 35.1193 29.1247 38.313H25.1958C24.0738 34.3425 23.1654 30.3159 22.4753 26.2503H19.3604C19.3604 26.2503 27.6137 10.9479 31.6124 10.6032C35.6112 10.2586 45.724 25.6299 45.724 25.6299Z" fill="#847AC4"/>
</g>
</g>
<defs>
<filter id="filter0_i_145_9448" x="19.3604" y="10.5975" width="26.3633" height="29.7585" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="2.04306"/>
<feGaussianBlur stdDeviation="1.02153"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_145_9448"/>
</filter>
<radialGradient id="paint0_radial_145_9448" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(40.5948 51.0041) scale(25.0096 47.329)">
<stop stop-color="#D0CDEA"/>
<stop offset="1" stop-color="#7D75DA"/>
</radialGradient>
<linearGradient id="paint1_linear_145_9448" x1="32.5725" y1="52.3796" x2="32.5725" y2="0.489564" gradientUnits="userSpaceOnUse">
<stop stop-color="#CADCFF"/>
<stop offset="1" stop-color="white"/>
</linearGradient>
<linearGradient id="paint2_linear_145_9448" x1="32.5725" y1="51.4381" x2="32.5725" y2="1.03227" gradientUnits="userSpaceOnUse">
<stop stop-color="#FAFAFD"/>
<stop offset="1" stop-color="#C3BFEE"/>
</linearGradient>
<linearGradient id="paint3_linear_145_9448" x1="60.8304" y1="44.6149" x2="4.85453" y2="44.6149" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF6140"/>
<stop offset="0.1" stop-color="#EF5B3C"/>
<stop offset="0.29" stop-color="#C54B31"/>
<stop offset="0.55" stop-color="#813120"/>
<stop offset="0.88" stop-color="#240E09"/>
<stop offset="1"/>
</linearGradient>
<radialGradient id="paint4_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.095277 -1.59273 1.58795 -0.0955635 10.1131 9.57797)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint5_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0952789 -1.59271 1.58798 -0.0955628 12.2735 2.70983)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint6_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0952773 -1.59273 1.58795 -0.0955636 11.0081 22.4213)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint7_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.267428 -4.47047 4.45713 -0.268228 3.66894 2.06492)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint8_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.12776 -2.13569 2.12933 -0.128141 16.2586 33.912)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint9_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0638797 -1.06784 1.06466 -0.0640701 -2.38205 42.8989)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint10_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0638803 -1.06785 1.06467 -0.064071 27.2247 20.1381)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint11_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.0476377 -0.79635 0.793961 -0.047781 12.4207 36.6501)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<radialGradient id="paint12_radial_145_9448" cx="0" cy="0" r="1" gradientTransform="matrix(-0.09961 -1.66511 1.66017 -0.0999069 24.8209 36.8663)" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B359"/>
<stop offset="0.13" stop-color="#009148"/>
<stop offset="0.34" stop-color="#005E2F"/>
<stop offset="0.54" stop-color="#00351A"/>
<stop offset="0.73" stop-color="#00180C"/>
<stop offset="0.89" stop-color="#000603"/>
<stop offset="1"/>
</radialGradient>
<linearGradient id="paint13_linear_145_9448" x1="3.60975" y1="11.6926" x2="63.5014" y2="11.6926" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF9840"/>
<stop offset="0.1" stop-color="#EF8E3C"/>
<stop offset="0.29" stop-color="#C57531"/>
<stop offset="0.55" stop-color="#814D20"/>
<stop offset="0.88" stop-color="#241609"/>
<stop offset="1"/>
</linearGradient>
<clipPath id="clip0_145_9448">
<rect width="65" height="55" fill="white"/>
</clipPath>
</defs>
</svg>

30
assets/svg/icon_play.svg

@ -0,0 +1,30 @@
<svg width="30" height="33" viewBox="0 0 30 33" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_di_154_14787)">
<mask id="path-1-inside-1_154_14787" fill="white">
<path d="M27.7682 17.8882C28.2388 17.524 28.6197 17.0569 28.8818 16.5226C29.1439 15.9884 29.2802 15.4013 29.2802 14.8062C29.2802 14.2112 29.1439 13.624 28.8818 13.0898C28.6197 12.5556 28.2388 12.0884 27.7682 11.7242C21.6738 7.01014 14.8695 3.29368 7.60938 0.713704L6.28185 0.242057C3.74472 -0.658546 1.06324 1.05728 0.719669 3.67777C-0.23989 11.0657 -0.23989 18.5467 0.719669 25.9346C1.06527 28.5551 3.74472 30.271 6.28185 29.3704L7.60938 28.8987C14.8695 26.3187 21.6738 22.6023 27.7682 17.8882Z"/>
</mask>
<path d="M27.7682 17.8882C28.2388 17.524 28.6197 17.0569 28.8818 16.5226C29.1439 15.9884 29.2802 15.4013 29.2802 14.8062C29.2802 14.2112 29.1439 13.624 28.8818 13.0898C28.6197 12.5556 28.2388 12.0884 27.7682 11.7242C21.6738 7.01014 14.8695 3.29368 7.60938 0.713704L6.28185 0.242057C3.74472 -0.658546 1.06324 1.05728 0.719669 3.67777C-0.23989 11.0657 -0.23989 18.5467 0.719669 25.9346C1.06527 28.5551 3.74472 30.271 6.28185 29.3704L7.60938 28.8987C14.8695 26.3187 21.6738 22.6023 27.7682 17.8882Z" fill="url(#paint0_linear_154_14787)"/>
<path d="M27.5008 17.5426C27.6791 17.773 27.8574 18.0034 28.0357 18.2337C28.5554 17.8286 28.9799 17.3033 29.2666 16.7114C29.5543 16.1199 29.7037 15.4627 29.7005 14.8062C29.6988 14.3953 29.638 13.9849 29.5207 13.5916C29.4506 13.3566 29.3605 13.1278 29.2517 12.9083C28.9611 12.3211 28.5344 11.8027 28.0153 11.405C21.8787 6.7014 14.9956 2.98446 7.7084 0.435061C7.26514 0.27991 6.82189 0.124765 6.37865 -0.0303792C3.80997 -1.02113 0.726207 0.944873 0.467748 3.64474C-0.459804 11.0489 -0.42411 18.568 0.57131 25.9539C0.850896 28.5887 3.86421 30.4548 6.32018 29.4783C6.76198 29.319 7.20375 29.1597 7.64553 29.0004C13.4237 26.9174 18.9329 24.1009 23.9995 20.6418C25.285 19.7643 26.542 18.8459 27.7682 17.8882C26.5331 18.8344 25.2679 19.7407 23.975 20.6056C18.8793 24.0151 13.3535 26.7742 7.57323 28.797C7.12999 28.9521 6.68675 29.1073 6.2435 29.2624C3.91048 30.1641 1.10203 28.3696 0.867989 25.9151C-0.0550036 18.546 -0.0193095 11.0619 0.971629 3.71049C1.22356 1.31996 3.9651 -0.372481 6.18514 0.514521C6.62684 0.673781 7.06861 0.833068 7.51038 0.992355C14.7146 3.58869 21.4963 7.33532 27.5213 12.0435C27.9398 12.3705 28.2814 12.7941 28.5119 13.2712C28.5983 13.4496 28.6693 13.6352 28.7241 13.8254C28.8158 14.1439 28.8616 14.4753 28.8598 14.8062C28.8574 15.3349 28.7321 15.8618 28.497 16.3338C28.2626 16.8063 27.9188 17.2231 27.5008 17.5426ZM28.0357 18.2337L27.5008 17.5426L27.7682 17.8882L28.0357 18.2337Z" fill="#FFF3C0" mask="url(#path-1-inside-1_154_14787)"/>
</g>
<defs>
<filter id="filter0_di_154_14787" x="0" y="0" width="29.2803" height="32.2207" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="2.60823"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 0.670588 0 0 0 0.4 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_154_14787"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_154_14787" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="1.63032"/>
<feGaussianBlur stdDeviation="0.815162"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_154_14787"/>
</filter>
<linearGradient id="paint0_linear_154_14787" x1="14.6401" y1="0" x2="14.6401" y2="29.6124" gradientUnits="userSpaceOnUse">
<stop stop-color="#F9601F"/>
<stop offset="1" stop-color="#D93D16"/>
</linearGradient>
</defs>
</svg>

17
lib/common_ui/resources/my_assets.dart

@ -14,7 +14,6 @@ class MyAssets {
static const String level = 'assets/images/level.png';
static const String finishedLevel = 'assets/images/finished_level.png';
static const String currentLevel = 'assets/images/current_level.png';
static const String homeButton = 'assets/images/home_button.png';
static const String error = 'assets/images/error.png';
static const String leaf = 'assets/images/leaf.png';
static const String happyPersons = 'assets/images/happy_persons.png';
@ -27,6 +26,18 @@ class MyAssets {
static const String intro_3 = 'assets/images/intro_3.jpg';
static const String intro_4 = 'assets/images/intro_4.jpg';
static const String intro_5 = 'assets/images/intro_5.jpg';
static const String planet1 = 'assets/images/planet_1.png';
static const String planet2 = 'assets/images/planet_2.png';
static const String planet3 = 'assets/images/planet_3.png';
static const String planet4 = 'assets/images/planet_4.png';
static const String planet5 = 'assets/images/planet_5.png';
static const String planet6 = 'assets/images/planet_6.png';
static const String planet7 = 'assets/images/planet_7.png';
static const String planet8 = 'assets/images/planet_8.png';
static const String planet9 = 'assets/images/planet_9.png';
static const String planet10 = 'assets/images/planet_10.png';
static const String satellite = 'assets/images/satellite.png';
static const String planetFinal = 'assets/images/planet_final.png';
/// SVG
static const String closeBtn = 'assets/svg/close_btn.svg';
@ -58,6 +69,9 @@ class MyAssets {
static const String lang = 'assets/svg/lang.svg';
static const String unMusic = 'assets/svg/unmusic.svg';
static const String globe = 'assets/svg/globe.svg';
static const String homeButton = 'assets/svg/home_button.svg';
static const String diamondContainer = 'assets/svg/diamond_container.svg';
static const String iconPlay = 'assets/svg/icon_play.svg';
static final List<String> images = [
@ -71,7 +85,6 @@ class MyAssets {
level,
finishedLevel,
currentLevel,
homeButton,
error,
leaf,
happyPersons,

1
lib/common_ui/resources/my_audios.dart

@ -5,4 +5,5 @@ class MyAudios {
static const String homeMusic = 'assets/audios/home.mp3';
static const String clickButton = 'assets/audios/click_button.mp3';
static const String back = 'assets/audios/back.mp3';
}

1
lib/core/routers/my_routes.dart

@ -110,6 +110,7 @@ GoRouter get appPages => GoRouter(
LevelBloc(
locator(),
locator(instanceName: MyConstants.mainAudioService),
locator(instanceName: MyConstants.effectAudioService),
)..add(SetCurrentLevelEvent()),
child: const LevelPage(),
),

4
lib/core/widgets/inkwell/my_inkwell.dart

@ -12,6 +12,7 @@ class MyInkwell extends StatefulWidget {
this.borderRadius,
this.highlightColor,
this.splashColor,
this.audio,
});
final VoidCallback? onTap;
@ -19,6 +20,7 @@ class MyInkwell extends StatefulWidget {
final BorderRadius? borderRadius;
final Color? highlightColor;
final Color? splashColor;
final String? audio;
@override
State<MyInkwell> createState() => _MyInkwellState();
@ -35,7 +37,7 @@ class _MyInkwellState extends State<MyInkwell> {
}
void playAudio() {
audioService.setAudio(assetPath: MyAudios.clickButton);
audioService.setAudio(assetPath: widget.audio ?? MyAudios.clickButton);
audioService.play();
}

72
lib/features/level/presentation/bloc/level_bloc.dart

@ -9,6 +9,7 @@ import 'package:hadi_hoda_flutter/core/routers/my_routes.dart';
import 'package:hadi_hoda_flutter/core/services/audio_service.dart';
import 'package:hadi_hoda_flutter/core/status/base_status.dart';
import 'package:hadi_hoda_flutter/core/utils/local_storage.dart';
import 'package:hadi_hoda_flutter/core/utils/screen_size.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_location.dart';
import 'package:hadi_hoda_flutter/features/level/domain/usecases/get_levels_usecase.dart';
@ -20,9 +21,10 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
/// ------------constructor------------
LevelBloc(
this._getLeveslUseCase,
this._audioService,
this._mainAudioService,
this._effectAudioService,
) : super(const LevelState()) {
volumeStream = _audioService.volumeStream();
volumeStream = _mainAudioService.volumeStream();
on<GetLevelListEvent>(_getLevelListEvent);
on<SetCurrentLevelEvent>(_setCurrentLevelEvent);
on<StartScrollEvent>(_startScrollEvent);
@ -39,34 +41,35 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
final GetLevelsUseCase _getLeveslUseCase;
/// ------------Variables------------
final List<LevelLocation> bottomLocationList = [
LevelLocation(bottom: -20, left: 30, index: 1),
LevelLocation(bottom: 50, left: 100, index: 2),
LevelLocation(bottom: 150, left: 60, index: 3),
LevelLocation(bottom: 210, left: 110, index: 4),
LevelLocation(bottom: 260, right: 70, index: 5),
LevelLocation(top: 170, right: 40, index: 6),
LevelLocation(top: 70, right: 70, index: 7),
LevelLocation(top: -20, right: 70, index: 8),
final List<LevelLocation> locationList = [
LevelLocation(bottom: 0.13.h, left: 0.2.w, index: 0),
LevelLocation(bottom: 0.25.h, left: 0.43.w, index: 1),
LevelLocation(bottom: 0.35.h, left: 0.22.w, index: 2),
LevelLocation(bottom: 0.5.h, left: 0.35.w, index: 3),
LevelLocation(bottom: 0.57.h, left: 0.6.w, index: 4),
LevelLocation(bottom: 0.65.h, left: 0.8.w, index: 5),
LevelLocation(bottom: 0.8.h, left: 0.82.w, index: 6),
LevelLocation(bottom: 1.0.h, left: 0.76.w, index: 7),
LevelLocation(bottom: 1.15.h, left: 0.6.w, index: 8),
LevelLocation(bottom: 1.2.h, left: 0.3.w, index: 9),
LevelLocation(bottom: 1.3.h, left: 0.07.w, index: 10),
LevelLocation(bottom: 1.38.h, left: 0.3.w, index: 11),
LevelLocation(bottom: 1.44.h, left: 0.55.w, index: 12),
LevelLocation(bottom: 1.54.h, left: 0.68.w, index: 13),
LevelLocation(bottom: 1.63.h, left: 0.6.w, index: 14),
LevelLocation(bottom: 1.75.h, left: 0.63.w, index: 15),
LevelLocation(bottom: 1.84.h, left: 0.43.w, index: 16),
LevelLocation(bottom: 1.82.h, left: 0.17.w, index: 17),
LevelLocation(bottom: 1.96.h, left: 0.05.w, index: 18),
LevelLocation(bottom: 2.08.h, left: 0.1.w, index: 19),
LevelLocation(bottom: 2.14.h, left: 0.3.w, index: 20),
LevelLocation(bottom: 2.24.h, left: 0.35.w, index: 21),
LevelLocation(bottom: 2.35.h, left: 0.2.w, index: 22),
LevelLocation(bottom: 2.44.h, left: 0.14.w, index: 23),
LevelLocation(bottom: 2.55.h, left: 0.28.w, index: 24),
];
final List<LevelLocation> topLocationList = [
LevelLocation(bottom: 30, right: 80, index: 9),
LevelLocation(bottom: 70, left: 20, index: 10),
LevelLocation(bottom: 150, left: 50, index: 11),
LevelLocation(bottom: 180, left: 140, index: 12),
LevelLocation(bottom: 260, right: 20, index: 13),
LevelLocation(bottom: 370, right: 30, index: 14),
LevelLocation(bottom: 420, left: 40, index: 15),
LevelLocation(top: 410, left: 0, index: 16),
LevelLocation(top: 320, left: 60, index: 17),
LevelLocation(top: 220, left: 80, index: 18),
LevelLocation(top: 130, left: 20, index: 19),
LevelLocation(top: 50, left: 70, index: 20),
];
final List<LevelEntity> bottom8LevelList = [];
final List<LevelEntity> top12LevelList = [];
final List<LevelEntity> levelList = [];
late final Stream<double> volumeStream;
@ -74,7 +77,8 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
/// ------------Controllers------------
final ScrollController scrollController = ScrollController();
final AudioService _audioService;
final AudioService _mainAudioService;
final AudioService _effectAudioService;
/// ------------Functions------------
void goToQuestionPage(BuildContext context, LevelEntity level){
@ -105,7 +109,10 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
}
Future<void> changeMute() async {
await _audioService.changeMute();
await Future.wait([
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
]);
}
/// ------------Api Calls------------
@ -117,10 +124,7 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
await _getLeveslUseCase(LevelParams()).then((value) {
value.fold(
(data) async {
bottom8LevelList.addAll(data.take(8));
if(data.length > 8){
top12LevelList.addAll(data.sublist(8, data.length));
}
levelList.addAll(data);
try {
emit(state.copyWith(
getLevelStatus: const BaseComplete(''),

227
lib/features/level/presentation/ui/level_page.dart

@ -1,25 +1,31 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart';
import 'package:hadi_hoda_flutter/core/utils/screen_size.dart';
import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_bloc.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/bottom_path.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/hint_level_widget.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/diamond_level.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_path.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/top_path.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/play_button.dart';
class LevelPage extends StatelessWidget {
const LevelPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
alignment: Alignment.center,
children: [
SingleChildScrollView(
controller: context.read<LevelBloc>().scrollController,
@ -28,37 +34,148 @@ class LevelPage extends StatelessWidget {
alignment: Alignment.center,
children: [
_background(),
_topPath(context),
_bottomPath(context),
_path(context),
_levelLocation(context),
_planets(context),
],
),
),
_topButtons(context),
_hintMission(context)
_playButton(context)
],
),
);
}
Positioned _planets(BuildContext context) {
return Positioned.fill(
child: Stack(
alignment: Alignment.center,
children: [
Positioned(
bottom: 0.3.h,
right: setSize(context: context, mobile: -40, tablet: -80),
child: MyImage(
image: MyAssets.planet1,
size: setSize(context: context, mobile: 180),
),
),
Positioned(
bottom: setSize(context: context, mobile: 0.65.h, tablet: 0.9.h),
child: MyImage(
image: MyAssets.planet2,
size: setSize(context: context, mobile: 110),
),
),
Positioned(
bottom: setSize(context: context, mobile: 0.8.h, tablet: 1.15.h),
left: setSize(context: context, mobile: -120, tablet: -200),
child: MyImage(
image: MyAssets.planet3,
size: setSize(context: context, mobile: 300),
),
),
Positioned(
bottom: setSize(context: context, mobile: 1.3.h, tablet: 1.75.h),
right: 40,
child: MyImage(
image: MyAssets.planet4,
size: setSize(context: context, mobile: 120),
),
),
Positioned(
bottom: setSize(context: context, mobile: 1.5.h, tablet: 2.0.h),
left: setSize(context: context, mobile: -130, tablet: -220),
child: MyImage(
image: MyAssets.planet5,
size: setSize(context: context, mobile: 300),
),
),
Positioned(
bottom: setSize(context: context, mobile: 1.85.h, tablet: 2.55.h),
right: setSize(context: context, mobile: 20, tablet: 20),
child: MyImage(
image: MyAssets.planet6,
size: setSize(context: context, mobile: 80),
),
),
Positioned(
bottom: setSize(context: context, mobile: 1.95.h, tablet: 2.6.h),
child: MyImage(
image: MyAssets.planet7,
size: setSize(context: context, mobile: 120),
),
),
Positioned(
bottom: setSize(context: context, mobile: 2.1.h, tablet: 2.8.h),
right: setSize(context: context, mobile: -50, tablet: -120),
child: MyImage(
image: MyAssets.planet8,
size: setSize(context: context, mobile: 250),
),
),
Positioned(
bottom: setSize(context: context, mobile: 2.3.h, tablet: 3.1.h),
left: -20,
child: MyImage(
image: MyAssets.planet9,
size: setSize(context: context, mobile: 100),
),
),
Positioned(
bottom: setSize(context: context, mobile: 2.5.h, tablet: 3.4.h),
child: MyImage(
image: MyAssets.planet10,
size: setSize(context: context, mobile: 60),
),
),
Positioned(
bottom: setSize(context: context, mobile: 2.55.h, tablet: 3.45.h),
right: 20,
child: MyImage(
image: MyAssets.satellite,
size: setSize(context: context, mobile: 80),
),
),
Positioned(
bottom: setSize(context: context, mobile: 2.6.h, tablet: 3.5.h),
left: setSize(context: context, mobile: 40),
child: MyImage(
image: MyAssets.planetFinal,
size: setSize(context: context, mobile: 300),
),
),
],
),
);
}
Widget _hintMission(BuildContext context) {
Positioned _path(BuildContext context) {
return Positioned.fill(
top: setSize(context: context, mobile: 0.3.h, tablet: 0.37.h),
bottom: setSize(context: context, mobile: 0.15.h, tablet: 200),
left: MySpaces.s30,
right: MySpaces.s30,
child: LevelPath(
width: setSize(context: context, tablet: 0.45.w, mobile: 0.9.w) ?? 0,
height: setSize(context: context, tablet: 1.75.h, mobile: 2.55.h) ?? 0,
),
);
}
Widget _playButton(BuildContext context) {
return BlocBuilder<LevelBloc, LevelState>(
buildWhen: (previous, current) =>
previous.chooseLevel?.id != current.chooseLevel?.id,
builder: (context, state) {
if (state.chooseLevel?.id != null) {
return Positioned(
bottom: MediaQuery.viewPaddingOf(context).bottom + MySpaces.s10,
right: MySpaces.s16,
left: MySpaces.s16,
child: HintLevelWidget(
bottom: MySpaces.s20,
child: PlayButton(
level: state.chooseLevel ?? LevelEntity(),
onTap: (level) =>
context.read<LevelBloc>().goToQuestionPage(context, level),
),
);
} else {
return SizedBox.shrink();
}
}
);
}
@ -67,23 +184,26 @@ class LevelPage extends StatelessWidget {
return Positioned(
left: MySpaces.s16,
right: MySpaces.s16,
top: MediaQuery.viewPaddingOf(context).top + MySpaces.s16,
top: MySpaces.s20,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
spacing: MySpaces.s16,
children: [
InkWell(
MyInkwell(
onTap: () => context.read<LevelBloc>().goToHomePage(context),
audio: MyAudios.back,
child: MyImage(
image: MyAssets.homeButton,
),
),
Spacer(),
DiamondLevel(),
StreamBuilder<double>(
initialData: 1,
stream: context.read<LevelBloc>().volumeStream,
builder: (context, snapshot) => InkWell(
builder: (context, snapshot) => MyInkwell(
onTap: () => context.read<LevelBloc>().changeMute(),
child: MyImage(
image: snapshot.data == 1 ? MyAssets.musicOn : MyAssets.musicOff,
image: snapshot.data == 0 ? MyAssets.musicOff : MyAssets.musicOn,
),
),
),
@ -92,71 +212,40 @@ class LevelPage extends StatelessWidget {
);
}
MyImage _background() {
return MyImage(image: MyAssets.mapBackground, fit: BoxFit.cover);
}
Positioned _topPath(BuildContext context) {
return Positioned(
top: context.heightScreen * 0.16,
left: context.widthScreen * 0.15,
child: BlocBuilder<LevelBloc, LevelState>(
builder: (context, state) => Stack(
Widget _background() {
return Stack(
children: [
TopPath(
height: 950,
width: context.widthScreen * 0.6,
),
...List.generate(
context.read<LevelBloc>().top12LevelList.length,
(index) => Positioned(
top: context.read<LevelBloc>().topLocationList[index].top,
bottom: context.read<LevelBloc>().topLocationList[index].bottom,
right: context.read<LevelBloc>().topLocationList[index].right,
left: context.read<LevelBloc>().topLocationList[index].left,
child: BlocBuilder<LevelBloc, LevelState>(
builder: (context, state) => LevelWidget(
chooseLevel: state.chooseLevel,
level: context.read<LevelBloc>().top12LevelList[index],
type: context.read<LevelBloc>().getLevelType(index + 9),
onTap: (LevelEntity level, LevelType type) {
context.read<LevelBloc>().add(ChooseLevelEvent(level, type));
},
),
),
),
MyImage(
image: MyAssets.mapBackground,
fit: BoxFit.cover,
),
],
),
),
);
}
Positioned _bottomPath(BuildContext context) {
return Positioned(
bottom: context.heightScreen * 0.18,
left: context.widthScreen * 0.2,
child: BlocBuilder<LevelBloc, LevelState>(
builder: (context, state) => Stack(
clipBehavior: Clip.none,
Widget _levelLocation(BuildContext context) {
return BlocBuilder<LevelBloc, LevelState>(
builder: (context, state) => Positioned.fill(
child: Stack(
children: [
BottomPath(),
...List.generate(
context.read<LevelBloc>().bottom8LevelList.length,
context.read<LevelBloc>().levelList.length,
(index) => Positioned(
top: context.read<LevelBloc>().bottomLocationList[index].top,
bottom: context.read<LevelBloc>().bottomLocationList[index].bottom,
right: context.read<LevelBloc>().bottomLocationList[index].right,
left: context.read<LevelBloc>().bottomLocationList[index].left,
top: context.read<LevelBloc>().locationList[index].top,
bottom: context.read<LevelBloc>().locationList[index].bottom,
right: context.read<LevelBloc>().locationList[index].right,
left: context.read<LevelBloc>().locationList[index].left,
child: BlocBuilder<LevelBloc, LevelState>(
buildWhen: (previous, current) =>
previous.chooseLevel?.id != current.chooseLevel?.id,
builder: (context, state) => LevelWidget(
chooseLevel: state.chooseLevel,
level: context.read<LevelBloc>().bottom8LevelList[index],
level: context.read<LevelBloc>().levelList[index],
type: context.read<LevelBloc>().getLevelType(index + 1),
onTap: (LevelEntity level, LevelType type) {
context.read<LevelBloc>().add(ChooseLevelEvent(level, type));
context.read<LevelBloc>().add(
ChooseLevelEvent(level, type),
);
},
),
),

50
lib/features/level/presentation/ui/widgets/diamond_level.dart

@ -0,0 +1,50 @@
import 'package:flutter/material.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart';
import 'package:hadi_hoda_flutter/core/utils/gap.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
class DiamondLevel extends StatelessWidget {
const DiamondLevel({super.key});
@override
Widget build(BuildContext context) {
return Stack(
alignment: Alignment.center,
children: [
MyImage(image: MyAssets.diamondContainer),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
MyImage(image: MyAssets.diamondBig, size: 42),
MySpaces.s16.gapWidth,
ShaderMask(
blendMode: BlendMode.modulate,
shaderCallback: (bounds) => LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0XFF4BA5EA), Color(0XFF0C4EE9)],
).createShader(bounds),
child: Text(
'0',
maxLines: 1,
style: MYTextStyle.button1.copyWith(
shadows: [
BoxShadow(
color: MyColors.black.withValues(alpha: 0.25),
offset: Offset(0, 1.43),
blurRadius: 1.43,
),
],
),
),
),
],
),
],
);
}
}

61
lib/features/level/presentation/ui/widgets/hint_level_widget.dart

@ -1,61 +0,0 @@
import 'package:flutter/material.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart';
import 'package:hadi_hoda_flutter/core/utils/my_localization.dart';
import 'package:hadi_hoda_flutter/core/utils/screen_size.dart';
import 'package:hadi_hoda_flutter/core/widgets/answer_box/styles/text_box.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
class HintLevelWidget extends StatelessWidget {
const HintLevelWidget({
super.key,
required this.level,
this.onTap,
});
final LevelEntity level;
final Function(LevelEntity level)? onTap;
@override
Widget build(BuildContext context) {
return ClipPath(
clipper: WavyBannerClipper(),
child: Container(
width: context.widthScreen,
padding: EdgeInsets.symmetric(horizontal: 14, vertical: 16),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: [Color(0XFFCADCFF), Color(0XFFFFFFFF)],
),
),
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
spacing: MySpaces.s8,
children: [
Text(
'${context.translate.step} ${level.order ?? 0}',
),
Text(
level.title ?? '',
maxLines: 3,
overflow: TextOverflow.ellipsis,
),
],
),
),
InkWell(
onTap: () => onTap?.call(level),
child: MyImage(image: MyAssets.play, size: 70),),
],
),
),
);
}
}

26
lib/features/level/presentation/ui/widgets/level_path.dart

@ -2,20 +2,38 @@ import 'package:flutter/material.dart';
import 'package:path_drawing/path_drawing.dart';
class LevelPath extends StatelessWidget {
const LevelPath({super.key});
const LevelPath({
super.key,
required this.width,
required this.height
});
final double width;
final double height;
@override
Widget build(BuildContext context) {
return CustomPaint(size: Size(361, 2233), painter: CurvedPathPainter());
return CustomPaint(
size: Size(width, height),
painter: CurvedPathPainter(width: width, height: height),
);
}
}
class CurvedPathPainter extends CustomPainter {
const CurvedPathPainter({
required this.width,
required this.height
});
final double width;
final double height;
@override
void paint(Canvas canvas, Size size) {
// Scale factor to fit the design
final scaleX = size.width / 361;
final scaleY = size.height / 2233;
final scaleX = size.width / width;
final scaleY = size.height / height;
final paint = Paint()
..color = Colors.white

39
lib/features/level/presentation/ui/widgets/level_widget.dart

@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
@ -13,6 +15,18 @@ enum LevelType {
LevelType.finished: MyAssets.finishedLevel,
LevelType.current: MyAssets.currentLevel,
};
static Map<LevelType, Color> get textShadowColor => {
LevelType.unFinished: Color(0XFF5B5B5B),
LevelType.finished: Color(0XFF096D7B),
LevelType.current: Color(0XFF91500D),
};
static Map<LevelType, Color> get textColor => {
LevelType.unFinished: Color(0XFFEDEDED),
LevelType.finished: Color(0XFFFFF2D0),
LevelType.current: Color(0XFFFFF2D0),
};
}
class LevelWidget extends StatelessWidget {
@ -38,8 +52,29 @@ class LevelWidget extends StatelessWidget {
clipBehavior: Clip.none,
children: [
MyImage(image: LevelType.image[type] ?? MyAssets.level, size: 46),
Text(
'${level.order}',
ShaderMask(
blendMode: BlendMode.modulate,
shaderCallback: (bounds) => LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0XFFFFFFFF),
LevelType.textColor[type] ?? MyColors.white,
],
).createShader(bounds),
child: Text(
'${level.order ?? 0}',
maxLines: 1,
style: MYTextStyle.button1.copyWith(
fontSize: 24,
shadows: [
BoxShadow(
color: LevelType.textShadowColor[type] ?? MyColors.white,
offset: Offset(0, 2.97),
)
],
),
),
),
if(level.id == chooseLevel?.id)
Positioned(

64
lib/features/level/presentation/ui/widgets/play_button.dart

@ -0,0 +1,64 @@
import 'package:flutter/material.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart';
import 'package:hadi_hoda_flutter/core/utils/my_localization.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
class PlayButton extends StatelessWidget {
const PlayButton({super.key, required this.level, this.onTap});
final LevelEntity level;
final Function(LevelEntity level)? onTap;
@override
Widget build(BuildContext context) {
return MyInkwell(
onTap: () => onTap?.call(level),
child: Stack(
alignment: Alignment.center,
children: [
MyImage(image: MyAssets.button2),
Positioned(
top: MySpaces.s2,
child: Row(
spacing: MySpaces.s4,
children: [
MyImage(image: MyAssets.iconPlay),
ShaderMask(
blendMode: BlendMode.modulate,
shaderCallback: (bounds) => LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0XFFF9601F), Color(0XFFD93D16)],
).createShader(bounds),
child: Text(
context.translate.play,
maxLines: 1,
style: MYTextStyle.button1.copyWith(
shadows: [
BoxShadow(
color: Color(0XFFFFFFAB).withValues(alpha: 0.40),
offset: Offset(0, 2.61),
),
],
),
),
),
],
),
),
Positioned(
bottom: MySpaces.s20,
child: Text(
'${context.translate.step} ${level.order ?? 0}',
style: MYTextStyle.matn3.copyWith(color: Color(0XFFD8490B)),
),
),
],
),
);
}
}

3
lib/l10n/app_en.arb

@ -28,5 +28,6 @@
"want_to_exit": "Want To Exit?",
"exit_dialog_desc": "Come back, hero!\nThe adventure isn’t over yet",
"cancel": "Cancel",
"exit": "Exit"
"exit": "Exit",
"play": "PLAY"
}

6
lib/l10n/app_localizations.dart

@ -273,6 +273,12 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Exit'**
String get exit;
/// No description provided for @play.
///
/// In en, this message translates to:
/// **'PLAY'**
String get play;
}
class _AppLocalizationsDelegate

3
lib/l10n/app_localizations_en.dart

@ -103,4 +103,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get exit => 'Exit';
@override
String get play => 'PLAY';
}
Loading…
Cancel
Save