Creación de pantallas

This commit is contained in:
2025-11-10 12:03:32 +01:00
parent 1eeacb368e
commit 75beafd771
41 changed files with 2612 additions and 648 deletions

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.0001 17.9991V10.9991M14.0001 17.9991V10.9991M18.0001 17.9991V10.9991M3.0001 21.9991H21.0001M6.0001 17.9991V10.9991M11.1201 2.19711C11.3945 2.06382 11.6957 1.99507 12.0008 1.99611C12.3059 1.99715 12.6066 2.06795 12.8801 2.20311L20.7461 6.05011C21.2221 6.28311 21.0561 6.99911 20.5261 6.99911H3.4741C2.9441 6.99911 2.7791 6.28311 3.2541 6.05011L11.1201 2.19711Z" stroke="#4B4B4B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 563 B

View File

@@ -0,0 +1,8 @@
<svg width="61" height="16" viewBox="0 0 61 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.1592 0.776367C9.40689 0.259207 8.42525 0 7.21423 0H2.52582C2.15457 0 1.94947 0.185672 1.91051 0.556659L0.00597827 12.5121C-0.0138158 12.6295 0.0155617 12.7369 0.0938422 12.8345C0.171675 12.9323 0.26957 12.981 0.386812 12.981H2.61378C3.00437 12.981 3.21906 12.7957 3.25847 12.4243L3.78583 9.20114C3.80509 9.04493 3.87379 8.91793 3.99103 8.82012C4.10818 8.72249 4.25471 8.65863 4.43053 8.62943C4.60635 8.60041 4.77213 8.58572 4.92869 8.58572C5.08481 8.58572 5.2703 8.59566 5.48552 8.6151C5.70021 8.63454 5.83707 8.64412 5.89574 8.64412C7.57563 8.64412 8.89422 8.17076 9.85159 7.22296C10.8085 6.2757 11.2875 4.96211 11.2875 3.28165C11.2875 2.1291 10.9111 1.29406 10.1592 0.776098V0.776367ZM7.74187 4.36621C7.64388 5.05006 7.39023 5.49915 6.98002 5.71411C6.56972 5.92934 5.98369 6.03646 5.22193 6.03646L4.25489 6.06566L4.75314 2.93019C4.79202 2.71549 4.91893 2.60801 5.13398 2.60801H5.6909C6.47191 2.60801 7.03877 2.7206 7.39041 2.94488C7.74187 3.16969 7.85911 3.64359 7.74187 4.36621Z" fill="#003087"/>
<path d="M59.6365 0H57.4684C57.2529 0 57.1261 0.107482 57.0874 0.322532L55.1827 12.5126L55.1533 12.5712C55.1533 12.6694 55.1924 12.7617 55.2707 12.8497C55.3484 12.9374 55.4466 12.9814 55.5636 12.9814H57.4979C57.8684 12.9814 58.0736 12.7962 58.1133 12.4247L60.0178 0.439775V0.410666C60.0177 0.137038 59.8904 0.000359438 59.6365 0.000359438V0Z" fill="#009CDE"/>
<path d="M33.4403 4.71881C33.4403 4.62136 33.4011 4.52839 33.3234 4.44071C33.2451 4.35284 33.1571 4.30859 33.0597 4.30859H30.8034C30.5881 4.30859 30.4123 4.40676 30.2758 4.60157L27.1698 9.17298L25.8805 4.77757C25.7824 4.46525 25.5678 4.30859 25.2359 4.30859H23.0379C22.94 4.30859 22.8521 4.35266 22.7745 4.44071C22.6961 4.52839 22.6572 4.62154 22.6572 4.71881C22.6572 4.75813 22.8477 5.33423 23.2286 6.44772C23.6094 7.56158 24.0196 8.76303 24.4592 10.0524C24.8988 11.3416 25.1282 12.0257 25.1478 12.1032C23.5458 14.2915 22.7452 15.4635 22.7452 15.6196C22.7452 15.8738 22.8719 16.0006 23.1261 16.0006H25.3824C25.5971 16.0006 25.7729 15.9031 25.9099 15.7077L33.3821 4.92383C33.4209 4.88514 33.4403 4.81707 33.4403 4.71872V4.71881Z" fill="#003087"/>
<path d="M54.4502 4.30862H52.2232C51.9494 4.30862 51.784 4.63106 51.7253 5.27586C51.2167 4.49465 50.2895 4.10352 48.9412 4.10352C47.5348 4.10352 46.3381 4.63107 45.3518 5.68599C44.3651 6.74091 43.8721 7.98177 43.8721 9.40768C43.8721 10.5605 44.209 11.4786 44.8828 12.162C45.5568 12.8462 46.4602 13.1877 47.5936 13.1877C48.16 13.1877 48.7363 13.0703 49.3223 12.836C49.9084 12.6016 50.367 12.2892 50.6998 11.8984C50.6998 11.918 50.6798 12.0056 50.6412 12.1618C50.6017 12.3183 50.5824 12.4359 50.5824 12.5134C50.5824 12.8264 50.7091 12.9822 50.9634 12.9822H52.9855C53.3562 12.9822 53.5713 12.797 53.6297 12.4256L54.8313 4.77742C54.8506 4.66009 54.8214 4.55287 54.7434 4.45507C54.6648 4.35762 54.5674 4.30862 54.4502 4.30862ZM50.6263 10.0816C50.1282 10.57 49.5273 10.8141 48.8242 10.8141C48.2574 10.8141 47.7987 10.658 47.4469 10.3453C47.0951 10.0334 46.9193 9.60356 46.9193 9.05595C46.9193 8.33368 47.1635 7.72265 47.6521 7.22457C48.1398 6.7264 48.746 6.4774 49.4688 6.4774C50.0153 6.4774 50.4696 6.63853 50.8313 6.96071C51.1924 7.28315 51.3737 7.72758 51.3737 8.29427C51.3735 8.99746 51.1244 9.59344 50.6263 10.0816Z" fill="#009CDE"/>
<path d="M21.1624 4.30862H18.9354C18.6615 4.30862 18.4958 4.63106 18.4371 5.27586C17.9097 4.49465 16.9817 4.10352 15.6533 4.10352C14.2468 4.10352 13.0501 4.63107 12.0637 5.68599C11.077 6.74091 10.584 7.98177 10.584 9.40768C10.584 10.5605 10.921 11.4786 11.595 12.162C12.269 12.8462 13.1723 13.1877 14.3054 13.1877C14.8522 13.1877 15.419 13.0703 16.005 12.836C16.591 12.6016 17.0599 12.2892 17.4115 11.8984C17.3331 12.1326 17.2943 12.3378 17.2943 12.5134C17.2943 12.8264 17.4212 12.9822 17.6752 12.9822H19.697C20.0679 12.9822 20.2831 12.797 20.3417 12.4256L21.5431 4.77742C21.5623 4.66009 21.5331 4.55287 21.4552 4.45507C21.377 4.35762 21.2795 4.30862 21.1624 4.30862ZM17.3384 10.0961C16.8402 10.5753 16.2294 10.8141 15.5071 10.8141C14.9402 10.8141 14.486 10.658 14.1444 10.3453C13.8024 10.0334 13.6316 9.60356 13.6316 9.05595C13.6316 8.33368 13.8756 7.72265 14.3642 7.22457C14.8522 6.7264 15.4579 6.47731 16.181 6.47731C16.7277 6.47731 17.1819 6.63853 17.5436 6.96071C17.9047 7.28315 18.0857 7.72758 18.0857 8.29427C18.0856 9.01708 17.8366 9.61798 17.3384 10.0961Z" fill="#003087"/>
<path d="M43.4474 0.776367C42.6952 0.259207 41.7139 0 40.5026 0H35.8434C35.4526 0 35.2376 0.185672 35.1988 0.556659L33.2941 12.5121C33.2743 12.6295 33.3036 12.7369 33.382 12.8345C33.4595 12.9323 33.5577 12.981 33.6749 12.981H36.0776C36.312 12.981 36.4682 12.8541 36.5466 12.6001L37.074 9.20114C37.0934 9.04493 37.1618 8.91793 37.2792 8.82012C37.3964 8.72249 37.5428 8.65863 37.7188 8.62943C37.8944 8.60041 38.0602 8.58572 38.2169 8.58572C38.3731 8.58572 38.5585 8.59566 38.7735 8.6151C38.9883 8.63454 39.1255 8.64412 39.1837 8.64412C40.864 8.64412 42.1823 8.17076 43.1397 7.22296C44.097 6.2757 44.5755 4.96211 44.5755 3.28165C44.5756 2.1291 44.1993 1.29397 43.4474 0.776098V0.776367ZM40.444 5.59678C40.0142 5.88975 39.3694 6.03619 38.5101 6.03619L37.5723 6.06557L38.0704 2.93001C38.1091 2.7154 38.2361 2.60774 38.4513 2.60774H38.9785C39.4084 2.60774 39.7501 2.62736 40.0045 2.66632C40.258 2.70555 40.5026 2.82745 40.737 3.03247C40.9716 3.23767 41.0886 3.53575 41.0886 3.92626C41.0886 4.74706 40.8735 5.30354 40.444 5.59678Z" fill="#009CDE"/>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -0,0 +1,28 @@
<svg width="119" height="145" viewBox="0 0 119 145" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M58.4766 40.0449C58.6212 40.0053 58.7591 40.0378 58.8721 40.0928C58.9834 40.147 59.0872 40.2303 59.1816 40.3232C59.4586 40.596 59.7489 41.0487 60.0078 41.5078L60.2549 41.9629L60.2598 41.9717C60.3089 42.0757 60.3417 42.1188 60.3564 42.1348C60.3692 42.1318 60.3957 42.1256 60.4404 42.1035C60.5458 42.0514 60.6703 41.9686 60.875 41.8457C61.0703 41.7285 61.3149 41.5904 61.625 41.4521L61.6348 41.4482C61.9238 41.3335 62.2849 41.3169 62.5146 41.5449C62.7646 41.7935 62.7133 42.1732 62.5088 42.5342L62.5039 42.542C62.2036 43.0274 61.9603 43.3517 61.8174 43.5645C61.6618 43.7961 61.6466 43.8693 61.6533 43.9238C61.6572 43.9554 61.6725 44.0038 61.7207 44.085C61.7693 44.1668 61.8429 44.2676 61.9502 44.4043C62.1592 44.6707 62.4892 45.0633 62.9277 45.6436L63.0098 45.7559C63.085 45.8662 63.1401 45.9737 63.166 46.0771C63.184 46.1492 63.1907 46.2305 63.1699 46.3125C63.1483 46.3978 63.1008 46.4687 63.0381 46.5215C62.9237 46.6175 62.7726 46.6424 62.6523 46.6484C62.5225 46.655 62.3738 46.6413 62.2207 46.6172C61.6138 46.5216 60.7608 46.2307 60.2012 46.0332C60.0157 45.9678 59.924 45.9526 59.8613 45.959C59.8123 45.9641 59.7521 45.9855 59.6436 46.083C59.5293 46.1857 59.3899 46.3458 59.1777 46.5947C58.9695 46.839 58.7011 47.1573 58.3379 47.5586L58.334 47.5625C58.2608 47.64 58.1361 47.7902 58.0098 47.8828C57.9402 47.9338 57.8508 47.984 57.7432 48.002C57.6415 48.0189 57.5398 48.0028 57.4414 47.958C57.3116 47.9121 57.2043 47.8423 57.1279 47.7422C57.0521 47.6429 57.0212 47.534 57.0098 47.4375C56.9987 47.3443 57.0048 47.2517 57.0107 47.1797C57.0174 47.0992 57.0244 47.0457 57.0244 46.9932V46.9824C57.0562 46.2096 57.2219 45.6282 57.2617 45.3398C57.2847 45.1737 57.2646 45.1309 57.2588 45.1221C57.2554 45.1172 57.2231 45.0768 57.0459 45.0479L57.0371 45.0469C56.5228 44.9448 56.1311 44.8187 55.8457 44.6768C55.566 44.5376 55.3584 44.3679 55.2607 44.1611C55.1528 43.9324 55.2004 43.7045 55.3359 43.5283C55.4305 43.4055 55.5649 43.308 55.7168 43.2354L55.874 43.1709C56.1006 43.0805 56.377 42.9552 56.624 42.8652C56.8799 42.7721 57.1555 42.6969 57.4414 42.6934V42.6924C57.6318 42.6769 57.6737 42.6411 57.6816 42.6328C57.6919 42.6218 57.7152 42.5858 57.7305 42.4277C57.7593 42.1292 57.7467 41.575 57.9736 40.751C58.016 40.5744 58.0716 40.424 58.1465 40.3066C58.2238 40.1854 58.3314 40.0849 58.4766 40.0449Z" fill="#F8B42A" stroke="#F8B42A" stroke-width="0.5"/>
<path d="M80.9437 136.561C79.9712 136.337 79.8964 136.187 79.8216 135.215C79.4476 129.081 80.1209 119.282 81.3925 104.845C81.5421 102.826 83.7861 103.349 87.4514 102.9C96.1284 101.928 97.9237 100.058 100.766 96.991C100.991 96.6917 101.29 96.4673 101.439 96.1681C101.739 95.5697 102.187 95.7193 102.561 96.1681C104.656 98.9358 115.876 117.487 118.569 124.443C120.439 129.305 94.408 139.404 80.9437 136.561Z" fill="#BB1F61"/>
<path d="M22.5238 144.995C19.2325 145.07 0.457212 144.172 0.158005 141.255C-1.26323 128.239 7.33906 96.8223 8.53588 100.413C9.2839 102.582 9.95712 106.397 15.7917 109.913C19.0829 111.857 22.5986 112.68 26.4135 112.007C27.6852 111.783 28.134 116.121 31.3504 124.649C37.933 142.227 37.4841 142.003 36.2873 142.676C31.874 145.144 28.8072 144.845 22.5238 144.995Z" fill="#BB1F61"/>
<path d="M80.4355 96.4482C80.6746 96.3886 80.8817 96.5156 81.0225 96.6592C81.1684 96.8081 81.2936 97.0216 81.3926 97.2666C81.5917 97.76 81.707 98.4398 81.6328 99.1572C81.5583 99.8773 81.2917 100.646 80.7158 101.305C80.1388 101.965 79.2653 102.498 78.0059 102.77H78.0049C72.765 103.892 71.4017 104.27 65.6201 104.495L65.6211 104.496C63.8389 104.57 59.3925 105.221 53.1211 105.98C46.863 106.738 38.8155 107.599 29.8691 108.086H29.8662C27.3432 108.197 25.1667 108.352 23.4512 107.959C22.5843 107.76 21.8209 107.42 21.1807 106.856C20.5405 106.293 20.0373 105.521 19.6709 104.479L19.5166 104.012C19.1612 102.868 18.8515 101.378 18.6865 100.107C18.5923 99.3822 18.543 98.7166 18.5625 98.2217C18.5721 97.9767 18.5993 97.7561 18.6543 97.5869C18.7023 97.4394 18.8112 97.2177 19.0566 97.1904L19.0674 97.1895H19.1309C19.276 97.2005 19.3873 97.2837 19.4629 97.3799C19.5433 97.4823 19.5989 97.6168 19.6416 97.7549C19.728 98.0341 19.7898 98.4243 19.8496 98.8672C19.9713 99.7687 20.0925 100.944 20.3828 102.119C20.6732 103.294 21.1256 104.438 21.8877 105.275C22.6403 106.102 23.7106 106.65 25.2852 106.614C35.8589 106.315 44.3028 105.418 50.8232 104.559C57.3284 103.701 61.9561 102.875 64.8486 102.725L67.0908 102.59C71.7326 102.281 72.6127 101.981 77.4512 100.935L77.8145 100.849C78.6117 100.639 79.0701 100.366 79.3516 100.035C79.6737 99.6567 79.7992 99.1616 79.873 98.46C79.9467 97.6866 79.9855 97.2386 80.0352 96.9805C80.0598 96.8521 80.0933 96.7336 80.1582 96.6396C80.2341 96.5298 80.3323 96.4824 80.417 96.4541L80.4258 96.4512L80.4355 96.4482Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M38.1865 22.3467C39.2085 20.9912 41.1132 20.0512 43.1611 20.5039L43.167 20.5049C44.3128 20.7845 45.3396 21.5576 45.7666 22.6455C46.1608 23.6503 46.0227 24.8717 45.0869 26.1445C49.8729 26.5446 54.3802 28.1572 57.0439 31.7559L57.0488 31.7627C57.2568 32.0637 57.4115 32.3234 57.4961 32.5479C57.5804 32.7714 57.6116 33.0044 57.5049 33.2148C57.4009 33.4197 57.1983 33.5376 56.9805 33.6162C56.7586 33.6963 56.472 33.7529 56.1338 33.8027L56.127 33.8037C41.3134 35.5857 34.3434 36.4448 31.0986 36.7012C30.2871 36.7653 29.7009 36.7926 29.2803 36.7861C28.8711 36.7798 28.5802 36.7423 28.3887 36.6494C28.2844 36.5988 28.1968 36.5251 28.1416 36.4219C28.088 36.3216 28.0792 36.2194 28.083 36.1357C28.0867 36.0549 28.1037 35.9715 28.1172 35.9053C28.1319 35.8331 28.1445 35.7699 28.1523 35.7041L28.1533 35.6963C28.8485 31.1202 33.4596 28.0397 38.4141 26.7119C38.4157 26.7113 38.4173 26.7105 38.4189 26.71C37.7426 26.1077 37.4228 25.3741 37.3984 24.6182C37.3729 23.8236 37.6745 23.0259 38.1865 22.3467ZM50.9941 29.1631C46.9481 27.374 42.2134 27.2578 38.168 28.4639C34.1334 29.6668 30.8254 32.17 29.5449 35.5859C29.5446 35.5978 29.5444 35.6093 29.5439 35.6201H29.5527C31.0926 35.3544 37.6926 34.6098 43.9004 33.9092C47.008 33.5584 50.0216 33.2181 52.2627 32.9531C53.3834 32.8206 54.31 32.7076 54.958 32.6211C55.2774 32.5785 55.5269 32.5417 55.6982 32.5137C55.6673 32.4656 55.6281 32.4092 55.5791 32.3457C55.3932 32.1049 55.0927 31.7843 54.6816 31.4248C53.8605 30.7067 52.6142 29.8462 50.998 29.1641L50.9941 29.1631ZM42.8613 21.9316C41.9293 21.7027 40.7801 21.9152 39.9102 22.6533C38.8237 23.5831 38.7012 24.6111 39 25.3398C39.3072 26.0888 40.0563 26.5461 40.8135 26.3789C41.3971 26.2416 41.996 26.2082 42.46 26.1836C42.6969 26.171 42.8917 26.1609 43.042 26.1426C43.1168 26.1335 43.1723 26.1242 43.2109 26.1133C43.2224 26.11 43.2304 26.1057 43.2363 26.1035C43.3805 25.9147 43.5327 25.7316 43.6738 25.5576C43.8269 25.369 43.9694 25.1871 44.0928 25C44.3361 24.6311 44.4981 24.2523 44.5 23.793L44.4863 23.6123C44.3813 22.7291 43.7299 22.1451 42.8613 21.9316Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M26.3857 34.0283C26.8321 34.0029 27.2214 34.0047 27.5098 34.0479C27.6524 34.0692 27.7891 34.1031 27.8994 34.1611C28.0105 34.2196 28.1309 34.3236 28.1572 34.4932L28.1582 34.4961C28.1832 34.6713 28.1571 34.8396 28.0479 34.9717C27.9448 35.0962 27.8017 35.1455 27.6904 35.1689C27.5783 35.1925 27.4561 35.1977 27.3643 35.2021C27.2604 35.2071 27.1942 35.2113 27.1484 35.2227L27.1367 35.2256L27.126 35.2275C25.9345 35.4137 23.0771 35.9362 20.208 36.5156C17.3335 37.0962 14.4709 37.7283 13.2539 38.1338L13.2549 38.1348C11.8931 38.6008 11.1901 39.3007 10.8184 40.2949C10.4357 41.3185 10.3951 42.6738 10.4326 44.4756L10.4688 45.6045C10.7227 51.3356 12.051 58.3272 13.1299 63.7393C13.7038 66.6184 14.2084 69.0571 14.4375 70.6045C14.4949 70.9921 14.5355 71.328 14.5557 71.6035C14.5754 71.8735 14.577 72.1045 14.5469 72.2725C14.5323 72.3537 14.5055 72.4505 14.4463 72.5293C14.3746 72.6244 14.2589 72.6866 14.1221 72.6689C14.0125 72.6547 13.9229 72.5925 13.8594 72.5381C13.7907 72.4792 13.7211 72.4014 13.6504 72.3105L13.6475 72.3066C13.6067 72.2522 13.5718 72.1784 13.542 72.1074C13.5099 72.0308 13.4746 71.9356 13.4375 71.8252C13.3631 71.6037 13.2758 71.3085 13.1777 70.9502C12.9814 70.2325 12.7399 69.2504 12.4736 68.0752C11.9409 65.724 11.3062 62.5917 10.7305 59.2402C10.1548 55.889 9.63673 52.3145 9.33789 49.0801C9.03957 45.8512 8.95772 42.9407 9.26172 40.9268C9.3969 40.0385 9.65982 39.3136 10.0674 38.7129C10.4754 38.1116 11.0196 37.6483 11.6963 37.2686C13.0359 36.5169 14.9284 36.0799 17.3857 35.5586C18.0632 35.4081 20.6465 34.8471 23.082 34.4443C24.2994 34.243 25.4883 34.0794 26.3857 34.0283Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M59.2676 43.7676C59.3175 43.7696 59.364 43.7813 59.4004 43.793C59.5371 43.8368 59.7052 43.9397 59.8359 44.0264L60.168 44.2637L60.1816 44.2734C62.2748 46.082 66.3897 50.9021 70.5225 55.8691C74.1485 60.2272 77.7968 64.7094 80.1455 67.4307L81.0684 68.4834L81.0723 68.4873C81.2498 68.695 81.5467 69.0113 81.7217 69.3184C81.81 69.4734 81.8857 69.6563 81.8857 69.8467C81.8857 70.055 81.7946 70.2442 81.6064 70.3857L81.5986 70.3916C81.4687 70.4812 81.3228 70.4531 81.2393 70.4268C81.1456 70.3972 81.0461 70.3442 80.9473 70.2803C80.747 70.1508 80.4969 69.9447 80.207 69.6807C79.6245 69.1501 78.8493 68.3533 77.9434 67.3682C76.1299 65.3962 73.7722 62.6525 71.335 59.7402C66.4606 53.916 61.2584 47.4021 59.4365 44.998L59.4336 44.9951C59.2956 44.8079 59.1917 44.654 59.1162 44.5293C59.043 44.4082 58.9887 44.3009 58.9619 44.209C58.9487 44.1635 58.936 44.1036 58.9434 44.0391C58.9515 43.9674 58.9856 43.8824 59.0674 43.8242C59.1409 43.7721 59.2195 43.7657 59.2676 43.7676Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M70.9951 65.5781C71.0755 65.529 71.1894 65.5109 71.2969 65.5723C71.3791 65.6192 71.4213 65.694 71.4424 65.7383C71.4876 65.8334 71.5162 65.9664 71.5371 66.1172C71.6011 66.58 71.6262 67.4709 71.5957 68.9346L71.5459 70.5947C71.1752 80.8278 76.0664 89.2629 84.0557 93.5537C84.3335 93.6925 84.6111 93.8208 84.7871 93.9639C84.8816 94.0407 84.9725 94.1404 85.0166 94.2744C85.0624 94.4141 85.0466 94.5556 84.9932 94.6895L84.9922 94.6924C84.906 94.9018 84.696 94.9686 84.5303 94.9854C84.3554 95.0029 84.1419 94.9768 83.9072 94.9209C83.4331 94.808 82.804 94.5574 82.0801 94.1738C80.629 93.4049 78.759 92.082 76.9229 90.1797C73.2474 86.3719 69.6984 80.2319 69.9248 71.5518C69.9626 70.1518 70.3387 67.4005 70.6631 66.2363C70.7041 66.0892 70.7456 65.9592 70.7891 65.8574C70.8107 65.8068 70.8354 65.7573 70.8633 65.7139C70.8882 65.6749 70.9306 65.6176 70.9951 65.5781Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M34.9414 80.4355C35.1475 80.4488 35.3253 80.4879 35.4688 80.5771C35.6208 80.672 35.7057 80.8051 35.7588 80.9482C35.7834 81.0147 35.8031 81.0871 35.8193 81.1621L35.8623 81.3896V81.3936C36.5702 85.8643 37.0042 88.0949 37.0986 89.21C37.1225 89.4917 37.1273 89.7192 37.1045 89.9014C37.0815 90.0843 37.0283 90.2449 36.9189 90.3701C36.808 90.4972 36.6658 90.5566 36.5293 90.5908C36.3991 90.6234 36.2444 90.6386 36.0947 90.6562C34.8975 90.8059 32.9157 91.0505 31.0088 91.2842C29.1011 91.518 27.2683 91.7423 26.3711 91.8545H26.3652C26.2088 91.8701 26.091 91.7859 26.0195 91.71C25.9474 91.6333 25.8888 91.5321 25.8398 91.4268C25.7407 91.2133 25.6499 90.9156 25.5654 90.5693C25.3953 89.872 25.2378 88.9212 25.0928 87.9199C24.8001 85.8994 24.5605 83.6817 24.375 82.7539C24.3294 82.5257 24.3448 82.285 24.4746 82.083C24.6068 81.8774 24.8288 81.7556 25.1025 81.71L25.1113 81.708C30.2542 81.0372 32.84 80.5858 34.1436 80.4639C34.4723 80.4331 34.7337 80.4222 34.9414 80.4355ZM34.0762 82.1299H34.0752C29.7609 82.6551 27.6097 82.8584 26.5312 82.999C26.2641 83.0339 26.0713 83.0639 25.9326 83.0928C25.8463 83.1107 25.7891 83.1268 25.752 83.1396C25.7536 83.1456 25.7558 83.152 25.7578 83.1592L25.7617 83.1738L25.7646 83.1895C26.3656 87.0204 26.5867 88.9072 26.7637 89.8389C26.8074 90.0692 26.8461 90.2284 26.8838 90.3379C26.9214 90.4471 26.9501 90.4825 26.959 90.4912C26.9617 90.4917 26.9677 90.4931 26.9785 90.4932C27.0221 90.4935 27.08 90.4825 27.1934 90.4619L27.2002 90.4609C29.6725 90.0863 32.0694 89.7865 34.5381 89.4873C34.8427 89.4492 35.0515 89.4235 35.2002 89.3887C35.3536 89.3527 35.3836 89.3192 35.3887 89.3125C35.3913 89.309 35.4138 89.2791 35.4023 89.1357C35.391 88.9939 35.3532 88.8004 35.2959 88.5137L35.2939 88.5029C34.7687 85.1262 34.5465 83.4763 34.3799 82.6709C34.3386 82.4713 34.3028 82.3337 34.2695 82.2393C34.2433 82.1649 34.2222 82.1307 34.2119 82.1162C34.1884 82.1158 34.1549 82.12 34.0762 82.1299Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M31.6611 62.4062L31.6738 62.4072C31.7899 62.4188 31.9124 62.4476 32.0273 62.5215C32.1428 62.5958 32.2292 62.7022 32.2988 62.834C32.4307 63.0838 32.5272 63.4771 32.6338 64.0703C32.8487 65.2665 33.1318 67.4529 33.7646 71.3623L33.8037 71.5781C33.8147 71.6504 33.8225 71.7222 33.8232 71.79C33.8248 71.9374 33.7932 72.0926 33.6797 72.2314C33.5733 72.3616 33.4162 72.4497 33.2266 72.5195C33.0347 72.5902 32.7835 72.6516 32.4609 72.7109C31.1802 72.9464 28.5634 73.1918 23.3838 73.8252L23.2061 73.8506C23.1455 73.8577 23.0844 73.8617 23.0264 73.8604C22.8989 73.8574 22.7636 73.8263 22.6416 73.7266C22.5274 73.6331 22.4492 73.4988 22.3867 73.3408C22.3236 73.1813 22.2677 72.9748 22.2129 72.7129C21.9958 71.6742 21.7504 69.5609 21.1543 65.3877L21.04 64.7842C21.0091 64.6206 20.9812 64.4406 21.0166 64.2773C21.0584 64.0852 21.1784 63.9463 21.3623 63.8535C21.5291 63.7694 21.7558 63.7187 22.041 63.6807L22.042 63.6797C24.0606 63.418 25.5561 63.2132 26.7617 63.0449C27.9667 62.8768 28.8854 62.7452 29.7471 62.6328L30.1885 62.5752L30.0078 62.9824C29.8709 63.2904 29.8606 63.4702 29.8164 63.6582C29.7944 63.7517 29.7595 63.8631 29.6719 63.9619C29.5865 64.058 29.4727 64.1169 29.3428 64.1611L29.3438 64.1621C29.1678 64.2281 28.9251 64.2782 28.6123 64.3252C28.2958 64.3728 27.8889 64.4195 27.375 64.4756C26.3449 64.5879 24.8701 64.7375 22.7783 64.999C22.6645 65.018 22.5986 65.0297 22.5498 65.0469C22.5102 65.0608 22.5066 65.0705 22.5049 65.0732C22.4974 65.0854 22.4783 65.1264 22.4727 65.2393C22.4671 65.3507 22.4758 65.5077 22.501 65.7324C22.6032 66.6432 22.9545 68.4334 23.5176 72.1113L23.543 72.2432C23.5502 72.2759 23.5565 72.2998 23.5645 72.3193C23.5743 72.3436 23.5788 72.3435 23.585 72.3467C23.6045 72.3568 23.6576 72.3751 23.7861 72.3789C23.9116 72.3826 24.0856 72.3721 24.3301 72.3467C25.3186 72.2441 27.2607 71.9104 31.2393 71.3848C31.4428 71.3557 31.5933 71.3366 31.7148 71.3096C31.8359 71.2826 31.8941 71.2544 31.9258 71.2285C31.9698 71.1924 32.0359 71.0976 31.998 70.6436C31.9619 70.2096 31.8438 69.5514 31.6602 68.5205C31.4781 67.4984 31.2352 66.1254 30.9551 64.2773C30.9376 64.208 30.9221 64.1515 30.9053 64.1045C30.8873 64.0545 30.872 64.0281 30.8623 64.0156C30.8616 64.0148 30.8609 64.0143 30.8604 64.0137C30.853 64.0135 30.8379 64.0142 30.8125 64.0205L30.3701 64.1309L30.5146 63.6992C30.6702 63.2326 30.8261 62.92 30.9766 62.6191L31.0459 62.4814H31.2002C31.1933 62.4814 31.2046 62.4813 31.248 62.4736C31.2844 62.4672 31.3284 62.4578 31.376 62.4482C31.4218 62.4391 31.4717 62.4295 31.5146 62.4219C31.5506 62.4155 31.6052 62.4062 31.6494 62.4062H31.6611Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M17.6445 74.6426C17.7451 74.6229 17.9055 74.6116 18.0322 74.708L18.085 74.7559L18.123 74.8057C18.199 74.925 18.1909 75.0605 18.166 75.1611C18.1377 75.2754 18.0768 75.396 18.0049 75.5146C17.8593 75.7548 17.6218 76.0619 17.3369 76.4238C16.7602 77.1565 15.9505 78.159 15.1357 79.4414C13.5587 81.9235 11.9697 85.4461 12.0732 90.0234L12.0889 90.4697V90.4707C12.2367 94.1667 13.2896 96.9353 14.2852 98.8066C14.7831 99.7425 15.2673 100.455 15.6191 100.949C15.7919 101.192 15.9421 101.395 16.0381 101.535C16.0859 101.605 16.1292 101.672 16.1582 101.729C16.1722 101.757 16.1895 101.796 16.1992 101.839C16.2068 101.872 16.2216 101.964 16.165 102.056C16.1639 102.057 16.1632 102.06 16.1621 102.062L16.1611 102.064L16.1602 102.063C16.0986 102.16 16.014 102.238 15.9043 102.282C15.794 102.326 15.6789 102.329 15.5713 102.31C15.3641 102.272 15.1464 102.147 14.9346 101.981C14.5037 101.645 13.9956 101.062 13.4844 100.318C12.4589 98.8275 11.3781 96.6297 10.8467 94.2764V94.2744C9.44757 87.846 11.017 82.7888 13.0176 79.4229C14.0167 77.7418 15.1243 76.4805 16.0264 75.6787C16.4763 75.2788 16.8816 74.9867 17.2021 74.8154C17.3606 74.7308 17.5119 74.6687 17.6445 74.6426Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M18.4531 46.4736C19.9471 46.2869 21.4228 46.0817 22.9004 45.876C24.3774 45.6703 25.8565 45.4646 27.3545 45.2773L27.7646 45.2256L27.6201 45.6133C27.513 45.899 27.4315 46.1403 27.3545 46.3232C27.2736 46.5153 27.1835 46.6798 27.0391 46.8242L27.0029 46.8604L26.9551 46.8799C26.7394 46.9662 26.4578 47.0252 26.0986 47.0771C25.7366 47.1295 25.2772 47.1764 24.6982 47.2324C23.5379 47.3447 21.8768 47.4943 19.4873 47.793L19.4775 47.7939C19.3576 47.8039 19.293 47.8113 19.249 47.8242C19.2375 47.8276 19.2314 47.8306 19.2285 47.832C19.2228 47.8435 19.2079 47.8853 19.2061 47.9961C19.2042 48.1113 19.2161 48.2734 19.2461 48.5039C19.306 48.9648 19.4288 49.6534 19.6084 50.7002C19.7874 51.7436 20.0219 53.134 20.3027 54.9873H20.3018C20.321 55.0829 20.3319 55.1256 20.3447 55.1543C20.3503 55.1667 20.3491 55.1636 20.3545 55.166C20.3754 55.1752 20.4305 55.1899 20.5596 55.1904C20.6855 55.1909 20.859 55.1781 21.1016 55.1504C22.0843 55.0381 24.0069 54.7046 27.9512 54.1787C28.2375 54.1405 28.4382 54.1141 28.585 54.0801C28.736 54.045 28.7763 54.0123 28.7871 54C28.7907 53.9959 28.8133 53.9706 28.8076 53.8496C28.8017 53.724 28.7687 53.5473 28.7119 53.2822L28.71 53.2715C28.4107 51.476 28.1681 50.1543 27.999 49.168C27.8319 48.1926 27.7344 47.5337 27.7344 47.0967V47.0557L27.7471 47.0176C27.9024 46.5517 27.9931 46.4432 28.4307 45.4951L28.624 45.0752L28.8691 45.4678C28.9653 45.6217 29.0409 45.7421 29.1104 45.9668C29.1756 46.1778 29.2357 46.4815 29.3242 47.0078C29.413 47.5357 29.5325 48.3069 29.7139 49.4639L30.4746 54.2373L30.4766 54.2441H30.4756C30.51 54.5023 30.5574 54.8313 30.292 55.0811C30.1731 55.1929 30.0095 55.2717 29.8105 55.3359C29.6091 55.401 29.3488 55.4579 29.0176 55.5146C27.7016 55.7402 25.0841 55.9861 20.0117 56.6201L20.0029 56.6211C19.7918 56.6403 19.5524 56.6424 19.3506 56.4824C19.1616 56.3324 19.0568 56.0782 18.9717 55.752C18.799 55.0896 18.6455 53.8487 18.3115 51.6221C17.9779 49.4349 17.7493 48.23 17.7109 47.5693C17.6922 47.2457 17.7113 46.9748 17.8506 46.7793C17.9985 46.5719 18.2344 46.5138 18.4395 46.4766L18.4531 46.4736Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M67.2383 30.5312C68.8936 30.4845 70.5607 30.502 71.709 30.6934L71.708 30.6943C72.2129 30.7752 72.6382 30.9546 72.9932 31.2686C73.3455 31.5802 73.6124 32.0091 73.8271 32.5605C74.2526 33.6531 74.4978 35.2954 74.7588 37.6445L75.0039 39.8779C75.5272 44.8392 75.716 48.0646 75.7324 50.0967C75.7418 51.2562 75.6955 52.0361 75.6201 52.5312C75.5827 52.7767 75.536 52.9667 75.4785 53.1016C75.45 53.1684 75.4129 53.2362 75.3613 53.291C75.3083 53.3474 75.2229 53.4062 75.1084 53.4062C75.0417 53.4062 74.9656 53.3924 74.8916 53.3477C74.8188 53.3036 74.7678 53.2414 74.7314 53.1768C74.6645 53.0577 74.6245 52.8909 74.5928 52.6875C74.5276 52.2697 74.4753 51.55 74.3916 50.3506C74.2444 48.2407 73.9976 44.5995 73.4121 38.3623L73.1396 35.5273C73.0262 34.3356 72.9246 33.5265 72.6455 32.9639C72.5106 32.6919 72.3348 32.482 72.0947 32.3174C71.8518 32.1509 71.5312 32.0227 71.0947 31.9336C70.2134 31.7537 68.9151 31.7416 66.9639 31.8398C65.018 31.9378 62.4518 32.1434 59.0449 32.3867H59.042C58.8796 32.3969 58.7302 32.3924 58.6035 32.373C58.4856 32.355 58.3533 32.3196 58.2559 32.2422C58.2033 32.2004 58.1477 32.135 58.126 32.043C58.1035 31.9478 58.1267 31.8604 58.1641 31.793C58.23 31.674 58.3559 31.5877 58.4814 31.5225C58.7484 31.3837 59.2032 31.243 59.8848 31.1133C60.5721 30.9825 61.5079 30.8596 62.748 30.7656H62.75C63.9082 30.6909 65.5779 30.5782 67.2383 30.5312Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M96.9766 70.7354C96.9765 73.0087 96.5222 75.391 95.9639 77.1416C95.6853 78.015 95.3765 78.7453 95.0771 79.2295C94.9294 79.4685 94.771 79.668 94.6045 79.79C94.4385 79.9116 94.2148 79.9841 93.9971 79.8594V79.8604C93.9938 79.8587 93.9905 79.8562 93.9873 79.8545C93.9832 79.852 93.9787 79.8503 93.9746 79.8477V79.8457C93.7836 79.736 93.7618 79.5366 93.7754 79.4131C93.7885 79.2949 93.8361 79.1795 93.876 79.0967C95.5773 74.7322 95.7436 70.2564 94.9209 66.4111C94.0978 62.5643 92.2898 59.3688 90.0654 57.543L89.8037 57.3525C89.1508 56.9071 88.2241 56.4517 87.4072 56.0557C86.9478 55.8329 86.5218 55.6284 86.2168 55.4609C86.0655 55.3779 85.9324 55.2975 85.8369 55.2236C85.7904 55.1876 85.7405 55.1438 85.7021 55.0928C85.6703 55.0503 85.6125 54.9548 85.6367 54.832H85.6348C85.6353 54.8293 85.6371 54.8269 85.6377 54.8242C85.6382 54.8218 85.6371 54.8189 85.6377 54.8164H85.6396C85.6805 54.6376 85.8387 54.5537 85.9395 54.5166C86.0598 54.4724 86.2107 54.4499 86.376 54.4434C86.7106 54.4302 87.1629 54.4795 87.6875 54.6084C88.7394 54.8669 90.1164 55.4532 91.4873 56.5518C94.2385 58.7566 96.9388 63.0032 96.9766 70.7334V70.7354Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M38.8633 61.5488C39.0255 61.5128 39.1778 61.5655 39.3037 61.6406C39.4301 61.7161 39.5595 61.8305 39.6924 61.9707C39.9183 62.2091 40.0843 62.4714 40.2178 62.7129C40.2844 62.8334 40.3443 62.9512 40.3984 63.0576C40.4536 63.1659 40.502 63.2614 40.5498 63.3447C40.652 63.523 40.7208 63.5909 40.7686 63.6123C40.7873 63.6207 40.8481 63.6448 41.0186 63.5342C41.424 63.2607 41.7651 63.0896 42.0469 63.001C42.3241 62.9138 42.5754 62.8968 42.7754 62.9785C42.9953 63.0685 43.1091 63.2593 43.1211 63.4668C43.1321 63.6588 43.0567 63.8539 42.9404 64.0186L42.9414 64.0195C42.7735 64.2642 42.6269 64.4667 42.5029 64.6367C42.3776 64.8086 42.2785 64.9422 42.2021 65.0566C42.0451 65.2918 42.0248 65.3858 42.0352 65.4619C42.0487 65.5615 42.1223 65.698 42.3486 65.9971C42.5585 66.2743 42.8865 66.6778 43.3096 67.2559C43.366 67.3152 43.4552 67.4097 43.5039 67.5254C43.5651 67.671 43.5577 67.8299 43.4678 67.9873L43.4307 68.0566C43.3901 68.123 43.3385 68.1807 43.2725 68.2236C43.1825 68.282 43.0894 68.2978 43.0127 68.2979C42.9426 68.2979 42.8737 68.2837 42.833 68.2764C42.7836 68.2675 42.7571 68.2637 42.7354 68.2637H42.7148L42.6934 68.2607C41.6855 68.0892 40.9973 67.757 40.5498 67.5996C40.3154 67.5172 40.1753 67.4924 40.0742 67.5098C39.994 67.5236 39.901 67.5714 39.7832 67.751L39.7822 67.75C39.6046 68.0462 39.3621 68.2829 39.1367 68.4961C38.9018 68.7183 38.6851 68.9167 38.5127 69.1592C38.4251 69.2931 38.2951 69.4097 38.1426 69.4717C37.9913 69.5331 37.8033 69.5433 37.6318 69.4404L37.5732 69.4082C37.4446 69.3264 37.3702 69.2027 37.333 69.0723C37.2931 68.9321 37.2936 68.7763 37.3076 68.6299C37.3353 68.3411 37.4289 67.9839 37.4961 67.6768C37.5681 67.3475 37.6117 67.0696 37.582 66.8691C37.568 66.7746 37.5394 66.7161 37.5068 66.6797C37.4766 66.646 37.4241 66.6102 37.3193 66.5928L37.3135 66.5918C36.7781 66.4891 36.3863 66.3572 36.1113 66.2051C35.8392 66.0545 35.6522 65.8669 35.5869 65.6396C35.519 65.4031 35.6002 65.1886 35.7256 65.0342C35.8478 64.8838 36.0225 64.7727 36.1992 64.71C36.9833 64.423 37.4739 64.2914 37.7783 64.2119C37.9297 64.1724 38.0167 64.1493 38.0742 64.1289C38.0743 64.1214 38.0753 64.1127 38.0752 64.1025C38.0742 64.0353 38.0687 63.9157 38.0723 63.7666C38.0797 63.4579 38.1269 62.9952 38.3213 62.2773V62.2744C38.3713 62.0986 38.4307 61.9428 38.5078 61.8213C38.5855 61.699 38.6992 61.5854 38.8633 61.5488Z" fill="#F8B42A" stroke="#F8B42A" stroke-width="0.5"/>
<path d="M36.1377 43.7725C36.2757 43.7537 36.4032 43.7927 36.5088 43.8496C36.6141 43.9064 36.7124 43.9879 36.8018 44.0781C37.1506 44.4305 37.4981 45.0556 37.751 45.5596H37.752C37.8631 45.7789 37.93 45.8544 37.9648 45.8779C37.9732 45.8835 37.9742 45.8829 37.9746 45.8828C37.9804 45.8829 38.0008 45.8814 38.0449 45.8633C38.1433 45.8228 38.2678 45.7419 38.4785 45.6113C38.6288 45.5182 38.8096 45.4091 39.0293 45.2939L39.2627 45.1768C39.5915 45.0062 39.9575 45.0452 40.1602 45.3223C40.3534 45.5867 40.3115 45.9548 40.0898 46.2764L40.0908 46.2773C39.8648 46.6377 39.6754 46.9087 39.5264 47.1182C39.373 47.3338 39.2754 47.468 39.2168 47.5742C39.1619 47.6738 39.166 47.7064 39.1689 47.7217C39.1751 47.7531 39.2011 47.8126 39.3096 47.9443H39.3105C39.8493 48.6013 40.2439 49.1065 40.4756 49.4727C40.5898 49.6532 40.6769 49.8198 40.7158 49.9648C40.7538 50.1067 40.7639 50.3131 40.5908 50.4512C40.4524 50.5615 40.2636 50.5634 40.1162 50.5498C39.9514 50.5347 39.7485 50.489 39.5137 50.4229C39.0426 50.2901 38.3948 50.0595 37.5723 49.7568L37.5273 49.7451C37.4193 49.7264 37.2812 49.7685 37.0898 49.9189C36.8747 50.0881 36.6531 50.3477 36.4209 50.6328C36.1979 50.9066 35.9609 51.2092 35.7373 51.4209C35.6247 51.5275 35.5006 51.6262 35.3672 51.6865C35.2309 51.7481 35.0696 51.7756 34.9043 51.7139C34.7694 51.666 34.6587 51.5888 34.5908 51.4727C34.5249 51.3596 34.5187 51.2427 34.5244 51.1582C34.5295 51.0828 34.5484 50.9942 34.5537 50.9629C34.5549 50.9561 34.555 50.9501 34.5557 50.9453L34.5508 50.9346L34.5479 50.8857C34.5303 50.5859 34.5702 50.2927 34.6191 50.0303C34.6714 49.7502 34.7252 49.5418 34.7568 49.332C34.788 49.1253 34.779 49.009 34.749 48.9443C34.7323 48.9083 34.6927 48.8495 34.5117 48.8232C33.94 48.7536 33.4942 48.6211 33.1963 48.4355C32.8987 48.2501 32.6917 47.9663 32.7764 47.6211C32.8514 47.3163 33.1368 47.0732 33.5029 46.8896C33.8819 46.6998 34.4074 46.5432 35.0713 46.4395L35.1494 46.418C35.2155 46.3932 35.2483 46.3566 35.2725 46.3125C35.3162 46.2324 35.3427 46.1065 35.3584 45.9062C35.3875 45.5346 35.3728 44.9575 35.5762 44.3779C35.6768 44.0747 35.8459 43.8123 36.1377 43.7725Z" fill="#F8B42A" stroke="#F8B42A" stroke-width="0.5"/>
<path d="M77.752 55.1367C78.1317 55.1131 78.6515 55.1591 79.2568 55.2852C80.4705 55.538 82.0695 56.1223 83.6543 57.1836C86.7356 59.2472 89.7529 63.1062 89.8008 69.7852L89.7959 70.4404C89.7583 72.2257 89.6219 73.5402 89.4385 74.4932C89.256 75.4412 89.0232 76.0511 88.7803 76.4102C88.659 76.5894 88.5236 76.7231 88.374 76.7959C88.2164 76.8725 88.0445 76.879 87.8936 76.7998C87.6143 76.6532 87.5332 76.2991 87.5781 76.0068C87.8071 74.2593 88.8356 69.8428 87.2139 64.9033V64.9023C85.8174 60.7889 83.2708 58.7399 81.0908 57.6133C79.997 57.048 78.9939 56.7145 78.2617 56.4678C77.9019 56.3465 77.5909 56.241 77.376 56.1377C77.2698 56.0866 77.1647 56.026 77.0869 55.9492C77.0087 55.8719 76.9374 55.7538 76.9551 55.6045C76.9554 55.6009 76.9557 55.5973 76.9561 55.5938C76.9567 55.5893 76.9562 55.5846 76.957 55.5801H76.959C76.9857 55.3873 77.143 55.2839 77.2607 55.2344C77.394 55.1783 77.5645 55.1484 77.752 55.1367Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M47.6455 41.9121C47.9289 41.8431 48.1949 42.0113 48.3906 42.1826C48.701 42.4544 49.0279 42.906 49.3193 43.3652L49.5967 43.8213L49.6025 43.8311L49.6582 43.9248C49.674 43.9487 49.6866 43.9663 49.6973 43.9785L49.7305 44.0078H49.7314C49.7333 44.008 49.739 44.0084 49.749 44.0068C49.7713 44.0034 49.8068 43.9926 49.8633 43.9678C49.984 43.9147 50.1275 43.8307 50.3555 43.709C50.5744 43.5922 50.8477 43.4547 51.1943 43.3174L51.2031 43.3135C51.5178 43.2024 51.8969 43.1895 52.1396 43.4033C52.271 43.5192 52.3371 43.6833 52.3301 43.8672C52.3234 44.0421 52.2523 44.2265 52.1328 44.4141L52.127 44.4229C51.7891 44.9081 51.5163 45.2325 51.3555 45.4453C51.1776 45.6807 51.167 45.747 51.1729 45.7891C51.1765 45.8153 51.1908 45.8611 51.2451 45.9424C51.2997 46.0241 51.383 46.1248 51.5039 46.2617C51.7397 46.5288 52.1118 46.9229 52.6064 47.5049H52.6055C52.7346 47.6528 52.8343 47.798 52.874 47.9395C52.8951 48.0145 52.9029 48.1008 52.8779 48.1885C52.852 48.2793 52.7967 48.3499 52.7305 48.3994C52.6114 48.4882 52.455 48.5118 52.3252 48.5176C52.1848 48.5239 52.022 48.5102 51.8516 48.4863C51.1748 48.3916 50.2197 48.1032 49.5889 47.9053C49.3803 47.8399 49.2672 47.8205 49.1826 47.8281C49.1106 47.8346 49.0343 47.8635 48.9111 47.9619C48.7814 48.0656 48.624 48.2261 48.3857 48.4746C48.1514 48.719 47.8491 49.0371 47.4404 49.4385L47.4365 49.4424C47.3523 49.5216 47.2146 49.6688 47.0752 49.7598C46.9149 49.8642 46.6979 49.9335 46.4531 49.8184C46.324 49.7576 46.219 49.6831 46.1426 49.5889C46.0638 49.4918 46.026 49.3876 46.0117 49.2871C45.9984 49.1928 46.0059 49.1024 46.0127 49.0352C46.0204 48.959 46.0273 48.9112 46.0273 48.8613V48.8506L46.0479 48.5693C46.1083 47.9342 46.2564 47.4523 46.2949 47.2051C46.32 47.0438 46.2986 47.0081 46.2949 47.0029C46.2901 46.9964 46.2474 46.9495 46.0293 46.918L46.0225 46.917C45.4469 46.8154 45.0104 46.6905 44.6943 46.5508C44.3867 46.4148 44.1563 46.2484 44.0459 46.041C43.9876 45.9314 43.9642 45.8108 43.9834 45.6895C44.0022 45.5711 44.0584 45.4695 44.1299 45.3867C44.2676 45.2276 44.4812 45.1136 44.7119 45.04C44.9731 44.9478 45.2837 44.8226 45.5654 44.7314C45.8527 44.6385 46.1571 44.5653 46.4707 44.5625V44.5615C46.6907 44.5456 46.7515 44.508 46.7686 44.4922C46.7804 44.4812 46.8053 44.4498 46.8223 44.2939C46.8545 43.9983 46.8404 43.4394 47.0967 42.6123C47.1891 42.2703 47.3508 41.9841 47.6455 41.9121Z" fill="#F8B42A" stroke="#F8B42A" stroke-width="0.5"/>
<path d="M31.9502 57.8037C32.0315 57.7836 32.139 57.7943 32.2227 57.876C32.2884 57.9402 32.3075 58.0191 32.3145 58.0605C32.3224 58.1083 32.3228 58.1578 32.3203 58.2021C32.3152 58.2917 32.2959 58.402 32.2686 58.5264C32.2132 58.7778 32.1136 59.1254 31.9746 59.5586L31.9727 59.5645C31.8884 59.806 31.4965 60.7848 30.8848 62.3955C30.27 64.0142 29.4266 66.2868 28.4316 69.1387V69.1396C28.2801 69.5691 28.1217 69.9367 27.915 70.1689C27.8072 70.2902 27.6756 70.3871 27.5137 70.4297C27.3504 70.4726 27.1837 70.4531 27.0205 70.3906C26.7093 70.2714 26.3663 69.979 25.9658 69.5439C25.5582 69.101 25.0639 68.4785 24.4541 67.6592L24.4502 67.6533C24.312 67.4553 24.3063 67.2009 24.4199 67.0107C24.4783 66.9131 24.5696 66.8305 24.6904 66.7891C24.8119 66.7474 24.9436 66.7531 25.0713 66.7988C25.1308 66.8202 25.1903 66.8466 25.2686 66.9072C25.3369 66.9602 25.4192 67.0394 25.5342 67.1592C25.6501 67.2801 25.8094 67.4529 26.0361 67.7031L26.9434 68.7109L26.9551 68.7246C26.9619 68.7335 26.9693 68.7413 26.9756 68.749C26.9786 68.7424 26.9841 68.736 26.9873 68.7285C27.0275 68.6355 27.0722 68.5047 27.127 68.3281C28.2388 64.743 30.1824 60.5044 31.0205 59.0029L31.0234 58.999C31.2594 58.5963 31.4484 58.2994 31.5918 58.1104C31.6614 58.0186 31.732 57.9371 31.7998 57.8828C31.832 57.8571 31.8834 57.8203 31.9502 57.8037Z" fill="#F8B42A" stroke="#F8B42A" stroke-width="0.5"/>
<path d="M29.1553 40.9668C29.2298 40.9546 29.3157 40.9693 29.3877 41.0273C29.4506 41.0782 29.4796 41.1434 29.4932 41.1865C29.5075 41.232 29.5133 41.2789 29.5156 41.3203C29.5245 41.4769 29.4896 41.718 29.4219 42.0371L29.4209 42.04C29.2257 42.9056 28.9069 43.7813 28.5244 44.7246C28.1369 45.6801 27.6965 46.6773 27.2314 47.8486C26.8511 48.8522 26.561 49.6715 26.3135 50.3398C26.0684 51.0016 25.8633 51.5197 25.6592 51.8916C25.4582 52.2576 25.2298 52.5369 24.9102 52.6416C24.5865 52.7475 24.2462 52.65 23.8896 52.4668L23.8857 52.4648C23.076 52.0313 22.5043 51.4141 21.9492 50.6416L21.9414 50.6299L21.9346 50.6182C21.9032 50.5623 21.8595 50.5027 21.8027 50.4268C21.7506 50.357 21.6851 50.2705 21.6348 50.1807C21.5844 50.0908 21.5352 49.9738 21.5352 49.8398C21.5352 49.696 21.5926 49.5643 21.6982 49.4512L21.7031 49.4453L21.708 49.4404C21.8016 49.3513 21.9168 49.2898 22.0518 49.2822C22.182 49.2749 22.2964 49.32 22.3887 49.376C22.5624 49.4814 22.7334 49.673 22.8936 49.8584C23.1938 50.2061 23.5299 50.6201 23.9775 50.915L24.1768 51.0332L24.1846 51.0371V51.0381C24.2481 51.0752 24.2911 51.0941 24.3203 51.1055C24.3414 51.0759 24.3709 51.0261 24.4082 50.9414C24.4885 50.7592 24.5848 50.4826 24.7344 50.0635C24.882 49.6496 25.0768 49.1105 25.3506 48.4219L25.3564 48.4082C25.5136 48.0717 27.8094 42.9827 28.249 42.1592V42.1582C28.4 41.879 28.5404 41.6355 28.6611 41.4482C28.7214 41.3548 28.7792 41.2717 28.833 41.2041C28.8837 41.1404 28.9422 41.0743 29.0068 41.0293C29.0391 41.0069 29.0904 40.9775 29.1553 40.9668Z" fill="#F8B42A" stroke="#F8B42A" stroke-width="0.5"/>
<path d="M105.085 63.9375C105.902 64.4276 106.306 65.246 106.67 65.9004L106.846 66.2344C107.675 67.9193 107.767 69.8037 107.436 71.7793C107.082 73.8838 106.244 76.1133 105.279 78.3516C104.308 80.6057 103.221 82.8426 102.329 85.0303C101.441 87.2099 100.771 89.288 100.643 91.1729V91.1748C100.533 92.6763 100.715 93.5838 100.859 94.1416C100.898 94.291 100.928 94.3966 100.959 94.5127C100.986 94.6171 101.011 94.7203 101.021 94.8135C101.03 94.9068 101.027 95.0195 100.971 95.127C100.912 95.2397 100.815 95.308 100.716 95.3506L100.711 95.3525C100.545 95.4188 100.379 95.4032 100.234 95.3262C100.1 95.2546 99.9932 95.1362 99.9082 95.0107C99.7381 94.7596 99.603 94.4013 99.498 94.0293C99.2885 93.2862 99.1726 92.3922 99.1709 91.915L99.1602 91.4004C99.1575 88.8353 99.9193 86.3464 100.846 84.1582C101.34 82.99 101.883 81.9033 102.386 80.9336C102.89 79.9595 103.349 79.1125 103.683 78.4072C105.988 73.1624 106.232 70.1103 105.925 68.1465C105.771 67.1636 105.477 66.4409 105.215 65.833C104.96 65.2412 104.706 64.7027 104.706 64.1523V63.7109L105.085 63.9375Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M96.5693 57.5068C96.8124 57.5157 97.1085 57.609 97.4268 57.7656C98.0701 58.0823 98.8814 58.6945 99.6836 59.6113C101.292 61.4497 102.885 64.5346 103.036 69.0059L103.037 69.0137L103.036 69.0225C102.923 72.4952 102.168 75.0534 101.386 76.7129C100.995 77.5413 100.596 78.151 100.263 78.5391C100.097 78.7313 99.9396 78.8788 99.7998 78.9697C99.7309 79.0145 99.6526 79.0545 99.5703 79.0723C99.4871 79.0902 99.3677 79.0902 99.2646 79.0078C99.1856 78.9445 99.1595 78.8601 99.1514 78.8037C99.1433 78.7478 99.1483 78.6937 99.1553 78.6504C99.1694 78.5628 99.2019 78.4596 99.2412 78.3516C99.3209 78.1327 99.4527 77.8313 99.6074 77.4717C99.9199 76.7452 100.345 75.7389 100.715 74.5234C101.455 72.0912 101.966 68.8352 100.901 65.3467V65.3457C100.053 62.5065 98.8029 60.7827 97.791 59.7344C97.2843 59.2095 96.835 58.8504 96.5166 58.6016C96.3619 58.4806 96.2245 58.3754 96.1338 58.292C96.0896 58.2513 96.0394 58.2006 96.0039 58.1436C95.9708 58.0901 95.9128 57.9677 95.9805 57.832C96.0241 57.7191 96.1032 57.631 96.209 57.5762C96.3204 57.5184 96.4472 57.5024 96.5693 57.5068Z" fill="#4B4B4B" stroke="#4B4B4B" stroke-width="0.5"/>
<path d="M26.1074 0.500977C26.2335 0.508811 26.3302 0.557361 26.3877 0.592773C26.4481 0.630027 26.4977 0.673091 26.5352 0.709961C26.6725 0.845179 26.8112 1.05875 26.9424 1.28418C27.2178 1.7576 27.5709 2.48378 27.96 3.34863C29.517 6.80977 31.7898 12.7813 32.3604 14.7969L32.3848 14.8828L32.3779 14.9717C32.3308 15.5847 32.0523 16.0653 31.5713 16.2715C31.1139 16.4674 30.6121 16.3521 30.2422 16.0879L30.2334 16.0811C30.027 15.9262 29.8533 15.6565 29.7119 15.4004C29.5581 15.1219 29.3971 14.7728 29.2344 14.3848C28.9082 13.6069 28.5594 12.6324 28.2354 11.6602C27.5947 9.738 27.0348 7.78343 26.9102 7.29102L26.5176 5.88965C26.1598 4.58913 25.9059 3.58538 25.7402 2.83789C25.63 2.34056 25.5571 1.9467 25.5195 1.65039C25.5008 1.5027 25.4891 1.36962 25.4883 1.25488C25.4875 1.15231 25.4943 1.01569 25.54 0.888672C25.564 0.822395 25.6119 0.72114 25.71 0.635742C25.8216 0.538714 25.9639 0.492096 26.1074 0.500977Z" fill="#F8B42A" stroke="#F8B42A"/>
<path d="M3.11523 15.2012C3.26597 15.1777 3.39436 15.2099 3.48047 15.2422C3.56288 15.2731 3.63315 15.3149 3.67188 15.3379C3.72357 15.3686 3.73681 15.3767 3.75293 15.3848L3.75195 15.3857C5.67732 16.3107 9.14683 17.6642 12.2773 18.9014C13.8379 19.5181 15.3117 20.1054 16.4521 20.5898C17.022 20.8319 17.5152 21.05 17.8965 21.2363C18.1643 21.3672 18.4132 21.499 18.5947 21.624L18.752 21.7471L18.7607 21.7539L18.7676 21.7617C19.2115 22.2057 19.3809 22.8138 19.1074 23.3242C18.8303 23.8411 18.2263 24.0236 17.6201 23.8721L17.6016 23.8672L17.583 23.8613C16.8708 23.6239 13.1727 21.9612 9.68457 20.2451C7.93313 19.3835 6.21574 18.499 4.93262 17.7617C4.29292 17.3942 3.7486 17.0558 3.35938 16.7705C3.16643 16.6291 2.99561 16.489 2.86816 16.3555C2.8046 16.2888 2.73962 16.2118 2.68848 16.126C2.64049 16.0454 2.58019 15.917 2.58008 15.7578V15.5498L2.72656 15.4033C2.82641 15.3036 2.95711 15.2258 3.11523 15.2012Z" fill="#F8B42A" stroke="#F8B42A"/>
<path d="M77.5596 10.2012V10.6689C77.5596 10.7581 77.5555 10.8902 77.498 11.0332C77.4424 11.1716 77.3544 11.2758 77.2803 11.3555C77.207 11.4341 77.1033 11.5337 76.9834 11.6514C76.8577 11.7747 76.6957 11.9358 76.4854 12.1553C75.6428 13.0345 74.0093 14.8699 70.874 18.9756L70.8672 18.9854L70.8662 18.9844C70.7177 19.17 70.2104 19.811 69.6924 20.4326C69.4336 20.7432 69.168 21.0533 68.9424 21.3018C68.83 21.4256 68.7233 21.5386 68.6299 21.6299C68.5522 21.7058 68.4551 21.7941 68.3594 21.8555C67.7946 22.2318 67.1255 22.2935 66.6562 21.8965C66.1884 21.5004 66.1469 20.8407 66.4326 20.2578C66.5699 19.9605 66.8253 19.5868 67.1396 19.1797C67.4605 18.7642 67.8655 18.2855 68.3242 17.7725C69.2422 16.7458 70.3891 15.5655 71.541 14.4512C72.6923 13.3375 73.8557 12.282 74.8066 11.5068C75.2808 11.1203 75.7115 10.7955 76.0664 10.5674C76.2431 10.4538 76.4121 10.3568 76.5654 10.2881C76.701 10.2274 76.8939 10.1567 77.0928 10.1699L77.5596 10.2012Z" fill="#F8B42A" stroke="#F8B42A"/>
<path d="M54.0098 4.43164C54.1139 4.37553 54.3112 4.31111 54.5264 4.41211C54.7186 4.50254 54.799 4.66908 54.8301 4.75195C54.8923 4.91775 54.8973 5.12135 54.8926 5.29688L54.8916 5.33691L54.8848 5.375C53.8773 10.7854 53.2733 13.7204 52.7754 15.2812C52.5309 16.0476 52.2858 16.5741 51.9648 16.8867C51.7903 17.0568 51.5943 17.1632 51.3779 17.2119C51.1725 17.2581 50.9758 17.2455 50.8115 17.2236L50.792 17.2217L50.7725 17.2178C50.4027 17.1385 50.1096 16.9532 49.9141 16.6738C49.7267 16.4061 49.6602 16.0967 49.6484 15.8145C49.6256 15.2673 49.8027 14.6721 49.9551 14.251C49.9971 14.1252 51.0072 11.1506 52 8.54688C52.4949 7.24903 52.9939 6.01883 53.3701 5.2832C53.4647 5.09837 53.5575 4.93242 53.6455 4.80078C53.6895 4.735 53.7382 4.66932 53.79 4.61133C53.8372 4.55859 53.9106 4.4851 54.0098 4.43164Z" fill="#F8B42A" stroke="#F8B42A"/>
</svg>

