updated designe of aboute diet page
5
assets/icons/apple.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M3.75953 0.030592C3.41669 0.0833364 3.00938 0.200547 2.93613 0.267943C2.75738 0.437898 2.74273 0.613714 2.87459 1.0386C3.06213 1.64516 3.44013 2.3074 3.8152 2.69713C4.15511 3.05169 4.53898 3.29197 4.9961 3.43555C5.3448 3.54397 5.64662 3.58207 6.15648 3.58207L6.61067 3.57914L6.57551 3.80477C6.555 3.92784 6.53741 4.07435 6.53448 4.13003C6.53155 4.30291 6.50811 4.31756 6.32644 4.25017C6.23853 4.215 6.03927 4.10951 5.88104 4.01575C5.56164 3.82235 5.19536 3.67877 4.8701 3.6143C4.55656 3.55569 3.96758 3.56156 3.65697 3.63188C2.64896 3.85458 1.8197 4.63403 1.36844 5.78562C1.30983 5.92921 1.25416 6.08451 1.24537 6.12846L1.22485 6.21051H6.94472H12.6646L12.6441 6.12846C12.562 5.78855 12.2485 5.16148 11.9877 4.81278C11.3723 3.98937 10.5724 3.57328 9.59074 3.57328C9.01348 3.57328 8.51534 3.70514 8.08459 3.97472C7.84724 4.12123 7.53663 4.27654 7.48096 4.27654C7.36668 4.27654 7.53663 3.50002 7.74468 3.07806C7.94101 2.67369 8.24283 2.45685 8.66185 2.41582C8.99883 2.38359 9.14242 2.2488 9.14242 1.96163C9.14242 1.77996 9.08381 1.66861 8.94902 1.57777C8.84939 1.5133 8.50948 1.50158 8.25748 1.55433C8.05822 1.59535 7.70659 1.75652 7.55715 1.87666C7.49268 1.92647 7.437 1.96456 7.43114 1.9587C7.42821 1.95284 7.35496 1.82098 7.26998 1.66861C7.059 1.2906 6.87146 1.04446 6.60188 0.786599C6.21509 0.420316 5.87518 0.229849 5.36238 0.0921273C5.11917 0.030592 5.01075 0.0188708 4.5126 0.0100799C4.19907 0.0071497 3.85916 0.0159407 3.75953 0.030592Z" fill="#323F4B"/>
|
||||||
|
<path d="M13.0983 5.01498C13.1715 5.16442 13.2653 5.36954 13.3092 5.46917C13.3796 5.63912 13.3942 5.65378 13.4792 5.65378C13.5876 5.65378 13.822 5.76805 13.907 5.86475C14.0301 5.99955 14.0945 6.1695 14.0945 6.36583C14.0945 6.52113 14.0799 6.57388 13.9979 6.70867C13.8806 6.90793 13.6726 7.04272 13.444 7.06909C13.3591 7.08081 10.3614 7.0896 6.78355 7.0896C0.460051 7.0896 0.275444 7.09253 0.193397 7.14528C0.149443 7.17458 0.0849775 7.23905 0.0556749 7.283C0.00293026 7.36505 0 7.45002 0 8.99427C0 10.5385 0.00293026 10.6235 0.0556749 10.7055C0.181676 10.896 0.199258 10.8989 1.0461 10.8989H1.8109L1.82262 10.1869C1.83141 9.57153 1.83727 9.46604 1.88416 9.38107C1.95448 9.25213 2.09514 9.17009 2.25044 9.17009C2.40867 9.17009 2.53174 9.24041 2.61672 9.37521C2.67826 9.4719 2.68119 9.51879 2.68998 10.1869L2.7017 10.8989H3.13538H3.57199L3.58078 10.0404C3.58957 9.28437 3.5251 10.9839 3.57199 10.8989C3.64231 10.77 3.85329 10.8771 4.0086 10.8771C4.17269 10.8771 4.37195 10.7641 4.45692 10.8989C5.13966 10.7245 4.43934 9.20232 4.44813 10.0404L4.45692 10.8989H4.89353H5.32721L5.33893 10.1869C5.34772 9.57153 5.35358 9.46604 5.40047 9.38107C5.55284 9.09976 5.96894 9.09976 6.13889 9.38107C6.19164 9.46897 6.1975 9.5393 6.20629 10.1869L6.21801 10.8989H6.65169H7.0883L7.09709 10.0404C7.10588 9.28437 7.11174 9.17302 7.15862 9.08804C7.22895 8.95911 7.3696 8.87706 7.52491 8.87706C7.689 8.87706 7.80328 8.9386 7.88826 9.07339C7.95566 9.18181 7.95566 9.20232 7.96445 10.0404L7.97324 10.8989H8.40985H8.84352L8.85524 10.1869C8.86404 9.57153 8.8699 9.46604 8.91678 9.38107C9.06915 9.09976 9.48525 9.09976 9.65521 9.38107C9.70795 9.46897 9.71381 9.5393 9.7226 10.1869L9.73432 10.8989H10.168H10.6046L10.6134 10.0404C10.6222 9.28437 10.6281 9.17302 10.6749 9.08804C10.7453 8.95911 10.8859 8.87706 11.0412 8.87706C11.2053 8.87706 11.3196 8.9386 11.4046 9.07339C11.472 9.18181 11.472 9.20232 11.4808 10.0404L11.4895 10.8989H11.9262H12.3598L12.3716 10.1869C12.3803 9.57153 12.3862 9.46604 12.4331 9.38107C12.5855 9.09976 13.0016 9.09976 13.1715 9.38107C13.2243 9.46897 13.2301 9.5393 13.2389 10.1898L13.2506 10.8989H13.447C14.1121 10.8989 14.7099 10.4535 14.9355 9.78837C15 9.59791 15 9.58032 15 7.82217C15 6.06401 15 6.04643 14.9355 5.85596C14.7568 5.32852 14.3612 4.95051 13.8338 4.79228C13.7253 4.76005 13.5612 4.74539 13.318 4.74539H12.9635L13.0983 5.01498Z" fill="#323F4B"/>
|
||||||
|
<path d="M1.72885 11.7986C1.72885 11.8366 2.07462 12.4725 2.24165 12.745C2.65188 13.4043 3.22914 14.0695 3.70678 14.4299C4.00566 14.6526 4.4159 14.8665 4.70307 14.9457C5.00781 15.0277 5.49131 15.016 5.74624 14.9164C5.96308 14.8343 6.29713 14.597 6.43778 14.427C6.74839 14.0549 7.14104 14.0549 7.45165 14.427C7.5923 14.597 7.92635 14.8343 8.14319 14.9164C8.39812 15.016 8.88162 15.0277 9.18636 14.9457C10.1651 14.6761 11.2024 13.6388 11.9906 12.1414C12.0844 11.9627 12.1606 11.8073 12.1606 11.7986C12.1606 11.7868 9.81344 11.778 6.94471 11.778C4.07599 11.778 1.72885 11.7868 1.72885 11.7986Z" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.4 KiB |
3
assets/icons/arrow.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M0.112069 1.36405C0.170773 1.46011 0.298852 1.58285 0.394912 1.64689C0.571021 1.75362 0.640399 1.75362 4.78164 1.75362L8.99226 1.75362L4.819 5.92689C0.282843 10.4737 0.474961 10.2549 0.565685 10.7619C0.613715 11.0287 0.971272 11.3863 1.2381 11.4343C1.74509 11.525 1.52628 11.7172 6.06778 7.181L10.2464 3.00774L10.2464 7.21836C10.2464 11.3703 10.2464 11.429 10.3584 11.6051C10.5185 11.8719 10.7694 12 11.1109 12C11.4578 12 11.7033 11.8612 11.8687 11.5731C11.9808 11.3863 11.9808 11.3222 11.9968 6.14035C12.0075 2.42604 11.9915 0.830383 11.9488 0.670283C11.8741 0.392777 11.6072 0.125945 11.3297 0.0512323C11.1696 0.00853825 9.57396 -0.00747108 5.85965 0.00320244C0.677755 0.0192118 0.613715 0.0192118 0.426931 0.131282C0.133416 0.302054 -9.53674e-07 0.542204 -9.53674e-07 0.894423C-9.53674e-07 1.10255 0.0320196 1.24664 0.112069 1.36405Z" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 967 B |
3
assets/icons/arrow_down.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="10" height="8" viewBox="0 0 10 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M5.86603 7.5C5.48113 8.16667 4.51887 8.16667 4.13397 7.5L0.669874 1.5C0.284974 0.833333 0.7661 -8.94676e-07 1.5359 -8.27378e-07L8.4641 -2.21695e-07C9.2339 -1.54397e-07 9.71503 0.833333 9.33013 1.5L5.86603 7.5Z" fill="#2F80ED"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 338 B |
19
assets/icons/bread.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_1574_14899)">
|
||||||
|
<path d="M6.82645 14.3414H15.4118C15.771 14.3414 16.0622 14.0503 16.0622 13.691V5.99357C16.0622 5.73479 16.1608 5.4836 16.3443 5.3011C16.6648 4.98235 16.8427 4.63029 16.8427 4.26013C16.8427 2.82329 14.1637 1.65851 10.8589 1.65851H6.82645V14.3414Z" fill="#B78B7A"/>
|
||||||
|
<path d="M14.6655 8.18281C12.3572 10.4912 9.43435 11.6564 6.82645 11.5632V14.3414H15.4118C15.771 14.3414 16.0622 14.0502 16.0622 13.691V6.52216C15.6566 7.10019 15.1908 7.6575 14.6655 8.18281Z" fill="#AA7A63"/>
|
||||||
|
<path d="M12.8102 4.26013C12.8102 2.82329 10.1312 1.65851 6.8264 1.65851C3.52165 1.65851 0.842682 2.82329 0.842682 4.26013C0.842682 4.63029 1.02059 4.98232 1.34112 5.3011C1.52462 5.4836 1.62315 5.73479 1.62315 5.99357V13.691C1.62315 14.0503 1.91434 14.3414 2.27356 14.3414H11.3792C11.7385 14.3414 12.0297 14.0503 12.0297 13.691V5.99357C12.0297 5.73479 12.1282 5.4836 12.3117 5.3011C12.6322 4.98235 12.8102 4.63029 12.8102 4.26013Z" fill="#E7A561"/>
|
||||||
|
<path d="M12.8102 4.26013C12.8102 2.82329 10.1312 1.65851 6.8264 1.65851C3.52165 1.65851 0.842682 2.82329 0.842682 4.26013C0.842682 4.63029 1.02059 4.98232 1.34112 5.3011C1.52462 5.4836 1.62315 5.73479 1.62315 5.99357V13.691C1.62315 14.0503 1.91434 14.3414 2.27356 14.3414H11.3792C11.7385 14.3414 12.0297 14.0503 12.0297 13.691V5.99357C12.0297 5.73479 12.1282 5.4836 12.3117 5.3011C12.6322 4.98235 12.8102 4.63029 12.8102 4.26013Z" fill="#E7A561"/>
|
||||||
|
<path d="M10.763 10.0179C8.06148 12.7195 4.51817 13.8556 1.62317 13.2407V13.691C1.62317 14.0502 1.91436 14.3414 2.27358 14.3414H11.3793C11.7385 14.3414 12.0297 14.0502 12.0297 13.691V8.53925C11.6554 9.05234 11.233 9.5479 10.763 10.0179Z" fill="#E49542"/>
|
||||||
|
<path d="M2.6638 13.3008V5.99356C2.6638 5.45672 2.44918 4.93538 2.07493 4.56322C1.93364 4.42272 1.8833 4.31453 1.8833 4.26013C1.8833 4.13113 2.15877 3.74503 3.01018 3.37485C3.99783 2.94544 5.38877 2.69916 6.82636 2.69916C8.26396 2.69916 9.65493 2.94544 10.6426 3.37485C11.494 3.74503 11.7695 4.13113 11.7695 4.26013C11.7695 4.3145 11.7191 4.42272 11.5778 4.56322C11.2036 4.93538 10.989 5.45672 10.989 5.99356V13.3008H2.6638V13.3008Z" fill="#F1D0A5"/>
|
||||||
|
<path d="M10.763 10.0179C8.92241 11.8585 6.69113 12.9721 4.54031 13.3007H10.989V9.78534C10.9148 9.86343 10.8398 9.94112 10.763 10.0179Z" fill="#F1B986"/>
|
||||||
|
<path d="M3.86703 6.11382C4.04664 6.11382 4.19225 5.96821 4.19225 5.7886C4.19225 5.60898 4.04664 5.46338 3.86703 5.46338C3.68741 5.46338 3.54181 5.60898 3.54181 5.7886C3.54181 5.96821 3.68741 6.11382 3.86703 6.11382Z" fill="#F1B986"/>
|
||||||
|
<path d="M3.86703 4.81297C4.04664 4.81297 4.19225 4.66737 4.19225 4.48776C4.19225 4.30814 4.04664 4.16254 3.86703 4.16254C3.68741 4.16254 3.54181 4.30814 3.54181 4.48776C3.54181 4.66737 3.68741 4.81297 3.86703 4.81297Z" fill="#F1B986"/>
|
||||||
|
<path d="M5.16784 4.81297C5.34745 4.81297 5.49306 4.66737 5.49306 4.48776C5.49306 4.30814 5.34745 4.16254 5.16784 4.16254C4.98823 4.16254 4.84262 4.30814 4.84262 4.48776C4.84262 4.66737 4.98823 4.81297 5.16784 4.81297Z" fill="#F1B986"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_1574_14899">
|
||||||
|
<rect width="16" height="16" fill="white" transform="translate(0.842682)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
18
assets/icons/broccoli.svg
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<svg width="15" height="16" viewBox="0 0 15 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M12.5615 8.30753L12.5521 8.31691C12.2052 8.74816 11.9052 9.16066 11.6396 9.55128L11.6427 9.55441C11.9833 9.76066 12.424 9.77316 12.7833 9.54191C13.0583 9.36691 13.2271 9.08878 13.2708 8.79191L13.274 8.78253C12.9927 8.71066 12.7427 8.53566 12.5615 8.30753Z" fill="#3B601C"/>
|
||||||
|
<path d="M9.60208 7.63877L8.87082 9.21064C8.30207 9.48877 7.56457 9.16377 7.31457 8.79502L7.20207 8.16065C7.3677 8.18565 7.53645 8.19815 7.70833 8.19815C8.3927 8.20127 9.03958 7.99815 9.60208 7.63877Z" fill="#4E7A25"/>
|
||||||
|
<path d="M5.05833 6.95442C5.30208 7.22005 5.56771 7.4513 5.85208 7.6388C5.71146 8.5763 4.51771 9.0513 3.78645 8.43255C3.62083 8.11067 3.50833 7.8888 3.50208 7.8763C3.89271 7.86692 4.28333 7.73255 4.61458 7.46692C4.79896 7.31692 4.94896 7.14505 5.05833 6.95442Z" fill="#3B601C"/>
|
||||||
|
<path d="M1.97395 7.86692L2.99895 9.8388L2.98645 9.84505C2.31145 10.1575 1.51145 9.86067 1.19895 9.18567C1.0052 8.76379 1.04895 8.29192 1.27083 7.92317L1.2927 7.83567C1.33333 7.84504 1.37708 7.85442 1.42083 7.86379C1.60833 7.89504 1.79583 7.89504 1.97395 7.86692Z" fill="#3B601C"/>
|
||||||
|
<path d="M1.51144 8.87317C1.36144 8.54505 1.35207 8.18567 1.46144 7.87004C1.44582 7.86692 1.43332 7.86692 1.41769 7.86379C1.37394 7.85754 1.33332 7.84817 1.28957 7.83567L1.26769 7.92317C1.04269 8.29192 1.00207 8.76379 1.19582 9.18567C1.50519 9.86067 2.30519 10.1575 2.98332 9.84505L2.99895 9.8388L2.89894 9.64817C2.33332 9.71692 1.76457 9.42005 1.51144 8.87317Z" fill="#4D841E"/>
|
||||||
|
<path d="M5.38644 7.27627C5.18332 8.0169 4.30207 8.41377 3.62082 8.10127C3.66769 8.1919 3.72394 8.30127 3.78957 8.4294C4.51769 9.04815 5.71144 8.57627 5.85519 7.63565C5.69269 7.53252 5.53644 7.41065 5.38644 7.27627Z" fill="#315112"/>
|
||||||
|
<path d="M7.20207 8.17316L7.31145 8.79503C7.55832 9.16378 8.29895 9.48879 8.8677 9.21066L9.14582 8.61066C8.43957 8.84816 7.57395 8.54816 7.20207 8.17316Z" fill="#2C4415"/>
|
||||||
|
<path d="M12.7833 9.10443C12.499 9.28568 12.1646 9.31693 11.8677 9.22005C11.7896 9.33255 11.7115 9.44191 11.6396 9.55128L11.6427 9.55441C11.9833 9.76066 12.424 9.77316 12.7833 9.54191C13.0583 9.36691 13.2271 9.08878 13.2708 8.79191L13.274 8.78253C13.2271 8.77003 13.1802 8.75443 13.1365 8.7388C13.0521 8.88255 12.9333 9.01068 12.7833 9.10443Z" fill="#4D841E"/>
|
||||||
|
<path d="M9.78959 7.20128L7.78646 11.4763L7.20207 8.16065C6.72082 8.08565 6.26144 7.90752 5.85519 7.63565L6.10834 10.6825C6.11146 11.3794 5.45209 11.5732 5.12396 10.9857L3.26459 7.40128L1.95834 7.83878L5.49271 14.6513C5.69271 15.1607 6.18334 15.4982 6.73646 15.4982H8.17709C8.76146 15.4982 9.26146 15.1107 9.45209 14.5575C9.96771 13.07 10.3896 11.5575 11.7021 9.61065L12.8365 7.9669L9.78959 7.20128Z" fill="#CADD78"/>
|
||||||
|
<path d="M8.69271 15.2638H7.25209C6.70209 15.2638 6.20834 14.9263 6.00834 14.4169L2.51771 7.67939L1.97396 7.86377L5.49271 14.6513C5.69271 15.1607 6.18334 15.4982 6.73646 15.4982H8.17709C8.46146 15.4982 8.73959 15.4044 8.96771 15.2325C8.87709 15.2544 8.78646 15.2638 8.69271 15.2638Z" fill="#ADBC55"/>
|
||||||
|
<path d="M6.41773 7.93875C6.22085 7.85438 6.03335 7.75438 5.85523 7.63875L6.10835 10.6856C6.11148 10.8231 6.08023 10.9606 6.01773 11.0825C6.31773 11.1669 6.6271 10.9263 6.6271 10.4481L6.41773 7.93875Z" fill="#ADBC55"/>
|
||||||
|
<path d="M9.8521 7.01691L7.7896 11.4825L7.88022 11.9919C7.91772 12.2857 8.0396 12.3419 8.1771 12.2982C8.29272 12.2638 8.38022 12.17 8.42397 12.0575L10.6302 7.02003L9.8521 7.01691Z" fill="#ADBC55"/>
|
||||||
|
<path d="M2.18956 4.87627C1.58644 5.52627 1.52081 6.52315 2.08019 7.22002C2.22394 7.39815 2.39269 7.53877 2.58019 7.64502C2.24269 7.84502 1.83644 7.93252 1.42081 7.86065C0.492689 7.7044 -0.132311 6.82315 0.023939 5.89502C0.180189 4.9669 1.06144 4.3419 1.98956 4.49815L2.03331 4.48565C2.07081 4.62315 2.12081 4.75127 2.18956 4.87627Z" fill="#3B601C"/>
|
||||||
|
<path d="M12.3896 7.9263C11.9833 8.09192 11.5364 8.1138 11.1208 7.99817C10.7802 7.90442 10.4614 7.7138 10.2052 7.43567C10.1583 7.38567 10.1177 7.33567 10.0771 7.28255L10.0708 7.28567C9.41144 7.86067 8.59269 8.2013 7.70832 8.2013C6.66457 8.2013 5.76769 7.72942 5.06144 6.95442C4.94894 7.14505 4.80207 7.31692 4.62082 7.4638C4.01769 7.94817 3.20519 7.99817 2.58332 7.64505C2.39582 7.5388 2.22707 7.39817 2.08332 7.22005C1.52707 6.5263 1.58957 5.52942 2.19269 4.8763C2.12394 4.7513 2.07394 4.62317 2.03644 4.4888C1.66769 3.10755 3.03019 1.38567 4.85207 2.3763C5.88019 -0.376827 9.68332 0.216923 10.5333 2.1388C11.8427 1.49505 13.2458 2.82005 12.7552 3.85442H12.8021C13.8896 3.85442 14.7708 4.73567 14.7708 5.82005C14.7708 6.1763 14.6739 6.5138 14.5083 6.8013C14.7146 7.02005 14.8427 7.32005 14.8427 7.64505C14.8427 8.3263 14.2896 8.87942 13.6083 8.87942C13.0458 8.87942 12.5396 8.43567 12.3896 7.9263Z" fill="#4D841E"/>
|
||||||
|
<path d="M13.6052 7.62941C13.0458 7.62941 12.5396 7.18566 12.3865 6.67316C11.9802 6.83879 11.5333 6.86066 11.1177 6.74504C10.7771 6.65129 10.4583 6.46379 10.2021 6.18254C10.1552 6.13254 10.1146 6.08254 10.074 6.02941L10.0677 6.03254C9.40835 6.60754 8.5896 6.94816 7.70522 6.94816C6.66147 6.94816 5.7646 6.47629 5.05835 5.70129C4.94585 5.89191 4.79897 6.06379 4.61772 6.21066C4.0146 6.69504 3.2021 6.74504 2.58022 6.39191C2.39272 6.28566 2.22085 6.14504 2.08022 5.96691C1.96147 5.82004 1.87397 5.66066 1.80835 5.49191C1.59897 6.06379 1.6771 6.71691 2.08022 7.21691C2.22397 7.39504 2.39272 7.53566 2.58022 7.64191C3.2021 7.99191 4.0146 7.94504 4.61772 7.46066C4.79897 7.31379 4.94897 7.14191 5.05835 6.95129C5.7646 7.72316 6.66147 8.19816 7.70522 8.19816C8.5896 8.19816 9.40835 7.85754 10.0677 7.28254L10.074 7.27941C10.1146 7.33254 10.1552 7.38254 10.2021 7.43254C10.4583 7.71066 10.7771 7.89816 11.1177 7.99504C11.5333 8.11066 11.9802 8.08879 12.3865 7.92316C12.5365 8.43566 13.0427 8.87941 13.6052 8.87941C14.2865 8.87941 14.8396 8.32629 14.8396 7.64504C14.8396 7.41691 14.7771 7.20441 14.6708 7.02004C14.4552 7.38566 14.0615 7.62941 13.6052 7.62941Z" fill="#67A829"/>
|
||||||
|
<path d="M2.10206 7.24504C2.08331 7.24192 2.06456 7.23879 2.04581 7.23567C1.11769 7.07942 0.492689 6.19817 0.648939 5.27004C0.683314 5.06379 0.755189 4.87317 0.852064 4.70442C0.427064 4.94817 0.111439 5.37627 0.023939 5.89502C-0.132311 6.82315 0.492689 7.7044 1.42081 7.86065C1.83644 7.9294 2.24269 7.84502 2.58019 7.64502C2.40206 7.54502 2.23956 7.41067 2.10206 7.24504Z" fill="#4D841E"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.1 KiB |
5
assets/icons/close_button.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10Z" fill="#F1F2F6"/>
|
||||||
|
<path d="M6.81333 13.1867C6.61778 12.9911 6.61778 12.6741 6.81333 12.4785L12.4785 6.81334C12.674 6.61779 12.9911 6.61779 13.1866 6.81334C13.3822 7.00889 13.3822 7.32593 13.1866 7.52148L7.52147 13.1867C7.32592 13.3822 7.00888 13.3822 6.81333 13.1867Z" fill="#6D6F71"/>
|
||||||
|
<path d="M6.81337 6.81333C7.00892 6.61778 7.32597 6.61778 7.52152 6.81333L13.1867 12.4785C13.3822 12.6741 13.3822 12.9911 13.1867 13.1867C12.9911 13.3822 12.6741 13.3822 12.4785 13.1867L6.81337 7.52148C6.61783 7.32593 6.61783 7.00888 6.81337 6.81333Z" fill="#6D6F71"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 781 B |
16
assets/icons/cocktail.svg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_1574_14935)">
|
||||||
|
<path d="M4.18765 3.27015C4.94556 3.27015 5.55996 2.71719 5.55996 2.03507C5.55996 1.35295 4.94556 0.799988 4.18765 0.799988C3.42974 0.799988 2.81534 1.35295 2.81534 2.03507C2.81534 2.71719 3.42974 3.27015 4.18765 3.27015Z" fill="#E94444"/>
|
||||||
|
<path d="M5.55978 2.03514C5.55978 2.7172 4.94565 3.27019 4.1875 3.27019C3.73962 3.27019 3.34203 3.07706 3.09134 2.77868C3.21862 2.81375 3.35362 2.8326 3.49346 2.8326C4.25131 2.8326 4.86575 2.2796 4.86575 1.59754C4.86575 1.31829 4.76265 1.06078 4.58931 0.854004C5.15121 1.0083 5.55978 1.47894 5.55978 2.03514Z" fill="#D83131"/>
|
||||||
|
<path d="M14.8096 2.46436C14.9574 2.28771 14.8173 2.03503 14.5717 2.03503H9.55871H4.54578C4.30006 2.03503 4.16003 2.28768 4.30784 2.46436L8.6405 7.64324C8.86915 7.91653 8.99281 8.24937 8.99281 8.59148V12.7312C8.99281 13.5982 8.32743 14.3588 7.38534 14.5396C7.35875 14.5447 7.33168 14.5496 7.30421 14.5543C7.30421 14.5543 6.58684 14.6466 6.45021 15.2H9.55875H12.6673C12.5306 14.6466 11.8133 14.5543 11.8133 14.5543C11.7889 14.5502 11.7648 14.5458 11.7411 14.5413C10.7952 14.3619 10.1247 13.6013 10.1247 12.7313V8.59148C10.1247 8.24937 10.2483 7.91653 10.477 7.64324L14.8096 2.46436Z" fill="#DFF6FD"/>
|
||||||
|
<path d="M14.8096 2.46436C14.9574 2.28771 14.8173 2.03503 14.5717 2.03503H9.55871H4.54578C4.30006 2.03503 4.16003 2.28768 4.30784 2.46436L4.81918 3.0756L5.0299 3.21451L8.69006 7.57864C8.80271 7.7133 8.89778 7.84245 8.95721 8.00001C8.96956 8.03272 8.92325 8.15036 8.93318 8.18375C8.97253 8.31594 8.99281 8.45296 8.99281 8.59153V12.7313C8.99281 13.5982 8.32743 14.3588 7.38534 14.5397C7.35875 14.5448 7.33168 14.5497 7.30421 14.5544C7.30421 14.5544 6.58684 14.6466 6.45021 15.2H9.55875H12.6673C12.5306 14.6466 11.8133 14.5544 11.8133 14.5544C11.7889 14.5502 11.7648 14.5459 11.7411 14.5414C10.7952 14.362 10.1247 13.6013 10.1247 12.7313V8.59148C10.1247 8.4396 10.1491 8.28953 10.1962 8.14569C10.2039 8.12218 10.1908 8.06529 10.1997 8.04214C10.2591 7.88784 10.3466 7.72885 10.4571 7.59672L14.0006 3.37856L14.1086 3.30223L14.8096 2.46436Z" fill="#C8EFFE"/>
|
||||||
|
<path d="M10.1246 8.59143V12.7311C10.1246 13.6012 10.795 14.3619 11.7411 14.5412C11.7646 14.5457 11.7888 14.5502 11.8132 14.5544C11.8132 14.5544 12.5307 14.6466 12.6672 15.1999H11.9342C11.8656 14.9221 11.6171 14.8627 11.3178 14.8082C10.7293 14.7009 10.2689 14.4458 9.91039 13.9859C9.62708 13.6224 9.47833 13.1742 9.47833 12.7312C9.47833 12.729 9.47833 8.59146 9.47833 8.59146C9.47833 8.24926 9.60193 7.9166 9.83058 7.64325L14.0766 2.46448C14.2243 2.28783 14.0845 2.03516 13.8388 2.03516H14.5716C14.8173 2.03516 14.9574 2.28783 14.8096 2.46448L10.4769 7.64325C10.2482 7.91657 10.1246 8.24923 10.1246 8.59143Z" fill="#99E6FC"/>
|
||||||
|
<path d="M14.1371 3.2681L10.4769 7.64317C10.3409 7.80573 10.2418 7.98961 10.1843 8.18376L8.93312 8.18387L8.9199 8.14193C8.86111 7.96331 8.76665 7.79411 8.64049 7.64317L4.8194 3.07564C6.0613 3.00862 7.32846 3.28003 8.53868 3.53149C10.0708 3.8497 11.7441 4.1319 13.2408 3.66773C13.5632 3.56774 13.8641 3.43176 14.1371 3.2681Z" fill="#E94444"/>
|
||||||
|
<path d="M14.1372 3.26807C14.1372 3.26807 10.4839 7.63487 10.4769 7.64325C10.3992 7.73606 10.3317 7.83754 10.2791 7.94413C10.2468 8.00944 10.2191 8.07733 10.1961 8.1457C10.192 8.15816 10.1878 8.17113 10.1843 8.18384H9.53806C9.59574 7.98969 9.69462 7.8059 9.83059 7.64328L13.0436 3.72439C13.1099 3.7069 13.1755 3.68811 13.2408 3.66772C13.5634 3.5676 13.8641 3.43173 14.1372 3.26807Z" fill="#D83131"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_1574_14935">
|
||||||
|
<rect width="16" height="14.4" fill="white" transform="translate(0.842712 0.799988)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
3
assets/icons/comment2.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M4.77307 12.5C4.60196 12.5 4.43787 12.4368 4.31688 12.3243C4.1959 12.2117 4.12793 12.0591 4.12793 11.9V10.1H1.54736C1.20516 10.1 0.87697 9.97357 0.634995 9.74853C0.39302 9.52349 0.25708 9.21826 0.25708 8.9V1.7C0.25708 1.38174 0.39302 1.07652 0.634995 0.851472C0.87697 0.626428 1.20516 0.5 1.54736 0.5H11.8696C12.2118 0.5 12.54 0.626428 12.782 0.851472C13.024 1.07652 13.1599 1.38174 13.1599 1.7V8.9C13.1599 9.21826 13.024 9.52349 12.782 9.74853C12.54 9.97357 12.2118 10.1 11.8696 10.1H7.93426L5.54724 12.326C5.41821 12.44 5.25692 12.5 5.09564 12.5H4.77307ZM5.41821 8.9V10.748L7.40524 8.9H11.8696L5.41821 10.748L1.54736 8.9H5.41821Z" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 762 B |
4
assets/icons/complain.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="10" cy="10" r="9" stroke="#FF3B3B" stroke-width="2"/>
|
||||||
|
<path d="M9.8775 15.71C9.45914 15.71 9.12 15.3709 9.12 14.9525V8.9075C9.12 8.48914 9.45914 8.15 9.8775 8.15C10.2959 8.15 10.635 8.48914 10.635 8.9075V14.9525C10.635 15.3709 10.2959 15.71 9.8775 15.71ZM9.7875 6.575C9.35258 6.575 9 6.22242 9 5.7875C9 5.35258 9.35258 5 9.7875 5H9.9675C10.4024 5 10.755 5.35258 10.755 5.7875C10.755 6.22242 10.4024 6.575 9.9675 6.575H9.7875Z" fill="#FF3B3B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 559 B |
11
assets/icons/copy2.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_1604_12624)">
|
||||||
|
<path d="M6.18359 0.101561C5.94141 0.246092 5.82031 0.472654 5.82031 0.781248C5.82031 1.09375 5.94141 1.32031 6.1875 1.46484L6.35547 1.5625H10.7656C13.5156 1.5625 15.2773 1.57812 15.4492 1.60156C15.8203 1.65625 16.0938 1.79297 16.3516 2.04687C16.6055 2.30469 16.7422 2.57812 16.7969 2.94922C16.8203 3.125 16.8359 5.39453 16.8359 9.19531V15.168L16.9336 15.3359C17.0781 15.582 17.3047 15.7031 17.6172 15.7031C17.9297 15.7031 18.1562 15.582 18.3008 15.3359L18.3984 15.168V8.91797C18.3984 1.8125 18.4258 2.41797 18.0586 1.67969C17.9023 1.36328 17.8164 1.25 17.4805 0.914061C17.1406 0.574217 17.0391 0.496092 16.7188 0.335936C15.9844 -0.0234394 16.375 -1.90735e-06 11.0391 -1.90735e-06H6.34766L6.18359 0.101561Z" fill="#2F80ED"/>
|
||||||
|
<path d="M3.90622 3.24218C2.80466 3.52734 1.91794 4.41796 1.6406 5.52343C1.56247 5.82421 1.56247 5.97265 1.56247 11.582C1.56247 18.1211 1.53513 17.582 1.90231 18.3203C2.05856 18.6367 2.1445 18.7461 2.48044 19.082C2.81638 19.418 2.92575 19.5039 3.24216 19.6602C3.96481 20.0195 3.65232 20 8.41794 20C13.1836 20 12.8711 20.0195 13.5937 19.6602C13.9101 19.5039 14.0195 19.418 14.3554 19.082C14.6914 18.7461 14.7773 18.6367 14.9336 18.3203C15.3008 17.582 15.2734 18.1211 15.2734 11.582C15.2734 5.97265 15.2734 5.82421 15.1953 5.52343C14.9765 4.64843 14.3711 3.89062 13.5742 3.49609C12.8711 3.14453 13.1758 3.16406 8.40232 3.16796C4.37888 3.16796 4.18747 3.17187 3.90622 3.24218ZM12.3242 4.76562C12.6953 4.82031 12.9687 4.95703 13.2265 5.21093C13.4804 5.46875 13.6172 5.74218 13.6718 6.11328C13.7226 6.48437 13.7226 16.6797 13.6718 17.0508C13.6172 17.4219 13.4804 17.6953 13.2265 17.9531C12.9687 18.207 12.6953 18.3437 12.3242 18.3984C11.957 18.4492 4.87888 18.4492 4.51169 18.3984C4.1406 18.3437 3.86716 18.207 3.60935 17.9531C3.35544 17.6953 3.21872 17.4219 3.16403 17.0508C3.11325 16.6797 3.11325 6.48437 3.16403 6.11328C3.21872 5.74218 3.35544 5.46875 3.60935 5.21093C3.85935 4.96484 4.14841 4.8164 4.47653 4.76953C4.80856 4.72265 11.9883 4.71875 12.3242 4.76562Z" fill="#2F80ED"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_1604_12624">
|
||||||
|
<rect width="20" height="20" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
3
assets/icons/eye.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="18" height="13" viewBox="0 0 18 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M6.51046 6.5C6.51046 7.0467 6.75055 7.57102 7.17791 7.95759C7.60528 8.34417 8.18491 8.56135 8.7893 8.56135C9.39368 8.56135 9.97332 8.34417 10.4007 7.95759C10.828 7.57102 11.0681 7.0467 11.0681 6.5C11.0681 5.9533 10.828 5.42898 10.4007 5.04241C9.97332 4.65583 9.39368 4.43865 8.7893 4.43865C8.18491 4.43865 7.60528 4.65583 7.17791 5.04241C6.75055 5.42898 6.51046 5.9533 6.51046 6.5ZM17.6239 6.02515C15.695 2.34969 12.7793 0.5 8.87068 0.5C4.96003 0.5 2.04637 2.34969 0.117493 6.02699C0.0401252 6.17518 0 6.33704 0 6.50092C0 6.6648 0.0401252 6.82666 0.117493 6.97485C2.04637 10.6503 4.96206 12.5 8.87068 12.5C12.7813 12.5 15.695 10.6503 17.6239 6.97301C17.7805 6.67485 17.7805 6.32883 17.6239 6.02515ZM8.7893 9.73926C6.81159 9.73926 5.20826 8.28896 5.20826 6.5C5.20826 4.71104 6.81159 3.26074 8.7893 3.26074C10.767 3.26074 12.3703 4.71104 12.3703 6.5C12.3703 8.28896 10.767 9.73926 8.7893 9.73926Z" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
3
assets/icons/heart.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="13" viewBox="0 0 16 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M8.1666 2.34416C5.71116 -1.16017 0.741455 0.748876 0.741455 4.56627C0.741455 7.43285 7.55465 11.9169 8.1666 12.5C8.78276 11.9169 15.2571 7.43285 15.2571 4.56627C15.2571 0.777817 10.6266 -1.16017 8.1666 2.34416Z" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 341 B |
29
assets/icons/meat2.svg
Normal file
|
After Width: | Height: | Size: 100 KiB |
5
assets/icons/more_button.svg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="10" cy="2" r="2" fill="#323F4B"/>
|
||||||
|
<circle cx="10" cy="10" r="2" fill="#323F4B"/>
|
||||||
|
<circle cx="10" cy="18" r="2" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 243 B |
3
assets/icons/people.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="12" viewBox="0 0 16 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M8.33333 5.96666C8.65556 5.6111 8.90278 5.20555 9.075 4.74999C9.24722 4.29443 9.33333 3.82221 9.33333 3.33332C9.33333 2.84443 9.24722 2.37221 9.075 1.91666C8.90278 1.4611 8.65556 1.05555 8.33333 0.69999C9 0.788879 9.55556 1.08332 10 1.58332C10.4444 2.08332 10.6667 2.66666 10.6667 3.33332C10.6667 3.99999 10.4444 4.58332 10 5.08332C9.55556 5.58332 9 5.87777 8.33333 5.96666ZM12.6667 11.3333C12.2985 11.3333 12 11.0348 12 10.6667V9.33332C12 8.93332 11.9111 8.55277 11.7333 8.19166C11.5556 7.83055 11.3222 7.5111 11.0333 7.23332C11.6 7.43332 12.125 7.69166 12.6083 8.00832C13.0917 8.32499 13.3333 8.76666 13.3333 9.33332V10.6667C13.3333 11.0348 13.0349 11.3333 12.6667 11.3333ZM14 6.66666C13.6318 6.66666 13.3333 6.36818 13.3333 5.99999V5.33332H12.6667C12.2985 5.33332 12 5.03485 12 4.66666C12 4.29847 12.2985 3.99999 12.6667 3.99999H13.3333V3.33332C13.3333 2.96513 13.6318 2.66666 14 2.66666C14.3682 2.66666 14.6667 2.96513 14.6667 3.33332V3.99999H15.3333C15.7015 3.99999 16 4.29847 16 4.66666C16 5.03485 15.7015 5.33332 15.3333 5.33332H14.6667V5.99999C14.6667 6.36818 14.3682 6.66666 14 6.66666ZM5.33333 5.99999C4.6 5.99999 3.97222 5.73888 3.45 5.21666C2.92778 4.69443 2.66667 4.06666 2.66667 3.33332C2.66667 2.59999 2.92778 1.97221 3.45 1.44999C3.97222 0.927768 4.6 0.666656 5.33333 0.666656C6.06667 0.666656 6.69444 0.927768 7.21667 1.44999C7.73889 1.97221 8 2.59999 8 3.33332C8 4.06666 7.73889 4.69443 7.21667 5.21666C6.69444 5.73888 6.06667 5.99999 5.33333 5.99999ZM1 11.3333C0.447717 11.3333 0 10.8856 0 10.3333V9.46666C0 9.08888 0.0972222 8.74166 0.291667 8.42499C0.486111 8.10832 0.744444 7.86666 1.06667 7.69999C1.75556 7.35555 2.45556 7.09721 3.16667 6.92499C3.87778 6.75277 4.6 6.66666 5.33333 6.66666C6.06667 6.66666 6.78889 6.75277 7.5 6.92499C8.21111 7.09721 8.91111 7.35555 9.6 7.69999C9.92222 7.86666 10.1806 8.10832 10.375 8.42499C10.5694 8.74166 10.6667 9.08888 10.6667 9.46666V10.3333C10.6667 10.8856 10.219 11.3333 9.66667 11.3333H1ZM5.33333 4.66666C5.7 4.66666 6.01389 4.5361 6.275 4.27499C6.53611 4.01388 6.66667 3.69999 6.66667 3.33332C6.66667 2.96666 6.53611 2.65277 6.275 2.39166C6.01389 2.13055 5.7 1.99999 5.33333 1.99999C4.96667 1.99999 4.65278 2.13055 4.39167 2.39166C4.13056 2.65277 4 2.96666 4 3.33332C4 3.69999 4.13056 4.01388 4.39167 4.27499C4.65278 4.5361 4.96667 4.66666 5.33333 4.66666ZM1.33333 9.99999H9.33333V9.46666C9.33333 9.34443 9.30278 9.23332 9.24167 9.13332C9.18056 9.03332 9.1 8.95555 9 8.89999C8.4 8.59999 7.79445 8.37499 7.18333 8.22499C6.57222 8.07499 5.95556 7.99999 5.33333 7.99999C4.71111 7.99999 4.09444 8.07499 3.48333 8.22499C2.87222 8.37499 2.26667 8.59999 1.66667 8.89999C1.56667 8.95555 1.48611 9.03332 1.425 9.13332C1.36389 9.23332 1.33333 9.34443 1.33333 9.46666V9.99999Z" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
3
assets/icons/share2.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="20" height="17" viewBox="0 0 20 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M10.7969 0.128002C10.7211 0.166418 10.623 0.230444 10.5829 0.273129C10.4001 0.469475 10.3867 0.606064 10.3822 2.41587V4.15311L10.1504 4.17445C10.0211 4.18726 9.67328 4.21714 9.379 4.24275C6.73493 4.48605 4.45648 5.43364 2.86914 6.95319C1.42449 8.33615 0.532729 10.1844 0.167107 12.5448C0.0645542 13.2235 -0.0335395 14.6918 0.0110485 14.965C0.069013 15.3235 0.349918 15.554 0.728916 15.554C1.04549 15.554 1.19709 15.4601 1.51367 15.0717C1.92834 14.5595 2.76213 13.7826 3.24814 13.454C4.79535 12.404 6.29797 12.0369 9.38792 11.943L10.3778 11.9131L10.3911 13.7229C10.4045 15.7248 10.4001 15.6949 10.6988 15.8998C10.9039 16.0406 11.2695 16.062 11.4702 15.9467C11.6753 15.8315 19.4693 9.2496 19.6521 9.03617C20.1247 8.48555 20.1158 7.57211 19.6253 7.01722C19.4648 6.82941 11.6708 0.251786 11.488 0.145076C11.3097 0.042634 10.9975 0.0340977 10.7969 0.128002ZM15.3449 5.2629C17.4539 7.04283 18.5418 7.99041 18.5418 8.04164C18.5418 8.09712 17.4093 9.07886 15.2111 10.9356L11.8759 13.7528L11.8536 12.421C11.8313 11.1234 11.8269 11.0893 11.7288 10.9313C11.6708 10.846 11.5281 10.7179 11.4167 10.6539L11.2071 10.5387L9.86947 10.5429C7.46171 10.5557 6.09732 10.7179 4.69725 11.1661C3.71632 11.4777 2.67296 12.0326 1.93725 12.6302C1.77228 12.7625 1.6296 12.8649 1.62068 12.8564C1.61176 12.8479 1.63405 12.6814 1.66972 12.4808C2.32963 8.74592 4.63483 6.48793 8.50953 5.78365C9.14268 5.67267 9.69112 5.61291 10.5249 5.57023C11.1937 5.54035 11.2383 5.53181 11.4345 5.41229C11.5727 5.33119 11.6842 5.22022 11.7511 5.1007C11.8536 4.91716 11.8536 4.89155 11.8536 3.60676V2.30489L12.0008 2.43721C12.0766 2.50551 13.5837 3.78176 15.3449 5.2629Z" fill="#2F80ED"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
3
assets/icons/time2.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M6.99992 11C8.11103 11 9.05547 10.6111 9.83325 9.83334C10.611 9.05556 10.9999 8.11112 10.9999 7.00001C10.9999 5.8889 10.611 4.94445 9.83325 4.16668C9.05547 3.3889 8.11103 3.00001 6.99992 3.00001V7.00001L4.16658 9.83334C4.55547 10.2 4.99158 10.4861 5.47492 10.6917C5.95825 10.8972 6.46659 11 6.99992 11ZM6.99992 13.6667C6.0777 13.6667 5.21103 13.4917 4.39992 13.1417C3.58881 12.7917 2.88325 12.3167 2.28325 11.7167C1.68325 11.1167 1.20825 10.4111 0.858252 9.60001C0.508252 8.7889 0.333252 7.92223 0.333252 7.00001C0.333252 6.07779 0.508252 5.21112 0.858252 4.40001C1.20825 3.5889 1.68325 2.88334 2.28325 2.28334C2.88325 1.68334 3.58881 1.20834 4.39992 0.858343C5.21103 0.508343 6.0777 0.333344 6.99992 0.333344C7.92214 0.333344 8.78881 0.508343 9.59992 0.858343C10.411 1.20834 11.1166 1.68334 11.7166 2.28334C12.3166 2.88334 12.7916 3.5889 13.1416 4.40001C13.4916 5.21112 13.6666 6.07779 13.6666 7.00001C13.6666 7.92223 13.4916 8.7889 13.1416 9.60001C12.7916 10.4111 12.3166 11.1167 11.7166 11.7167C11.1166 12.3167 10.411 12.7917 9.59992 13.1417C8.78881 13.4917 7.92214 13.6667 6.99992 13.6667ZM6.99992 12.3333C8.48881 12.3333 9.74992 11.8167 10.7833 10.7833C11.8166 9.75001 12.3333 8.4889 12.3333 7.00001C12.3333 5.51112 11.8166 4.25001 10.7833 3.21668C9.74992 2.18334 8.48881 1.66668 6.99992 1.66668C5.51103 1.66668 4.24992 2.18334 3.21659 3.21668C2.18325 4.25001 1.66659 5.51112 1.66659 7.00001C1.66659 8.4889 2.18325 9.75001 3.21659 10.7833C4.24992 11.8167 5.51103 12.3333 6.99992 12.3333Z" fill="#323F4B"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -7,6 +7,7 @@ import 'package:eatvio_app/features/calendar/presentation/pages/calendar_screen.
|
|||||||
import 'package:eatvio_app/features/chat/presentation/pages/chat_screen.dart';
|
import 'package:eatvio_app/features/chat/presentation/pages/chat_screen.dart';
|
||||||
import 'package:eatvio_app/features/chat/presentation/pages/chat_select_screen.dart';
|
import 'package:eatvio_app/features/chat/presentation/pages/chat_select_screen.dart';
|
||||||
import 'package:eatvio_app/features/chat/presentation/pages/photo_view_screen.dart';
|
import 'package:eatvio_app/features/chat/presentation/pages/photo_view_screen.dart';
|
||||||
|
import 'package:eatvio_app/features/complaining/presentation/complaining_screen.dart';
|
||||||
import 'package:eatvio_app/features/consultant/become_consultant/presentation/pages/become_consultant_screen.dart';
|
import 'package:eatvio_app/features/consultant/become_consultant/presentation/pages/become_consultant_screen.dart';
|
||||||
import 'package:eatvio_app/features/consultant/become_consultant/presentation/pages/stepper_become_consultant_screen.dart';
|
import 'package:eatvio_app/features/consultant/become_consultant/presentation/pages/stepper_become_consultant_screen.dart';
|
||||||
import 'package:eatvio_app/features/diary/presentation/pages/diary_screen.dart';
|
import 'package:eatvio_app/features/diary/presentation/pages/diary_screen.dart';
|
||||||
@@ -274,6 +275,11 @@ class AppRouter {
|
|||||||
index: int.parse(state.pathParameters['index']!),
|
index: int.parse(state.pathParameters['index']!),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
GoRoute(
|
||||||
|
path: '/complaining-screen',
|
||||||
|
name: 'complainingScreen',
|
||||||
|
builder: (context, state) => ComplainingScreen(),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
43
lib/core/utils/localization_utils.dart
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
|
||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
|
|
||||||
|
String getLocalizedMeasurementUnits(S s, Portion portion) {
|
||||||
|
switch (portion) {
|
||||||
|
case Portion.GRAMS:
|
||||||
|
return s.gr;
|
||||||
|
case Portion.MILLILITERS:
|
||||||
|
return s.milliliter;
|
||||||
|
case Portion.PCS:
|
||||||
|
return s.pcs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String getDayForm(int number, S s) {
|
||||||
|
if (number % 100 >= 11 && number % 100 <= 14) {
|
||||||
|
return s.days;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lastDigit = number % 10;
|
||||||
|
if (lastDigit == 1) {
|
||||||
|
return s.day.toLowerCase();
|
||||||
|
} else if (lastDigit >= 2 && lastDigit <= 4) {
|
||||||
|
return s.another_form_of_day;
|
||||||
|
} else {
|
||||||
|
return s.days;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String getCommentForm(int number, S s) {
|
||||||
|
if (number % 100 >= 11 && number % 100 <= 14) {
|
||||||
|
return s.comments_plural;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lastDigit = number % 10;
|
||||||
|
if (lastDigit == 1) {
|
||||||
|
return s.comment;
|
||||||
|
} else if (lastDigit >= 2 && lastDigit <= 4) {
|
||||||
|
return s.another_form_of_comment;
|
||||||
|
} else {
|
||||||
|
return s.comments_plural;
|
||||||
|
}
|
||||||
|
}
|
||||||
9
lib/core/utils/string_extentions.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extension Capitalization on String {
|
||||||
|
|
||||||
|
String capitalize() {
|
||||||
|
return "${this[0].toUpperCase()}${substring(1).toLowerCase()}";
|
||||||
|
}
|
||||||
|
}
|
||||||
15
lib/core/utils/toasts.dart
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
|
||||||
|
const int _toastDuration = 2;
|
||||||
|
|
||||||
|
void showInfoToast(String message) {
|
||||||
|
Fluttertoast.showToast(
|
||||||
|
msg: message,
|
||||||
|
toastLength: Toast.LENGTH_SHORT,
|
||||||
|
gravity: ToastGravity.TOP,
|
||||||
|
timeInSecForIosWeb: _toastDuration,
|
||||||
|
backgroundColor: appTheme.blueA400,
|
||||||
|
textColor: appTheme.whiteA700,
|
||||||
|
fontSize: 16.0);
|
||||||
|
}
|
||||||
14
lib/core/widgets/custom_divider.dart
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class CustomDivider extends StatelessWidget {
|
||||||
|
const CustomDivider({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Divider(
|
||||||
|
color: appTheme.dividerColor,
|
||||||
|
height: 1,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class ComplainingScreen extends StatelessWidget {
|
||||||
|
const ComplainingScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Placeholder();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,17 +2,28 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:eatvio_app/core/const.dart';
|
import 'package:eatvio_app/core/const.dart';
|
||||||
|
import 'package:eatvio_app/core/utils/localization_utils.dart';
|
||||||
|
import 'package:eatvio_app/core/utils/string_extentions.dart';
|
||||||
|
import 'package:eatvio_app/core/widgets/custom_divider.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/author_card.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/cpfc_container.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/expandable_text.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/info_bouble.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/main_background_bouble.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/more_options.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/type_badges.dart';
|
||||||
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
|
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
|
||||||
import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_cubit.dart';
|
import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_cubit.dart';
|
||||||
import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_state.dart';
|
import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_state.dart';
|
||||||
import 'package:eatvio_app/features/feed/presentation/widgets/comments_widget.dart';
|
import 'package:eatvio_app/features/feed/presentation/widgets/comments_widget.dart';
|
||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
import 'package:eatvio_app/locator_service.dart';
|
import 'package:eatvio_app/locator_service.dart';
|
||||||
import 'package:eatvio_app/theme/theme_helper.dart';
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_html/flutter_html.dart';
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:rive/rive.dart';
|
import 'package:rive/rive.dart' hide LinearGradient;
|
||||||
|
|
||||||
class AboutDietScreen extends StatefulWidget {
|
class AboutDietScreen extends StatefulWidget {
|
||||||
final Diet diet;
|
final Diet diet;
|
||||||
@@ -29,10 +40,25 @@ class AboutDietScreen extends StatefulWidget {
|
|||||||
class _AboutDietScreenState extends State<AboutDietScreen> {
|
class _AboutDietScreenState extends State<AboutDietScreen> {
|
||||||
final CommentsCubit commentsCubit = sl<CommentsCubit>();
|
final CommentsCubit commentsCubit = sl<CommentsCubit>();
|
||||||
int? replyId;
|
int? replyId;
|
||||||
|
final ScrollController scrollController = ScrollController();
|
||||||
final textEditingController = TextEditingController();
|
final textEditingController = TextEditingController();
|
||||||
|
bool isMoreOptionsVisible = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
scrollController.addListener(() {
|
||||||
|
if (isMoreOptionsVisible) {
|
||||||
|
setState(() {
|
||||||
|
isMoreOptionsVisible = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final s = S.of(context);
|
||||||
return BlocProvider<CommentsCubit>(
|
return BlocProvider<CommentsCubit>(
|
||||||
create: (BuildContext context) => commentsCubit
|
create: (BuildContext context) => commentsCubit
|
||||||
..getComments(
|
..getComments(
|
||||||
@@ -50,6 +76,7 @@ class _AboutDietScreenState extends State<AboutDietScreen> {
|
|||||||
},
|
},
|
||||||
builder: (BuildContext context, CommentsState state) {
|
builder: (BuildContext context, CommentsState state) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
backgroundColor: appTheme.gray100,
|
||||||
resizeToAvoidBottomInset: true,
|
resizeToAvoidBottomInset: true,
|
||||||
bottomSheet: Container(
|
bottomSheet: Container(
|
||||||
padding: EdgeInsets.symmetric(vertical: 12) + (Platform.isIOS ? const EdgeInsets.only(bottom: 16) : EdgeInsets.zero),
|
padding: EdgeInsets.symmetric(vertical: 12) + (Platform.isIOS ? const EdgeInsets.only(bottom: 16) : EdgeInsets.zero),
|
||||||
@@ -61,290 +88,353 @@ class _AboutDietScreenState extends State<AboutDietScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Padding(
|
||||||
mainAxisSize: MainAxisSize.min,
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
children: [
|
child: Column(
|
||||||
SizedBox(
|
mainAxisSize: MainAxisSize.min,
|
||||||
width: MediaQuery.of(context).size.width - 24,
|
children: [
|
||||||
child: FloatingActionButton.extended(
|
Row(
|
||||||
heroTag: 'nextButtonRegistration',
|
children: [
|
||||||
highlightElevation: 0,
|
Expanded(
|
||||||
elevation: 0,
|
child: SizedBox(
|
||||||
focusElevation: 0,
|
child: FloatingActionButton.extended(
|
||||||
shape: RoundedRectangleBorder(
|
heroTag: 'nextButtonRegistration',
|
||||||
borderRadius: BorderRadius.circular(16),
|
highlightElevation: 0,
|
||||||
),
|
elevation: 0,
|
||||||
backgroundColor: appTheme.greenA700,
|
focusElevation: 0,
|
||||||
onPressed: () {},
|
shape: RoundedRectangleBorder(
|
||||||
label: Text(
|
borderRadius: BorderRadius.circular(16),
|
||||||
'Начать диету',
|
),
|
||||||
style: theme.textTheme.titleSmall,
|
backgroundColor: appTheme.greenA700,
|
||||||
),
|
onPressed: () {},
|
||||||
|
label: Text(
|
||||||
|
s.startDiet,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: appTheme.whiteA700,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 8),
|
||||||
|
Container(
|
||||||
|
width: 52,
|
||||||
|
height: 52,
|
||||||
|
decoration: BoxDecoration(color: appTheme.gray50, shape: BoxShape.circle),
|
||||||
|
child: Icon(
|
||||||
|
Icons.bookmark_border_rounded,
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
size: 24,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
SizedBox(height: 8),
|
||||||
SizedBox(height: 8),
|
Row(
|
||||||
Row(
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
children: [
|
||||||
children: [
|
if (replyId != null)
|
||||||
if (replyId != null)
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
context.read<CommentsCubit>().setReplyId(null);
|
||||||
|
setState(() {
|
||||||
|
replyId = null;
|
||||||
|
textEditingController.clear();
|
||||||
|
});
|
||||||
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: appTheme.blueA400,
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
),
|
||||||
|
height: 32,
|
||||||
|
width: 32,
|
||||||
|
child: Icon(
|
||||||
|
Icons.close_rounded,
|
||||||
|
size: 18,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (replyId != null) SizedBox(width: 8),
|
||||||
|
Expanded(
|
||||||
|
child: SizedBox(
|
||||||
|
child: TextFormField(
|
||||||
|
onChanged: (_) {
|
||||||
|
setState(() {});
|
||||||
|
},
|
||||||
|
controller: textEditingController,
|
||||||
|
maxLines: 5,
|
||||||
|
minLines: 1,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: Colors.black,
|
||||||
|
height: 1,
|
||||||
|
),
|
||||||
|
decoration: InputDecoration(
|
||||||
|
isDense: true,
|
||||||
|
contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||||
|
hintText: s.comment.capitalize(),
|
||||||
|
hintStyle: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
height: 1,
|
||||||
|
color: Color(0xFFAEAEB2),
|
||||||
|
),
|
||||||
|
filled: true,
|
||||||
|
border: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(16),
|
||||||
|
borderSide: BorderSide(
|
||||||
|
color: Color(0xFFD1D1D6),
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
enabledBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(16),
|
||||||
|
borderSide: BorderSide(
|
||||||
|
color: Color(0xFFD1D1D6),
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(16),
|
||||||
|
borderSide: BorderSide(
|
||||||
|
color: Color(0xFFD1D1D6),
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 8),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
context.read<CommentsCubit>().setReplyId(null);
|
if (textEditingController.text.length > 2) {
|
||||||
setState(() {
|
commentsCubit.sendComment(
|
||||||
replyId = null;
|
id: widget.diet.id.toString(),
|
||||||
textEditingController.clear();
|
commentText: textEditingController.text,
|
||||||
});
|
parentCommentId: replyId,
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
commentSourceType: CommentSourceType.diet,
|
||||||
|
);
|
||||||
|
context.read<CommentsCubit>().setReplyId(null);
|
||||||
|
setState(() {
|
||||||
|
textEditingController.clear();
|
||||||
|
replyId = null;
|
||||||
|
});
|
||||||
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: appTheme.blueA400,
|
color: textEditingController.text.length > 2 ? appTheme.blueA400 : appTheme.gray50,
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
),
|
),
|
||||||
height: 32,
|
height: 32,
|
||||||
width: 32,
|
width: 32,
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.close_rounded,
|
Icons.send_rounded,
|
||||||
size: 18,
|
size: 18,
|
||||||
color: Colors.white,
|
color: textEditingController.text.length > 2 ? appTheme.whiteA700 : appTheme.blueGray800,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (replyId != null) SizedBox(width: 8),
|
|
||||||
SizedBox(
|
|
||||||
width: MediaQuery.of(context).size.width - (replyId == null ? 64 : 104),
|
|
||||||
child: TextFormField(
|
|
||||||
onChanged: (_) {
|
|
||||||
setState(() {});
|
|
||||||
},
|
|
||||||
controller: textEditingController,
|
|
||||||
maxLines: 5,
|
|
||||||
minLines: 1,
|
|
||||||
keyboardType: TextInputType.multiline,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 16,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
color: Colors.black,
|
|
||||||
height: 1,
|
|
||||||
),
|
|
||||||
decoration: InputDecoration(
|
|
||||||
isDense: true,
|
|
||||||
contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
|
||||||
hintText: 'Комментарий',
|
|
||||||
hintStyle: TextStyle(
|
|
||||||
fontSize: 16,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
height: 1,
|
|
||||||
color: Color(0xFFAEAEB2),
|
|
||||||
),
|
|
||||||
filled: true,
|
|
||||||
border: OutlineInputBorder(
|
|
||||||
borderRadius: BorderRadius.circular(16),
|
|
||||||
borderSide: BorderSide(
|
|
||||||
color: Color(0xFFD1D1D6),
|
|
||||||
width: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
enabledBorder: OutlineInputBorder(
|
|
||||||
borderRadius: BorderRadius.circular(16),
|
|
||||||
borderSide: BorderSide(
|
|
||||||
color: Color(0xFFD1D1D6),
|
|
||||||
width: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
focusedBorder: OutlineInputBorder(
|
|
||||||
borderRadius: BorderRadius.circular(16),
|
|
||||||
borderSide: BorderSide(
|
|
||||||
color: Color(0xFFD1D1D6),
|
|
||||||
width: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(width: 8),
|
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
|
||||||
if (textEditingController.text.length > 2) {
|
|
||||||
commentsCubit.sendComment(
|
|
||||||
id: widget.diet.id.toString(),
|
|
||||||
commentText: textEditingController.text,
|
|
||||||
parentCommentId: replyId,
|
|
||||||
commentSourceType: CommentSourceType.diet,
|
|
||||||
);
|
|
||||||
context.read<CommentsCubit>().setReplyId(null);
|
|
||||||
setState(() {
|
|
||||||
textEditingController.clear();
|
|
||||||
replyId = null;
|
|
||||||
});
|
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: textEditingController.text.length > 2 ? appTheme.blueA400 : Colors.grey,
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
),
|
|
||||||
height: 32,
|
|
||||||
width: 32,
|
|
||||||
child: Icon(
|
|
||||||
Icons.send_rounded,
|
|
||||||
size: 18,
|
|
||||||
color: Colors.white,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
appBar: AppBar(
|
|
||||||
actions: [
|
|
||||||
InkWell(
|
|
||||||
borderRadius: BorderRadius.circular(16),
|
|
||||||
onTap: () => GoRouter.of(context).pushNamed('profileScreen', extra: widget.diet.author),
|
|
||||||
child: Ink(
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
CircleAvatar(
|
|
||||||
maxRadius: 16,
|
|
||||||
minRadius: 16,
|
|
||||||
backgroundImage: NetworkImage(widget.diet.author.authorProfileIcon),
|
|
||||||
),
|
|
||||||
SizedBox(height: 4),
|
|
||||||
Text(
|
|
||||||
widget.diet.author.authorName,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.black,
|
|
||||||
fontSize: 14,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
height: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
appBar: AppBar(
|
||||||
|
centerTitle: true,
|
||||||
|
title: Text(
|
||||||
|
widget.diet.name,
|
||||||
|
maxLines: 2,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
softWrap: true,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.black,
|
||||||
|
fontSize: 24,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
height: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
PortalTarget(
|
||||||
|
visible: isMoreOptionsVisible,
|
||||||
|
portalFollower: MoreOptions(id: widget.diet.id),
|
||||||
|
anchor: Aligned(
|
||||||
|
shiftToWithinBound: AxisFlag(x: true, y: true),
|
||||||
|
follower: Alignment.topRight,
|
||||||
|
target: Alignment.bottomRight,
|
||||||
),
|
),
|
||||||
|
child: IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
isMoreOptionsVisible = !isMoreOptionsVisible;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
icon: SvgPicture.asset(
|
||||||
|
'assets/icons/more_button.svg',
|
||||||
|
width: 20,
|
||||||
|
height: 20,
|
||||||
|
)),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
|
controller: scrollController,
|
||||||
padding: EdgeInsets.only(bottom: 160),
|
padding: EdgeInsets.only(bottom: 160),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
SizedBox(height: 8),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
MainBackgroundBouble(
|
||||||
child: Text(
|
child: Column(
|
||||||
widget.diet.name,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.black,
|
|
||||||
fontSize: 24,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
height: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 12),
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
children: [
|
||||||
Icon(Icons.timer_outlined),
|
Stack(children: [
|
||||||
SizedBox(width: 4),
|
CachedNetworkImage(
|
||||||
Text(
|
imageUrl: baseUrl + '/storage/' + widget.diet.image,
|
||||||
widget.diet.duration.toString() + ' дней',
|
),
|
||||||
style: TextStyle(
|
Positioned(
|
||||||
color: Colors.black,
|
child: Row(
|
||||||
fontSize: 12,
|
children: [
|
||||||
fontWeight: FontWeight.w400,
|
InfoBouble(children: [
|
||||||
height: 1,
|
|
||||||
|
], backgroundColor: appTheme.whiteA700,)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
SizedBox(height: 16),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
|
child: Text(
|
||||||
|
s.about_diet,
|
||||||
|
style: TextStyle(color: appTheme.blueGray800, fontSize: 20, fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
SizedBox(height: 12),
|
||||||
|
SingleChildScrollView(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
|
scrollDirection: Axis.horizontal,
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
InfoBouble(
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
'assets/icons/time2.svg',
|
||||||
|
width: 13.3,
|
||||||
|
height: 13.3,
|
||||||
|
),
|
||||||
|
SizedBox(width: 4),
|
||||||
|
Text(widget.diet.duration.toString() + ' ' + getDayForm(widget.diet.duration, s),
|
||||||
|
style: TextStyle(color: appTheme.blueGray800, fontSize: 12, fontWeight: FontWeight.w500)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(width: 12),
|
||||||
|
InfoBouble(
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
'assets/icons/people.svg',
|
||||||
|
width: 13.3,
|
||||||
|
height: 13.3,
|
||||||
|
),
|
||||||
|
SizedBox(width: 4),
|
||||||
|
Text('80 человек прошли(статика, ещё нет бека)',
|
||||||
|
style: TextStyle(color: appTheme.blueGray800, fontSize: 12, fontWeight: FontWeight.w500)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(width: 12),
|
||||||
|
InfoBouble(
|
||||||
|
children: [
|
||||||
|
TypeBadges(type: widget.diet.type),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ExpandableText(
|
||||||
|
text: widget.diet.details,
|
||||||
|
),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
|
child: AuthorCard(
|
||||||
|
author: widget.diet.author,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 16),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (widget.diet.details.isNotEmpty)
|
SizedBox(height: 16),
|
||||||
Padding(
|
MainBackgroundBouble(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8),
|
child: Padding(
|
||||||
child: Html(
|
padding: const EdgeInsets.symmetric(vertical: 16.0),
|
||||||
data: widget.diet.details,
|
child: Center(
|
||||||
style: {
|
child: Text(
|
||||||
"*": Style(
|
s.diet_plan + '(${widget.diet.duration.toString()} ' + getDayForm(widget.diet.duration, s) + ')',
|
||||||
color: Colors.black87,
|
style: TextStyle(
|
||||||
),
|
color: appTheme.blueGray800,
|
||||||
},
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: 12),
|
)),
|
||||||
CachedNetworkImage(
|
SizedBox(height: 8),
|
||||||
imageUrl: baseUrl + '/storage/' + widget.diet.image,
|
ListView.builder(
|
||||||
),
|
|
||||||
SizedBox(height: 12),
|
|
||||||
ListView.separated(
|
|
||||||
padding: EdgeInsets.all(16),
|
|
||||||
physics: NeverScrollableScrollPhysics(),
|
physics: NeverScrollableScrollPhysics(),
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
return _dayOfPlan(widget.diet.dailySchedule[index], index);
|
return _dayOfPlan(widget.diet.dailySchedule[index], index, s);
|
||||||
},
|
},
|
||||||
separatorBuilder: (context, index) => Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 16),
|
|
||||||
child: Container(
|
|
||||||
height: 0.4,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.grey,
|
|
||||||
borderRadius: BorderRadius.circular(16),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
itemCount: widget.diet.dailySchedule.length,
|
itemCount: widget.diet.dailySchedule.length,
|
||||||
),
|
),
|
||||||
SizedBox(height: 32),
|
MainBackgroundBouble(
|
||||||
Padding(
|
padding: EdgeInsets.symmetric(vertical: 16),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
child: Column(children: [
|
||||||
child: Container(
|
Container(
|
||||||
height: 0.4,
|
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||||
decoration: BoxDecoration(
|
alignment: Alignment.centerLeft,
|
||||||
color: Colors.grey,
|
child: Text(
|
||||||
borderRadius: BorderRadius.circular(16),
|
widget.diet.totalComments.toString() + ' ' + getCommentForm(widget.diet.totalComments, s),
|
||||||
),
|
style: TextStyle(
|
||||||
),
|
fontSize: 12,
|
||||||
),
|
color: appTheme.gray500,
|
||||||
SizedBox(height: 8),
|
fontWeight: FontWeight.w400,
|
||||||
Container(
|
),
|
||||||
padding: EdgeInsets.symmetric(horizontal: 16),
|
|
||||||
alignment: Alignment.centerLeft,
|
|
||||||
child: Text(
|
|
||||||
widget.diet.totalComments.toString() + ' КОММЕНТАРИЕВ',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 12,
|
|
||||||
color: appTheme.gray500,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 16),
|
|
||||||
if (state is CommentsStateLoading)
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.all(32),
|
|
||||||
child: SizedBox(
|
|
||||||
height: 32,
|
|
||||||
width: 32,
|
|
||||||
child: RiveAnimation.asset(
|
|
||||||
'assets/rive_animations/loading.riv',
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
SizedBox(height: 16),
|
||||||
if (state is CommentsStateLoaded)
|
if (state is CommentsStateLoading)
|
||||||
CommentsWidget(
|
Padding(
|
||||||
id: widget.diet.id.toString(),
|
padding: const EdgeInsets.all(32),
|
||||||
commentSourceType: CommentSourceType.diet,
|
child: SizedBox(
|
||||||
comment: state.comment,
|
height: 32,
|
||||||
replyId: replyId,
|
width: 32,
|
||||||
),
|
child: RiveAnimation.asset(
|
||||||
|
'assets/rive_animations/loading.riv',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (state is CommentsStateLoaded)
|
||||||
|
CommentsWidget(
|
||||||
|
id: widget.diet.id.toString(),
|
||||||
|
commentSourceType: CommentSourceType.diet,
|
||||||
|
comment: state.comment,
|
||||||
|
replyId: replyId,
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -354,7 +444,7 @@ class _AboutDietScreenState extends State<AboutDietScreen> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_dayOfPlan(List<List<DailySchedule>> day, int dayNumber) {
|
_dayOfPlan(List<List<DailySchedule>> day, int dayNumber, S s) {
|
||||||
_choiceChipWidget(int index) {
|
_choiceChipWidget(int index) {
|
||||||
return ChoiceChip(
|
return ChoiceChip(
|
||||||
selectedColor: appTheme.blueA400,
|
selectedColor: appTheme.blueA400,
|
||||||
@@ -381,73 +471,91 @@ class _AboutDietScreenState extends State<AboutDietScreen> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Column(
|
return Padding(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
padding: const EdgeInsets.only(bottom: 8),
|
||||||
children: [
|
child: MainBackgroundBouble(
|
||||||
Text(
|
padding: EdgeInsets.only(
|
||||||
'День ' + (dayNumber + 1).toString(),
|
top: 16,
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.black,
|
|
||||||
fontSize: 16,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
height: 1,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
SizedBox(height: 4),
|
child: Column(
|
||||||
Text(
|
|
||||||
'Приём пищи',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.black,
|
|
||||||
fontSize: 14,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
height: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
children: [
|
children: [
|
||||||
_choiceChipWidget(0),
|
Padding(
|
||||||
_choiceChipWidget(1),
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
_choiceChipWidget(2),
|
child: Column(
|
||||||
_choiceChipWidget(3),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
_choiceChipWidget(4),
|
children: [
|
||||||
|
Text(
|
||||||
|
s.day + ' ' + (dayNumber + 1).toString(),
|
||||||
|
style: TextStyle(
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 12),
|
||||||
|
child: CustomDivider(),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
s.meal,
|
||||||
|
style: TextStyle(
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
_choiceChipWidget(0),
|
||||||
|
_choiceChipWidget(1),
|
||||||
|
_choiceChipWidget(2),
|
||||||
|
_choiceChipWidget(3),
|
||||||
|
_choiceChipWidget(4),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 8),
|
||||||
|
ListView.builder(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: NeverScrollableScrollPhysics(),
|
||||||
|
itemBuilder: (context, index) => _daily(day[widget.selectedIndexes[dayNumber]][index], s),
|
||||||
|
itemCount: day[widget.selectedIndexes[dayNumber]].length,
|
||||||
|
),
|
||||||
|
SizedBox(height: 8),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
CpfcContainer(calories: 0, protein: 0, fat: 0, carbohydrates: 0)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(height: 8),
|
),
|
||||||
ListView.separated(
|
|
||||||
shrinkWrap: true,
|
|
||||||
physics: NeverScrollableScrollPhysics(),
|
|
||||||
itemBuilder: (context, index) => _daily(day[widget.selectedIndexes[dayNumber]][index]),
|
|
||||||
separatorBuilder: (context, index) => SizedBox(height: 4),
|
|
||||||
itemCount: day[widget.selectedIndexes[dayNumber]].length,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_daily(DailySchedule daily) {
|
_daily(DailySchedule daily, S s) {
|
||||||
return Row(
|
return Padding(
|
||||||
children: [
|
padding: const EdgeInsets.only(bottom: 12),
|
||||||
Text(
|
child: Row(
|
||||||
'• ' + daily.name,
|
children: [
|
||||||
style: TextStyle(
|
Text(
|
||||||
color: Colors.black,
|
daily.name,
|
||||||
fontSize: 14,
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.w400,
|
color: appTheme.blueGray800,
|
||||||
height: 1.2,
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
Spacer(),
|
||||||
Spacer(),
|
Text(
|
||||||
Text(
|
daily.quantity.toString() + ' ' + getLocalizedMeasurementUnits(s, daily.portion),
|
||||||
daily.quantity.toString() + ' ' + daily.portion.name,
|
style: TextStyle(
|
||||||
style: TextStyle(
|
color: appTheme.blueGray800,
|
||||||
color: Colors.black,
|
fontSize: 16,
|
||||||
fontSize: 14,
|
fontWeight: FontWeight.w600,
|
||||||
fontWeight: FontWeight.w400,
|
),
|
||||||
height: 1.2,
|
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
107
lib/features/diets/presentation/widgets/author_card.dart
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/info_bouble.dart';
|
||||||
|
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
|
||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:go_router/go_router.dart';
|
||||||
|
|
||||||
|
class AuthorCard extends StatelessWidget {
|
||||||
|
const AuthorCard({super.key, required this.author});
|
||||||
|
final Author author;
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final s = S.of(context);
|
||||||
|
return Container(
|
||||||
|
width: MediaQuery.sizeOf(context).width,
|
||||||
|
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: appTheme.cardBackground),
|
||||||
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 16, top: 16, bottom: 24),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
ListTile(
|
||||||
|
contentPadding: EdgeInsets.zero,
|
||||||
|
leading: Container(
|
||||||
|
width: 64,
|
||||||
|
height: 64,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
image: DecorationImage(
|
||||||
|
image: NetworkImage(author.authorProfileIcon),
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
subtitle: Text(
|
||||||
|
author.authorName,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
title: Text(
|
||||||
|
s.diet_author,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: Color(0xFF6D6F71),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Конслуьтант',
|
||||||
|
style: TextStyle(
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 10),
|
||||||
|
InfoBouble(radius: 12, backgroundColor: appTheme.whiteA700, children: [
|
||||||
|
Text(
|
||||||
|
'128-й в рейтинге',
|
||||||
|
style: TextStyle(
|
||||||
|
color: appTheme.blueA400,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
])
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
right: 8,
|
||||||
|
top: 8,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () => GoRouter.of(context).pushNamed('profileScreen', extra: author),
|
||||||
|
child: Container(
|
||||||
|
width: 28,
|
||||||
|
height: 28,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: appTheme.whiteA700,
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: SvgPicture.asset(
|
||||||
|
'assets/icons/arrow.svg',
|
||||||
|
width: 12,
|
||||||
|
height: 12,
|
||||||
|
fit: BoxFit.none,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
46
lib/features/diets/presentation/widgets/cpfc_container.dart
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class CpfcContainer extends StatelessWidget {
|
||||||
|
const CpfcContainer({super.key, required this.calories, required this.protein, required this.fat, required this.carbohydrates});
|
||||||
|
final double calories;
|
||||||
|
final double protein;
|
||||||
|
final double fat;
|
||||||
|
final double carbohydrates;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final s = S.of(context);
|
||||||
|
return Container(
|
||||||
|
color: appTheme.cardBackground,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
||||||
|
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Text('$calories', style: TextStyle(color: appTheme.blueGray800, fontSize: 16, fontWeight: FontWeight.w600)),
|
||||||
|
Text(s.calories, style: TextStyle(color: appTheme.blueGray800, fontSize: 12, fontWeight: FontWeight.w500)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Text('$protein', style: TextStyle(color: appTheme.blueGray800, fontSize: 16, fontWeight: FontWeight.w600)),
|
||||||
|
Text(s.proteins, style: TextStyle(color: appTheme.blueGray800, fontSize: 12, fontWeight: FontWeight.w500)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Text('$fat', style: TextStyle(color: appTheme.blueGray800, fontSize: 16, fontWeight: FontWeight.w600)),
|
||||||
|
Text(s.fats, style: TextStyle(color: appTheme.blueGray800, fontSize: 12, fontWeight: FontWeight.w500)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Text('$carbohydrates', style: TextStyle(color: appTheme.blueGray800, fontSize: 16, fontWeight: FontWeight.w600)),
|
||||||
|
Text(s.carbohydrates, style: TextStyle(color: appTheme.blueGray800, fontSize: 12, fontWeight: FontWeight.w500)),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
87
lib/features/diets/presentation/widgets/expandable_text.dart
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
import 'dart:math' as math;
|
||||||
|
|
||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_html/flutter_html.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
|
||||||
|
class ExpandableText extends StatefulWidget {
|
||||||
|
final String text;
|
||||||
|
final int maxLines;
|
||||||
|
|
||||||
|
ExpandableText({required this.text, this.maxLines = 3});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ExpandableTextState createState() => _ExpandableTextState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ExpandableTextState extends State<ExpandableText> {
|
||||||
|
bool isExpanded = false;
|
||||||
|
|
||||||
|
void toggleExpansion() {
|
||||||
|
setState(() {
|
||||||
|
isExpanded = !isExpanded;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final s = S.of(context);
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Stack(
|
||||||
|
children: [
|
||||||
|
Html(
|
||||||
|
data: widget.text,
|
||||||
|
style: {
|
||||||
|
"*": Style(
|
||||||
|
color: Colors.black87,
|
||||||
|
maxLines: isExpanded ? null : widget.maxLines,
|
||||||
|
textOverflow: TextOverflow.clip,
|
||||||
|
),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
if (!isExpanded)
|
||||||
|
Positioned.fill(
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.bottomCenter,
|
||||||
|
child: Container(
|
||||||
|
height: 35,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: LinearGradient(
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
colors: [
|
||||||
|
Colors.white.withOpacity(0.0),
|
||||||
|
Colors.white.withOpacity(0.6),
|
||||||
|
Colors.white,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.bottomCenter,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: toggleExpansion,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
isExpanded ? s.hide : s.expand,
|
||||||
|
style: TextStyle(color: appTheme.blueA400, fontSize: 16, fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
Transform.rotate(angle: isExpanded ? math.pi : 0, child: SvgPicture.asset('assets/icons/arrow_down.svg', width: 12, height: 12)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
20
lib/features/diets/presentation/widgets/info_bouble.dart
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class InfoBouble extends StatelessWidget {
|
||||||
|
const InfoBouble({super.key, required this.children, this.backgroundColor, this.radius = 100});
|
||||||
|
final List<Widget> children;
|
||||||
|
final Color? backgroundColor;
|
||||||
|
final double radius;
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8.5),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: backgroundColor ?? appTheme.gray50,
|
||||||
|
borderRadius: BorderRadius.circular(radius),
|
||||||
|
),
|
||||||
|
child: Row(children: children),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class MainBackgroundBouble extends StatelessWidget {
|
||||||
|
const MainBackgroundBouble(
|
||||||
|
{super.key, required this.child, this.width, this.padding, this.enableShadow = false});
|
||||||
|
final double? width;
|
||||||
|
final Widget child;
|
||||||
|
final bool enableShadow;
|
||||||
|
final EdgeInsetsGeometry? padding;
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return DecoratedBox(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: enableShadow
|
||||||
|
? [
|
||||||
|
BoxShadow(
|
||||||
|
color: Color(0x00000000).withOpacity(0.2),
|
||||||
|
spreadRadius: 0,
|
||||||
|
blurRadius: 32,
|
||||||
|
offset: Offset(0, 0),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
: null),
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: appTheme.whiteA700,
|
||||||
|
),
|
||||||
|
width: width ?? MediaQuery.sizeOf(context).width,
|
||||||
|
padding: padding,
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
96
lib/features/diets/presentation/widgets/more_options.dart
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
import 'package:eatvio_app/core/const.dart';
|
||||||
|
import 'package:eatvio_app/core/utils/toasts.dart';
|
||||||
|
import 'package:eatvio_app/core/widgets/custom_divider.dart';
|
||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/main_background_bouble.dart';
|
||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
|
class MoreOptions extends StatelessWidget {
|
||||||
|
const MoreOptions({super.key, required this.id});
|
||||||
|
final int id;
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final s = S.of(context);
|
||||||
|
return MainBackgroundBouble(
|
||||||
|
enableShadow: true,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 14),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
Clipboard.setData(ClipboardData(text: baseUrl + '/ru/diet/' + id.toString()));
|
||||||
|
showInfoToast(s.link_was_copied);
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
s.copy_link,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Spacer(),
|
||||||
|
SvgPicture.asset('assets/icons/copy2.svg', width: 16, height: 20),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 12.0),
|
||||||
|
child: CustomDivider(),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () => Share.shareUri(
|
||||||
|
Uri.parse(
|
||||||
|
baseUrl + '/ru/diet/' + id.toString(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
s.share,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Spacer(),
|
||||||
|
SvgPicture.asset('assets/icons/share2.svg', width: 16, height: 20),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 12.0),
|
||||||
|
child: CustomDivider(),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {},
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
s.complain,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Spacer(),
|
||||||
|
SvgPicture.asset('assets/icons/complain.svg', width: 16, height: 20),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
width: 272);
|
||||||
|
}
|
||||||
|
}
|
||||||
222
lib/features/diets/presentation/widgets/type_badges.dart
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
import 'package:eatvio_app/features/diets/presentation/widgets/main_background_bouble.dart';
|
||||||
|
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
|
||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
|
||||||
|
class TypeBadges extends StatefulWidget {
|
||||||
|
const TypeBadges({super.key, required this.type});
|
||||||
|
final DietType type;
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<TypeBadges> createState() => _TypeBadgesState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TypeBadgesState extends State<TypeBadges> {
|
||||||
|
final List<bool> overlaysVisibilityState = [false, false, false, false];
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final s = S.of(context);
|
||||||
|
final List<(String, Widget)> badgeSource = [];
|
||||||
|
if (widget.type.alko == true) {
|
||||||
|
badgeSource.add((
|
||||||
|
'assets/icons/cocktail.svg',
|
||||||
|
_InfoOverlayEntry(
|
||||||
|
onClose: closeOverlay,
|
||||||
|
assetPath: 'assets/icons/cocktail.svg',
|
||||||
|
title: s.alko_type,
|
||||||
|
description: s.alko_type_desc,
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if (widget.type.veg == true) {
|
||||||
|
badgeSource.add((
|
||||||
|
'assets/icons/broccoli.svg',
|
||||||
|
_InfoOverlayEntry(
|
||||||
|
onClose: closeOverlay,
|
||||||
|
assetPath: 'assets/icons/broccoli.svg',
|
||||||
|
title: s.vegan_type,
|
||||||
|
description: s.vegan_type_desc,
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if (widget.type.corb == true) {
|
||||||
|
badgeSource.add((
|
||||||
|
'assets/icons/bread.svg',
|
||||||
|
_InfoOverlayEntry(
|
||||||
|
onClose: closeOverlay,
|
||||||
|
assetPath: 'assets/icons/bread.svg',
|
||||||
|
title: s.corb_type,
|
||||||
|
description: s.corb_type_desc,
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if (widget.type.meat == true) {
|
||||||
|
badgeSource.add((
|
||||||
|
'assets/icons/meat2.svg',
|
||||||
|
_InfoOverlayEntry(
|
||||||
|
onClose: closeOverlay,
|
||||||
|
assetPath: 'assets/icons/meat2.svg',
|
||||||
|
title: s.meat_type,
|
||||||
|
description: s.meat_type_desc,
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
return Row(
|
||||||
|
children: List.generate(
|
||||||
|
badgeSource.length,
|
||||||
|
(index) => _Barrier(
|
||||||
|
visible: overlaysVisibilityState[index],
|
||||||
|
onClose: closeOverlay,
|
||||||
|
child: PortalTarget(
|
||||||
|
visible: overlaysVisibilityState[index],
|
||||||
|
anchor: Aligned(
|
||||||
|
shiftToWithinBound: AxisFlag(x: true, y: true),
|
||||||
|
follower: Alignment.topRight,
|
||||||
|
target: Alignment.bottomRight,
|
||||||
|
),
|
||||||
|
portalFollower: badgeSource[index].$2,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
for (int stateIndex = 0; stateIndex < overlaysVisibilityState.length; stateIndex++) {
|
||||||
|
if (index != stateIndex) {
|
||||||
|
setState(() {
|
||||||
|
overlaysVisibilityState[stateIndex] = false;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setState(() {
|
||||||
|
overlaysVisibilityState[stateIndex] = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(right: index != badgeSource.length - 1 ? 8.0 : 0),
|
||||||
|
child: SvgPicture.asset(
|
||||||
|
badgeSource[index].$1,
|
||||||
|
width: 16,
|
||||||
|
height: 16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void closeOverlay() {
|
||||||
|
for (int stateIndex = 0; stateIndex < overlaysVisibilityState.length; stateIndex++) {
|
||||||
|
setState(() {
|
||||||
|
overlaysVisibilityState[stateIndex] = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _InfoOverlayEntry extends StatelessWidget {
|
||||||
|
const _InfoOverlayEntry({super.key, required this.title, required this.description, required this.assetPath, required this.onClose});
|
||||||
|
final String title;
|
||||||
|
final String description;
|
||||||
|
final assetPath;
|
||||||
|
final void Function() onClose;
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return MainBackgroundBouble(
|
||||||
|
padding: EdgeInsets.all(8),
|
||||||
|
width: 343,
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
assetPath,
|
||||||
|
width: 20,
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
SizedBox(width: 8),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 4),
|
||||||
|
Text(
|
||||||
|
description,
|
||||||
|
softWrap: true,
|
||||||
|
style: TextStyle(
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
color: appTheme.blueGray800,
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: onClose,
|
||||||
|
child: SvgPicture.asset(
|
||||||
|
'assets/icons/close_button.svg',
|
||||||
|
width: 20,
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _Barrier extends StatelessWidget {
|
||||||
|
const _Barrier({
|
||||||
|
Key? key,
|
||||||
|
required this.onClose,
|
||||||
|
required this.visible,
|
||||||
|
required this.child,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
final Widget child;
|
||||||
|
final VoidCallback onClose;
|
||||||
|
final bool visible;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return PortalTarget(
|
||||||
|
visible: visible,
|
||||||
|
closeDuration: kThemeAnimationDuration,
|
||||||
|
portalFollower: GestureDetector(
|
||||||
|
behavior: HitTestBehavior.opaque,
|
||||||
|
onTap: onClose,
|
||||||
|
child: TweenAnimationBuilder<Color>(
|
||||||
|
duration: kThemeAnimationDuration,
|
||||||
|
tween: ColorTween(
|
||||||
|
begin: Colors.transparent,
|
||||||
|
end: visible ? Colors.black54 : Colors.transparent,
|
||||||
|
),
|
||||||
|
builder: (context, color, child) {
|
||||||
|
return ColoredBox(color: color);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ColorTween extends Tween<Color> {
|
||||||
|
ColorTween({required Color begin, required Color end}) : super(begin: begin, end: end);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Color lerp(double t) => Color.lerp(begin, end, t)!;
|
||||||
|
}
|
||||||
12
lib/features/diets/services/diets_service.dart
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:retrofit/retrofit.dart';
|
||||||
|
|
||||||
|
part 'diets_service.g.dart';
|
||||||
|
|
||||||
|
@RestApi()
|
||||||
|
abstract class DietsService {
|
||||||
|
|
||||||
|
factory DietsService(Dio dio, {String baseUrl}) = _DietsService;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
53
lib/features/diets/services/diets_service.g.dart
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'diets_service.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// RetrofitGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations
|
||||||
|
|
||||||
|
class _DietsService implements DietsService {
|
||||||
|
_DietsService(
|
||||||
|
this._dio, {
|
||||||
|
this.baseUrl,
|
||||||
|
this.errorLogger,
|
||||||
|
});
|
||||||
|
|
||||||
|
final Dio _dio;
|
||||||
|
|
||||||
|
String? baseUrl;
|
||||||
|
|
||||||
|
final ParseErrorLogger? errorLogger;
|
||||||
|
|
||||||
|
RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
|
||||||
|
if (T != dynamic &&
|
||||||
|
!(requestOptions.responseType == ResponseType.bytes ||
|
||||||
|
requestOptions.responseType == ResponseType.stream)) {
|
||||||
|
if (T == String) {
|
||||||
|
requestOptions.responseType = ResponseType.plain;
|
||||||
|
} else {
|
||||||
|
requestOptions.responseType = ResponseType.json;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return requestOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
String _combineBaseUrls(
|
||||||
|
String dioBaseUrl,
|
||||||
|
String? baseUrl,
|
||||||
|
) {
|
||||||
|
if (baseUrl == null || baseUrl.trim().isEmpty) {
|
||||||
|
return dioBaseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
final url = Uri.parse(baseUrl);
|
||||||
|
|
||||||
|
if (url.isAbsolute) {
|
||||||
|
return url.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Uri.parse(dioBaseUrl).resolveUri(url).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ class CommentsCubit extends Cubit<CommentsState> {
|
|||||||
emit((state as CommentsStateLoaded).copyWith(replyId: replyId));
|
emit((state as CommentsStateLoaded).copyWith(replyId: replyId));
|
||||||
}
|
}
|
||||||
|
|
||||||
getComments(String id, CommentSourceType commentSourceType, [bool isFirstFetch = false]) async {
|
getComments(String id, CommentSourceType commentSourceType, [bool isFirstFetch = false]) async {
|
||||||
if (isFirstFetch) emit(CommentsState.loading());
|
if (isFirstFetch) emit(CommentsState.loading());
|
||||||
try {
|
try {
|
||||||
switch (commentSourceType) {
|
switch (commentSourceType) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:eatvio_app/core/utils/date_time_utils.dart';
|
import 'package:eatvio_app/core/utils/date_time_utils.dart';
|
||||||
import 'package:eatvio_app/features/feed/models/comment_model.dart';
|
import 'package:eatvio_app/features/feed/models/comment_model.dart';
|
||||||
import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_cubit.dart';
|
import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_cubit.dart';
|
||||||
|
import 'package:eatvio_app/generated/l10n.dart';
|
||||||
import 'package:eatvio_app/theme/theme_helper.dart';
|
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
@@ -28,15 +29,16 @@ class CommentsWidget extends StatefulWidget {
|
|||||||
class _CommentsWidgetState extends State<CommentsWidget> {
|
class _CommentsWidgetState extends State<CommentsWidget> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final s = S.of(context);
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
for (int i = 0; i < widget.comment.data.length; i++) ...[
|
for (int i = 0; i < widget.comment.data.length; i++) ...[
|
||||||
_comment(widget.comment.data[i]),
|
_comment(s, widget.comment.data[i]),
|
||||||
if (widget.comment.data[i].childrenComments.isNotEmpty) SizedBox(height: 8),
|
if (widget.comment.data[i].childrenComments.isNotEmpty) SizedBox(height: 8),
|
||||||
for (int j = 0; j < widget.comment.data[i].childrenComments.length; j++)
|
for (int j = 0; j < widget.comment.data[i].childrenComments.length; j++)
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(left: 40),
|
padding: EdgeInsets.only(left: 40),
|
||||||
child: _comment(widget.comment.data[i].childrenComments[j], 12, true),
|
child: _comment(s, widget.comment.data[i].childrenComments[j], 16, true),
|
||||||
),
|
),
|
||||||
SizedBox(height: 8),
|
SizedBox(height: 8),
|
||||||
],
|
],
|
||||||
@@ -44,7 +46,7 @@ class _CommentsWidgetState extends State<CommentsWidget> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_comment(Comment comment, [double radius = 16, bool isChild = false]) {
|
_comment(S s, Comment comment, [double radius = 18, bool isChild = false]) {
|
||||||
return Container(
|
return Container(
|
||||||
width: MediaQuery.of(context).size.width,
|
width: MediaQuery.of(context).size.width,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@@ -69,16 +71,19 @@ class _CommentsWidgetState extends State<CommentsWidget> {
|
|||||||
comment.authorName,
|
comment.authorName,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
height: 1,
|
height: 1,
|
||||||
color: Colors.grey.shade600,
|
color: appTheme.grey,
|
||||||
|
fontSize: 12,
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(width: 4),
|
SizedBox(height: 4),
|
||||||
Text(
|
Text(
|
||||||
comment.body,
|
comment.body,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
height: 1,
|
height: 1,
|
||||||
color: Colors.black,
|
color: appTheme.blueGray800,
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: 4),
|
SizedBox(height: 4),
|
||||||
@@ -87,10 +92,10 @@ class _CommentsWidgetState extends State<CommentsWidget> {
|
|||||||
Text(
|
Text(
|
||||||
comment.createdAt.format('dd MMMM', 'ru'),
|
comment.createdAt.format('dd MMMM', 'ru'),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.grey.shade600,
|
|
||||||
fontSize: 12,
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
height: 1,
|
height: 1,
|
||||||
|
color: appTheme.grey,
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(width: 16),
|
SizedBox(width: 16),
|
||||||
@@ -100,11 +105,11 @@ class _CommentsWidgetState extends State<CommentsWidget> {
|
|||||||
context.read<CommentsCubit>().setReplyId(comment.id);
|
context.read<CommentsCubit>().setReplyId(comment.id);
|
||||||
},
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
'Ответить',
|
s.answer,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
height: 1,
|
height: 1,
|
||||||
|
color: appTheme.grey,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: Colors.grey.shade800,
|
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -111,7 +111,8 @@ class _CityOfLivingScreenState extends State<CityOfLivingScreen> {
|
|||||||
suggestionsCallback: (query) async {
|
suggestionsCallback: (query) async {
|
||||||
if (query.length >= 3) {
|
if (query.length >= 3) {
|
||||||
final registrationCubit = context.read<RegistrationCubit>();
|
final registrationCubit = context.read<RegistrationCubit>();
|
||||||
return (await registrationCubit.getLocationsByQuery(query));
|
final qwe = (await registrationCubit.getLocationsByQuery(query));
|
||||||
|
return qwe;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
@@ -129,9 +130,11 @@ class _CityOfLivingScreenState extends State<CityOfLivingScreen> {
|
|||||||
if (locationData != null) {
|
if (locationData != null) {
|
||||||
final List<String> locations = await context
|
final List<String> locations = await context
|
||||||
.read<RegistrationCubit>()
|
.read<RegistrationCubit>()
|
||||||
.getLocationsByCoordinates(locationData.latitude.toString(), locationData.longitude.toString());
|
.getLocationsByCoordinates(
|
||||||
|
locationData.latitude.toString(), locationData.longitude.toString());
|
||||||
final registrationCubit = context.read<RegistrationCubit>();
|
final registrationCubit = context.read<RegistrationCubit>();
|
||||||
registrationCubit.updateSheet(registrationCubit.state.sheet.copyWith(location: locations.first));
|
registrationCubit
|
||||||
|
.updateSheet(registrationCubit.state.sheet.copyWith(location: locations.first));
|
||||||
setState(() {
|
setState(() {
|
||||||
cityController.text = locations.first;
|
cityController.text = locations.first;
|
||||||
suggestionsController.suggestions = locations;
|
suggestionsController.suggestions = locations;
|
||||||
|
|||||||
@@ -17,20 +17,16 @@ import 'package:intl/message_lookup_by_library.dart';
|
|||||||
import 'package:intl/src/intl_helpers.dart';
|
import 'package:intl/src/intl_helpers.dart';
|
||||||
|
|
||||||
import 'messages_en.dart' as messages_en;
|
import 'messages_en.dart' as messages_en;
|
||||||
import 'messages_ru.dart' as messages_ru;
|
|
||||||
|
|
||||||
typedef Future<dynamic> LibraryLoader();
|
typedef Future<dynamic> LibraryLoader();
|
||||||
Map<String, LibraryLoader> _deferredLibraries = {
|
Map<String, LibraryLoader> _deferredLibraries = {
|
||||||
'en': () => new SynchronousFuture(null),
|
'en': () => new SynchronousFuture(null),
|
||||||
'ru': () => new SynchronousFuture(null),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
MessageLookupByLibrary? _findExact(String localeName) {
|
MessageLookupByLibrary? _findExact(String localeName) {
|
||||||
switch (localeName) {
|
switch (localeName) {
|
||||||
case 'en':
|
case 'en':
|
||||||
return messages_en.messages;
|
return messages_en.messages;
|
||||||
case 'ru':
|
|
||||||
return messages_ru.messages;
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,157 +22,192 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||||
"Moscow": MessageLookupByLibrary.simpleMessage("Moscow"),
|
"Moscow": MessageLookupByLibrary.simpleMessage("Москва"),
|
||||||
"Russia": MessageLookupByLibrary.simpleMessage("Russia"),
|
"Russia": MessageLookupByLibrary.simpleMessage("Россия"),
|
||||||
"active": MessageLookupByLibrary.simpleMessage("Active"),
|
"about_diet": MessageLookupByLibrary.simpleMessage("Об этой диете"),
|
||||||
"add_measure": MessageLookupByLibrary.simpleMessage("Add Measurement"),
|
"active": MessageLookupByLibrary.simpleMessage("Активен"),
|
||||||
|
"add_measure": MessageLookupByLibrary.simpleMessage("Добавить замер"),
|
||||||
"additional_information":
|
"additional_information":
|
||||||
MessageLookupByLibrary.simpleMessage("Additional Information"),
|
MessageLookupByLibrary.simpleMessage("Дополнительная информация"),
|
||||||
"admin": MessageLookupByLibrary.simpleMessage("Admin"),
|
"admin": MessageLookupByLibrary.simpleMessage("Админ"),
|
||||||
|
"alko_type": MessageLookupByLibrary.simpleMessage("Алкоголь"),
|
||||||
|
"alko_type_desc": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"С некоторыми видами диет можно употреблять алкоголь в умеренных количествах. Рекомендуется совмещать вместе с низкокалорийными закусками."),
|
||||||
"allergies_presence":
|
"allergies_presence":
|
||||||
MessageLookupByLibrary.simpleMessage("Presence of Allergies"),
|
MessageLookupByLibrary.simpleMessage("Наличие аллергии"),
|
||||||
"archived": MessageLookupByLibrary.simpleMessage("Archived"),
|
"another_form_of_comment":
|
||||||
"authentificate": MessageLookupByLibrary.simpleMessage("Log In"),
|
MessageLookupByLibrary.simpleMessage("комментария"),
|
||||||
"average_pressure":
|
"another_form_of_day": MessageLookupByLibrary.simpleMessage("дня"),
|
||||||
MessageLookupByLibrary.simpleMessage("Average Pressure Readings:"),
|
"answer": MessageLookupByLibrary.simpleMessage("Ответить"),
|
||||||
"bodymass_chart": MessageLookupByLibrary.simpleMessage("BMI Chart"),
|
"archived": MessageLookupByLibrary.simpleMessage("В архиве"),
|
||||||
"chat": MessageLookupByLibrary.simpleMessage("Chat"),
|
"authentificate": MessageLookupByLibrary.simpleMessage("Войти"),
|
||||||
"chest": MessageLookupByLibrary.simpleMessage("Chest"),
|
"average_pressure": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Средние показатели давления:"),
|
||||||
|
"bodymass_chart": MessageLookupByLibrary.simpleMessage("График ИМТ"),
|
||||||
|
"calories": MessageLookupByLibrary.simpleMessage("Калории"),
|
||||||
|
"carbohydrates": MessageLookupByLibrary.simpleMessage("Углеводы"),
|
||||||
|
"chat": MessageLookupByLibrary.simpleMessage("Чат"),
|
||||||
|
"chest": MessageLookupByLibrary.simpleMessage("Грудь"),
|
||||||
"chest_circumference":
|
"chest_circumference":
|
||||||
MessageLookupByLibrary.simpleMessage("Chest Circumference"),
|
MessageLookupByLibrary.simpleMessage("Обхват груди"),
|
||||||
"circumference_empty": MessageLookupByLibrary.simpleMessage(
|
"circumference_empty": MessageLookupByLibrary.simpleMessage(
|
||||||
"All measurements are required"),
|
"Все замеры обязательны к заполнению"),
|
||||||
"circumference_is_not_a_number": MessageLookupByLibrary.simpleMessage(
|
"circumference_is_not_a_number": MessageLookupByLibrary.simpleMessage(
|
||||||
"All measurements must be numbers"),
|
"Все замеры должны быть числами"),
|
||||||
"circumferences_chart":
|
"circumferences_chart":
|
||||||
MessageLookupByLibrary.simpleMessage("Circumference Chart"),
|
MessageLookupByLibrary.simpleMessage("График обхватов"),
|
||||||
"city": MessageLookupByLibrary.simpleMessage("City"),
|
"city": MessageLookupByLibrary.simpleMessage("Город"),
|
||||||
"city_of_living":
|
"city_of_living":
|
||||||
MessageLookupByLibrary.simpleMessage("City of Residence"),
|
MessageLookupByLibrary.simpleMessage("Город проживания"),
|
||||||
"continueButton": MessageLookupByLibrary.simpleMessage("Continue"),
|
"comment": MessageLookupByLibrary.simpleMessage("комментарий"),
|
||||||
"country": MessageLookupByLibrary.simpleMessage("Country"),
|
"comments": MessageLookupByLibrary.simpleMessage("Комментарии"),
|
||||||
"date_of_birth": MessageLookupByLibrary.simpleMessage("Date of Birth"),
|
"comments_plural": MessageLookupByLibrary.simpleMessage("комментариев"),
|
||||||
"diary": MessageLookupByLibrary.simpleMessage("Diary"),
|
"complain": MessageLookupByLibrary.simpleMessage("Пожаловаться"),
|
||||||
|
"continueButton": MessageLookupByLibrary.simpleMessage("Продолжить"),
|
||||||
|
"copy_link": MessageLookupByLibrary.simpleMessage("Скопировать ссылку"),
|
||||||
|
"corb_type": MessageLookupByLibrary.simpleMessage("Мучное"),
|
||||||
|
"corb_type_desc": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы."),
|
||||||
|
"country": MessageLookupByLibrary.simpleMessage("Страна"),
|
||||||
|
"date_of_birth": MessageLookupByLibrary.simpleMessage("Дата рождения"),
|
||||||
|
"day": MessageLookupByLibrary.simpleMessage("День"),
|
||||||
|
"days": MessageLookupByLibrary.simpleMessage("дней"),
|
||||||
|
"diary": MessageLookupByLibrary.simpleMessage("Дневник"),
|
||||||
|
"diet_author": MessageLookupByLibrary.simpleMessage("Автор диеты"),
|
||||||
|
"diet_plan": MessageLookupByLibrary.simpleMessage("План диеты"),
|
||||||
"do_you_have_hypertension_tendency":
|
"do_you_have_hypertension_tendency":
|
||||||
MessageLookupByLibrary.simpleMessage(
|
MessageLookupByLibrary.simpleMessage("Есть ли у вас гипертония?"),
|
||||||
"Do you have a tendency for hypertension?"),
|
|
||||||
"do_you_have_hypotension_tendency":
|
"do_you_have_hypotension_tendency":
|
||||||
MessageLookupByLibrary.simpleMessage(
|
MessageLookupByLibrary.simpleMessage("Есть ли у вас гипотония?"),
|
||||||
"Do you have a tendency for hypotension?"),
|
|
||||||
"do_you_take_pills": MessageLookupByLibrary.simpleMessage(
|
"do_you_take_pills": MessageLookupByLibrary.simpleMessage(
|
||||||
"Do you take any medications or supplements?"),
|
"Принимаете ли вы лекарства или бады?"),
|
||||||
"down_pressure":
|
"down_pressure":
|
||||||
MessageLookupByLibrary.simpleMessage("Lower Pressure Readings:"),
|
MessageLookupByLibrary.simpleMessage("Нижние показатели давления:"),
|
||||||
"draft": MessageLookupByLibrary.simpleMessage("Draft"),
|
"draft": MessageLookupByLibrary.simpleMessage("Черновик"),
|
||||||
"email": MessageLookupByLibrary.simpleMessage("Email"),
|
"email": MessageLookupByLibrary.simpleMessage("Элетронная почта"),
|
||||||
"email_empty":
|
"email_empty": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("Email address is required"),
|
"Необходимо ввести адрес электронной почты"),
|
||||||
"email_invalid":
|
"email_invalid": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("Invalid email address"),
|
"Некорректный адрес электронной почты"),
|
||||||
"enter_additional_information": MessageLookupByLibrary.simpleMessage(
|
"enter_additional_information": MessageLookupByLibrary.simpleMessage(
|
||||||
"Enter any additional information at your discretion:"),
|
"Введите любую дополнительную информацию на своё усмотрение:"),
|
||||||
"enter_information":
|
"enter_information":
|
||||||
MessageLookupByLibrary.simpleMessage("Enter information..."),
|
MessageLookupByLibrary.simpleMessage("Введите информацию..."),
|
||||||
"exit": MessageLookupByLibrary.simpleMessage("Log Out"),
|
"exit": MessageLookupByLibrary.simpleMessage("Выйти"),
|
||||||
|
"expand": MessageLookupByLibrary.simpleMessage("Показать полностью"),
|
||||||
|
"fats": MessageLookupByLibrary.simpleMessage("Жиры"),
|
||||||
"favorite_foods":
|
"favorite_foods":
|
||||||
MessageLookupByLibrary.simpleMessage("Favorite Foods"),
|
MessageLookupByLibrary.simpleMessage("Любимые продукты"),
|
||||||
"favorite_unfavorite_foods": MessageLookupByLibrary.simpleMessage(
|
"favorite_unfavorite_foods": MessageLookupByLibrary.simpleMessage(
|
||||||
"Your Favorite/Least Favorite Foods?"),
|
"Ваши любимые/нелюбимые продукты питания?"),
|
||||||
"female": MessageLookupByLibrary.simpleMessage("Female"),
|
"female": MessageLookupByLibrary.simpleMessage("Женский"),
|
||||||
"fill_in_information":
|
"fill_in_information":
|
||||||
MessageLookupByLibrary.simpleMessage("Fill in the information:"),
|
MessageLookupByLibrary.simpleMessage("Заполните информацию:"),
|
||||||
"finish": MessageLookupByLibrary.simpleMessage("Finish"),
|
"finish": MessageLookupByLibrary.simpleMessage("Завершить"),
|
||||||
"first_name": MessageLookupByLibrary.simpleMessage("First Name"),
|
"first_name": MessageLookupByLibrary.simpleMessage("Имя"),
|
||||||
"first_name_empty":
|
"first_name_empty": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("First name is required"),
|
"Имя обязательно для заполнения"),
|
||||||
"first_name_short": MessageLookupByLibrary.simpleMessage(
|
"first_name_short": MessageLookupByLibrary.simpleMessage(
|
||||||
"First name must be at least 1 character long"),
|
"В имени должен быть минимум 1 символ"),
|
||||||
"gr": MessageLookupByLibrary.simpleMessage("g"),
|
"gr": MessageLookupByLibrary.simpleMessage("гр"),
|
||||||
"grams": MessageLookupByLibrary.simpleMessage("g"),
|
"grams": MessageLookupByLibrary.simpleMessage("гр"),
|
||||||
"height_measurements":
|
"height_measurements":
|
||||||
MessageLookupByLibrary.simpleMessage("Height Measurement"),
|
MessageLookupByLibrary.simpleMessage("Замер роста"),
|
||||||
|
"hide": MessageLookupByLibrary.simpleMessage("Свернуть"),
|
||||||
"hip_circumference":
|
"hip_circumference":
|
||||||
MessageLookupByLibrary.simpleMessage("Hip Circumference"),
|
MessageLookupByLibrary.simpleMessage("Обхват бедер"),
|
||||||
"hips": MessageLookupByLibrary.simpleMessage("Hips"),
|
"hips": MessageLookupByLibrary.simpleMessage("Бедра"),
|
||||||
"in_progress": MessageLookupByLibrary.simpleMessage("In Progress"),
|
"in_progress": MessageLookupByLibrary.simpleMessage("В процессе"),
|
||||||
"initial_measurements":
|
"initial_measurements":
|
||||||
MessageLookupByLibrary.simpleMessage("Initial Measurements"),
|
MessageLookupByLibrary.simpleMessage("Первичные замеры"),
|
||||||
"language": MessageLookupByLibrary.simpleMessage("Language"),
|
"language": MessageLookupByLibrary.simpleMessage("Язык"),
|
||||||
"last_name": MessageLookupByLibrary.simpleMessage("Last Name"),
|
"last_name": MessageLookupByLibrary.simpleMessage("Фамилия"),
|
||||||
"last_name_empty":
|
"last_name_empty": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("Last name is required"),
|
"Фамилия обязательна для заполнения"),
|
||||||
"last_name_short": MessageLookupByLibrary.simpleMessage(
|
"last_name_short": MessageLookupByLibrary.simpleMessage(
|
||||||
"Last name must be at least 6 characters long"),
|
"В фамилии должен быть минимум 6 символов"),
|
||||||
"lbl_english": MessageLookupByLibrary.simpleMessage("English"),
|
"lbl_english": MessageLookupByLibrary.simpleMessage("English"),
|
||||||
"loading": MessageLookupByLibrary.simpleMessage("Loading..."),
|
"link_was_copied":
|
||||||
"male": MessageLookupByLibrary.simpleMessage("Male"),
|
MessageLookupByLibrary.simpleMessage("Ссылка успешно скопирована"),
|
||||||
|
"loading": MessageLookupByLibrary.simpleMessage("Загрузка..."),
|
||||||
|
"male": MessageLookupByLibrary.simpleMessage("Мужской"),
|
||||||
|
"meal": MessageLookupByLibrary.simpleMessage("Приём пищи"),
|
||||||
|
"meat_type": MessageLookupByLibrary.simpleMessage("С мясом"),
|
||||||
|
"meat_type_desc": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Диета с мясом полезная и сбалансированная. Включает в себя нежирное мясо: курицу, индейку, кролика или говядину. В сочетании с овощами получаете все необходимые витамины и минералы. Не забывайте о порциях и старайтесь есть медленно, прислушиваясь к своему организму."),
|
||||||
|
"milliliter": MessageLookupByLibrary.simpleMessage("мл"),
|
||||||
"msg_network_err":
|
"msg_network_err":
|
||||||
MessageLookupByLibrary.simpleMessage("Network error!"),
|
MessageLookupByLibrary.simpleMessage("Сетевая ошибка!"),
|
||||||
"msg_something_went_wrong":
|
"msg_something_went_wrong":
|
||||||
MessageLookupByLibrary.simpleMessage("Something went wrong!"),
|
MessageLookupByLibrary.simpleMessage("Что то пошло не так!"),
|
||||||
"my_blog": MessageLookupByLibrary.simpleMessage("My Blog"),
|
"my_blog": MessageLookupByLibrary.simpleMessage("Мой блог"),
|
||||||
"my_settings": MessageLookupByLibrary.simpleMessage("My Settings"),
|
"my_settings": MessageLookupByLibrary.simpleMessage("Мои настройки"),
|
||||||
"name_empty":
|
"name_empty": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("Username is required"),
|
"Имя пользователя обязательно для заполнения"),
|
||||||
"name_short": MessageLookupByLibrary.simpleMessage(
|
"name_short": MessageLookupByLibrary.simpleMessage(
|
||||||
"Username must be at least 6 characters long"),
|
"В имени пользователя должно быть минимум 6 символов"),
|
||||||
"no": MessageLookupByLibrary.simpleMessage("No"),
|
"no": MessageLookupByLibrary.simpleMessage("Нет"),
|
||||||
"no_account":
|
"no_account":
|
||||||
MessageLookupByLibrary.simpleMessage("I do not have an account"),
|
MessageLookupByLibrary.simpleMessage("У меня нет аккаунта"),
|
||||||
"password": MessageLookupByLibrary.simpleMessage("Password"),
|
"password": MessageLookupByLibrary.simpleMessage("Пароль"),
|
||||||
"password_confirmation":
|
"password_confirmation":
|
||||||
MessageLookupByLibrary.simpleMessage("Confirm Password"),
|
MessageLookupByLibrary.simpleMessage("Подтвердите пароль"),
|
||||||
"password_confirmation_mismatch":
|
"password_confirmation_mismatch":
|
||||||
MessageLookupByLibrary.simpleMessage("Passwords do not match"),
|
MessageLookupByLibrary.simpleMessage("Пароли не совпадают"),
|
||||||
"password_empty":
|
"password_empty": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("Password is required"),
|
"Пароль обязателен для заполнения"),
|
||||||
"password_short": MessageLookupByLibrary.simpleMessage(
|
"password_short": MessageLookupByLibrary.simpleMessage(
|
||||||
"Password must be at least 6 characters long"),
|
"В пароле должно быть минимум 6 символов"),
|
||||||
"pcs": MessageLookupByLibrary.simpleMessage("pcs"),
|
"pcs": MessageLookupByLibrary.simpleMessage("шт"),
|
||||||
"place_of_living":
|
"place_of_living":
|
||||||
MessageLookupByLibrary.simpleMessage("Place of Residence"),
|
MessageLookupByLibrary.simpleMessage("Место проживания"),
|
||||||
"plans_complete":
|
"plans_complete":
|
||||||
MessageLookupByLibrary.simpleMessage("Completed Plans"),
|
MessageLookupByLibrary.simpleMessage("Пройденные планы"),
|
||||||
"preferred_language": MessageLookupByLibrary.simpleMessage(
|
"preferred_language":
|
||||||
"Preferred Language of Communication"),
|
MessageLookupByLibrary.simpleMessage("Предпочитаемый язык общения"),
|
||||||
"pressure_empty": MessageLookupByLibrary.simpleMessage(
|
"pressure_empty": MessageLookupByLibrary.simpleMessage(
|
||||||
"All blood pressure readings are required"),
|
"Все показатели давления обязательны к заполнению"),
|
||||||
"pressure_is_not_a_number": MessageLookupByLibrary.simpleMessage(
|
"pressure_is_not_a_number": MessageLookupByLibrary.simpleMessage(
|
||||||
"All blood pressure readings must be numbers"),
|
"Все показатели давления должны быть числами"),
|
||||||
"profile": MessageLookupByLibrary.simpleMessage("Profile"),
|
"profile": MessageLookupByLibrary.simpleMessage("Профиль"),
|
||||||
"save": MessageLookupByLibrary.simpleMessage("Save"),
|
"proteins": MessageLookupByLibrary.simpleMessage("Белки"),
|
||||||
"settings": MessageLookupByLibrary.simpleMessage("Settings"),
|
"save": MessageLookupByLibrary.simpleMessage("Сохранить"),
|
||||||
"skip": MessageLookupByLibrary.simpleMessage("Skip"),
|
"settings": MessageLookupByLibrary.simpleMessage("Настройки"),
|
||||||
|
"share": MessageLookupByLibrary.simpleMessage("Поделиться"),
|
||||||
|
"skip": MessageLookupByLibrary.simpleMessage("Пропустить"),
|
||||||
|
"startDiet": MessageLookupByLibrary.simpleMessage("Начать диету"),
|
||||||
"tell_your_schedule": MessageLookupByLibrary.simpleMessage(
|
"tell_your_schedule": MessageLookupByLibrary.simpleMessage(
|
||||||
"Describe your daily routine freely, such as when you wake up, eat, and go to bed:"),
|
"Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:"),
|
||||||
"unfavorite_foods":
|
"unfavorite_foods":
|
||||||
MessageLookupByLibrary.simpleMessage("Least Favorite Foods"),
|
MessageLookupByLibrary.simpleMessage("Нелюбимые продукты"),
|
||||||
"up_pressure":
|
"up_pressure": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("Upper Pressure Readings:"),
|
"Верхние показатели давления:"),
|
||||||
"user_authorization":
|
"user_authorization":
|
||||||
MessageLookupByLibrary.simpleMessage("Authentication"),
|
MessageLookupByLibrary.simpleMessage("Аутентификация"),
|
||||||
"user_registration":
|
"user_registration":
|
||||||
MessageLookupByLibrary.simpleMessage("User Registration"),
|
MessageLookupByLibrary.simpleMessage("Регистрация пользователя"),
|
||||||
"username": MessageLookupByLibrary.simpleMessage("Username"),
|
"username": MessageLookupByLibrary.simpleMessage("Имя пользователя"),
|
||||||
"waist": MessageLookupByLibrary.simpleMessage("Waist"),
|
"vegan_type": MessageLookupByLibrary.simpleMessage("Вегетарианская"),
|
||||||
|
"vegan_type_desc": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Диета основана на потреблении растительной пищи и отказе от продуктов животного происхождения. Такой тип питания может быть разнообразным и вкусным, а также полезным для здоровья."),
|
||||||
|
"waist": MessageLookupByLibrary.simpleMessage("Талия"),
|
||||||
"waist_circumference":
|
"waist_circumference":
|
||||||
MessageLookupByLibrary.simpleMessage("Waist Circumference"),
|
MessageLookupByLibrary.simpleMessage("Обхват талии"),
|
||||||
"weight": MessageLookupByLibrary.simpleMessage("Weight"),
|
"weight": MessageLookupByLibrary.simpleMessage("Вес"),
|
||||||
"weight_chart": MessageLookupByLibrary.simpleMessage("Weight Chart"),
|
"weight_chart": MessageLookupByLibrary.simpleMessage("График веса"),
|
||||||
"weight_measurements":
|
"weight_measurements":
|
||||||
MessageLookupByLibrary.simpleMessage("Weight Measurement"),
|
MessageLookupByLibrary.simpleMessage("Замер веса"),
|
||||||
"what_is_your_name":
|
"what_is_your_name":
|
||||||
MessageLookupByLibrary.simpleMessage("What is your name?"),
|
MessageLookupByLibrary.simpleMessage("Как вас зовут?"),
|
||||||
"wrong_credentials":
|
"wrong_credentials": MessageLookupByLibrary.simpleMessage(
|
||||||
MessageLookupByLibrary.simpleMessage("Invalid user credentials"),
|
"Неверные данные пользователя"),
|
||||||
"your_blood_pressure":
|
"your_blood_pressure":
|
||||||
MessageLookupByLibrary.simpleMessage("Your Blood Pressure?"),
|
MessageLookupByLibrary.simpleMessage("Ваше артериальное давление?"),
|
||||||
"your_favorite_sports":
|
"your_favorite_sports":
|
||||||
MessageLookupByLibrary.simpleMessage("Your Favorite Sports?"),
|
MessageLookupByLibrary.simpleMessage("Ваши спортивные увлечения?"),
|
||||||
"your_gender": MessageLookupByLibrary.simpleMessage("Your Gender?"),
|
"your_gender": MessageLookupByLibrary.simpleMessage("Ваш пол?"),
|
||||||
"your_height": MessageLookupByLibrary.simpleMessage("Your Height:"),
|
"your_height": MessageLookupByLibrary.simpleMessage("Ваш рост:"),
|
||||||
"your_schedule":
|
"your_schedule": MessageLookupByLibrary.simpleMessage("Ваш режим дня?"),
|
||||||
MessageLookupByLibrary.simpleMessage("Your Daily Routine?"),
|
"your_weight": MessageLookupByLibrary.simpleMessage("Ваш вес:")
|
||||||
"your_weight": MessageLookupByLibrary.simpleMessage("Your Weight:")
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,175 +0,0 @@
|
|||||||
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
|
|
||||||
// This is a library that provides messages for a ru locale. All the
|
|
||||||
// messages from the main program should be duplicated here with the same
|
|
||||||
// function name.
|
|
||||||
|
|
||||||
// Ignore issues from commonly used lints in this file.
|
|
||||||
// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
|
|
||||||
// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
|
|
||||||
// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
|
|
||||||
// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes
|
|
||||||
// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes
|
|
||||||
|
|
||||||
import 'package:intl/intl.dart';
|
|
||||||
import 'package:intl/message_lookup_by_library.dart';
|
|
||||||
|
|
||||||
final messages = new MessageLookup();
|
|
||||||
|
|
||||||
typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
|
||||||
|
|
||||||
class MessageLookup extends MessageLookupByLibrary {
|
|
||||||
String get localeName => 'ru';
|
|
||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
|
||||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
|
||||||
"Moscow": MessageLookupByLibrary.simpleMessage("Москва"),
|
|
||||||
"Russia": MessageLookupByLibrary.simpleMessage("Россия"),
|
|
||||||
"active": MessageLookupByLibrary.simpleMessage("Активен"),
|
|
||||||
"add_measure": MessageLookupByLibrary.simpleMessage("Добавить замер"),
|
|
||||||
"additional_information":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Дополнительная информация"),
|
|
||||||
"admin": MessageLookupByLibrary.simpleMessage("Админ"),
|
|
||||||
"allergies_presence":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Наличие аллергии"),
|
|
||||||
"archived": MessageLookupByLibrary.simpleMessage("В архиве"),
|
|
||||||
"authentificate": MessageLookupByLibrary.simpleMessage("Войти"),
|
|
||||||
"average_pressure": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Средние показатели давления:"),
|
|
||||||
"bodymass_chart": MessageLookupByLibrary.simpleMessage("График ИМТ"),
|
|
||||||
"chat": MessageLookupByLibrary.simpleMessage("Чат"),
|
|
||||||
"chest": MessageLookupByLibrary.simpleMessage("Грудь"),
|
|
||||||
"chest_circumference":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Обхват груди"),
|
|
||||||
"circumference_empty": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Все замеры обязательны к заполнению"),
|
|
||||||
"circumference_is_not_a_number": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Все замеры должны быть числами"),
|
|
||||||
"circumferences_chart":
|
|
||||||
MessageLookupByLibrary.simpleMessage("График обхватов"),
|
|
||||||
"city": MessageLookupByLibrary.simpleMessage("Город"),
|
|
||||||
"city_of_living":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Город проживания"),
|
|
||||||
"continueButton": MessageLookupByLibrary.simpleMessage("Продолжить"),
|
|
||||||
"country": MessageLookupByLibrary.simpleMessage("Страна"),
|
|
||||||
"date_of_birth": MessageLookupByLibrary.simpleMessage("Дата рождения"),
|
|
||||||
"diary": MessageLookupByLibrary.simpleMessage("Дневник"),
|
|
||||||
"do_you_have_hypertension_tendency":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Есть ли у вас гипертония?"),
|
|
||||||
"do_you_have_hypotension_tendency":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Есть ли у вас гипотония?"),
|
|
||||||
"do_you_take_pills": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Принимаете ли вы лекарства или бады?"),
|
|
||||||
"down_pressure":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Нижние показатели давления:"),
|
|
||||||
"draft": MessageLookupByLibrary.simpleMessage("Черновик"),
|
|
||||||
"email": MessageLookupByLibrary.simpleMessage("Элетронная почта"),
|
|
||||||
"email_empty": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Необходимо ввести адрес электронной почты"),
|
|
||||||
"email_invalid": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Некорректный адрес электронной почты"),
|
|
||||||
"enter_additional_information": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Введите любую дополнительную информацию на своё усмотрение:"),
|
|
||||||
"enter_information":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Введите информацию..."),
|
|
||||||
"exit": MessageLookupByLibrary.simpleMessage("Выйти"),
|
|
||||||
"favorite_foods":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Любимые продукты"),
|
|
||||||
"favorite_unfavorite_foods": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Ваши любимые/нелюбимые продукты питания?"),
|
|
||||||
"female": MessageLookupByLibrary.simpleMessage("Женский"),
|
|
||||||
"fill_in_information":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Заполните информацию:"),
|
|
||||||
"finish": MessageLookupByLibrary.simpleMessage("Завершить"),
|
|
||||||
"first_name": MessageLookupByLibrary.simpleMessage("Имя"),
|
|
||||||
"first_name_empty": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Имя обязательно для заполнения"),
|
|
||||||
"first_name_short": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"В имени должен быть минимум 1 символ"),
|
|
||||||
"gr": MessageLookupByLibrary.simpleMessage("гр"),
|
|
||||||
"grams": MessageLookupByLibrary.simpleMessage("гр"),
|
|
||||||
"height_measurements":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Замер роста"),
|
|
||||||
"hip_circumference":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Обхват бедер"),
|
|
||||||
"hips": MessageLookupByLibrary.simpleMessage("Бедра"),
|
|
||||||
"in_progress": MessageLookupByLibrary.simpleMessage("В процессе"),
|
|
||||||
"initial_measurements":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Первичные замеры"),
|
|
||||||
"language": MessageLookupByLibrary.simpleMessage("Язык"),
|
|
||||||
"last_name": MessageLookupByLibrary.simpleMessage("Фамилия"),
|
|
||||||
"last_name_empty": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Фамилия обязательна для заполнения"),
|
|
||||||
"last_name_short": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"В фамилии должен быть минимум 6 символов"),
|
|
||||||
"lbl_english": MessageLookupByLibrary.simpleMessage("English"),
|
|
||||||
"loading": MessageLookupByLibrary.simpleMessage("Загрузка..."),
|
|
||||||
"male": MessageLookupByLibrary.simpleMessage("Мужской"),
|
|
||||||
"msg_network_err":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Сетевая ошибка!"),
|
|
||||||
"msg_something_went_wrong":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Что то пошло не так!"),
|
|
||||||
"my_blog": MessageLookupByLibrary.simpleMessage("Мой блог"),
|
|
||||||
"my_settings": MessageLookupByLibrary.simpleMessage("Мои настройки"),
|
|
||||||
"name_empty": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Имя пользователя обязательно для заполнения"),
|
|
||||||
"name_short": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"В имени пользователя должно быть минимум 6 символов"),
|
|
||||||
"no": MessageLookupByLibrary.simpleMessage("Нет"),
|
|
||||||
"no_account":
|
|
||||||
MessageLookupByLibrary.simpleMessage("У меня нет аккаунта"),
|
|
||||||
"password": MessageLookupByLibrary.simpleMessage("Пароль"),
|
|
||||||
"password_confirmation":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Подтвердите пароль"),
|
|
||||||
"password_confirmation_mismatch":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Пароли не совпадают"),
|
|
||||||
"password_empty": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Пароль обязателен для заполнения"),
|
|
||||||
"password_short": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"В пароле должно быть минимум 6 символов"),
|
|
||||||
"pcs": MessageLookupByLibrary.simpleMessage("шт"),
|
|
||||||
"place_of_living":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Место проживания"),
|
|
||||||
"plans_complete":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Пройденные планы"),
|
|
||||||
"preferred_language":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Предпочитаемый язык общения"),
|
|
||||||
"pressure_empty": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Все показатели давления обязательны к заполнению"),
|
|
||||||
"pressure_is_not_a_number": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Все показатели давления должны быть числами"),
|
|
||||||
"profile": MessageLookupByLibrary.simpleMessage("Профиль"),
|
|
||||||
"save": MessageLookupByLibrary.simpleMessage("Сохранить"),
|
|
||||||
"settings": MessageLookupByLibrary.simpleMessage("Настройки"),
|
|
||||||
"skip": MessageLookupByLibrary.simpleMessage("Пропустить"),
|
|
||||||
"tell_your_schedule": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:"),
|
|
||||||
"unfavorite_foods":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Нелюбимые продукты"),
|
|
||||||
"up_pressure": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Верхние показатели давления:"),
|
|
||||||
"user_authorization":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Аутентификация"),
|
|
||||||
"user_registration":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Регистрация пользователя"),
|
|
||||||
"username": MessageLookupByLibrary.simpleMessage("Имя пользователя"),
|
|
||||||
"waist": MessageLookupByLibrary.simpleMessage("Талия"),
|
|
||||||
"waist_circumference":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Обхват талии"),
|
|
||||||
"weight": MessageLookupByLibrary.simpleMessage("Вес"),
|
|
||||||
"weight_chart": MessageLookupByLibrary.simpleMessage("График веса"),
|
|
||||||
"weight_measurements":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Замер веса"),
|
|
||||||
"what_is_your_name":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Как вас зовут?"),
|
|
||||||
"wrong_credentials": MessageLookupByLibrary.simpleMessage(
|
|
||||||
"Неверные данные пользователя"),
|
|
||||||
"your_blood_pressure":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Ваше артериальное давление?"),
|
|
||||||
"your_favorite_sports":
|
|
||||||
MessageLookupByLibrary.simpleMessage("Ваши спортивные увлечения?"),
|
|
||||||
"your_gender": MessageLookupByLibrary.simpleMessage("Ваш пол?"),
|
|
||||||
"your_height": MessageLookupByLibrary.simpleMessage("Ваш рост:"),
|
|
||||||
"your_schedule": MessageLookupByLibrary.simpleMessage("Ваш режим дня?"),
|
|
||||||
"your_weight": MessageLookupByLibrary.simpleMessage("Ваш вес:")
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,100 +1,132 @@
|
|||||||
{
|
{
|
||||||
"user_registration": "User Registration",
|
"user_registration": "Регистрация пользователя",
|
||||||
"email": "Email",
|
"email": "Элетронная почта",
|
||||||
"username": "Username",
|
"username": "Имя пользователя",
|
||||||
"password": "Password",
|
"password": "Пароль",
|
||||||
"password_confirmation": "Confirm Password",
|
"password_confirmation": "Подтвердите пароль",
|
||||||
"wrong_credentials": "Invalid user credentials",
|
"wrong_credentials": "Неверные данные пользователя",
|
||||||
"first_name": "First Name",
|
"first_name": "Имя",
|
||||||
"last_name": "Last Name",
|
"last_name": "Фамилия",
|
||||||
"what_is_your_name": "What is your name?",
|
"what_is_your_name": "Как вас зовут?",
|
||||||
"date_of_birth": "Date of Birth",
|
"date_of_birth": "Дата рождения",
|
||||||
"country": "Country",
|
"country": "Страна",
|
||||||
"Russia": "Russia",
|
"Russia": "Россия",
|
||||||
"city": "City",
|
"city": "Город",
|
||||||
"Moscow": "Moscow",
|
"Moscow": "Москва",
|
||||||
"place_of_living": "Place of Residence",
|
"place_of_living": "Место проживания",
|
||||||
"hip_circumference": "Hip Circumference",
|
"hip_circumference": "Обхват бедер",
|
||||||
"chest_circumference": "Chest Circumference",
|
"chest_circumference": "Обхват груди",
|
||||||
"waist_circumference": "Waist Circumference",
|
"waist_circumference": "Обхват талии",
|
||||||
"initial_measurements": "Initial Measurements",
|
"initial_measurements": "Первичные замеры",
|
||||||
"male": "Male",
|
"male": "Мужской",
|
||||||
"female": "Female",
|
"female": "Женский",
|
||||||
"weight_measurements": "Weight Measurement",
|
"weight_measurements": "Замер веса",
|
||||||
"your_weight": "Your Weight:",
|
"your_weight": "Ваш вес:",
|
||||||
"height_measurements": "Height Measurement",
|
"height_measurements": "Замер роста",
|
||||||
"your_height": "Your Height:",
|
"your_height": "Ваш рост:",
|
||||||
"allergies_presence": "Presence of Allergies",
|
"allergies_presence": "Наличие аллергии",
|
||||||
"do_you_take_pills": "Do you take any medications or supplements?",
|
"do_you_take_pills": "Принимаете ли вы лекарства или бады?",
|
||||||
"your_gender": "Your Gender?",
|
"your_gender": "Ваш пол?",
|
||||||
"no": "No",
|
"no": "Нет",
|
||||||
"do_you_have_hypertension_tendency": "Do you have a tendency for hypertension?",
|
"do_you_have_hypertension_tendency": "Есть ли у вас гипертония?",
|
||||||
"your_blood_pressure": "Your Blood Pressure?",
|
"your_blood_pressure": "Ваше артериальное давление?",
|
||||||
"average_pressure": "Average Pressure Readings:",
|
"average_pressure": "Средние показатели давления:",
|
||||||
"up_pressure": "Upper Pressure Readings:",
|
"up_pressure": "Верхние показатели давления:",
|
||||||
"down_pressure": "Lower Pressure Readings:",
|
"down_pressure": "Нижние показатели давления:",
|
||||||
"do_you_have_hypotension_tendency": "Do you have a tendency for hypotension?",
|
"do_you_have_hypotension_tendency": "Есть ли у вас гипотония?",
|
||||||
"your_favorite_sports": "Your Favorite Sports?",
|
"your_favorite_sports": "Ваши спортивные увлечения?",
|
||||||
"favorite_foods": "Favorite Foods",
|
"favorite_foods": "Любимые продукты",
|
||||||
"favorite_unfavorite_foods": "Your Favorite/Least Favorite Foods?",
|
"favorite_unfavorite_foods": "Ваши любимые/нелюбимые продукты питания?",
|
||||||
"unfavorite_foods": "Least Favorite Foods",
|
"unfavorite_foods": "Нелюбимые продукты",
|
||||||
"your_schedule": "Your Daily Routine?",
|
"your_schedule": "Ваш режим дня?",
|
||||||
"tell_your_schedule": "Describe your daily routine freely, such as when you wake up, eat, and go to bed:",
|
"tell_your_schedule": "Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:",
|
||||||
"additional_information": "Additional Information",
|
"additional_information": "Дополнительная информация",
|
||||||
"enter_additional_information": "Enter any additional information at your discretion:",
|
"enter_additional_information": "Введите любую дополнительную информацию на своё усмотрение:",
|
||||||
"lbl_english": "English",
|
"lbl_english": "English",
|
||||||
"finish": "Finish",
|
"finish": "Завершить",
|
||||||
"preferred_language": "Preferred Language of Communication",
|
"preferred_language": "Предпочитаемый язык общения",
|
||||||
"continueButton": "Continue",
|
"continueButton": "Продолжить",
|
||||||
"skip": "Skip",
|
"skip": "Пропустить",
|
||||||
"fill_in_information": "Fill in the information:",
|
"fill_in_information": "Заполните информацию:",
|
||||||
"enter_information": "Enter information...",
|
"enter_information": "Введите информацию...",
|
||||||
"msg_network_err": "Network error!",
|
"msg_network_err": "Сетевая ошибка!",
|
||||||
"msg_something_went_wrong": "Something went wrong!",
|
"msg_something_went_wrong": "Что то пошло не так!",
|
||||||
"email_empty": "Email address is required",
|
"email_empty": "Необходимо ввести адрес электронной почты",
|
||||||
"email_invalid": "Invalid email address",
|
"email_invalid": "Некорректный адрес электронной почты",
|
||||||
"password_empty": "Password is required",
|
"password_empty": "Пароль обязателен для заполнения",
|
||||||
"password_short": "Password must be at least 6 characters long",
|
"password_short": "В пароле должно быть минимум 6 символов",
|
||||||
"name_empty": "Username is required",
|
"name_empty": "Имя пользователя обязательно для заполнения",
|
||||||
"name_short": "Username must be at least 6 characters long",
|
"name_short": "В имени пользователя должно быть минимум 6 символов",
|
||||||
"password_confirmation_mismatch": "Passwords do not match",
|
"password_confirmation_mismatch": "Пароли не совпадают",
|
||||||
"first_name_empty": "First name is required",
|
"first_name_empty": "Имя обязательно для заполнения",
|
||||||
"first_name_short": "First name must be at least 1 character long",
|
"first_name_short": "В имени должен быть минимум 1 символ",
|
||||||
"last_name_empty": "Last name is required",
|
"last_name_empty": "Фамилия обязательна для заполнения",
|
||||||
"last_name_short": "Last name must be at least 6 characters long",
|
"last_name_short": "В фамилии должен быть минимум 6 символов",
|
||||||
"circumference_empty": "All measurements are required",
|
"circumference_empty": "Все замеры обязательны к заполнению",
|
||||||
"circumference_is_not_a_number": "All measurements must be numbers",
|
"circumference_is_not_a_number": "Все замеры должны быть числами",
|
||||||
"pressure_empty": "All blood pressure readings are required",
|
"pressure_empty": "Все показатели давления обязательны к заполнению",
|
||||||
"pressure_is_not_a_number": "All blood pressure readings must be numbers",
|
"pressure_is_not_a_number": "Все показатели давления должны быть числами",
|
||||||
"no_account": "I do not have an account",
|
"no_account": "У меня нет аккаунта",
|
||||||
"authentificate": "Log In",
|
"authentificate": "Войти",
|
||||||
"user_authorization": "Authentication",
|
"user_authorization": "Аутентификация",
|
||||||
"loading": "Loading...",
|
"loading": "Загрузка...",
|
||||||
"weight_chart": "Weight Chart",
|
"weight_chart": "График веса",
|
||||||
"circumferences_chart": "Circumference Chart",
|
"circumferences_chart": "График обхватов",
|
||||||
"city_of_living": "City of Residence",
|
"city_of_living": "Город проживания",
|
||||||
"bodymass_chart": "BMI Chart",
|
"bodymass_chart": "График ИМТ",
|
||||||
"chest": "Chest",
|
"chest": "Грудь",
|
||||||
"waist": "Waist",
|
"waist": "Талия",
|
||||||
"hips": "Hips",
|
"hips": "Бедра",
|
||||||
"exit": "Log Out",
|
"exit": "Выйти",
|
||||||
"active": "Active",
|
"active": "Активен",
|
||||||
"archived": "Archived",
|
"archived": "В архиве",
|
||||||
"draft": "Draft",
|
"draft": "Черновик",
|
||||||
"my_blog": "My Blog",
|
"my_blog": "Мой блог",
|
||||||
"language": "Language",
|
"language": "Язык",
|
||||||
"in_progress": "In Progress",
|
"in_progress": "В процессе",
|
||||||
"add_measure": "Add Measurement",
|
"add_measure": "Добавить замер",
|
||||||
"weight": "Weight",
|
"weight": "Вес",
|
||||||
"plans_complete": "Completed Plans",
|
"plans_complete": "Пройденные планы",
|
||||||
"my_settings": "My Settings",
|
"my_settings": "Мои настройки",
|
||||||
"settings": "Settings",
|
"settings": "Настройки",
|
||||||
"profile": "Profile",
|
"profile": "Профиль",
|
||||||
"chat": "Chat",
|
"chat": "Чат",
|
||||||
"admin": "Admin",
|
"admin": "Админ",
|
||||||
"diary": "Diary",
|
"diary": "Дневник",
|
||||||
"save": "Save",
|
"save": "Сохранить",
|
||||||
"pcs": "pcs",
|
"pcs": "шт",
|
||||||
"gr": "g",
|
"gr": "гр",
|
||||||
"grams": "g"
|
"milliliter": "мл",
|
||||||
|
"grams": "гр",
|
||||||
|
"startDiet": "Начать диету",
|
||||||
|
"comments": "Комментарии",
|
||||||
|
"comment": "комментарий",
|
||||||
|
"another_form_of_comment": "комментария",
|
||||||
|
"about_diet": "Об этой диете",
|
||||||
|
"days": "дней",
|
||||||
|
"day": "День",
|
||||||
|
"another_form_of_day": "дня",
|
||||||
|
"comments_plural": "комментариев",
|
||||||
|
"meal": "Приём пищи",
|
||||||
|
"diet_author": "Автор диеты",
|
||||||
|
"hide": "Свернуть",
|
||||||
|
"expand": "Показать полностью",
|
||||||
|
"copy_link": "Скопировать ссылку",
|
||||||
|
"share": "Поделиться",
|
||||||
|
"complain": "Пожаловаться",
|
||||||
|
"vegan_type": "Вегетарианская",
|
||||||
|
"alko_type": "Алкоголь",
|
||||||
|
"meat_type": "С мясом",
|
||||||
|
"corb_type": "Мучное",
|
||||||
|
"vegan_type_desc": "Диета основана на потреблении растительной пищи и отказе от продуктов животного происхождения. Такой тип питания может быть разнообразным и вкусным, а также полезным для здоровья.",
|
||||||
|
"alko_type_desc": "С некоторыми видами диет можно употреблять алкоголь в умеренных количествах. Рекомендуется совмещать вместе с низкокалорийными закусками.",
|
||||||
|
"corb_type_desc": "Если вы любите мучные продукты, но хотите придерживаться диеты, вам подходит диета с добавленим мучных блюд на основе цельнозерновых вариантов. В них больше сложных углеводов и клетчатки, что способствует длительному чувству сытости и поддерживает здоровье пищеварительной системы.",
|
||||||
|
"meat_type_desc": "Диета с мясом полезная и сбалансированная. Включает в себя нежирное мясо: курицу, индейку, кролика или говядину. В сочетании с овощами получаете все необходимые витамины и минералы. Не забывайте о порциях и старайтесь есть медленно, прислушиваясь к своему организму.",
|
||||||
|
"diet_plan": "План диеты",
|
||||||
|
"calories": "Калории",
|
||||||
|
"proteins": "Белки",
|
||||||
|
"fats": "Жиры",
|
||||||
|
"carbohydrates": "Углеводы",
|
||||||
|
"answer": "Ответить",
|
||||||
|
"link_was_copied": "Ссылка успешно скопирована"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
{
|
|
||||||
"user_registration": "Регистрация пользователя",
|
|
||||||
"email": "Элетронная почта",
|
|
||||||
"username": "Имя пользователя",
|
|
||||||
"password": "Пароль",
|
|
||||||
"password_confirmation": "Подтвердите пароль",
|
|
||||||
"wrong_credentials": "Неверные данные пользователя",
|
|
||||||
"first_name": "Имя",
|
|
||||||
"last_name": "Фамилия",
|
|
||||||
"what_is_your_name": "Как вас зовут?",
|
|
||||||
"date_of_birth": "Дата рождения",
|
|
||||||
"country": "Страна",
|
|
||||||
"Russia": "Россия",
|
|
||||||
"city": "Город",
|
|
||||||
"Moscow": "Москва",
|
|
||||||
"place_of_living": "Место проживания",
|
|
||||||
"hip_circumference": "Обхват бедер",
|
|
||||||
"chest_circumference": "Обхват груди",
|
|
||||||
"waist_circumference": "Обхват талии",
|
|
||||||
"initial_measurements": "Первичные замеры",
|
|
||||||
"male": "Мужской",
|
|
||||||
"female": "Женский",
|
|
||||||
"weight_measurements": "Замер веса",
|
|
||||||
"your_weight": "Ваш вес:",
|
|
||||||
"height_measurements": "Замер роста",
|
|
||||||
"your_height": "Ваш рост:",
|
|
||||||
"allergies_presence": "Наличие аллергии",
|
|
||||||
"do_you_take_pills": "Принимаете ли вы лекарства или бады?",
|
|
||||||
"your_gender": "Ваш пол?",
|
|
||||||
"no": "Нет",
|
|
||||||
"do_you_have_hypertension_tendency": "Есть ли у вас гипертония?",
|
|
||||||
"your_blood_pressure": "Ваше артериальное давление?",
|
|
||||||
"average_pressure": "Средние показатели давления:",
|
|
||||||
"up_pressure": "Верхние показатели давления:",
|
|
||||||
"down_pressure": "Нижние показатели давления:",
|
|
||||||
"do_you_have_hypotension_tendency": "Есть ли у вас гипотония?",
|
|
||||||
"your_favorite_sports": "Ваши спортивные увлечения?",
|
|
||||||
"favorite_foods": "Любимые продукты",
|
|
||||||
"favorite_unfavorite_foods": "Ваши любимые/нелюбимые продукты питания?",
|
|
||||||
"unfavorite_foods": "Нелюбимые продукты",
|
|
||||||
"your_schedule": "Ваш режим дня?",
|
|
||||||
"tell_your_schedule": "Расскажите в свободной форме о том как просыпаетесь, когда едите, когда ложитесь спать:",
|
|
||||||
"additional_information": "Дополнительная информация",
|
|
||||||
"enter_additional_information": "Введите любую дополнительную информацию на своё усмотрение:",
|
|
||||||
"lbl_english": "English",
|
|
||||||
"finish": "Завершить",
|
|
||||||
"preferred_language": "Предпочитаемый язык общения",
|
|
||||||
"continueButton": "Продолжить",
|
|
||||||
"skip": "Пропустить",
|
|
||||||
"fill_in_information": "Заполните информацию:",
|
|
||||||
"enter_information": "Введите информацию...",
|
|
||||||
"msg_network_err": "Сетевая ошибка!",
|
|
||||||
"msg_something_went_wrong": "Что то пошло не так!",
|
|
||||||
"email_empty": "Необходимо ввести адрес электронной почты",
|
|
||||||
"email_invalid": "Некорректный адрес электронной почты",
|
|
||||||
"password_empty": "Пароль обязателен для заполнения",
|
|
||||||
"password_short": "В пароле должно быть минимум 6 символов",
|
|
||||||
"name_empty": "Имя пользователя обязательно для заполнения",
|
|
||||||
"name_short": "В имени пользователя должно быть минимум 6 символов",
|
|
||||||
"password_confirmation_mismatch": "Пароли не совпадают",
|
|
||||||
"first_name_empty": "Имя обязательно для заполнения",
|
|
||||||
"first_name_short": "В имени должен быть минимум 1 символ",
|
|
||||||
"last_name_empty": "Фамилия обязательна для заполнения",
|
|
||||||
"last_name_short": "В фамилии должен быть минимум 6 символов",
|
|
||||||
"circumference_empty": "Все замеры обязательны к заполнению",
|
|
||||||
"circumference_is_not_a_number": "Все замеры должны быть числами",
|
|
||||||
"pressure_empty": "Все показатели давления обязательны к заполнению",
|
|
||||||
"pressure_is_not_a_number": "Все показатели давления должны быть числами",
|
|
||||||
"no_account": "У меня нет аккаунта",
|
|
||||||
"authentificate": "Войти",
|
|
||||||
"user_authorization": "Аутентификация",
|
|
||||||
"loading": "Загрузка...",
|
|
||||||
"weight_chart": "График веса",
|
|
||||||
"circumferences_chart": "График обхватов",
|
|
||||||
"city_of_living": "Город проживания",
|
|
||||||
"bodymass_chart": "График ИМТ",
|
|
||||||
"chest": "Грудь",
|
|
||||||
"waist": "Талия",
|
|
||||||
"hips": "Бедра",
|
|
||||||
"exit": "Выйти",
|
|
||||||
"active": "Активен",
|
|
||||||
"archived": "В архиве",
|
|
||||||
"draft": "Черновик",
|
|
||||||
"my_blog": "Мой блог",
|
|
||||||
"language": "Язык",
|
|
||||||
"in_progress": "В процессе",
|
|
||||||
"add_measure": "Добавить замер",
|
|
||||||
"weight": "Вес",
|
|
||||||
"plans_complete": "Пройденные планы",
|
|
||||||
"my_settings": "Мои настройки",
|
|
||||||
"settings": "Настройки",
|
|
||||||
"profile": "Профиль",
|
|
||||||
"chat": "Чат",
|
|
||||||
"admin": "Админ",
|
|
||||||
"diary": "Дневник",
|
|
||||||
"save": "Сохранить",
|
|
||||||
"pcs": "шт",
|
|
||||||
"gr": "гр",
|
|
||||||
"grams": "гр"
|
|
||||||
}
|
|
||||||
@@ -9,6 +9,7 @@ import 'package:eatvio_app/theme/theme_helper.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
|
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
@@ -26,18 +27,20 @@ class MyApp extends StatelessWidget {
|
|||||||
BlocProvider<NewMessagesCubit>(create: (context) => sl<NewMessagesCubit>()),
|
BlocProvider<NewMessagesCubit>(create: (context) => sl<NewMessagesCubit>()),
|
||||||
BlocProvider<NotificationsCubit>(create: (context) => sl<NotificationsCubit>()),
|
BlocProvider<NotificationsCubit>(create: (context) => sl<NotificationsCubit>()),
|
||||||
],
|
],
|
||||||
child: KeyboardDismisser(
|
child: Portal(
|
||||||
child: MaterialApp.router(
|
child: KeyboardDismisser(
|
||||||
theme: ThemeHelper().themeData(),
|
child: MaterialApp.router(
|
||||||
routerConfig: AppRouter.appRouter,
|
theme: ThemeHelper().themeData(),
|
||||||
debugShowCheckedModeBanner: false,
|
routerConfig: AppRouter.appRouter,
|
||||||
localizationsDelegates: const [
|
debugShowCheckedModeBanner: false,
|
||||||
S.delegate,
|
localizationsDelegates: const [
|
||||||
GlobalMaterialLocalizations.delegate,
|
S.delegate,
|
||||||
GlobalWidgetsLocalizations.delegate,
|
GlobalMaterialLocalizations.delegate,
|
||||||
GlobalCupertinoLocalizations.delegate,
|
GlobalWidgetsLocalizations.delegate,
|
||||||
],
|
GlobalCupertinoLocalizations.delegate,
|
||||||
supportedLocales: S.delegate.supportedLocales,
|
],
|
||||||
|
supportedLocales: S.delegate.supportedLocales,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -165,6 +165,8 @@ class CustomTextStyles {
|
|||||||
static get titleSmallSegoeUIOnPrimary => theme.textTheme.titleSmall!.segoeUI.copyWith(
|
static get titleSmallSegoeUIOnPrimary => theme.textTheme.titleSmall!.segoeUI.copyWith(
|
||||||
color: theme.colorScheme.onPrimary,
|
color: theme.colorScheme.onPrimary,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension on TextStyle {
|
extension on TextStyle {
|
||||||
@@ -176,3 +178,5 @@ extension on TextStyle {
|
|||||||
return copyWith();
|
return copyWith();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -164,6 +164,12 @@ class PrimaryColors {
|
|||||||
Color get whiteA700 => Color(0XFFFFFFFF);
|
Color get whiteA700 => Color(0XFFFFFFFF);
|
||||||
|
|
||||||
Color get backgroundAvatar => Color(0xFFEBF4FF);
|
Color get backgroundAvatar => Color(0xFFEBF4FF);
|
||||||
|
|
||||||
|
Color get cardBackground => Color(0xFFF7FAFF);
|
||||||
|
|
||||||
|
Color get dividerColor => Color(0xFFF1F2F6);
|
||||||
|
|
||||||
|
Color get grey => Color(0xFF6D6F71);
|
||||||
}
|
}
|
||||||
|
|
||||||
PrimaryColors get appTheme => ThemeHelper().themeColor();
|
PrimaryColors get appTheme => ThemeHelper().themeColor();
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ dependencies:
|
|||||||
rive: ^0.13.15
|
rive: ^0.13.15
|
||||||
mask_text_input_formatter: ^2.9.0
|
mask_text_input_formatter: ^2.9.0
|
||||||
lottie: ^3.1.3
|
lottie: ^3.1.3
|
||||||
|
flutter_portal: ^1.1.4
|
||||||
|
fluttertoast: ^8.2.8
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
build_runner: ^2.4.13
|
build_runner: ^2.4.13
|
||||||
|
|||||||