After

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -0,0 +1,7 @@
<svg width="87" height="16" viewBox="0 0 87 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.0378 14.0889C11.6569 15.2806 9.86558 16 7.90822 16C3.54061 16 0 12.4183 0 8.00003C0 3.5817 3.54061 0 7.90822 0C9.86558 0 11.6569 0.7194 13.0378 1.91112C14.4188 0.7194 16.2101 0 18.1675 0C22.535 0 26.0756 3.5817 26.0756 8.00003C26.0756 12.4183 22.535 16 18.1675 16C16.2101 16 14.4188 15.2806 13.0378 14.0889Z" fill="#ED0006"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.0381 14.0889C14.7384 12.6216 15.8166 10.4382 15.8166 8.00003C15.8166 5.56183 14.7384 3.37843 13.0381 1.91112C14.4191 0.7194 16.2103 0 18.1677 0C22.5353 0 26.0759 3.5817 26.0759 8.00003C26.0759 12.4183 22.5353 16 18.1677 16C16.2103 16 14.4191 15.2806 13.0381 14.0889Z" fill="#F9A000"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.0383 1.91016C14.7386 3.37752 15.8168 5.56087 15.8168 7.99907C15.8168 10.4372 14.7386 12.6206 13.0383 14.0879C11.338 12.6206 10.2598 10.4372 10.2598 7.99907C10.2598 5.56087 11.338 3.37752 13.0383 1.91016Z" fill="#FF5E00"/>
<path d="M52.5256 15.8173L55.167 0.31688H59.3919L56.7485 15.8173H52.5256ZM72.0127 0.651022C71.1759 0.336992 69.8642 0 68.2262 0C64.0514 0 61.1108 2.10232 61.0857 5.11538C61.0621 7.34264 63.1851 8.58522 64.7877 9.32659C66.4323 10.0866 66.9851 10.571 66.9772 11.2493C66.9666 12.2884 65.6639 12.7629 64.4494 12.7629C62.7585 12.7629 61.8601 12.5279 60.4726 11.9494L59.928 11.7031L59.3351 15.173C60.322 15.6058 62.1467 15.9805 64.0415 16C68.4827 16 71.3658 13.9217 71.3986 10.704C71.4144 8.94067 70.2888 7.59895 67.8512 6.49256C66.3745 5.7755 65.4701 5.29702 65.4797 4.57093C65.4797 3.92664 66.2452 3.23769 67.8995 3.23769C69.2808 3.21623 70.2818 3.51751 71.0616 3.83154L71.4402 4.01041L72.0127 0.651022ZM82.885 0.316642H79.6204C78.6091 0.316642 77.8521 0.592666 77.4081 1.60206L71.1334 15.807H75.57C75.57 15.807 76.2952 13.8971 76.4593 13.4777C76.9441 13.4777 81.254 13.4844 81.8701 13.4844C81.9965 14.0271 82.3842 15.807 82.3842 15.807H86.3046L82.885 0.316167V0.316642ZM77.7052 10.3258C78.0547 9.43277 79.3886 5.99277 79.3886 5.99277C79.3638 6.03403 79.7355 5.09534 79.9487 4.51337L80.2343 5.84977C80.2343 5.84977 81.0433 9.5498 81.2124 10.3256H77.7052V10.3258ZM48.939 0.316642L44.8027 10.8872L44.362 8.73915C43.5919 6.26286 41.1928 3.57999 38.5107 2.23685L42.293 15.7925L46.7631 15.7876L53.4146 0.316484L48.939 0.316405" fill="#0E4595"/>
<path d="M40.9429 0.316406H34.1302L34.0762 0.638908C39.3764 1.92195 42.8834 5.02258 44.3395 8.74857L42.8582 1.6255C42.6025 0.643975 41.8607 0.351007 40.9431 0.316801" fill="#0E4595"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1,12 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sf_app_platform/payments/apps/di_container.dart'; import 'package:sf_app_platform/payments/apps/di_container.dart';
import 'package:sf_app_platform/payments/domain/ports/theme_port.dart'; import 'package:sf_app_platform/payments/domain/ports/theme_port.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart' hide Provider;
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/account_created_screen.dart'; import 'package:sf_app_platform/payments/view/screens/account_created_screen.dart';
import 'package:sf_app_platform/payments/view/screens/add_kid_screen.dart'; import 'package:sf_app_platform/payments/view/screens/add_kid_screen.dart';
import 'package:sf_app_platform/payments/view/screens/alert_screen.dart'; import 'package:sf_app_platform/payments/view/screens/alert_screen.dart';
import 'package:sf_app_platform/payments/view/screens/dashboard_screen.dart'; import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
import 'package:sf_app_platform/payments/view/screens/errors/connection_error_screen.dart'; import 'package:sf_app_platform/payments/view/screens/errors/connection_error_screen.dart';
import 'package:sf_app_platform/payments/view/screens/errors/no_plan_error_screen.dart'; import 'package:sf_app_platform/payments/view/screens/errors/no_plan_error_screen.dart';
import 'package:sf_app_platform/payments/view/screens/errors/server_error_screen.dart'; import 'package:sf_app_platform/payments/view/screens/errors/server_error_screen.dart';
@@ -15,6 +16,8 @@ import 'package:sf_app_platform/payments/view/screens/link_phone_screen.dart';
import 'package:sf_app_platform/payments/view/screens/loading_google_screen.dart'; import 'package:sf_app_platform/payments/view/screens/loading_google_screen.dart';
import 'package:sf_app_platform/payments/view/screens/loading_screen.dart'; import 'package:sf_app_platform/payments/view/screens/loading_screen.dart';
import 'package:sf_app_platform/payments/view/screens/restore_password/restore_password_screen.dart'; import 'package:sf_app_platform/payments/view/screens/restore_password/restore_password_screen.dart';
import 'package:sf_app_platform/payments/view/screens/settings_screen.dart';
import 'package:sf_app_platform/payments/view/screens/signup/signup_screen.dart';
import 'package:sf_app_platform/payments/view/screens/welcome_screen.dart'; import 'package:sf_app_platform/payments/view/screens/welcome_screen.dart';
Future<void> main() async { Future<void> main() async {
@@ -36,7 +39,7 @@ class PlatformApp extends StatelessWidget {
// Puertos (desde DI) // Puertos (desde DI)
Provider<ThemePort>.value(value: di.theme) Provider<ThemePort>.value(value: di.theme)
], ],
child: MaterialApp( child: ProviderScope(child: MaterialApp(
title: 'SaveFamily', title: 'SaveFamily',
theme: ThemeData( theme: ThemeData(
// This is the theme of your application. // This is the theme of your application.
@@ -56,8 +59,8 @@ class PlatformApp extends StatelessWidget {
// tested with just a hot reload. // tested with just a hot reload.
colorScheme: ColorScheme.fromSeed(seedColor: Color(0xFF329E95)), colorScheme: ColorScheme.fromSeed(seedColor: Color(0xFF329E95)),
), ),
home: WelcomeScreen(), home: DashboardScreen(),
) ))
); );
} }
} }

View File

@@ -3,8 +3,10 @@ import 'dart:ui';
enum ThemeCode{ enum ThemeCode{
background_primary, background_primary,
background_secondary, background_secondary,
background_tertiary,
text_primary, text_primary,
text_secondary, text_secondary,
text_tertiary,
button_primary, button_primary,
button_secondary button_secondary
} }

View File

@@ -11,9 +11,11 @@ class ThemeSfAdapter extends ThemePort{
Map<ThemeCode, Color> theme = HashMap.from( Map<ThemeCode, Color> theme = HashMap.from(
{ {
ThemeCode.background_primary: Color(0xFFFFFFFF), ThemeCode.background_primary: Color(0xFFFFFFFF),
ThemeCode.background_secondary: Color(0xE6FFFFFF), ThemeCode.background_secondary: Color(0xFFF7F7F7),
ThemeCode.background_tertiary: Color(0x4D329E95),
ThemeCode.text_primary: Color(0xFF4B4B4B), ThemeCode.text_primary: Color(0xFF4B4B4B),
ThemeCode.text_secondary: Color(0xFFE0E0E0), ThemeCode.text_secondary: Color(0xFFFFFFFF),
ThemeCode.text_tertiary: Color(0xFFE0E0E0),
ThemeCode.button_primary: Color(0xFF329e95), ThemeCode.button_primary: Color(0xFF329e95),
ThemeCode.button_secondary: Color(0xFF4B4B4B) ThemeCode.button_secondary: Color(0xFF4B4B4B)
} }

View File

@@ -1,33 +1,45 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sf_app_platform/payments/view/screens/dashboard_screen.dart'; import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/add_kid_screen.dart';
import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
import '../../domain/ports/theme_port.dart';
class AccountCreatedScreen extends StatelessWidget { class AccountCreatedScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
final email = "usuario@example.com"; final email = "usuario@example.com";
final fullName = "Carlos Pérez Cruz"; final fullName = "Carlos Pérez Cruz";
return Scaffold(body: Expanded(child: Center( return Scaffold(
child: Column( backgroundColor: theme.getColorFor(ThemeCode.background_primary),
spacing: 20, body: Container(
children: [ margin: EdgeInsets.all(30),
Spacer(), child: Center(
Icon(Icons.check, color: Color(0xFF329e95), size: 50,), child: Column(
Text("Cuenta creada", style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)), spacing: 20,
Text.rich(TextSpan(text:"Has creado la cuenta para:\n", children: [
children: [TextSpan(text: fullName, style: TextStyle(fontWeight: FontWeight.bold))])), Spacer(flex: 10),
Text.rich(TextSpan(text:"Hemos enviado un email de verificación a:\n", Icon(Icons.check, color: theme.getColorFor(ThemeCode.background_primary), size: 50),
children: [TextSpan(text: email, style: TextStyle(fontWeight: FontWeight.bold))])), Text("Cuenta creada", style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
Text("Crea la cuenta de tu peque e ingresa su primera paga para utilizarla con su reloj"), Text.rich(TextSpan(text:"Has creado la cuenta para:\n",
FilledButton(onPressed: ()=>{ children: [TextSpan(text: fullName, style: TextStyle(fontWeight: FontWeight.bold))])),
Navigator.pushReplacement(context, MaterialPageRoute(builder: (_)=>DashboardScreen())) Text.rich(TextSpan(text:"Hemos enviado un email de verificación a:\n",
}, child: Text("Continuar")), children: [TextSpan(text: email, style: TextStyle(fontWeight: FontWeight.bold))])),
Spacer() Text("Crea la cuenta de tu peque e ingresa su \nprimera paga para utilizarla con su reloj"),
], FilledButton(onPressed: ()=>{
), Navigator.pushReplacement(context, MaterialPageRoute(builder: (_)=>AddKidScreen()))
))); }, child: Text("Continuar")),
Spacer(flex: 8)
],
),
)
)
);
} }
} }

View File

@@ -0,0 +1,56 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/core/activity_list.dart';
import 'package:sf_app_platform/payments/view/screens/core/line_graph.dart';
import '../../domain/ports/theme_port.dart';
class ActivityScreen extends StatefulWidget{
const ActivityScreen({super.key});
@override
State<ActivityScreen> createState() => ActivityScreenState();
}
class ActivityScreenState extends State<ActivityScreen>{
final activity = [
{"type": "goal"},
{"type": "wage", "amount": 5},
{"type": "lock"},
{"type": "lock"}
];
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
final content = [
Text("Movimientos recientes", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30),),
Row(
spacing: 20,
children: [
FilledButton(onPressed: ()=>{}, child: Text("Hoy")),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Última semana")),
TextButton(onPressed: ()=>{}, child: Text("Mes"))
],
),
SizedBox(height: 200, child: LineGraph()),
ActivityList(activity: activity, edit: false)
];
return Scaffold(
backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
body: Container(
margin: EdgeInsets.fromLTRB(30, 30, 30, 0),
child: Center(child: ListView.separated(
itemBuilder: (BuildContext context, int index) {return content[index];},
separatorBuilder: (BuildContext context, int index) {
return Divider(color: Colors.transparent, height: 30);
},
itemCount: content.length)
)
)
);
}
}

View File

@@ -1,6 +1,7 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sf_app_platform/payments/view/screens/dashboard_screen.dart'; import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
import 'package:sf_app_platform/payments/view/screens/link_watch/create_profile_screen.dart';
class AddKidScreen extends StatelessWidget{ class AddKidScreen extends StatelessWidget{
@@ -42,7 +43,7 @@ class AddKidScreen extends StatelessWidget{
Spacer(flex: 8), Spacer(flex: 8),
Container( Container(
width: double.infinity, width: double.infinity,
child: FilledButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>DashboardScreen())), child: Text("¡Empezar!")) child: FilledButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>CreateProfileScreen())), child: Text("¡Empezar!"))
) )
], ],
) )

View File

@@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/domain/ports/theme_port.dart'; import 'package:sf_app_platform/payments/domain/ports/theme_port.dart';
import 'package:sf_app_platform/payments/view/screens/core/activity_list.dart';
class AlertScreen extends StatefulWidget { class AlertScreen extends StatefulWidget {
const AlertScreen({super.key}); const AlertScreen({super.key});
@@ -10,9 +11,14 @@ class AlertScreen extends StatefulWidget {
State<StatefulWidget> createState() => AlertScreenState(); State<StatefulWidget> createState() => AlertScreenState();
} }
class AlertScreenState extends State<AlertScreen>{ class AlertScreenState extends State<AlertScreen> {
final activity = [{"type": "goal"}, {"type": "wage", "amount": 5}, {"type": "lock"}, {"type": "lock"}]; final activity = [
{"type": "goal"},
{"type": "wage", "amount": 5},
{"type": "lock"},
{"type": "lock"}
];
bool edit = false; bool edit = false;
@override @override
@@ -35,61 +41,15 @@ class AlertScreenState extends State<AlertScreen>{
children: [ children: [
Text("Alertas"), Text("Alertas"),
Spacer(), Spacer(),
TextButton(onPressed: ()=>setState((){edit = !edit;}), child: Text("Editar")) TextButton(
onPressed: () => setState(() {edit = !edit;}),
child: Text("Editar"))
], ],
), ),
Column( ActivityList(activity: activity, edit: edit)
spacing: 20,
children: buildActivity(context, activity, edit)
),
], ],
), ),
), ),
); );
} }
List<Widget> buildActivity(BuildContext context, List activity, bool edit){
ThemePort theme = context.read<ThemePort>();
final colors = [Colors.cyan, Colors.pinkAccent, Colors.deepOrangeAccent, Colors.red];
final icons = {"wage": Icons.wallet, "goal": Icons.emoji_events_outlined, "lock": Icons.lock_outline};
return List<Widget>.generate(activity.length, (int index) {
var logItem = Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
border: BoxBorder.fromLTRB(left: BorderSide(color: colors[index%colors.length], width: 5))
),
child: Column(
children: [
Row(
children: [
Icon(icons[activity[index]["type"]], color: colors[index%colors.length]),
Text("Entrega de paga", style: TextStyle(fontWeight: FontWeight.bold)),
//Spacer(),
Text("14/01/2005")
]
),
Text("Ana tiene ya su paga de 5€ en el reloj")
]
)
);
if(edit){
return Row(children: [
Checkbox(
value: true,
onChanged: (value)=>{},
activeColor: theme.getColorFor(ThemeCode.button_primary),
semanticLabel: "Eliminar"),
logItem
]);
} else {
return logItem;
}
});
}
} }

View File

@@ -0,0 +1,63 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class ContactScreen extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
margin: EdgeInsets.all(30),
child: Center(
child: Column(
spacing: 10,
children: [
Text("Contáctanos", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
Text("Trasládanos tus dudas e intentaremos responderte lo antes posible"),
DropdownMenu(
initialSelection: "es",
label: Text("País"),
dropdownMenuEntries: [
DropdownMenuEntry(value: "es", label: "España"),
DropdownMenuEntry(value: "fr", label: "Francia"),
DropdownMenuEntry(value: "pt", label: "Portugal"),
]
),
DropdownMenu(
initialSelection: "online",
label: Text("Canal de compra"),
dropdownMenuEntries: [
DropdownMenuEntry(value: "online", label: "SF online shop"),
]
),
Expanded(child: TextField(
decoration: InputDecoration(
labelText: "Nombre",
hintText: "Nombre y apellidos",
border: OutlineInputBorder()
)
)),
Expanded(child: TextField(
decoration: InputDecoration(
labelText: "Correo electrónico",
hintText: "Correo electrónico",
border: OutlineInputBorder()
)
)),
Expanded(child: TextField(
minLines: 3,
maxLines: 3,
decoration: InputDecoration(
labelText: "Asunto del mensaje",
hintText: "Escribe tu mensaje",
border: OutlineInputBorder()
)
)),
Expanded(child: FilledButton(onPressed: ()=>Navigator.pop(context), child: Text("Enviar")))
],
),
),
),
);
}
}

View File

@@ -0,0 +1,87 @@
import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../../domain/ports/theme_port.dart';
class ActivityList extends StatefulWidget {
final List activity;
bool edit = false;
ActivityList({super.key, required this.activity, required this.edit});
@override
State<StatefulWidget> createState() => ActivityListState();
}
class ActivityListState extends State<ActivityList>{
late List<bool> values;
@override
void initState() {
values = List<bool>.generate(widget.activity.length, (_)=>false);
super.initState();
}
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
final colors = [Colors.cyan, Colors.pinkAccent, Colors.deepOrangeAccent, Colors.red];
final icons = {"wage": Icons.wallet, "goal": Icons.emoji_events_outlined, "lock": Icons.lock_outline, "reload": Icons.attach_money_outlined};
final titles = {"wage": "Entrega de paga", "goal": "¡Objetivo cumplido!", "lock": "Bloqueo de pago", "reload": "Recarga familiar"};
return Column(
spacing: 20,
children: List<Widget>.generate(widget.activity.length, (int index) {
var logItem = Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
border: BoxBorder.fromLTRB(left: BorderSide(
color: colors[index % colors.length], width: 5))
),
child: Column(
spacing: 15,
children: [
Row(
children: [
Icon(icons[widget.activity[index]["type"]],
color: colors[index % colors.length]),
Text(titles[widget.activity[index]["type"]]!,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)),
Spacer(),
Text("14/01/2005")
]
),
Align(
alignment: Alignment.topLeft,
child: Text("Ana ya tiene su paga de 5€ en el reloj"),
)
]
)
);
if (widget.edit) {
return Row(children: [
Checkbox(
value: values[index],
onChanged: (value) => {
setState(() {
values[index] = !values[index];
})},
activeColor: theme.getColorFor(ThemeCode.button_primary),
semanticLabel: "Eliminar"),
Expanded(child: logItem)
]);
} else {
return logItem;
}
})
);
}
}

View File

@@ -0,0 +1,53 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/activity_screen.dart';
import 'package:sf_app_platform/payments/view/screens/alert_screen.dart';
import 'package:sf_app_platform/payments/view/screens/home_screen.dart';
import 'package:sf_app_platform/payments/view/screens/profile_screen.dart';
import '../../../domain/ports/theme_port.dart';
class DashboardScreen extends StatefulWidget {
const DashboardScreen({super.key});
@override
State<DashboardScreen> createState() => _DashboardScreenState();
}
class _DashboardScreenState extends State<DashboardScreen>{
int currentPageIndex = 0;
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
final bodies = [
HomeScreen(),
ActivityScreen(),
AlertScreen(),
ProfileScreen()
];
return Scaffold(
bottomNavigationBar: NavigationBar(
backgroundColor: theme.getColorFor(ThemeCode.background_primary),
onDestinationSelected: (int index) {
setState(() {
currentPageIndex = index;
});
},
selectedIndex: currentPageIndex,
destinations: [
NavigationDestination(icon: Icon(Icons.home_outlined), label: "Inicio"),
NavigationDestination(icon: Icon(Icons.watch_outlined), label: "Movimientos"),
NavigationDestination(icon: Icon(Icons.notifications_outlined), label: "Alertas"),
NavigationDestination(icon: Icon(Icons.person_outline_outlined), label: "Mi perfil"),
]
),
body: bodies[currentPageIndex],
);
}
}

View File

@@ -0,0 +1,51 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import '../../../domain/ports/theme_port.dart';
class DepositBlock extends StatelessWidget{
final double max;
const DepositBlock({super.key, required this.max});
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(color: theme.getColorFor(ThemeCode.background_primary), borderRadius: BorderRadius.all(Radius.circular(20))),
margin: EdgeInsets.only(top: 10),
child: Column(
children: [
Text("Ingresar dinero en el wallet", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Row(
spacing: 10,
children: [
Expanded(
child: TextField(
decoration: InputDecoration(labelText: "Cantidad", hintText: "0€", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
]
)
),
FilledButton(
onPressed: ()=>{},
style: ButtonStyle(backgroundColor: WidgetStatePropertyAll<Color>(theme.getColorFor(ThemeCode.button_primary))),
child: Text("Ingresar")
)
],
),
Align(
alignment: Alignment.topLeft,
child: Text("Máximo que puedes añadir: $max"),
)
],
),
);
}
}

View File

@@ -0,0 +1,169 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:provider/provider.dart';
import '../../../domain/ports/theme_port.dart';
class LineGraph extends StatefulWidget {
final lines = [[0,1,0,1,0,1,0],[1,0,1,0,1,0,1]];
LineGraph({super.key});
@override
State<StatefulWidget> createState() => LineGraphState();
}
class LineGraphState extends State<LineGraph> {
final weekDays = ["L", "M", "X", "J", "V", "S", "D"];
String? timeSpan;
late var days = weekDays;
@override
void initState() {
timeSpan = "week";
super.initState();
}
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return Container(
padding: EdgeInsets.all(15),
decoration: BoxDecoration(
border: BoxBorder.fromLTRB(left: BorderSide(color: Colors.cyan, width: 5)),
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary)
),
child: Column(
spacing: 10,
children: [
Row(children: [
Text("Gastos", style: TextStyle(fontWeight: FontWeight.bold)),
Spacer(),
Container(
padding: EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10)),
color: theme.getColorFor(ThemeCode.background_secondary),
),
child: DropdownButton(
underline: Container(),
value: timeSpan,
onChanged: (String? value) {
setState(() {
timeSpan = value;
});
},
dropdownColor: theme.getColorFor(ThemeCode.background_primary),
items: [
DropdownMenuItem(value: "day", child: Text("Hoy")),
DropdownMenuItem(value: "week", child: Text("Esta semana")),
DropdownMenuItem(value: "month", child: Text("Este mes")),
]
),
)
]),
Expanded(child: LineChart(LineChartData(
gridData: FlGridData(
show: true,
drawHorizontalLine: false,
drawVerticalLine: true,
verticalInterval: 1
),
titlesData: FlTitlesData(
//show: false,
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
reservedSize: 40,
getTitlesWidget: (double value, TitleMeta meta)=>SideTitleWidget(
space: 4,
meta: meta,
/*fitInside: fitInsideBottomTitle
? SideTitleFitInsideData.fromTitleMeta(meta, distanceFromEdge: 0)
: SideTitleFitInsideData.disable(),*/
child: Text(
weekDays[value.toInt()]
),
),
),
),
leftTitles: AxisTitles(),
topTitles: AxisTitles(),
rightTitles: AxisTitles()
),
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
getTooltipColor: (touchedSpot) => theme.getColorFor(ThemeCode.button_secondary),
getTooltipItems: (List<LineBarSpot> touchedBarSpots){
return touchedBarSpots.map(
(barSpot) {
return LineTooltipItem("${barSpot.y}", TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)));
}
).toList();
}
)
),
borderData: FlBorderData(
show: true,
border: Border(
bottom: BorderSide(
color: Colors.lightBlue.withValues(alpha: 0.2),
width: 4
),
left: const BorderSide(color: Colors.transparent),
right: const BorderSide(color: Colors.transparent),
top: const BorderSide(color: Colors.transparent),
),
),
lineBarsData: [
LineChartBarData(
isCurved: true,
color: Colors.pink,
barWidth: 5,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(show: false),
spots: const [
FlSpot(0, 1),
FlSpot(1, 0),
FlSpot(2, 1),
FlSpot(3, 0),
FlSpot(4, 1),
FlSpot(5, 0),
FlSpot(6, 1),
],
),
LineChartBarData(
isCurved: true,
color: Colors.cyan,
barWidth: 5,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(show: false),
spots: const [
FlSpot(0, 0),
FlSpot(1, 1),
FlSpot(2, 0),
FlSpot(3, 1),
FlSpot(4, 0),
FlSpot(5, 1),
FlSpot(6, 0),
],
),
],
minX: 0,
maxX: days.length-1,
maxY: 1,
minY: 0,
)))
],
),
);
}
}

View File

@@ -0,0 +1,35 @@
import 'package:flutter/material.dart';
class MoneyText extends StatelessWidget {
final String text;
final double size;
final bool resize;
final Color color;
const MoneyText({super.key, required this.text, required this.size, required this.resize, required this.color});
@override
Widget build(BuildContext context) {
final units = text.split(".")[0];
final cents = ",${text.split(".")[1]}";
return Text.rich(TextSpan(
text: units,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: size,
color: color
),
children: [
TextSpan(
text: cents,
style: TextStyle(
fontWeight: FontWeight.normal,
fontSize: resize ? size/2 : size
)
)
]
));
}
}

View File

@@ -0,0 +1,70 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../../domain/entities/kid.dart';
import '../../../domain/ports/theme_port.dart';
class WalletManagementLayout extends StatefulWidget {
final List<Widget> children;
final Widget footer;
final Kid kid;
const WalletManagementLayout({super.key, required this.kid, required this.children, required this.footer});
@override
State<WalletManagementLayout> createState() => WalletManagementLayoutState();
}
class WalletManagementLayoutState extends State<WalletManagementLayout>{
@override
Widget build(BuildContext context) {
final theme = context.read<ThemePort>();
final content = [
Container(
padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
child: Stack(
children: [
IconButton(onPressed: ()=>Navigator.pop(context), icon: Icon(Icons.arrow_back_ios_outlined, color: theme.getColorFor(ThemeCode.text_secondary))),
Expanded(child: Center(child: Column(children: [
Text(widget.kid.name, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30, color: theme.getColorFor(ThemeCode.text_secondary))),
Text.rich(TextSpan(
text: "Saldo disponible: ",
style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)),
children: [
TextSpan(text: "${widget.kid.balance}", style: TextStyle(fontWeight: FontWeight.bold, color: theme.getColorFor(ThemeCode.text_secondary))),
TextSpan(text: "", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)))
]))
])))
],
)
),
...widget.children
];
return Scaffold(
backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
body: Stack(children: [
DecoratedBox(
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(30)),
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: theme.getCardColorFor(0)
),
),
child: SizedBox(width: double.infinity, height: 200),
),
Column(children: [
Expanded(child: ListView.separated(
itemBuilder: (BuildContext context, int index) {return Container(margin: EdgeInsets.symmetric(horizontal: 20), child: content[index]);},
separatorBuilder: (BuildContext context, int index) {return Divider(height: 30, color: Colors.transparent);},
itemCount: content.length)),
widget.footer
])
])
);
}
}

View File

@@ -1,238 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/kid_wallet_screen.dart';
import '../../domain/entities/kid.dart';
import '../../domain/ports/theme_port.dart';
class DashboardScreen extends StatefulWidget {
const DashboardScreen({super.key});
@override
State<DashboardScreen> createState() => _DashboardScreenState();
}
class _DashboardScreenState extends State<DashboardScreen>{
int currentPageIndex = 0;
final String name = "Juan";
final double total = 100;
final List<Kid> kids = [
Kid(name:"Carlos", balance:25.47),
Kid(name:"Ana", balance:25.47),
];
late final double available = double.parse(kids.fold(total, (t, e) => t - e.balance).toStringAsFixed(2));
@override
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: NavigationBar(
onDestinationSelected: (int index) {
setState(() {
currentPageIndex = index;
});
},
selectedIndex: currentPageIndex,
destinations: [
NavigationDestination(icon: Icon(Icons.home_outlined), label: "Inicio"),
NavigationDestination(icon: Icon(Icons.person_outline_outlined), label: "Mi perfil"),
NavigationDestination(icon: Icon(Icons.watch_outlined), label: "Movimientos"),
NavigationDestination(icon: Icon(Icons.notifications_outlined), label: "Alertas"),
],),
body: <Widget>[
SingleChildScrollView( child: Container(
margin: EdgeInsets.all(30),
child: Column(
children: [
Text.rich(
TextSpan(
text: 'Hola, ',
style: TextStyle(),
children: <TextSpan>[
TextSpan(text: name, style: TextStyle(fontWeight: FontWeight.bold)),
],
),
),
walletsList(context, kids),
TextButton(onPressed: ()=>{}, child: Text("+ Añdir otro peque", style: TextStyle(fontWeight: FontWeight.bold))),
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(20))),
child: Column(
children: [
Row(
children: [
Text("Wallet", style: TextStyle(fontWeight: FontWeight.bold),),
Spacer(),
Text("$total€ total")
]
),
Stack(
children: [
LinearProgressIndicator(
value: available/total,
minHeight: 70,
borderRadius: BorderRadius.all(Radius.circular(16)),
),
FractionallySizedBox(
widthFactor: available/total,
child: Container(
padding: EdgeInsets.symmetric(vertical: 20),
child: Center(
child: Text(
"$available",
style: TextStyle(color: Colors.white, fontSize: 20)
)
)
)
),
],
),
Center(child: Text("Disponible"))
],
),
),
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(20))),
margin: EdgeInsets.only(top: 10),
child: Column(
children: [
Text("Ingresar dinero en el wallets", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Row(
children: [
Expanded(
child: TextField(
decoration: InputDecoration(labelText: "Cantidad", hintText: "0€", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
]
)
),
FilledButton(onPressed: ()=>{}, child: Text("Ingresar"))
],
),
Text("Máximo que puedes añadir: ${150 - total}"),
],
),
)
]
),
)),
Expanded(
child: Center(
child: Text("Perfil")
),
),
Expanded(
child: Center(
child: Text("Movimientos")
),
),
Expanded(
child: Center(
child: Text("Alertas")
),
)
][currentPageIndex],
);
}
Widget walletsList(BuildContext context, List<Kid> kids) {
final theme = context.read<ThemePort>();
return Column(
spacing: 20,
children: List<Widget>.generate(kids.length, (int index) {
return
GestureDetector(
onTap: ()=>{Navigator.push(context, MaterialPageRoute(builder: (_)=>KidWalletScreen(kid: kids[index])))},
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(16.0)),
child: Container(
padding: EdgeInsets.fromLTRB(20, 20, 20, 5),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: theme.getCardColorFor(index)
)
),
child: Column(
children: [
Text(kids[index].name,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 25,
color: Colors.white
)
),
Row(
spacing: 10,
children: [
SizedBox(
height: 60,
width: 60,
child: SvgPicture.asset("assets/images/ui/face.svg"),
),
Spacer(),
Text.rich(
TextSpan(
text:kids[index].balance.toString(),
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 25, color: Colors.white),
children: [
TextSpan(
text:"\nen su hucha",
style: TextStyle(fontWeight: FontWeight.normal, fontSize: 16),
),
]
)
)
]
),
Row(
children: [
TextButton(
onPressed: ()=>showDialog(
context: context,
builder: (BuildContext context) => Dialog(
child: Container(height: 100, width: double.infinity, child: Column(
children: [
FilledButton(onPressed: ()=>{}, child: Text("Cámara")),
OutlinedButton(onPressed: ()=>{}, child: Text("Galería de fotos"))
],
)),
)
),
child: Row(
spacing: 10,
children: [
Icon(Icons.edit, color: theme.getColorFor(ThemeCode.text_secondary)),
Text("Editar", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)))
]
)
),
Spacer(),
FilledButton(
onPressed: ()=>{},
style: ButtonStyle(
),
child: Text("+ Añadir dinero")
)
],
)
]
),
)
)
);
})
);
}
}

View File

@@ -0,0 +1,183 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/core/wallet_management_layout.dart';
import '../../domain/entities/kid.dart';
import '../../domain/ports/theme_port.dart';
class DepositScreen extends StatefulWidget{
final Kid kid;
const DepositScreen({super.key, required this.kid});
@override
State<DepositScreen> createState() => DepositScreenState();
}
class DepositScreenState extends State<DepositScreen>{
String reason = "other";
bool program = false;
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return WalletManagementLayout(
kid: widget.kid,
children: [
Container(
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
spacing: 10,
children: [
Text("Ingresar dinero en el wallet", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
TextField(
decoration: InputDecoration(labelText: "Cantidad", hintText: "0€", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
]
),
Align(
alignment: Alignment.topLeft,
child: Text("Saldo total disponible después: 30 €")
)
],
),
),
Container(
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
spacing: 10,
children: [
Text("Motivo", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Este dato aparecerá en el reloj del peque"),
CheckboxListTile(
title: Text('Paga semanal'),
controlAffinity: ListTileControlAffinity.leading,
value: reason=="weekly",
onChanged: (value) {
setState(() {
reason="weekly";
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Objetivo semanal cumplido'),
controlAffinity: ListTileControlAffinity.leading,
value: reason=="goal",
onChanged: (value) {
setState(() {
reason="goal";
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Gastos extraordinarios'),
controlAffinity: ListTileControlAffinity.leading,
value: reason=="extraordinary",
onChanged: (value) {
setState(() {
reason="extraordinary";
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Otro'),
controlAffinity: ListTileControlAffinity.leading,
value: reason=="other",
onChanged: (value) {
setState(() {
reason="other";
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
TextField(
minLines: 3,
maxLines: 3,
maxLength: 150,
decoration: InputDecoration(
labelText: "Escribir mensaje a ${widget.kid.name} del motivo del ingreso",
hintText: "Escribe tu mensaje",
border: OutlineInputBorder(),
)
),
Align(
alignment: Alignment.topLeft,
child: Text("Máximo 150 caracteres")
)
],
),
),
Container(
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
spacing: 10,
children: [
Text("Cuándo se envía el dinero", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Este dato aparecerá en el reloj del peque"),
CheckboxListTile(
title: Text('Ahora'),
controlAffinity: ListTileControlAffinity.leading,
value: program==false,
onChanged: (value) {
setState(() {
program=false;
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Programar'),
controlAffinity: ListTileControlAffinity.leading,
value: program==true,
onChanged: (value) {
setState(() {
program=true;
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
if (program) TextField()
],
),
),
],
footer: Container(
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(children: [
FilledButton(onPressed: ()=>{}, child: Container(
width: double.infinity,
padding: EdgeInsets.all(20),
child: Center(child: Text("Añadir dinero"))
)),
TextButton(onPressed: ()=>Navigator.pop(context), child: Text("Cancelar"))
])
)
);
}
}

View File

@@ -0,0 +1,210 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/core/deposit_block.dart';
import 'package:sf_app_platform/payments/view/screens/core/money_text.dart';
import 'package:sf_app_platform/payments/view/screens/link_watch/create_profile_screen.dart';
import '../../domain/entities/kid.dart';
import '../../domain/ports/theme_port.dart';
import 'deposit_screen.dart';
import 'kid_wallet_screen.dart';
class HomeScreen extends StatelessWidget{
final String name = "Juan";
final double total = 95.03;
final List<Kid> kids = [
Kid(name:"Carlos", balance:25.47),
Kid(name:"Ana", balance:25.47),
];
late final double available = double.parse(kids.fold(total, (t, e) => t - e.balance).toStringAsFixed(2));
HomeScreen({super.key});
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return SingleChildScrollView( child: Container(
color: theme.getColorFor(ThemeCode.background_secondary),
margin: EdgeInsets.all(30),
child: Column(
children: [
Align(
alignment: Alignment.topLeft,
child: Text.rich(
TextSpan(
text: "Hola, ",
style: TextStyle(fontSize: 25),
children: <TextSpan>[
TextSpan(text: name, style: TextStyle(fontWeight: FontWeight.bold)),
],
),
)
),
walletsList(context, kids),
Align(
alignment: Alignment.topLeft,
child: TextButton(
onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>CreateProfileScreen())),
child: Text("+ Añadir otro peque", style: TextStyle(
fontWeight: FontWeight.bold,
color: theme.getColorFor(ThemeCode.text_primary)
))
)
),
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(color: theme.getColorFor(ThemeCode.background_primary), borderRadius: BorderRadius.all(Radius.circular(20))),
child: Column(
spacing: 5,
children: [
Row(
children: [
Text("Wallet", style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20
)),
Spacer(),
MoneyText(
text: "$total€ total",
size: 25,
resize: true,
color: theme.getColorFor(ThemeCode.text_primary)
)
]
),
Stack(
children: [
LinearProgressIndicator(
value: available/total,
minHeight: 70,
borderRadius: BorderRadius.all(Radius.circular(16)),
color: theme.getColorFor(ThemeCode.button_primary),
backgroundColor: theme.getColorFor(ThemeCode.background_tertiary),
),
FractionallySizedBox(
widthFactor: available/total,
child: Container(
padding: EdgeInsets.symmetric(vertical: 10),
child: Center(
child: MoneyText(
text: "$available",
size: 35,
resize: true,
color: theme.getColorFor(ThemeCode.text_secondary)
),
)
)
),
],
),
Center(child: Text("Disponible"))
],
),
),
DepositBlock(max: 150-total)
]
),
));
}
Widget walletsList(BuildContext context, List<Kid> kids) {
final theme = context.read<ThemePort>();
return Column(
spacing: 20,
children: List<Widget>.generate(kids.length, (int index) {
return
GestureDetector(
onTap: ()=>{Navigator.push(context, MaterialPageRoute(builder: (_)=>KidWalletScreen(kid: kids[index])))},
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(16.0)),
child: Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 8),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: theme.getCardColorFor(index)
)
),
child: Column(
children: [
Align(
alignment: Alignment.topLeft,
child: Text(kids[index].name,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 25,
color: theme.getColorFor(ThemeCode.text_secondary)
)
)
),
Row(
spacing: 10,
children: [
SizedBox(
height: 60,
width: 60,
child: SvgPicture.asset("assets/images/ui/face.svg"),
),
Spacer(),
Column(children: [
MoneyText(
text: "${kids[index].balance}",
size: 50,
resize: true,
color: theme.getColorFor(ThemeCode.text_secondary)
),
Text("en su hucha", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)))
])
]
),
Row(
children: [
TextButton(
onPressed: ()=>showDialog(
context: context,
builder: (BuildContext context) => Dialog(
child: Container(height: 100, width: double.infinity, child: Column(
children: [
FilledButton(onPressed: ()=>{}, child: Text("Cámara")),
OutlinedButton(onPressed: ()=>{}, child: Text("Galería de fotos"))
],
)),
)
),
child: Row(
spacing: 10,
children: [
Icon(Icons.edit, color: theme.getColorFor(ThemeCode.text_secondary)),
Text("Editar", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary)))
]
)
),
Spacer(),
FilledButton(
onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>DepositScreen(kid: kids[index]))),
style: ButtonStyle(
backgroundColor: WidgetStatePropertyAll<Color>(theme.getColorFor(ThemeCode.button_secondary)),
),
child: Container(
padding: EdgeInsets.symmetric(horizontal: 0,vertical: 10),
child: Text("+ Añadir dinero")
)
)
],
)
]
),
)
)
);
})
);
}
}

View File

@@ -1,7 +1,10 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/core/money_text.dart';
import 'package:sf_app_platform/payments/view/screens/deposit_screen.dart';
import 'package:sf_app_platform/payments/view/screens/limits_screen.dart';
import 'package:sf_app_platform/payments/view/screens/wage_screen.dart';
import '../../domain/entities/kid.dart'; import '../../domain/entities/kid.dart';
import '../../domain/ports/theme_port.dart'; import '../../domain/ports/theme_port.dart';
@@ -61,8 +64,12 @@ class _KidWalletScreenState extends State<KidWalletScreen> {
SizedBox(height: 30, child: SvgPicture.asset("assets/images/ui/face.svg")), SizedBox(height: 30, child: SvgPicture.asset("assets/images/ui/face.svg")),
], ],
), ),
Text("${widget.kid.balance.toString()}", MoneyText(
style: TextStyle(color: theme.getColorFor(ThemeCode.background_primary), fontSize: 35, fontWeight: FontWeight.bold)), text: "${widget.kid.balance.toString()}",
size: 60,
resize: true,
color: theme.getColorFor(ThemeCode.text_secondary)
),
Text("Saldo disponible", style: TextStyle(color: theme.getColorFor(ThemeCode.background_primary))), Text("Saldo disponible", style: TextStyle(color: theme.getColorFor(ThemeCode.background_primary))),
LinearProgressIndicator( LinearProgressIndicator(
value: 0.7, value: 0.7,
@@ -71,57 +78,58 @@ class _KidWalletScreenState extends State<KidWalletScreen> {
minHeight: 10, minHeight: 10,
borderRadius: BorderRadius.all(Radius.circular(5)), borderRadius: BorderRadius.all(Radius.circular(5)),
), ),
//Spacer(), Container(
Center( child: Container( padding: EdgeInsets.all(10),
padding: EdgeInsets.all(8),
margin: EdgeInsets.only(top: 30), margin: EdgeInsets.only(top: 30),
decoration: BoxDecoration( decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary), color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)), borderRadius: BorderRadius.all(Radius.circular(20)),
), ),
child: Row( child: Expanded(child: Center( child: Row(
spacing: 10, spacing: 10,
children: [ children: [
TextButton(onPressed: ()=>{}, TextButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>DepositScreen(kid: widget.kid))),
child: Column( child: Column(
spacing: 10, spacing: 10,
children: [ children: [
Icon(Icons.add_circle_outline), Icon(Icons.add_circle_outline, color: theme.getColorFor(ThemeCode.text_primary)),
Text("Añadir") Text("Añadir", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
] ]
)
),
TextButton(onPressed: ()=>{},
child: Column(
spacing: 10,
children: [
Icon(Icons.account_balance_wallet_outlined),
Text("Paga")
]
)
),
TextButton(onPressed: ()=>{},
child: Column(
spacing: 10,
children: [
Icon(Icons.list_alt_outlined),
Text("Límites")
]
)
),
TextButton(onPressed: ()=>{},
child: Column(
spacing: 10,
children: [
Icon(Icons.emoji_events_outlined),
Text("Metas")
]
)
) )
], ),
) Spacer(),
TextButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>WageScreen(kid: widget.kid))),
child: Column(
spacing: 10,
children: [
Icon(Icons.account_balance_wallet_outlined, color: theme.getColorFor(ThemeCode.text_primary)),
Text("Paga", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
]
)
),
Spacer(),
TextButton(onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>LimitsScreen(kid: widget.kid))),
child: Column(
spacing: 10,
children: [
Icon(Icons.list_alt_outlined, color: theme.getColorFor(ThemeCode.text_primary)),
Text("Límites", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
]
)
),
Spacer(),
TextButton(onPressed: ()=>{},
child: Column(
spacing: 10,
children: [
Icon(Icons.emoji_events_outlined, color: theme.getColorFor(ThemeCode.text_primary)),
Text("Metas", style: TextStyle(color: theme.getColorFor(ThemeCode.text_primary)))
]
)
)
],
) )
), ))),
Container( Container(
padding: EdgeInsets.all(15), padding: EdgeInsets.all(15),
height: 400, height: 400,
@@ -145,12 +153,11 @@ class _KidWalletScreenState extends State<KidWalletScreen> {
} }
Widget activityList(BuildContext context){ Widget activityList(BuildContext context){
final theme = context.read<ThemePort>(); final theme = context.read<ThemePort>();
final activity = [{"date": "10/05", "payments": [1, 2, 3]}, {"date": "10/04", "payments":[1, 2]}, {"date": "10/02", "payments":[1, 2, 3, 4]}]; final activity = [{"date": "10/05", "payments": [1, 2, 3]}, {"date": "10/04", "payments":[1, 2]}, {"date": "10/02", "payments":[1, 2, 3, 4]}];
return Align(alignment: Alignment.topLeft, child: SingleChildScrollView(child: Column( return Expanded(child: ListView(
children: List<Widget>.generate(activity.length, (int index) { children: List<Widget>.generate(activity.length, (int index) {
return Column( return Column(
spacing: 20, spacing: 20,
@@ -159,13 +166,16 @@ class _KidWalletScreenState extends State<KidWalletScreen> {
Column( Column(
spacing: 15, spacing: 15,
children: List<Widget>.generate((activity[index]["payments"] as List<Object>).length, (int i) { children: List<Widget>.generate((activity[index]["payments"] as List<Object>).length, (int i) {
var a = (activity[index]["payments"] as List<Object>)[i]; //var a = (activity[index]["payments"] as List<Object>)[i];
return Row( return Row(
spacing: 5, spacing: 7,
children: [ children: [
Container( Container(
padding: EdgeInsets.all(9), padding: EdgeInsets.all(9),
color: theme.getColorFor(ThemeCode.button_primary).withAlpha(0x1A), decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_tertiary),
borderRadius: BorderRadius.all(Radius.circular(16))
),
child: Icon(Icons.local_pizza_outlined, color: theme.getColorFor(ThemeCode.button_primary)), child: Icon(Icons.local_pizza_outlined, color: theme.getColorFor(ThemeCode.button_primary)),
), ),
Column( Column(
@@ -175,13 +185,18 @@ class _KidWalletScreenState extends State<KidWalletScreen> {
], ],
), ),
Spacer(), Spacer(),
Text("5.1€", style: TextStyle(fontWeight: FontWeight.bold)) MoneyText(
text: "5.1€",
size: 20,
resize: true,
color: theme.getColorFor(ThemeCode.text_primary)
)
], ],
); );
})) }))
], ],
); );
}) })
))); ));
} }
} }

View File

@@ -0,0 +1,109 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/core/wallet_management_layout.dart';
import '../../domain/entities/kid.dart';
import '../../domain/ports/theme_port.dart';
class LimitsScreen extends StatefulWidget{
final Kid kid;
const LimitsScreen({super.key, required this.kid});
@override
State<LimitsScreen> createState() => LimitsScreenState();
}
class LimitsScreenState extends State<LimitsScreen>{
late List dailyLimits;
late List timeLimits;
late List conditions;
late List blocks;
@override
void initState() {
super.initState();
dailyLimits = [{"title": "Diario L-V", "limit": "5", "edit": false},
{"title": "Fines de semana", "limit": "8", "edit": false},
{"title": "Semanal", "limit": "30", "edit": false},
{"title": "Mensual", "limit": "1200", "edit": false},];
timeLimits = [{"title": "Lunes a Viernes", "start": "08:00", "end": "20:00", "edit": false},
{"title": "Fines de semana", "start": "10:00", "end": "21:00", "edit": false},
{"title": "Vacaciones", "start": "09:00", "end": "22:00", "edit": false}];
conditions = [{"title": "Alimentación", "limit": "10", "edit": false},
{"title": "Transporte", "limit": "10", "edit": false},
{"title": "Alimentación", "limit": "10", "edit": false},];
blocks = [];
}
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return WalletManagementLayout(
kid: widget.kid,
children: [
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary),
),
child: Column(
spacing: 10,
children: [
Text("Pon límite de gastos", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Libertad para ellos, tranquilidad para ti"),
...List<Widget>.generate(dailyLimits.length, (int index) {
return Column(children: [
Row(children: [
Text("${dailyLimits[index]["title"]}: ${dailyLimits[index]["limit"]}"),
Spacer(),
TextButton(onPressed: ()=>{setState(() {
dailyLimits[index]["edit"] = !dailyLimits[index]["edit"];
})}, child: Text("Editar"))
]),
if (dailyLimits[index]["edit"]) TextField()
]);
}),
],
),
),
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary),
),
child: Column(
spacing: 10,
children: [
Text("Horarios permitidos", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Controla cuándo pueden comprar"),
...List<Widget>.generate(timeLimits.length, (int index) {
return Column(children: [
Row(children: [
Text("${timeLimits[index]["title"]}: ${timeLimits[index]["start"]} - ${timeLimits[index]["end"]}"),
Spacer(),
TextButton(onPressed: ()=>{setState(() {
timeLimits[index]["edit"] = !timeLimits[index]["edit"];
})}, child: Text("Editar"))
]),
if (timeLimits[index]["edit"]) TextField()
]);
}),
],
),
)
],
footer: Column(children: [
FilledButton(onPressed: ()=>{}, child: SizedBox(
width: double.infinity,
child: Center(child: Text("Guardar límites")),
))
]),
);
}
}

View File

@@ -55,5 +55,4 @@ class LinkPhoneScreen extends StatelessWidget{
) )
); );
} }
} }

View File

@@ -0,0 +1,55 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/add_kid_screen.dart';
import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
import '../../../domain/ports/theme_port.dart';
class AccountCreatedKidScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
final model = "SaveWatch Plus 2";
final id = "1106652524";
final fullName = "Carlos Pérez Cruz";
return Scaffold(
backgroundColor: theme.getColorFor(ThemeCode.background_primary),
body: Container(
margin: EdgeInsets.all(30),
child: Center(
child: Column(
spacing: 20,
children: [
Spacer(flex: 2),
Icon(Icons.check, color: theme.getColorFor(ThemeCode.background_primary), size: 50),
Text("Cuenta creada", style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
Text.rich(TextSpan(text:"Has creado la cuenta para:\n",
children: [TextSpan(text: fullName, style: TextStyle(fontWeight: FontWeight.bold))])),
Text("Reloj: $model"),
Text("ID del reloj: $id"),
Text("Ya puedes darle su primera paga paa que empiece a disfrutarla en su reloj",
style: TextStyle(fontWeight: FontWeight.bold)),
Spacer(flex: 6),
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(topRight: Radius.circular(20), topLeft: Radius.circular(20))
),
child: Column(children: [
Expanded(child: FilledButton(onPressed: ()=>{
Navigator.pushReplacement(context, MaterialPageRoute(builder: (_)=>AddKidScreen()))
}, child: Text("Dale su primera paga"))),
TextButton(onPressed: ()=>{}, child: Text("Añadir otro peque"))
])
)
],
),
)
)
);
}
}

View File

@@ -0,0 +1,168 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
import '../../../domain/ports/theme_port.dart';
class CreateProfileScreen extends StatefulWidget {
const CreateProfileScreen({super.key});
@override
State<CreateProfileScreen> createState() => CreateProfileScreenState();
}
class CreateProfileScreenState extends State<CreateProfileScreen>{
int currentStep = 0;
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return Scaffold(
backgroundColor: theme.getColorFor(ThemeCode.background_primary),
body: Container(
margin: EdgeInsets.all(30),
child: Center(
child: Column(
spacing: 10,
children: [
Stepper(
type: StepperType.horizontal,
currentStep: currentStep,
onStepCancel: () => currentStep == 0
? null
: setState(() {
currentStep -= 1;
}),
controlsBuilder: (BuildContext context, ControlsDetails controls) {
return FilledButton(
style: ButtonStyle(backgroundColor: WidgetStatePropertyAll<Color>(theme.getColorFor(ThemeCode.button_primary))),
onPressed: controls.onStepContinue,
child: const Text('Continuar'),
);
},
steps: [
Step(
state: currentStep > 0 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 0,
stepStyle: currentStep >= 0 ? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.transparent, boxShadow: BoxShadow(spreadRadius: 5), indexStyle: TextStyle(color: Colors.transparent)),
title: Text(""),
content: Column(
spacing: 10,
children: [
Text("Crea su perfil", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
Text("Necesitamos estos datos para crear su cuenta y gestionar sus pagas y gastos"),
Text("Comienza con un peque; luego podrás agregar más", style: TextStyle(fontWeight: FontWeight.bold)),
TextField(decoration: InputDecoration(labelText: "Nombre", hintText: "Nombre", border: OutlineInputBorder())),
TextField(decoration: InputDecoration(labelText: "Apellidos", hintText: "Apellidos", border: OutlineInputBorder())),
Row(
spacing: 10,
children: [
Expanded( child: TextField(
decoration: InputDecoration(label: Text("Fecha de nacimiento"), hintText: "DD", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
Expanded( child: TextField(
decoration: InputDecoration(hintText: "MM", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
Expanded( child: TextField(
decoration: InputDecoration(hintText: "AAAA", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
],
),
TextField(decoration: InputDecoration(labelText: "Dirección completa", hintText: "Nombre de la calle", border: OutlineInputBorder())),
TextButton(onPressed: ()=>{}, child: Text("Cambiar dirección", style: TextStyle(fontWeight: FontWeight.bold),))
],
)
),
Step(
state: currentStep > 1 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 1,
stepStyle: currentStep >= 1 ? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.transparent, boxShadow: BoxShadow(spreadRadius: 5), indexStyle: TextStyle(color: Colors.transparent)),
title: Text(""),
content: Column(
spacing: 10,
children: [
Text("Vincula su correa y su reloj", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
SvgPicture.asset("assets/images/ui/formulario.svg"),
Row(
spacing: 10,
children: [
Text("1"),
Column(children: [
Text("Escanea la correa"),
Text("El peque podrá realizar pagos")
])
],
),
Row(
spacing: 10,
children: [
Text("2"),
Column(children: [
Text("Escanea el reloj"),
Text("Visualizarás los gastos que se hagan")
])
],
)
],
)
),
Step(
state: currentStep > 2 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 2,
stepStyle: currentStep >= 2 ? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.transparent, boxShadow: BoxShadow(spreadRadius: 5), indexStyle: TextStyle(color: Colors.transparent)),
title: Text(""),
content: Column(
spacing: 10,
children: [
Text("¡Dale su primera paga!", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
Text("Enséñales a gestionar su dinero recargando su reloj"),
TextField(
decoration: InputDecoration(labelText: "Cantidad de dinero de la paga", hintText: "0€", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
]
),
Text("Cantidad mínima: 10€"),
Text("Por seguridad sólo se puede disponer de un máximo de 150€ por wallet"),
Text("Método de ingreso"),
Row(
spacing: 20,
children: [
OutlinedButton(onPressed: ()=>{}, child: SvgPicture.asset("assets/images/ui/visa.svg")),
OutlinedButton(onPressed: ()=>{}, child: SvgPicture.asset("assets/images/ui/paypal.svg")),
OutlinedButton(onPressed: ()=>{}, child: Row(children: [
SvgPicture.asset("assets/images/ui/banco.svg"),
Text("Transferencia")
])),
],
),
Row(
children: [
Icon(Icons.lock_outline),
Text("EL pago en esta app es seguro y cumple la normativa europea. Sólo se usará el dinero que decidas para las huchas de tus hijos.")
],
)
],
)
)
]
)
],
),
),
),
);
}
}

View File

@@ -1,8 +1,9 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sf_app_platform/payments/view/screens/dashboard_screen.dart'; import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
import 'package:sf_app_platform/payments/view/screens/loading_google_screen.dart'; import 'package:sf_app_platform/payments/view/screens/loading_google_screen.dart';
import 'package:sf_app_platform/payments/view/screens/restore_password/restore_password_screen.dart'; import 'package:sf_app_platform/payments/view/screens/restore_password/restore_password_screen.dart';
import 'package:sf_app_platform/payments/view/screens/signup/signup_screen.dart';
class LoginScreen extends StatefulWidget { class LoginScreen extends StatefulWidget {
@@ -87,7 +88,10 @@ class LoginScreenState extends State<LoginScreen>{
], ],
), ),
Text("¿No tienes cuenta?"), Text("¿No tienes cuenta?"),
TextButton(onPressed: ()=>{}, child: Text("Crear una ahora")) TextButton(
onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>SignupScreen())),
child: Text("Crear una ahora")
)
], ],
), ),
), ),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sf_app_platform/payments/view/screens/dashboard_screen.dart'; import 'package:sf_app_platform/payments/view/screens/core/dashboard_screen.dart';
import 'package:sf_app_platform/payments/view/screens/login_screen.dart'; import 'package:sf_app_platform/payments/view/screens/login_screen.dart';
class PhoneCodeScreen extends StatefulWidget { class PhoneCodeScreen extends StatefulWidget {

View File

@@ -0,0 +1,115 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/core/activity_list.dart';
import 'package:sf_app_platform/payments/view/screens/core/deposit_block.dart';
import 'package:sf_app_platform/payments/view/screens/settings_screen.dart';
import '../../domain/ports/theme_port.dart';
import 'core/line_graph.dart';
class ProfileScreen extends StatelessWidget{
const ProfileScreen({super.key});
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
final activity = [
{"type": "goal"},
{"type": "wage", "amount": 5},
{"type": "lock"},
{"type": "lock"}
];
final name = "Juan";
final total = 95.03;
final available = 44.09;
final content = [
Row(
children: [
Text(name, style: TextStyle(
color: theme.getColorFor(ThemeCode.text_secondary),
fontWeight: FontWeight.bold,
fontSize: 30)
),
Spacer(),
TextButton(
onPressed: ()=>Navigator.push(context, MaterialPageRoute(builder: (_)=>SettingsScreen())),
child: Text("Ajustes de la cuenta", style: TextStyle(
color: theme.getColorFor(ThemeCode.text_secondary))
)
)
],
),
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(color: theme.getColorFor(ThemeCode.background_primary), borderRadius: BorderRadius.all(Radius.circular(20))),
child: Column(
spacing: 5,
children: [
Row(
children: [
Text("Wallet", style: TextStyle(fontWeight: FontWeight.bold),),
Spacer(),
Text("$total")
]
),
Stack(
children: [
LinearProgressIndicator(
value: available/total,
minHeight: 70,
borderRadius: BorderRadius.all(Radius.circular(16)),
),
FractionallySizedBox(
widthFactor: available/total,
child: Container(
padding: EdgeInsets.symmetric(vertical: 20),
child: Center(
child: Text(
"$available",
style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary), fontSize: 20)
)
)
)
),
],
),
Center(child: Text("Disponible"))
],
),
),
SizedBox(
height: 200,
child: LineGraph()
),
DepositBlock(max: 150-total),
Row(),
ActivityList(activity: activity, edit: false)
];
return Scaffold(
backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
body: Stack(children: [
DecoratedBox(
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(30)),
color: Color(0xFF4B4B4B)
),
child: SizedBox(width: double.infinity, height: 200),
),
Column(children: [Expanded (child: Container(
margin: EdgeInsets.fromLTRB(20, 20, 20, 0),
child: ListView.separated(
itemBuilder: (BuildContext context, int index) {return content[index];},
separatorBuilder: (BuildContext context, int index) {
return Divider(color: Colors.transparent, height: 20);
},
itemCount: content.length
)
))]),
])
);
}
}

View File

@@ -0,0 +1,231 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../domain/ports/theme_port.dart';
class SettingsScreen extends StatefulWidget{
@override
State<SettingsScreen> createState() => SettingsScreenState();
}
class SettingsScreenState extends State<SettingsScreen>{
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
final name = "Juan";
final balance = 50;
final fullName = "Juan Pérez Cruz";
final birthDate = "08/03/1976";
final relation = "Padre";
final address = "Calle Gran Vía 30 6º, 28013";
final country = "España";
final nationality = "Español";
final email = "juanpcruz@gmail.com";
final phone = "123456789";
final content = [
Center(child: Column(children: [
Text("Ajustes de la cuenta", style: TextStyle(fontSize: 30, color: theme.getColorFor(ThemeCode.text_secondary))),
Text("Saldo: $balance", style: TextStyle(color: theme.getColorFor(ThemeCode.text_secondary))),
])),
Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary)
),
child: Column(children: [
Row(
spacing: 10,
children: [
Text(name, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Editar wallet")),
Icon(Icons.attach_money),
],
),
Text(relation)
]),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary)
),
child: Column(children: [
Row(
spacing: 10,
children: [
Text("Datos personales", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Editar"))
],
),
Text.rich(TextSpan(text:"Nombre: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: fullName, style: TextStyle(fontWeight: FontWeight.normal))
])),
Text.rich(TextSpan(text:"Fecha de nacimiento: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: birthDate, style: TextStyle(fontWeight: FontWeight.normal))
])),
Text.rich(TextSpan(text:"Familiar: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: relation, style: TextStyle(fontWeight: FontWeight.normal))
]))
]),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary)
),
child: Column(children: [
Row(
spacing: 10,
children: [
Text("Dirección", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Editar"))
],
),
Text.rich(TextSpan(text:"Dirección: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: address, style: TextStyle(fontWeight: FontWeight.normal))
])),
Text.rich(TextSpan(text:"País: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: country, style: TextStyle(fontWeight: FontWeight.normal))
])),
Text.rich(TextSpan(text:"Nacionalidad: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: nationality, style: TextStyle(fontWeight: FontWeight.normal))
]))
]),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary)
),
child: Column(children: [
Row(
spacing: 10,
children: [
Text("Usuario", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Editar"))
],
),
Text.rich(TextSpan(text:"Correo: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: email, style: TextStyle(fontWeight: FontWeight.normal))
])),
Text.rich(TextSpan(text:"Teléfono: ", style: TextStyle(fontWeight: FontWeight.bold),
children: [TextSpan(text: phone, style: TextStyle(fontWeight: FontWeight.normal))
]))
]),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary)
),
child: Row(
spacing: 10,
children: [
Text("Cambio de contraseña", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Editar"))
],
),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary)
),
child: Column(
children: [
Row(
spacing: 10,
children: [
Text("Método de pago", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Editar"))
],
),
Text("Puedes cambiar el método de pago en cualquier momento")
]
)
),
Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_tertiary)
),
child: Column(
children: [
Row(
spacing: 10,
children: [
Text("Plan anual", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Spacer(),
TextButton(onPressed: ()=>{}, child: Text("Cambiar Plan"))
],
),
Text("Sin permanencia"),
Text("Llamadas y datos ilimitados"),
Text("2 meses gratis"),
]
)
),
TextButton(onPressed: ()=>{}, child: Text("Contáctanos")),
TextButton(onPressed: ()=>{}, child: Text("Preguntas frecuentes")),
];
return Scaffold(
backgroundColor: theme.getColorFor(ThemeCode.background_secondary),
body: Stack(children: [
DecoratedBox(
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(30)),
color: Color(0xFF4B4B4B)
),
child: SizedBox(width: double.infinity, height: 200),
),
Column(children: [Expanded (child: Container(
margin: EdgeInsets.all(20),
child: ListView.separated(
itemBuilder: (BuildContext context, int index) {return content[index];},
separatorBuilder: (BuildContext context, int index) {
return Divider(color: Colors.transparent, height: 20);
},
itemCount: content.length))),
Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)),
color: theme.getColorFor(ThemeCode.background_primary),
),
child: Column(
children: [
FilledButton(onPressed: ()=>{}, child: Container(
width: double.infinity,
padding: EdgeInsets.all(20),
child: Center(child: Text("Guardar cambios"))
)),
TextButton(onPressed: ()=>Navigator.pop(context), child: Text("Cancelar"))
],
),
),
])
])
);
}
}

View File

@@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
class SignupAddressScreen extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Column(
spacing: 30,
children: [
Text("Domicilio"),
Text("Tu dirección", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
Text("Tu dirección nos ayuda a verificar y mantener la seguridad de tu cuenta"),
TextField(decoration: InputDecoration(hintText: "Dirección completa", border: OutlineInputBorder())),
TextField(decoration: InputDecoration(hintText: "Ciudad", border: OutlineInputBorder())),
DropdownMenu(
dropdownMenuEntries: List<DropdownMenuEntry>.generate(3, (int index) {
return DropdownMenuEntry(value: "España", label: "España");
}),
hintText: "País",
width: double.infinity,
),
TextField(decoration: InputDecoration(hintText: "Nacionalidad", border: OutlineInputBorder()))
],
);
}
}

View File

@@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class SignupPersonalScreen extends StatelessWidget{
const SignupPersonalScreen({super.key});
@override
Widget build(BuildContext context) {
return Column(
spacing: 30,
children: [
Text("Datos personales"),
Text("Identifícate", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
Text("Nos aseguraremos de que la cuenta está a nombre del adulto responsable"),
TextField(decoration: InputDecoration(labelText: "Nombre", hintText: "Nombre", border: OutlineInputBorder())),
TextField(decoration: InputDecoration(labelText: "Apellidos", hintText: "Apellidos", border: OutlineInputBorder())),
Row(
children: [
Expanded( child: TextField(
decoration: InputDecoration(label: Text("Fecha de nacimiento"), hintText: "DD", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
Expanded( child: TextField(
decoration: InputDecoration(hintText: "MM", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
Expanded( child: TextField(
decoration: InputDecoration(hintText: "AAAA", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
],
),
DropdownMenu(
width: double.infinity,
label: Text("¿Qué familiar eres?"),
dropdownMenuEntries: [
DropdownMenuEntry(label: "Padre", value: "Padre"),
DropdownMenuEntry(label: "Madre", value: "Madre"),
DropdownMenuEntry(label: "Tutor", value: "Tutor"),
],
),
],
);
}
}

View File

@@ -0,0 +1,100 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/account_created_screen.dart';
import 'package:sf_app_platform/payments/view/screens/signup/signup_address_screen.dart';
import 'package:sf_app_platform/payments/view/screens/signup/signup_personal_screen.dart';
import 'package:sf_app_platform/payments/view/screens/signup/signup_user_screen.dart';
import '../../../domain/ports/theme_port.dart';
class SignupScreen extends StatefulWidget {
const SignupScreen({super.key});
@override
_SignupScreenState createState() => _SignupScreenState();
}
class _SignupScreenState extends State<SignupScreen> {
int currentStep = 0;
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return MaterialApp(
home: Scaffold(
body: Center(child: Container(
color: theme.getColorFor(ThemeCode.background_primary),
padding: const EdgeInsets.all(20),
child: SizedBox(
child: Stepper(
controlsBuilder: (BuildContext context, ControlsDetails controls) {
return Row(
children: <Widget>[
Expanded(child: OutlinedButton(
onPressed: controls.onStepCancel,
child: const Text('Atrás'),
)),
Expanded(child: FilledButton(
style: ButtonStyle(
backgroundColor: WidgetStatePropertyAll<Color>(theme.getColorFor(ThemeCode.button_secondary))
),
onPressed: controls.onStepContinue,
child: const Text('Siguiente'),
)),
],
);
},
type: StepperType.horizontal,
currentStep: currentStep,
onStepCancel: () => currentStep == 0
? null
: setState(() {
currentStep -= 1;
}),
onStepContinue: () {
bool isLastStep = (currentStep == getSteps().length - 1);
if (isLastStep) {
Navigator.pushReplacement(context, MaterialPageRoute(
builder: (_) => AccountCreatedScreen(),
));
} else {
setState(() {
currentStep += 1;
});
}
},
steps: getSteps(),
)
)),
)),
);
}
List<Step> getSteps() {
return <Step>[
Step(
state: currentStep > 0 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 0,
stepStyle: currentStep >= 0? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.transparent, boxShadow: BoxShadow(spreadRadius: 5), indexStyle: TextStyle(color: Colors.transparent)),
title: const Text(""),
content: SignupPersonalScreen()
),
Step(
state: currentStep > 1 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 1,
stepStyle: currentStep >= 1? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.white, boxShadow: BoxShadow(spreadRadius: 1), indexStyle: TextStyle(color: Colors.transparent)),
title: const Text(""),
content: SignupAddressScreen()
),
Step(
state: currentStep > 2 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 2,
stepStyle: currentStep >= 2? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.white, boxShadow: BoxShadow(spreadRadius: 1), indexStyle: TextStyle(color: Colors.transparent)),
title: const Text(""),
content: SignupUserScreen()
),
];
}
}

View File

@@ -0,0 +1,77 @@
import 'package:flutter/material.dart';
class SignupUserScreen extends StatefulWidget{
const SignupUserScreen({super.key});
@override
State<SignupUserScreen> createState() => SignupUserScreenState();
}
class SignupUserScreenState extends State<SignupUserScreen>{
bool passwordVisible=false;
@override
Widget build(BuildContext context) {
return Column(
spacing: 30,
children: [
Text("Usuario y contacto"),
Text("Crea tu usuario", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30)),
Text("Con tu email y tu número podremos mantenerte siempre informado"),
TextField(decoration: InputDecoration(labelText: "Correo electrónico", hintText: "Correo electrónico", border: OutlineInputBorder())),
Row(children: [
DropdownMenu(
initialSelection: "es",
dropdownMenuEntries: List<DropdownMenuEntry>.generate(3, (int index){
return DropdownMenuEntry(labelWidget: Icon(Icons.outlined_flag), label: "es", value: "es");
})
),
Expanded(child: TextField(
decoration: InputDecoration(labelText: "Teléfono móvil", hintText: "Teléfono", border: OutlineInputBorder()),
keyboardType: TextInputType.number)
)
]),
TextField(
obscureText: passwordVisible,
enableSuggestions: false,
autocorrect: false,
decoration: InputDecoration(
labelText: "Contraseña",
hintText: "********",
border: OutlineInputBorder(),
suffixIcon: IconButton(
icon: Icon(passwordVisible
? Icons.visibility
: Icons.visibility_off),
onPressed: () {
setState(() {
passwordVisible = !passwordVisible;
});
},
),
)
),
TextField(obscureText: passwordVisible,
enableSuggestions: false,
autocorrect: false,
decoration: InputDecoration(
labelText: "Repetir contraseña",
hintText: "*******",
border: OutlineInputBorder(),
suffixIcon: IconButton(
icon: Icon(passwordVisible
? Icons.visibility
: Icons.visibility_off),
onPressed: () {
setState(() {
passwordVisible = !passwordVisible;
});
},
),
)
),
],
);
}
}

View File

@@ -1,208 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:sf_app_platform/payments/view/screens/account_created_screen.dart';
class SignupScreen extends StatefulWidget {
const SignupScreen({super.key});
@override
_SignupScreenState createState() => _SignupScreenState();
}
class _SignupScreenState extends State<SignupScreen> {
int currentStep = 0;
bool passwordVisible=false;
@override
void initState(){
super.initState();
passwordVisible=true;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(child: Container(
padding: const EdgeInsets.all(20),
child: SizedBox(
child: Stepper(
controlsBuilder: (BuildContext context, ControlsDetails controls) {
return Row(
children: <Widget>[
OutlinedButton(
onPressed: controls.onStepCancel,
child: const Text('Atrás'),
),
FilledButton(
onPressed: controls.onStepContinue,
child: const Text('Siguiente'),
),
],
);
},
type: StepperType.horizontal,
currentStep: currentStep,
onStepCancel: () => currentStep == 0
? null
: setState(() {
currentStep -= 1;
}),
onStepContinue: () {
bool isLastStep = (currentStep == getSteps().length - 1);
if (isLastStep) {
Navigator.pushReplacement(context, MaterialPageRoute(
builder: (_) => AccountCreatedScreen(),
));
} else {
setState(() {
currentStep += 1;
});
}
},
steps: getSteps(),
)
)),
)),
);
}
List<Step> getSteps() {
return <Step>[
Step(
state: currentStep > 0 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 0,
stepStyle: currentStep >= 0? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.transparent, boxShadow: BoxShadow(spreadRadius: 5), indexStyle: TextStyle(color: Colors.transparent)),
title: const Text(""),
content: Column(
spacing: 30,
children: [
Text("Datos personales"),
Text("Identifícate"),
Text("Nos aseguraremos de que la cuenta está a nombre del adulto responsable"),
TextField(decoration: InputDecoration(labelText: "Nombre", hintText: "Nombre", border: OutlineInputBorder())),
TextField(decoration: InputDecoration(labelText: "Apellidos", hintText: "Apellidos", border: OutlineInputBorder())),
Row(
children: [
Expanded( child: TextField(
decoration: InputDecoration(label: Text("Fecha de nacimiento"), hintText: "DD", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
Expanded( child: TextField(
decoration: InputDecoration(hintText: "MM", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
Expanded( child: TextField(
decoration: InputDecoration(hintText: "AAAA", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)),
],
),
DropdownMenu(
width: double.infinity,
label: Text("¿Qué familiar eres?"),
dropdownMenuEntries: [
DropdownMenuEntry(label: "Padre", value: "Padre"),
DropdownMenuEntry(label: "Madre", value: "Madre"),
DropdownMenuEntry(label: "Tutor", value: "Tutor"),
],
),
],
),
),
Step(
state: currentStep > 1 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 1,
stepStyle: currentStep >= 1? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.white, boxShadow: BoxShadow(spreadRadius: 1), indexStyle: TextStyle(color: Colors.transparent)),
title: const Text(""),
content: Column(
spacing: 30,
children: [
Text("Domicilio"),
Text("Tu dirección", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Tu dirección nos ayuda a verificar y mantener la seguridad de tu cuenta"),
TextField(decoration: InputDecoration(hintText: "Dirección completa", border: OutlineInputBorder())),
TextField(decoration: InputDecoration(hintText: "Ciudad", border: OutlineInputBorder())),
DropdownMenu(
dropdownMenuEntries: List<DropdownMenuEntry>.generate(3, (int index) {
return DropdownMenuEntry(value: "España", label: "España");
}),
hintText: "País",
width: double.infinity,
),
TextField(decoration: InputDecoration(hintText: "Nacionalidad", border: OutlineInputBorder()))
],
),
),
Step(
state: currentStep > 2 ? StepState.complete : StepState.indexed,
isActive: currentStep >= 2,
stepStyle: currentStep >= 2? StepStyle(connectorThickness: 0, color: Color(0xFF329e95), indexStyle: TextStyle(color: Colors.transparent)) : StepStyle(connectorThickness: 0, color: Colors.white, boxShadow: BoxShadow(spreadRadius: 1), indexStyle: TextStyle(color: Colors.transparent)),
title: const Text(""),
content: Column(
spacing: 30,
children: [
Text("Usuario y contacto"),
Text("Crea tu usuario", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Con tu email y tu número podremos mantenerte siempre informado"),
TextField(decoration: InputDecoration(labelText: "Correo electrónico", hintText: "Correo electrónico", border: OutlineInputBorder())),
Row(children: [
DropdownMenu(
initialSelection: "es",
dropdownMenuEntries: List<DropdownMenuEntry>.generate(3, (int index){
return DropdownMenuEntry(labelWidget: Icon(Icons.outlined_flag), label: "es", value: "es");
})
),
Expanded(child: TextField(
decoration: InputDecoration(labelText: "Teléfono móvil", hintText: "Teléfono", border: OutlineInputBorder()),
keyboardType: TextInputType.number)
)
],
),
TextField(
obscureText: passwordVisible,
enableSuggestions: false,
autocorrect: false,
decoration: InputDecoration(
labelText: "Contraseña",
hintText: "********",
border: OutlineInputBorder(),
suffixIcon: IconButton(
icon: Icon(passwordVisible
? Icons.visibility
: Icons.visibility_off),
onPressed: () {
setState(() {
passwordVisible = !passwordVisible;
});
},
),
)
),
TextField(obscureText: passwordVisible,
enableSuggestions: false,
autocorrect: false,
decoration: InputDecoration(
labelText: "Repetir contraseña",
hintText: "*******",
border: OutlineInputBorder(),
suffixIcon: IconButton(
icon: Icon(passwordVisible
? Icons.visibility
: Icons.visibility_off),
onPressed: () {
setState(() {
passwordVisible = !passwordVisible;
});
},
),
)
),
],
),
),
];
}
}

View File

@@ -0,0 +1,197 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:sf_app_platform/payments/view/screens/core/wallet_management_layout.dart';
import '../../domain/entities/kid.dart';
import '../../domain/ports/theme_port.dart';
class WageScreen extends StatefulWidget{
final Kid kid;
const WageScreen({super.key, required this.kid});
@override
State<WageScreen> createState() => WageScreenState();
}
class WageScreenState extends State<WageScreen>{
String frequence = "weekly";
var conditions = {"weeklyLimits": false, "incidences": false, "holidays": false};
@override
Widget build(BuildContext context) {
ThemePort theme = context.read<ThemePort>();
return WalletManagementLayout(
kid: widget.kid,
children: [
Container(
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
spacing: 10,
children: [
Text("Paga automática", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
TextField(
decoration: InputDecoration(labelText: "Cantidad", hintText: "0€", border: OutlineInputBorder()),
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
]
),
Text("Saldo total disponible después: 30 €")
],
),
),
Container(
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
spacing: 10,
children: [
Text("Frecuencia", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Cuándo se envía el dinero"),
CheckboxListTile(
title: Text('Semanal'),
controlAffinity: ListTileControlAffinity.leading,
value: frequence=="weekly",
onChanged: (value) {
setState(() {
frequence="weekly";
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Cada dos semanas'),
controlAffinity: ListTileControlAffinity.leading,
value: frequence=="biweekly",
onChanged: (value) {
setState(() {
frequence="biweekly";
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Mensual'),
controlAffinity: ListTileControlAffinity.leading,
value: frequence=="monthly",
onChanged: (value) {
setState(() {
frequence="monthly";
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
Container(width: double.infinity, child: DropdownMenu(
label: Text("Día de la semana"),
initialSelection: "Domingo",
dropdownMenuEntries: List<DropdownMenuEntry>.generate(7, (int index){
final days = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"];
return DropdownMenuEntry(value: days[index], label: days[index]);
})
)),
DropdownMenu(
label: Text("Hora del día"),
initialSelection: 9,
dropdownMenuEntries: List<DropdownMenuEntry>.generate(24, (int index){
return DropdownMenuEntry(value: index, label: "$index:00");
})
),
TextField(
minLines: 3,
maxLines: 3,
maxLength: 150,
decoration: InputDecoration(
labelText: "Escribir mensaje a ${widget.kid.name} del motivo del ingreso",
hintText: "Escribe tu mensaje",
border: OutlineInputBorder(),
)
),
Align(
alignment: Alignment.topLeft,
child: Text("Máximo 150 caracteres"),
)
],
),
),
Container(
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
padding: EdgeInsets.all(10),
child: Column(
spacing: 10,
children: [
Text("Condiciones", style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20)),
Text("Este dato aparecerá en el reloj del peque"),
CheckboxListTile(
title: Text('Sólo si cumple límites semanales'),
controlAffinity: ListTileControlAffinity.leading,
value: conditions["weeklyLimits"],
onChanged: (value) {
setState(() {
conditions["weeklyLimits"] = !conditions["weeklyLimits"]!;
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Sólo si no ha tenido incidencias'),
controlAffinity: ListTileControlAffinity.leading,
value: conditions["incidences"],
onChanged: (value) {
setState(() {
conditions["incidences"] = !conditions["incidences"]!;
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
CheckboxListTile(
title: Text('Pausar durante vacaciones'),
controlAffinity: ListTileControlAffinity.leading,
value: conditions["holidays"],
onChanged: (value) {
setState(() {
conditions["holidays"] = !conditions["holidays"]!;
});
},
activeColor: theme.getColorFor(ThemeCode.button_primary),
),
],
),
),
],
footer: Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
color: theme.getColorFor(ThemeCode.background_primary),
borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20))
),
child: Column(
spacing: 10,
children: [
FilledButton(onPressed: ()=>{}, child: Container(
width:double.infinity,
padding: EdgeInsets.all(20),
child: Center(child: Text("Activar paga automática"))
)),
TextButton(onPressed: ()=>{}, child: Text("Cancelar"))
],
),
)
);
}
}

View File

@@ -1,63 +0,0 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../domain/ports/theme_port.dart';
class WalletManagementScreen extends StatefulWidget {
final List<Widget> children;
const WalletManagementScreen({super.key, required this.children});
@override
State<WalletManagementScreen> createState() => WalletManagementScreenState();
}
class WalletManagementScreenState extends State<WalletManagementScreen>{
@override
Widget build(BuildContext context) {
final theme = context.read<ThemePort>();
return Scaffold(
body: Stack(children: [
DecoratedBox(
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(30)),
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: theme.getCardColorFor(0)
),
),
child: SizedBox(width: double.infinity, height: 300),
),
Container(
margin: EdgeInsets.all(30),
child: Column(
spacing: 15,
children: [
Row(
spacing: 10,
children: [
IconButton(onPressed: ()=>Navigator.pop(context), icon: Icon(Icons.arrow_back_ios_outlined)),
Center(child: Column(children: [
//Text(widget.kid.name),
Text.rich(TextSpan(
text: "Sueldo disponible: ",
children: [
]))
]))
],
),
...widget.children
],
)
)
])
);
}
}

View File

@@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:sf_app_platform/payments/view/screens/link_phone_screen.dart'; import 'package:sf_app_platform/payments/view/screens/link_phone_screen.dart';
import 'package:sf_app_platform/payments/view/screens/signup_screen.dart'; import 'package:sf_app_platform/payments/view/screens/signup/signup_screen.dart';
import 'dashboard_screen.dart'; import 'core/dashboard_screen.dart';
class WelcomeScreen extends StatelessWidget { class WelcomeScreen extends StatelessWidget {
const WelcomeScreen({super.key}); const WelcomeScreen({super.key});

View File

@@ -1,6 +1,22 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
_fe_analyzer_shared:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f
url: "https://pub.dev"
source: hosted
version: "85.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d"
url: "https://pub.dev"
source: hosted
version: "7.7.1"
args: args:
dependency: transitive dependency: transitive
description: description:
@@ -33,6 +49,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.0"
cli_config:
dependency: transitive
description:
name: cli_config
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
url: "https://pub.dev"
source: hosted
version: "0.2.0"
clock: clock:
dependency: transitive dependency: transitive
description: description:
@@ -49,6 +73,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.19.1" version: "1.19.1"
convert:
dependency: transitive
description:
name: convert
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.dev"
source: hosted
version: "3.1.2"
coverage:
dependency: transitive
description:
name: coverage
sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d"
url: "https://pub.dev"
source: hosted
version: "1.15.0"
crypto:
dependency: transitive
description:
name: crypto
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.dev"
source: hosted
version: "3.0.7"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -57,6 +105,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.8" version: "1.0.8"
equatable:
dependency: transitive
description:
name: equatable
sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7"
url: "https://pub.dev"
source: hosted
version: "2.0.7"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@@ -65,6 +121,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.3" version: "1.3.3"
file:
dependency: transitive
description:
name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
version: "7.0.1"
fl_chart:
dependency: "direct main"
description:
name: fl_chart
sha256: "7ca9a40f4eb85949190e54087be8b4d6ac09dc4c54238d782a34cf1f7c011de9"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -78,6 +150,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.0" version: "5.0.0"
flutter_riverpod:
dependency: "direct main"
description:
name: flutter_riverpod
sha256: "9e2d6907f12cc7d23a846847615941bddee8709bf2bfd274acdf5e80bcf22fde"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
flutter_svg: flutter_svg:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -91,6 +171,22 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
frontend_server_client:
dependency: transitive
description:
name: frontend_server_client
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
url: "https://pub.dev"
source: hosted
version: "4.0.0"
glob:
dependency: transitive
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.dev"
source: hosted
version: "2.1.3"
http: http:
dependency: transitive dependency: transitive
description: description:
@@ -99,6 +195,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.5.0" version: "1.5.0"
http_multi_server:
dependency: transitive
description:
name: http_multi_server
sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
url: "https://pub.dev"
source: hosted
version: "3.2.2"
http_parser: http_parser:
dependency: transitive dependency: transitive
description: description:
@@ -107,6 +211,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.2" version: "4.1.2"
io:
dependency: transitive
description:
name: io
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
url: "https://pub.dev"
source: hosted
version: "1.0.5"
js:
dependency: transitive
description:
name: js
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
url: "https://pub.dev"
source: hosted
version: "0.7.2"
leak_tracker: leak_tracker:
dependency: transitive dependency: transitive
description: description:
@@ -139,6 +259,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.1.1" version: "5.1.1"
logging:
dependency: transitive
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
version: "1.3.0"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@@ -163,6 +291,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.16.0" version: "1.16.0"
mime:
dependency: transitive
description:
name: mime
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
nested: nested:
dependency: transitive dependency: transitive
description: description:
@@ -171,6 +307,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.0.0"
node_preamble:
dependency: transitive
description:
name: node_preamble
sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
package_config:
dependency: transitive
description:
name: package_config
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.dev"
source: hosted
version: "2.2.0"
path: path:
dependency: transitive dependency: transitive
description: description:
@@ -195,6 +347,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.1" version: "7.0.1"
pool:
dependency: transitive
description:
name: pool
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
url: "https://pub.dev"
source: hosted
version: "1.5.2"
provider: provider:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -203,11 +363,75 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.5+1" version: "6.1.5+1"
pub_semver:
dependency: transitive
description:
name: pub_semver
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
riverpod:
dependency: transitive
description:
name: riverpod
sha256: c406de02bff19d920b832bddfb8283548bfa05ce41c59afba57ce643e116aa59
url: "https://pub.dev"
source: hosted
version: "3.0.3"
shelf:
dependency: transitive
description:
name: shelf
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
url: "https://pub.dev"
source: hosted
version: "1.4.2"
shelf_packages_handler:
dependency: transitive
description:
name: shelf_packages_handler
sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
shelf_static:
dependency: transitive
description:
name: shelf_static
sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
url: "https://pub.dev"
source: hosted
version: "1.1.3"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
source_map_stack_trace:
dependency: transitive
description:
name: source_map_stack_trace
sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
url: "https://pub.dev"
source: hosted
version: "2.1.2"
source_maps:
dependency: transitive
description:
name: source_maps
sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812"
url: "https://pub.dev"
source: hosted
version: "0.10.13"
source_span: source_span:
dependency: transitive dependency: transitive
description: description:
@@ -224,6 +448,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.1" version: "1.12.1"
state_notifier:
dependency: transitive
description:
name: state_notifier
sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb
url: "https://pub.dev"
source: hosted
version: "1.0.0"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
@@ -248,6 +480,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.2" version: "1.2.2"
test:
dependency: transitive
description:
name: test
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
url: "https://pub.dev"
source: hosted
version: "1.26.2"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
@@ -256,6 +496,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.6" version: "0.7.6"
test_core:
dependency: transitive
description:
name: test_core
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
url: "https://pub.dev"
source: hosted
version: "0.6.11"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
@@ -304,6 +552,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "15.0.2" version: "15.0.2"
watcher:
dependency: transitive
description:
name: watcher
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
url: "https://pub.dev"
source: hosted
version: "1.1.4"
web: web:
dependency: transitive dependency: transitive
description: description:
@@ -312,6 +568,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.1"
web_socket:
dependency: transitive
description:
name: web_socket
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
version: "3.0.3"
webkit_inspection_protocol:
dependency: transitive
description:
name: webkit_inspection_protocol
sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
xml: xml:
dependency: transitive dependency: transitive
description: description:
@@ -320,6 +600,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.6.1" version: "6.6.1"
yaml:
dependency: transitive
description:
name: yaml
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
version: "3.1.3"
sdks: sdks:
dart: ">=3.9.2 <4.0.0" dart: ">=3.9.2 <4.0.0"
flutter: ">=3.29.0" flutter: ">=3.29.0"

View File

@@ -31,6 +31,8 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
provider: ^6.1.5+1 provider: ^6.1.5+1
flutter_riverpod: ^3.0.3
fl_chart: ^1.1.1
# The following adds the Cupertino Icons font to your application. # The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons. # Use with the CupertinoIcons class for iOS style icons.