splash screen, onboarding 3 screens, fetch app version
This commit is contained in:
BIN
assets/images/welcome_screen/png/First_Onboarding.png
Normal file
BIN
assets/images/welcome_screen/png/First_Onboarding.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 142 KiB |
BIN
assets/images/welcome_screen/png/Second_Onboarding.png
Normal file
BIN
assets/images/welcome_screen/png/Second_Onboarding.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 116 KiB |
BIN
assets/images/welcome_screen/png/Third_Onboarding.png
Normal file
BIN
assets/images/welcome_screen/png/Third_Onboarding.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 154 KiB |
13
assets/images/welcome_screen/svg/Splash_BG.svg
Normal file
13
assets/images/welcome_screen/svg/Splash_BG.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg width="393" height="852" viewBox="0 0 393 852" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask0_870_81037" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="-84" y="-145" width="539" height="1083">
|
||||
<rect x="-83.6155" y="928.732" width="1073.61" height="520.354" transform="rotate(-89.0361 -83.6155 928.732)" fill="#D9D9D9"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_870_81037)">
|
||||
<path d="M-235.912 890.946L-204.615 -68.0479L539.36 -43.7681C551.504 -43.3718 561.027 -33.206 560.63 -21.0622L530.769 893.955C530.372 906.099 520.207 915.622 508.063 915.226L-235.912 890.946Z" fill="#004717"/>
|
||||
<g opacity="0.03">
|
||||
<path d="M-27.2757 244.241C-21.9062 320.358 24.1712 450.218 69.6501 530.909C77.9484 545.66 92.0023 556.298 108.357 560.371L117.357 562.677C121.191 563.587 125.123 564.316 129.123 564.499C222.626 568.246 386.666 514.463 457.957 477.626C464.907 474.043 471.141 469.257 476.386 463.353L478.984 460.446C490.979 447.12 497.122 429.461 495.842 411.631C488.938 317.313 446.194 196.018 402.489 118.153C394.151 103.264 380.097 92.6263 363.566 88.458L358.577 87.1566C352.072 85.5009 345.431 84.9374 338.655 85.4663C224.698 94.8961 83.3372 140.438 7.1016 181.36C1.48167 184.38 -3.72658 188.323 -8.32792 192.827C-21.819 206.392 -28.6841 225.175 -27.3637 244.193" fill="#FBFBF6"/>
|
||||
<path d="M-167.004 355.133C-161.634 431.25 -115.557 561.111 -70.078 641.802C-61.7797 656.552 -47.6769 667.1 -31.3706 671.263L-22.3713 673.57C-18.5369 674.479 -14.6049 675.209 -10.605 675.392C82.8981 679.139 246.938 625.355 318.229 588.518C325.179 584.935 331.413 580.149 336.658 574.245L339.256 571.338C351.251 558.013 357.394 540.353 356.114 522.524C349.21 428.206 306.466 306.911 262.761 229.045C254.423 214.157 240.369 203.519 223.838 199.351L218.849 198.049C212.344 196.393 205.703 195.83 198.927 196.359C84.9696 205.789 -56.3909 251.33 -132.626 292.253C-138.246 295.273 -143.455 299.215 -148.056 303.719C-161.547 317.284 -168.412 336.068 -167.092 355.085" fill="black"/>
|
||||
<path d="M462.972 612.8C470.146 599.547 473.573 584.381 472.452 569.202C465.07 466.932 418.089 342.527 377.528 270.211C367.515 252.317 350.28 239.141 330.453 234.121L325.464 232.82C317.355 230.762 309.276 230.12 301.278 230.803C181.942 240.703 38.5989 288.435 -35.6527 328.217C-42.514 331.847 -48.8362 336.586 -54.3362 342.119C-70.6016 358.496 -78.9785 381.124 -77.3801 404.256C-71.5733 487.138 -21.6391 620.602 21.2433 696.623C31.217 714.378 48.3246 727.369 68.1523 732.389L77.1516 734.695C82.1891 735.906 86.884 736.699 91.5586 736.898C186.138 740.761 350.765 687.995 427.031 648.488C435.408 644.162 442.99 638.357 449.369 631.201L451.967 628.294C456.265 623.509 459.995 618.3 463.021 612.71M-44.4269 373.246C-42.0844 368.919 -39.1254 364.924 -35.5988 361.354C-32.0234 357.694 -27.8899 354.685 -23.5113 352.275C48.3945 313.672 187.212 267.57 302.841 257.996C307.946 257.611 313.197 258.006 318.411 259.313L323.4 260.614C336.322 263.878 347.537 272.397 354.072 284.094C393.252 353.914 438.536 473.67 445.689 571.736C446.681 585.68 441.816 599.717 432.37 610.226L429.772 613.133C425.572 617.737 420.686 621.504 415.252 624.392C343.315 661.58 182.061 713.373 93.1441 709.777C90.3569 709.668 87.3151 709.187 84.1066 708.383L75.1073 706.076C62.1856 702.813 51.1459 694.389 44.6015 682.919C-2.88587 598.577 -45.5659 472.537 -50.5777 401.859C-51.2824 391.802 -49.1119 381.902 -44.4269 373.246Z" fill="#747474"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
23
assets/images/welcome_screen/svg/Tanami_Capital_Logo.svg
Normal file
23
assets/images/welcome_screen/svg/Tanami_Capital_Logo.svg
Normal file
@@ -0,0 +1,23 @@
|
||||
<svg width="199" height="52" viewBox="0 0 199 52" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_29_43697)">
|
||||
<path d="M77.3004 1.49185C78.7015 1.27528 80.8514 0.9384 81.7693 0.866211L82.0592 1.15497C81.8901 2.50249 80.948 7.67602 80.634 8.92729L79.7402 9.21605C79.3537 8.4701 77.7594 5.34192 77.1555 3.65751L71.5754 3.89814V13.7399C71.5754 24.1832 71.7445 25.0976 71.8169 26.1564L76.8414 27.5039L76.2858 29.2364C73.7494 29.2364 71.1647 29.1883 68.6041 29.1883C66.0436 29.1883 63.2414 29.2364 60.4876 29.2364L60.9949 27.5039L65.1256 26.1564C65.2464 24.881 65.2464 23.1725 65.2464 15.1355V3.9222L60.0045 3.68157C58.9899 5.29379 57.5888 7.29101 56.4535 8.73479L55.4389 8.95136C55.3665 7.8204 55.4389 2.30999 55.6805 1.1309L56.067 0.890274C56.8158 0.890274 59.3281 1.34747 60.246 1.51591H77.2279L77.3004 1.49185Z" fill="#002F0F"/>
|
||||
<path d="M92.5189 16.4828C92.6396 13.3787 90.5622 12.6087 89.137 12.6087C88.2432 12.6087 87.5185 12.8252 87.1078 13.0178C86.8663 14.9187 86.4315 17.0122 86.1416 17.8063L85.7068 18.1913C85.2478 18.1432 82.5423 16.1219 81.8659 14.0765C83.4602 12.6809 86.1658 11.2612 88.3157 10.4911C89.451 10.058 90.2723 9.81738 91.142 9.81738C96.8429 9.81738 98.3647 13.6915 98.3647 16.2181C98.3647 19.2501 98.3164 22.8354 98.2922 25.3139C98.5338 25.7711 99.9349 26.7817 101.457 27.2389L101.239 28.1293C100.732 28.5865 99.2102 29.6452 96.9636 29.6452C94.3064 29.6452 93.002 28.4662 92.6155 27.5277H92.5189C90.3206 29.0437 88.9679 29.7174 87.5668 29.7174C83.9675 29.7174 81.7693 26.7336 81.7693 24.207C81.7693 22.3542 82.3974 21.3435 83.6776 20.6216C85.0304 19.7794 89.6443 18.3116 92.4222 17.5416L92.4706 16.4588L92.5189 16.4828ZM90.8279 26.2524C91.3352 26.2524 91.6251 26.0839 92.0599 25.8433C92.3256 25.6267 92.3981 25.2898 92.3981 24.8327L92.4947 19.611C91.4801 20.0441 90.224 20.5735 89.2819 21.1751C88.3398 21.8007 87.9292 22.4745 87.9292 23.3167C87.9292 25.5064 89.5718 26.2524 90.8521 26.2524" fill="#002F0F"/>
|
||||
<path d="M105.515 14.0771L103.269 13.1146L103.727 11.6949C104.452 11.1896 110.515 9.79391 111.627 9.84203L111.216 12.874L111.288 12.9221C113.656 11.1896 115.757 9.84203 117.545 9.84203C122.28 9.84203 123.801 13.668 123.801 16.5315V25.5311C123.801 26.0845 124.091 26.3251 124.719 26.5898L126.918 27.5042L126.483 29.2368C124.574 29.2368 122.642 29.1886 120.734 29.1886C118.994 29.1886 117.303 29.2368 115.54 29.2368L115.878 27.5042L117.521 26.277C117.569 25.1942 117.69 22.6195 117.69 17.8069C117.69 14.8953 116.555 13.6921 114.646 13.6921C113.583 13.6921 112.617 14.1493 111.602 14.9915V26.277L113.752 27.5042L113.414 29.2368C111.723 29.1886 110.081 29.1886 108.39 29.1886C106.53 29.1886 104.67 29.2368 102.761 29.2368L103.196 27.5042L105.394 26.277C105.443 25.7717 105.491 21.7291 105.491 17.3256V14.0771H105.515Z" fill="#002F0F"/>
|
||||
<path d="M139.479 16.4828C139.6 13.3787 137.522 12.6087 136.097 12.6087C135.203 12.6087 134.503 12.8252 134.068 13.0178C133.802 14.9187 133.391 17.0122 133.102 17.8063L132.667 18.1913C132.208 18.1432 129.502 16.1219 128.826 14.0765C130.42 12.6809 133.126 11.2612 135.3 10.4911C136.435 10.058 137.232 9.81738 138.126 9.81738C143.827 9.81738 145.349 13.6915 145.349 16.2181C145.349 19.2501 145.301 22.8354 145.252 25.3139C145.518 25.7711 146.895 26.7817 148.417 27.2389L148.199 28.1293C147.692 28.5865 146.17 29.6452 143.924 29.6452C141.266 29.6452 139.962 28.4662 139.575 27.5277H139.479C137.281 29.0437 135.928 29.7174 134.527 29.7174C130.927 29.7174 128.729 26.7336 128.729 24.207C128.729 22.3542 129.357 21.3435 130.638 20.6216C131.99 19.7794 136.58 18.3116 139.382 17.5416L139.431 16.4588L139.479 16.4828ZM137.788 26.2524C138.295 26.2524 138.585 26.0839 139.02 25.8433C139.286 25.6267 139.358 25.2898 139.358 24.8327L139.455 19.611C138.44 20.0441 137.184 20.5735 136.242 21.1751C135.3 21.8007 134.889 22.4745 134.889 23.3167C134.889 25.5064 136.532 26.2524 137.812 26.2524" fill="#002F0F"/>
|
||||
<path d="M152.596 14.029L150.349 13.1146L150.808 11.6949C151.533 11.1896 157.62 9.79391 158.659 9.84203L158.272 12.874L158.369 12.9221C160.905 11.1896 162.645 9.84203 164.988 9.84203C167.573 9.84203 169.167 11.5264 169.843 13.0905C172.428 11.1655 174.699 9.84203 176.679 9.84203C181.366 9.84203 182.815 13.7643 182.815 16.3631V25.7476C182.815 26.2048 183.202 26.4214 183.709 26.7102L185.859 27.5042L185.424 29.2368C183.564 29.2368 181.656 29.1886 179.772 29.1886C178.032 29.1886 176.269 29.2368 174.457 29.2368L174.844 27.5042L176.583 26.2289C176.631 25.0979 176.752 22.4029 176.752 18.24C176.752 14.0771 174.675 13.6199 173.66 13.6199C172.235 13.6199 171.341 14.2937 170.375 15.0396C170.592 15.8337 170.761 16.6278 170.761 17.7828V26.253L173.032 27.5283L172.597 29.2608C171.003 29.2608 169.384 29.2127 167.742 29.2127C165.93 29.2127 164.07 29.2608 162.21 29.2608L162.5 27.5764L164.577 26.277C164.625 25.6033 164.674 22.8601 164.674 17.6625C164.674 14.3418 162.814 13.8365 161.509 13.8365C160.616 13.8365 159.746 14.1252 158.683 14.9674C158.683 17.9031 158.683 25.7476 158.731 26.277L160.833 27.5524L160.446 29.2849C158.804 29.2849 157.161 29.2368 155.494 29.2368C153.634 29.2368 151.726 29.2849 149.842 29.2849L150.132 27.6005L152.499 26.3011C152.547 25.7958 152.596 23.1488 152.596 17.3737V14.1012V14.029Z" fill="#002F0F"/>
|
||||
<path d="M187.912 11.1408C188.54 10.9723 192.43 10.0579 196.077 9.79325V18.6003C196.077 23.3888 196.125 25.6267 196.174 26.3726L199.048 27.4554L198.614 29.212C196.705 29.212 194.942 29.1639 192.985 29.1639C191.173 29.1639 189.265 29.212 187.405 29.212L187.792 27.4554L189.893 26.3726C189.893 25.0732 189.99 21.921 189.99 18.504V13.7396L187.502 12.6327L187.936 11.1167L187.912 11.1408ZM193.058 0.577148C193.903 0.865904 195.546 2.71875 196.174 3.89783L196.053 4.40316C195.546 5.53411 193.782 7.21852 192.961 7.72384L192.454 7.84415C191.27 7.21852 189.869 5.6063 189.289 4.52347L189.41 4.01815C190.207 2.71875 191.681 1.27497 192.623 0.697463L193.058 0.577148Z" fill="#002F0F"/>
|
||||
<path d="M64.7631 51.2298C63.8935 50.7245 63.2171 50.0026 62.734 49.0642C62.275 48.1257 62.0334 47.0429 62.0334 45.7675C62.0334 44.4922 62.275 43.4094 62.734 42.495C63.1929 41.5565 63.8693 40.8587 64.7631 40.3534C65.6327 39.8481 66.6715 39.6074 67.831 39.6074C68.5798 39.6074 69.3045 39.7277 69.9567 39.9443C70.6331 40.1609 71.2129 40.4978 71.7201 40.9068C71.8651 41.0271 71.9617 41.1475 72.0342 41.2678C72.0825 41.3881 72.1308 41.5565 72.1308 41.725C72.1308 41.9656 72.0583 42.1822 71.9134 42.3506C71.7685 42.519 71.5994 42.6153 71.4061 42.6153C71.1645 42.6153 70.9471 42.5431 70.7056 42.3747C70.2225 42.0137 69.7635 41.749 69.3287 41.6046C68.8939 41.4603 68.4349 41.3881 67.9276 41.3881C66.7439 41.3881 65.826 41.749 65.2221 42.495C64.6182 43.2409 64.3041 44.3238 64.3041 45.7675C64.3041 47.2113 64.6182 48.3182 65.2221 49.0642C65.826 49.8101 66.7439 50.1711 67.9276 50.1711C68.4107 50.1711 68.8697 50.0989 69.3045 49.9545C69.7152 49.8101 70.1983 49.5454 70.7297 49.2085C70.8505 49.1363 70.9713 49.0882 71.0679 49.0401C71.1887 48.992 71.3095 48.9679 71.4303 48.9679C71.6235 48.9679 71.7926 49.0642 71.9376 49.2326C72.0825 49.401 72.155 49.6176 72.155 49.8582C72.155 50.0267 72.1308 50.1711 72.0583 50.3154C72.01 50.4357 71.8892 50.5561 71.7443 50.6764C71.237 51.1095 70.6331 51.4223 69.9809 51.6389C69.3287 51.8555 68.604 51.9758 67.8551 51.9758C66.6956 51.9758 65.6569 51.7351 64.7873 51.2298" fill="#002F0F"/>
|
||||
<path d="M95.9491 50.9649C95.9491 51.2295 95.8524 51.4461 95.635 51.6386C95.4176 51.8311 95.1761 51.9033 94.9103 51.9033C94.7171 51.9033 94.548 51.8552 94.4031 51.7589C94.234 51.6627 94.1132 51.5183 94.0166 51.3017L92.9778 49.0158H86.9388L85.9 51.3017C85.8034 51.4942 85.6826 51.6627 85.5135 51.7589C85.3444 51.8552 85.1753 51.9033 84.9821 51.9033C84.7164 51.9033 84.4748 51.8071 84.2574 51.6386C84.04 51.4702 83.9434 51.2295 83.9434 50.9649C83.9434 50.8205 83.9675 50.6761 84.04 50.5077L88.7746 40.3531C88.8713 40.1365 89.0404 39.944 89.2578 39.8237C89.4752 39.7034 89.6926 39.6553 89.9341 39.6553C90.1757 39.6553 90.3931 39.7034 90.6105 39.8237C90.8279 39.944 90.9729 40.1125 91.0695 40.3531L95.8283 50.5077C95.9008 50.652 95.9249 50.7964 95.9249 50.9649M92.2048 47.3073L89.9341 42.23L87.6634 47.3073H92.2048Z" fill="#002F0F"/>
|
||||
<path d="M108.897 51.6394C108.704 51.4469 108.607 51.1581 108.607 50.8213V40.8111C108.607 40.4742 108.704 40.2336 108.897 40.0411C109.09 39.8486 109.356 39.7764 109.67 39.7764H113.897C115.202 39.7764 116.192 40.1132 116.917 40.7389C117.641 41.3886 118.004 42.2789 118.004 43.458C118.004 44.6371 117.641 45.5274 116.917 46.1771C116.192 46.8268 115.177 47.1637 113.897 47.1637H110.829V50.8453C110.829 51.1822 110.733 51.4709 110.539 51.6635C110.346 51.856 110.056 51.9522 109.718 51.9522C109.38 51.9522 109.114 51.856 108.921 51.6635M113.631 45.4793C115.153 45.4793 115.926 44.8296 115.926 43.5061C115.926 42.1827 115.153 41.5089 113.631 41.5089H110.829V45.4793H113.631Z" fill="#002F0F"/>
|
||||
<path d="M131.242 51.6393C131.048 51.4468 130.952 51.1581 130.952 50.8452V40.7869C130.952 40.4501 131.048 40.1854 131.242 39.9929C131.435 39.8004 131.701 39.7041 132.039 39.7041C132.377 39.7041 132.643 39.8004 132.86 39.9929C133.053 40.1854 133.15 40.4501 133.15 40.7869V50.8452C133.15 51.1821 133.053 51.4468 132.86 51.6393C132.667 51.8559 132.377 51.9521 132.039 51.9521C131.701 51.9521 131.435 51.8559 131.242 51.6393Z" fill="#002F0F"/>
|
||||
<path d="M149.938 51.615C149.745 51.4225 149.649 51.1578 149.649 50.8209V41.5807H146.532C145.832 41.5807 145.494 41.292 145.494 40.6663C145.494 40.0407 145.832 39.752 146.532 39.752H155.011C155.688 39.752 156.05 40.0648 156.05 40.6663C156.05 41.2679 155.712 41.5807 155.011 41.5807H151.895V50.8209C151.895 51.1578 151.798 51.4225 151.605 51.615C151.412 51.8075 151.146 51.9037 150.808 51.9037C150.47 51.9037 150.18 51.8075 149.987 51.615" fill="#002F0F"/>
|
||||
<path d="M177.911 50.9649C177.911 51.2295 177.815 51.4461 177.597 51.6386C177.38 51.8311 177.138 51.9033 176.873 51.9033C176.68 51.9033 176.51 51.8552 176.365 51.7589C176.196 51.6627 176.076 51.5183 175.979 51.3017L174.94 49.0158H168.901L167.862 51.3017C167.766 51.4942 167.645 51.6627 167.476 51.7589C167.307 51.8552 167.138 51.9033 166.944 51.9033C166.679 51.9033 166.437 51.8071 166.22 51.6386C166.002 51.4702 165.906 51.2295 165.906 50.9649C165.906 50.8205 165.93 50.6761 166.002 50.5077L170.737 40.3531C170.834 40.1365 171.003 39.944 171.22 39.8237C171.438 39.7034 171.655 39.6553 171.897 39.6553C172.138 39.6553 172.356 39.7034 172.573 39.8237C172.79 39.944 172.935 40.1125 173.056 40.3531L177.815 50.5077C177.887 50.652 177.911 50.7964 177.911 50.9649ZM174.191 47.3073L171.921 42.23L169.65 47.3073H174.191Z" fill="#002F0F"/>
|
||||
<path d="M190.835 51.5671C190.642 51.3746 190.569 51.134 190.569 50.8212V40.7869C190.569 40.4501 190.666 40.1854 190.859 39.9929C191.052 39.8004 191.318 39.7041 191.656 39.7041C191.995 39.7041 192.284 39.8004 192.478 39.9929C192.671 40.1854 192.768 40.4501 192.768 40.7869V50.0271H197.599C198.275 50.0271 198.638 50.3399 198.638 50.9415C198.638 51.5431 198.299 51.8559 197.599 51.8559H191.608C191.27 51.8559 191.028 51.7596 190.835 51.5912" fill="#002F0F"/>
|
||||
<path d="M41.6697 9.96217C41.7422 9.57716 41.6697 9.19216 41.4765 8.87934C40.4619 7.26712 37.1042 2.23797 33.4082 0.168556C32.9734 -0.0961363 32.6594 -0.0720734 31.5482 0.481374C26.0647 3.778 9.9041 13.9326 9.9041 13.9326C6.90872 15.8335 1.01457 19.1301 0 23.678C0.410658 24.9534 2.51226 28.2259 5.94246 30.1991C6.71547 30.3194 7.05365 30.3435 9.42098 29.2366L21.9098 24.0631C21.9098 28.5869 21.2334 35.9501 21.5716 42.2065C21.5716 42.2065 24.3738 46.7303 27.2484 48.2463C27.2484 48.2463 28.0455 48.9201 29.8814 47.5003C34.2537 44.0834 34.8576 41.8215 35.3407 40.2574C36.9109 33.231 40.945 13.5716 41.6939 9.93811" fill="#002F0F"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_29_43697">
|
||||
<rect width="199" height="52" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,23 @@
|
||||
<svg width="199" height="52" viewBox="0 0 199 52" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_870_81043)">
|
||||
<path d="M77.3004 1.49185C78.7015 1.27528 80.8514 0.9384 81.7693 0.866211L82.0592 1.15497C81.8901 2.50249 80.948 7.67602 80.634 8.92729L79.7402 9.21605C79.3537 8.4701 77.7594 5.34192 77.1555 3.65751L71.5754 3.89814V13.7399C71.5754 24.1832 71.7445 25.0976 71.8169 26.1564L76.8414 27.5039L76.2858 29.2364C73.7494 29.2364 71.1647 29.1883 68.6041 29.1883C66.0436 29.1883 63.2414 29.2364 60.4876 29.2364L60.9949 27.5039L65.1256 26.1564C65.2464 24.881 65.2464 23.1725 65.2464 15.1355V3.9222L60.0045 3.68157C58.9899 5.29379 57.5888 7.29101 56.4535 8.73479L55.4389 8.95136C55.3665 7.8204 55.4389 2.30999 55.6805 1.1309L56.067 0.890274C56.8158 0.890274 59.3281 1.34747 60.246 1.51591H77.2279L77.3004 1.49185Z" fill="#B5E3C8"/>
|
||||
<path d="M92.5189 16.4828C92.6396 13.3787 90.5622 12.6087 89.137 12.6087C88.2432 12.6087 87.5185 12.8252 87.1078 13.0178C86.8663 14.9187 86.4315 17.0122 86.1416 17.8063L85.7068 18.1913C85.2478 18.1432 82.5423 16.1219 81.8659 14.0765C83.4602 12.6809 86.1658 11.2612 88.3157 10.4911C89.451 10.058 90.2723 9.81738 91.142 9.81738C96.8429 9.81738 98.3647 13.6915 98.3647 16.2181C98.3647 19.2501 98.3164 22.8354 98.2922 25.3139C98.5338 25.7711 99.9349 26.7817 101.457 27.2389L101.239 28.1293C100.732 28.5865 99.2102 29.6452 96.9636 29.6452C94.3064 29.6452 93.002 28.4662 92.6155 27.5277H92.5189C90.3206 29.0437 88.9679 29.7174 87.5668 29.7174C83.9675 29.7174 81.7693 26.7336 81.7693 24.207C81.7693 22.3542 82.3974 21.3435 83.6776 20.6216C85.0304 19.7794 89.6443 18.3116 92.4222 17.5416L92.4706 16.4588L92.5189 16.4828ZM90.8279 26.2524C91.3352 26.2524 91.6251 26.0839 92.0599 25.8433C92.3256 25.6267 92.3981 25.2898 92.3981 24.8327L92.4947 19.611C91.4801 20.0441 90.224 20.5735 89.2819 21.1751C88.3398 21.8007 87.9292 22.4745 87.9292 23.3167C87.9292 25.5064 89.5718 26.2524 90.8521 26.2524" fill="#B5E3C8"/>
|
||||
<path d="M105.515 14.0771L103.269 13.1146L103.727 11.6949C104.452 11.1896 110.515 9.79391 111.627 9.84203L111.216 12.874L111.288 12.9221C113.656 11.1896 115.757 9.84203 117.545 9.84203C122.28 9.84203 123.801 13.668 123.801 16.5315V25.5311C123.801 26.0845 124.091 26.3251 124.719 26.5898L126.918 27.5042L126.483 29.2368C124.574 29.2368 122.642 29.1886 120.734 29.1886C118.994 29.1886 117.303 29.2368 115.54 29.2368L115.878 27.5042L117.521 26.277C117.569 25.1942 117.69 22.6195 117.69 17.8069C117.69 14.8953 116.555 13.6921 114.646 13.6921C113.583 13.6921 112.617 14.1493 111.602 14.9915V26.277L113.752 27.5042L113.414 29.2368C111.723 29.1886 110.081 29.1886 108.39 29.1886C106.53 29.1886 104.67 29.2368 102.761 29.2368L103.196 27.5042L105.394 26.277C105.443 25.7717 105.491 21.7291 105.491 17.3256V14.0771H105.515Z" fill="#B5E3C8"/>
|
||||
<path d="M139.479 16.4828C139.6 13.3787 137.522 12.6087 136.097 12.6087C135.203 12.6087 134.503 12.8252 134.068 13.0178C133.802 14.9187 133.391 17.0122 133.102 17.8063L132.667 18.1913C132.208 18.1432 129.502 16.1219 128.826 14.0765C130.42 12.6809 133.126 11.2612 135.3 10.4911C136.435 10.058 137.232 9.81738 138.126 9.81738C143.827 9.81738 145.349 13.6915 145.349 16.2181C145.349 19.2501 145.301 22.8354 145.252 25.3139C145.518 25.7711 146.895 26.7817 148.417 27.2389L148.199 28.1293C147.692 28.5865 146.17 29.6452 143.924 29.6452C141.266 29.6452 139.962 28.4662 139.575 27.5277H139.479C137.281 29.0437 135.928 29.7174 134.527 29.7174C130.927 29.7174 128.729 26.7336 128.729 24.207C128.729 22.3542 129.357 21.3435 130.638 20.6216C131.99 19.7794 136.58 18.3116 139.382 17.5416L139.431 16.4588L139.479 16.4828ZM137.788 26.2524C138.295 26.2524 138.585 26.0839 139.02 25.8433C139.286 25.6267 139.358 25.2898 139.358 24.8327L139.455 19.611C138.44 20.0441 137.184 20.5735 136.242 21.1751C135.3 21.8007 134.889 22.4745 134.889 23.3167C134.889 25.5064 136.532 26.2524 137.812 26.2524" fill="#B5E3C8"/>
|
||||
<path d="M152.596 14.029L150.349 13.1146L150.808 11.6949C151.533 11.1896 157.62 9.79391 158.659 9.84203L158.272 12.874L158.369 12.9221C160.905 11.1896 162.645 9.84203 164.988 9.84203C167.573 9.84203 169.167 11.5264 169.843 13.0905C172.428 11.1655 174.699 9.84203 176.679 9.84203C181.366 9.84203 182.815 13.7643 182.815 16.3631V25.7476C182.815 26.2048 183.202 26.4214 183.709 26.7102L185.859 27.5042L185.424 29.2368C183.564 29.2368 181.656 29.1886 179.772 29.1886C178.032 29.1886 176.269 29.2368 174.457 29.2368L174.844 27.5042L176.583 26.2289C176.631 25.0979 176.752 22.4029 176.752 18.24C176.752 14.0771 174.675 13.6199 173.66 13.6199C172.235 13.6199 171.341 14.2937 170.375 15.0396C170.592 15.8337 170.761 16.6278 170.761 17.7828V26.253L173.032 27.5283L172.597 29.2608C171.003 29.2608 169.384 29.2127 167.742 29.2127C165.93 29.2127 164.07 29.2608 162.21 29.2608L162.5 27.5764L164.577 26.277C164.625 25.6033 164.674 22.8601 164.674 17.6625C164.674 14.3418 162.814 13.8365 161.509 13.8365C160.616 13.8365 159.746 14.1252 158.683 14.9674C158.683 17.9031 158.683 25.7476 158.731 26.277L160.833 27.5524L160.446 29.2849C158.804 29.2849 157.161 29.2368 155.494 29.2368C153.634 29.2368 151.726 29.2849 149.842 29.2849L150.132 27.6005L152.499 26.3011C152.547 25.7958 152.596 23.1488 152.596 17.3737V14.1012V14.029Z" fill="#B5E3C8"/>
|
||||
<path d="M187.912 11.1408C188.54 10.9723 192.43 10.0579 196.077 9.79325V18.6003C196.077 23.3888 196.125 25.6267 196.174 26.3726L199.048 27.4554L198.614 29.212C196.705 29.212 194.942 29.1639 192.985 29.1639C191.173 29.1639 189.265 29.212 187.405 29.212L187.792 27.4554L189.893 26.3726C189.893 25.0732 189.99 21.921 189.99 18.504V13.7396L187.502 12.6327L187.936 11.1167L187.912 11.1408ZM193.058 0.577148C193.903 0.865904 195.546 2.71875 196.174 3.89783L196.053 4.40316C195.546 5.53411 193.782 7.21852 192.961 7.72384L192.454 7.84415C191.27 7.21852 189.869 5.6063 189.289 4.52347L189.41 4.01815C190.207 2.71875 191.681 1.27497 192.623 0.697463L193.058 0.577148Z" fill="#B5E3C8"/>
|
||||
<path d="M64.7631 51.2298C63.8935 50.7245 63.2171 50.0026 62.734 49.0642C62.275 48.1257 62.0334 47.0429 62.0334 45.7675C62.0334 44.4922 62.275 43.4094 62.734 42.495C63.1929 41.5565 63.8693 40.8587 64.7631 40.3534C65.6327 39.8481 66.6715 39.6074 67.831 39.6074C68.5798 39.6074 69.3045 39.7277 69.9567 39.9443C70.6331 40.1609 71.2129 40.4978 71.7201 40.9068C71.8651 41.0271 71.9617 41.1475 72.0342 41.2678C72.0825 41.3881 72.1308 41.5565 72.1308 41.725C72.1308 41.9656 72.0583 42.1822 71.9134 42.3506C71.7685 42.519 71.5994 42.6153 71.4061 42.6153C71.1645 42.6153 70.9471 42.5431 70.7056 42.3747C70.2225 42.0137 69.7635 41.749 69.3287 41.6046C68.8939 41.4603 68.4349 41.3881 67.9276 41.3881C66.7439 41.3881 65.826 41.749 65.2221 42.495C64.6182 43.2409 64.3041 44.3238 64.3041 45.7675C64.3041 47.2113 64.6182 48.3182 65.2221 49.0642C65.826 49.8101 66.7439 50.1711 67.9276 50.1711C68.4107 50.1711 68.8697 50.0989 69.3045 49.9545C69.7152 49.8101 70.1983 49.5454 70.7297 49.2085C70.8505 49.1363 70.9713 49.0882 71.0679 49.0401C71.1887 48.992 71.3095 48.9679 71.4303 48.9679C71.6235 48.9679 71.7926 49.0642 71.9376 49.2326C72.0825 49.401 72.155 49.6176 72.155 49.8582C72.155 50.0267 72.1308 50.1711 72.0583 50.3154C72.01 50.4357 71.8892 50.5561 71.7443 50.6764C71.237 51.1095 70.6331 51.4223 69.9809 51.6389C69.3287 51.8555 68.604 51.9758 67.8551 51.9758C66.6956 51.9758 65.6569 51.7351 64.7873 51.2298" fill="#B5E3C8"/>
|
||||
<path d="M95.9491 50.9649C95.9491 51.2295 95.8524 51.4461 95.635 51.6386C95.4176 51.8311 95.1761 51.9033 94.9103 51.9033C94.7171 51.9033 94.548 51.8552 94.4031 51.7589C94.234 51.6627 94.1132 51.5183 94.0166 51.3017L92.9778 49.0158H86.9388L85.9 51.3017C85.8034 51.4942 85.6826 51.6627 85.5135 51.7589C85.3444 51.8552 85.1753 51.9033 84.9821 51.9033C84.7164 51.9033 84.4748 51.8071 84.2574 51.6386C84.04 51.4702 83.9434 51.2295 83.9434 50.9649C83.9434 50.8205 83.9675 50.6761 84.04 50.5077L88.7746 40.3531C88.8713 40.1365 89.0404 39.944 89.2578 39.8237C89.4752 39.7034 89.6926 39.6553 89.9341 39.6553C90.1757 39.6553 90.3931 39.7034 90.6105 39.8237C90.8279 39.944 90.9729 40.1125 91.0695 40.3531L95.8283 50.5077C95.9008 50.652 95.9249 50.7964 95.9249 50.9649M92.2048 47.3073L89.9341 42.23L87.6634 47.3073H92.2048Z" fill="#B5E3C8"/>
|
||||
<path d="M108.897 51.6394C108.704 51.4469 108.607 51.1581 108.607 50.8213V40.8111C108.607 40.4742 108.704 40.2336 108.897 40.0411C109.09 39.8486 109.356 39.7764 109.67 39.7764H113.897C115.202 39.7764 116.192 40.1132 116.917 40.7389C117.641 41.3886 118.004 42.2789 118.004 43.458C118.004 44.6371 117.641 45.5274 116.917 46.1771C116.192 46.8268 115.177 47.1637 113.897 47.1637H110.829V50.8453C110.829 51.1822 110.733 51.4709 110.539 51.6635C110.346 51.856 110.056 51.9522 109.718 51.9522C109.38 51.9522 109.114 51.856 108.921 51.6635M113.631 45.4793C115.153 45.4793 115.926 44.8296 115.926 43.5061C115.926 42.1827 115.153 41.5089 113.631 41.5089H110.829V45.4793H113.631Z" fill="#B5E3C8"/>
|
||||
<path d="M131.242 51.6393C131.048 51.4468 130.952 51.1581 130.952 50.8452V40.7869C130.952 40.4501 131.048 40.1854 131.242 39.9929C131.435 39.8004 131.701 39.7041 132.039 39.7041C132.377 39.7041 132.643 39.8004 132.86 39.9929C133.053 40.1854 133.15 40.4501 133.15 40.7869V50.8452C133.15 51.1821 133.053 51.4468 132.86 51.6393C132.667 51.8559 132.377 51.9521 132.039 51.9521C131.701 51.9521 131.435 51.8559 131.242 51.6393Z" fill="#B5E3C8"/>
|
||||
<path d="M149.938 51.615C149.745 51.4225 149.649 51.1578 149.649 50.8209V41.5807H146.532C145.832 41.5807 145.494 41.292 145.494 40.6663C145.494 40.0407 145.832 39.752 146.532 39.752H155.011C155.688 39.752 156.05 40.0648 156.05 40.6663C156.05 41.2679 155.712 41.5807 155.011 41.5807H151.895V50.8209C151.895 51.1578 151.798 51.4225 151.605 51.615C151.412 51.8075 151.146 51.9037 150.808 51.9037C150.47 51.9037 150.18 51.8075 149.987 51.615" fill="#B5E3C8"/>
|
||||
<path d="M177.911 50.9649C177.911 51.2295 177.815 51.4461 177.597 51.6386C177.38 51.8311 177.138 51.9033 176.873 51.9033C176.68 51.9033 176.51 51.8552 176.365 51.7589C176.196 51.6627 176.076 51.5183 175.979 51.3017L174.94 49.0158H168.901L167.862 51.3017C167.766 51.4942 167.645 51.6627 167.476 51.7589C167.307 51.8552 167.138 51.9033 166.944 51.9033C166.679 51.9033 166.437 51.8071 166.22 51.6386C166.002 51.4702 165.906 51.2295 165.906 50.9649C165.906 50.8205 165.93 50.6761 166.002 50.5077L170.737 40.3531C170.834 40.1365 171.003 39.944 171.22 39.8237C171.438 39.7034 171.655 39.6553 171.897 39.6553C172.138 39.6553 172.356 39.7034 172.573 39.8237C172.79 39.944 172.935 40.1125 173.056 40.3531L177.815 50.5077C177.887 50.652 177.911 50.7964 177.911 50.9649ZM174.191 47.3073L171.921 42.23L169.65 47.3073H174.191Z" fill="#B5E3C8"/>
|
||||
<path d="M190.835 51.5671C190.642 51.3746 190.569 51.134 190.569 50.8212V40.7869C190.569 40.4501 190.666 40.1854 190.859 39.9929C191.052 39.8004 191.318 39.7041 191.656 39.7041C191.995 39.7041 192.284 39.8004 192.478 39.9929C192.671 40.1854 192.768 40.4501 192.768 40.7869V50.0271H197.599C198.275 50.0271 198.638 50.3399 198.638 50.9415C198.638 51.5431 198.299 51.8559 197.599 51.8559H191.608C191.27 51.8559 191.028 51.7596 190.835 51.5912" fill="#B5E3C8"/>
|
||||
<path d="M41.6697 9.96217C41.7422 9.57716 41.6697 9.19216 41.4765 8.87934C40.4619 7.26712 37.1042 2.23797 33.4082 0.168556C32.9734 -0.0961363 32.6594 -0.0720734 31.5482 0.481374C26.0647 3.778 9.9041 13.9326 9.9041 13.9326C6.90872 15.8335 1.01457 19.1301 0 23.678C0.410658 24.9534 2.51226 28.2259 5.94246 30.1991C6.71547 30.3194 7.05365 30.3435 9.42098 29.2366L21.9098 24.0631C21.9098 28.5869 21.2334 35.9501 21.5716 42.2065C21.5716 42.2065 24.3738 46.7303 27.2484 48.2463C27.2484 48.2463 28.0455 48.9201 29.8814 47.5003C34.2537 44.0834 34.8576 41.8215 35.3407 40.2574C36.9109 33.231 40.945 13.5716 41.6939 9.93811" fill="#B5E3C8"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_870_81043">
|
||||
<rect width="199" height="52" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -11,4 +11,7 @@ class RouteName {
|
||||
|
||||
//No Internet
|
||||
static const String noInternetScreen = 'noInternet';
|
||||
|
||||
//Welcome
|
||||
static const String welcomeScreen = 'welcome';
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tanami_app/core/routes/route_name.dart';
|
||||
import 'package:tanami_app/features/welcome/presentation/pages/weclome_screen.dart';
|
||||
|
||||
import '../../features/login/presentation/pages/login_screen.dart';
|
||||
import '../../features/splash/presentation/pages/splash_screen.dart';
|
||||
@@ -35,6 +36,13 @@ final goRouter = GoRouter(
|
||||
return const LoginScreen();
|
||||
},
|
||||
),
|
||||
GoRoute(
|
||||
name: RouteName.welcomeScreen,
|
||||
path: RouteName.welcomeScreen,
|
||||
builder: (context, state) {
|
||||
return const WelcomeScreen();
|
||||
},
|
||||
),
|
||||
]),
|
||||
|
||||
// GoRoute(
|
||||
|
||||
16
lib/core/styles/app_color.dart
Normal file
16
lib/core/styles/app_color.dart
Normal file
@@ -0,0 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class AppColor {
|
||||
//Primary Color
|
||||
static const Color primaryColor = Color(0xFF002F0F);
|
||||
|
||||
//Secondary Color
|
||||
|
||||
//Welcome Color
|
||||
static const Color indicatorActiveColor = Color(0xFF002F0F);
|
||||
static const Color indicatorInactiveColor = Color(0xFFb8c1bb);
|
||||
|
||||
//Common Color
|
||||
static const Color plainWhite = Color(0xFFFFFFFF);
|
||||
static const Color darkGreyColor = Color(0xFF343434);
|
||||
}
|
||||
19
lib/core/styles/app_images.dart
Normal file
19
lib/core/styles/app_images.dart
Normal file
@@ -0,0 +1,19 @@
|
||||
class AppImages {
|
||||
//Splash
|
||||
static const String splashBg =
|
||||
"assets/images/welcome_screen/svg/Splash_BG.svg";
|
||||
static const String splashLogo =
|
||||
"assets/images/welcome_screen/svg/Tanami_Capital_Splash_Logo.svg";
|
||||
|
||||
//Welcome
|
||||
static const String weclomeLogo =
|
||||
"assets/images/welcome_screen/svg/Tanami_Capital_Logo.svg";
|
||||
static const String firstWelcome =
|
||||
"assets/images/welcome_screen/png/First_Onboarding.png";
|
||||
|
||||
static const String secondWelcome =
|
||||
"assets/images/welcome_screen/png/Second_Onboarding.png";
|
||||
|
||||
static const String thirdWelcome =
|
||||
"assets/images/welcome_screen/png/Third_Onboarding.png";
|
||||
}
|
||||
17
lib/core/styles/app_text.dart
Normal file
17
lib/core/styles/app_text.dart
Normal file
@@ -0,0 +1,17 @@
|
||||
class AppText {
|
||||
//Splash
|
||||
static const String splashVersionText = "APP: v.";
|
||||
static const String splashCopyrightText = '© 2024 Tanami';
|
||||
|
||||
//Welcome
|
||||
static const String welcomeTitle1Text = "Tanami offers";
|
||||
static const String welcomeTitle2Text = "Invest alongside";
|
||||
static const String welcomeTitle3Text = "Start investing today ";
|
||||
static const String weclomeDescription1Text =
|
||||
"access to best-in-class, exclusive, global private investments";
|
||||
static const String weclomeDescription2Text =
|
||||
"experienced investment experts with a long-standing track record";
|
||||
static const String weclomeDescription3Text = "with only SAR 1,000";
|
||||
static const String loginText = "Login In";
|
||||
static const String signUpText = "Sign Up";
|
||||
}
|
||||
@@ -26,7 +26,9 @@ class NetworkConnectivity {
|
||||
|
||||
if (result[0] == ConnectivityResult.wifi ||
|
||||
result[0] == ConnectivityResult.mobile) {
|
||||
goRouter.pop(true);
|
||||
if (goRouter.canPop()) {
|
||||
goRouter.pop(true);
|
||||
}
|
||||
} else {
|
||||
goRouter.go(RouteName.noInternetScreen);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'app_version_event.dart';
|
||||
import 'app_version_state.dart';
|
||||
|
||||
/// The AppVersionBloc class that handles app version-related events and states.
|
||||
class AppVersionBloc extends Bloc<AppVersionEvent, AppVersionState> {
|
||||
AppVersionBloc() : super(AppVersionInitial()) {
|
||||
// Define the event handler for the LoadAppVersion event.
|
||||
on<LoadAppVersion>(_onLoadAppVersion);
|
||||
}
|
||||
|
||||
/// The event handler for the LoadAppVersion event.
|
||||
Future<void> _onLoadAppVersion(
|
||||
LoadAppVersion event, Emitter<AppVersionState> emit) async {
|
||||
try {
|
||||
// Get the package info from the PackageInfoPlus package.
|
||||
final packageInfo = await PackageInfo.fromPlatform();
|
||||
|
||||
// Extract the app version from the package info.
|
||||
final version = packageInfo.version;
|
||||
// Emit the AppVersionLoaded state with the app version.
|
||||
emit(AppVersionLoaded(version));
|
||||
} catch (e) {
|
||||
// Emit the AppVersionError state with an error message.
|
||||
emit(const AppVersionError('Failed to fetch app version'));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
/// The AppVersionEvent class that represents app version-related events.
|
||||
abstract class AppVersionEvent extends Equatable {
|
||||
const AppVersionEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
/// The LoadAppVersion class that represents the LoadAppVersion event.
|
||||
|
||||
class LoadAppVersion extends AppVersionEvent {}
|
||||
@@ -0,0 +1,32 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
/// The AppVersionState class that represents app version-related states.
|
||||
abstract class AppVersionState extends Equatable {
|
||||
const AppVersionState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
/// The AppVersionInitial class that represents the initial app version state.
|
||||
class AppVersionInitial extends AppVersionState {}
|
||||
|
||||
/// The AppVersionLoaded class that represents the app version loaded state.
|
||||
class AppVersionLoaded extends AppVersionState {
|
||||
final String version;
|
||||
|
||||
const AppVersionLoaded(this.version);
|
||||
|
||||
@override
|
||||
List<Object> get props => [version];
|
||||
}
|
||||
|
||||
/// The AppVersionError class that represents the app version error state.
|
||||
class AppVersionError extends AppVersionState {
|
||||
final String message;
|
||||
|
||||
const AppVersionError(this.message);
|
||||
|
||||
@override
|
||||
List<Object> get props => [message];
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'splash_event.dart';
|
||||
import 'splash_state.dart';
|
||||
|
||||
/// The SplashBloc class that handles splash screen-related events and states.
|
||||
class SplashBloc extends Bloc<SplashEvent, SplashState> {
|
||||
SplashBloc() : super(SplashInitial()) {
|
||||
/// The event handler for the StartSplashScreenTimer event.
|
||||
on<StartSplashScreenTimer>((event, emit) async {
|
||||
await Future.delayed(const Duration(seconds: 3));
|
||||
emit(SplashCompleted());
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
/// The SplashEvent class that represents splash screen-related events.
|
||||
abstract class SplashEvent extends Equatable {
|
||||
const SplashEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
/// The StartSplashScreenTimer class that represents the StartSplashScreenTimer event.
|
||||
class StartSplashScreenTimer extends SplashEvent {}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
/// The SplashState class that represents splash screen-related states.
|
||||
abstract class SplashState extends Equatable {
|
||||
const SplashState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
/// The SplashInitial class that represents the initial splash screen state.
|
||||
class SplashInitial extends SplashState {}
|
||||
|
||||
/// The SplashCompleted class that represents the splash screen completed state.
|
||||
class SplashCompleted extends SplashState {}
|
||||
44
lib/features/splash/presentation/pages/splash_layout.dart
Normal file
44
lib/features/splash/presentation/pages/splash_layout.dart
Normal file
@@ -0,0 +1,44 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
import '../../../../core/styles/app_images.dart';
|
||||
import '../widgets/bottom_version_widget.dart';
|
||||
|
||||
class SplashLayout extends StatelessWidget {
|
||||
const SplashLayout({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: SizedBox(
|
||||
width: 1.sw,
|
||||
height: 1.sh,
|
||||
child: Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: SvgPicture.asset(
|
||||
AppImages.splashBg,
|
||||
),
|
||||
),
|
||||
Positioned.fill(
|
||||
child: Align(
|
||||
alignment: Alignment.center,
|
||||
child: SvgPicture.asset(
|
||||
AppImages.splashLogo,
|
||||
),
|
||||
),
|
||||
),
|
||||
const Positioned(
|
||||
bottom: 0,
|
||||
child: Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: BottomVersionWidget(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,45 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:tanami_app/core/routes/route_name.dart';
|
||||
import 'package:tanami_app/core/routes/routes.dart';
|
||||
|
||||
import '../bloc/app_version/app_version_bloc.dart';
|
||||
import '../bloc/app_version/app_version_event.dart';
|
||||
import '../bloc/splash/splash_bloc.dart';
|
||||
import '../bloc/splash/splash_event.dart';
|
||||
import '../bloc/splash/splash_state.dart';
|
||||
import 'splash_layout.dart';
|
||||
|
||||
class SplashScreen extends StatelessWidget {
|
||||
const SplashScreen({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold();
|
||||
return Scaffold(
|
||||
body: MultiBlocProvider(
|
||||
providers: [
|
||||
// Add the LoadAppVersion event.
|
||||
BlocProvider(
|
||||
create: (_) => AppVersionBloc()..add(LoadAppVersion()),
|
||||
),
|
||||
// Add the StartSplashScreenTimer event.
|
||||
BlocProvider(
|
||||
create: (_) => SplashBloc()..add(StartSplashScreenTimer()),
|
||||
),
|
||||
],
|
||||
// Set the child of the MultiBlocProvider to a BlocListener widget
|
||||
child: BlocListener<SplashBloc, SplashState>(
|
||||
// Define the listener function for the BlocListener widget
|
||||
listener: (context, state) {
|
||||
// Check if the current state is SplashCompleted
|
||||
if (state is SplashCompleted) {
|
||||
// Navigate to the WelcomeScreen using the goRouter
|
||||
goRouter.goNamed(RouteName.welcomeScreen);
|
||||
}
|
||||
},
|
||||
child: const SplashLayout(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:tanami_app/core/styles/app_text.dart';
|
||||
import '../bloc/app_version/app_version_bloc.dart';
|
||||
import '../bloc/app_version/app_version_state.dart';
|
||||
import '../../../../shared/components/text_widget.dart';
|
||||
|
||||
class BottomVersionWidget extends StatelessWidget {
|
||||
const BottomVersionWidget({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// A BlocBuilder widget that builds the UI based on the state of the AppVersionBloc
|
||||
return BlocBuilder<AppVersionBloc, AppVersionState>(
|
||||
builder: (context, state) {
|
||||
// If the state is AppVersionInitial, display a CircularProgressIndicator
|
||||
if (state is AppVersionInitial) {
|
||||
return const CircularProgressIndicator();
|
||||
} else if (state is AppVersionLoaded) {
|
||||
return Container(
|
||||
width: 0.9.sw,
|
||||
margin: EdgeInsets.only(
|
||||
left: 24.w,
|
||||
bottom: 34.h,
|
||||
right: 24.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
// Display the application version text
|
||||
TextWidget().text12W400(
|
||||
'${AppText.splashVersionText}${state.version}'),
|
||||
TextWidget().text12W400(AppText.splashCopyrightText),
|
||||
],
|
||||
));
|
||||
// If the state is AppVersionError, display an error message
|
||||
} else if (state is AppVersionError) {
|
||||
return Text('Error: ${state.message}');
|
||||
}
|
||||
return Container();
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
28
lib/features/welcome/presentation/bloc/onboarding_bloc.dart
Normal file
28
lib/features/welcome/presentation/bloc/onboarding_bloc.dart
Normal file
@@ -0,0 +1,28 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'onboarding_event.dart';
|
||||
import 'onboarding_state.dart';
|
||||
|
||||
// A Bloc class that manages the onboarding process
|
||||
class OnboardingBloc extends Bloc<OnboardingEvent, OnboardingState> {
|
||||
int _currentPage = 0;
|
||||
|
||||
OnboardingBloc() : super(OnboardingInitial()) {
|
||||
// Define the event handler for the NextPage event
|
||||
on<NextPage>((event, emit) {
|
||||
_currentPage++;
|
||||
emit(OnboardingPageChanged(_currentPage));
|
||||
});
|
||||
|
||||
// Define the event handler for the PreviousPage event
|
||||
on<PreviousPage>((event, emit) {
|
||||
_currentPage--;
|
||||
emit(OnboardingPageChanged(_currentPage));
|
||||
});
|
||||
|
||||
// Define the event handler for the JumpToPage event
|
||||
on<JumpToPage>((event, emit) {
|
||||
_currentPage = event.pageIndex;
|
||||
emit(OnboardingPageChanged(_currentPage));
|
||||
});
|
||||
}
|
||||
}
|
||||
24
lib/features/welcome/presentation/bloc/onboarding_event.dart
Normal file
24
lib/features/welcome/presentation/bloc/onboarding_event.dart
Normal file
@@ -0,0 +1,24 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
abstract class OnboardingEvent extends Equatable {
|
||||
const OnboardingEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
// The event to navigate to the next page during the onboarding process
|
||||
class NextPage extends OnboardingEvent {}
|
||||
|
||||
// The event to navigate to the previous page during the onboarding process
|
||||
class PreviousPage extends OnboardingEvent {}
|
||||
|
||||
// The event to jump to a specific page during the onboarding process
|
||||
class JumpToPage extends OnboardingEvent {
|
||||
final int pageIndex;
|
||||
|
||||
const JumpToPage(this.pageIndex);
|
||||
|
||||
@override
|
||||
List<Object> get props => [pageIndex];
|
||||
}
|
||||
22
lib/features/welcome/presentation/bloc/onboarding_state.dart
Normal file
22
lib/features/welcome/presentation/bloc/onboarding_state.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
abstract class OnboardingState extends Equatable {
|
||||
// The base state for the onboarding process
|
||||
const OnboardingState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
// The initial state of the onboarding process
|
||||
class OnboardingInitial extends OnboardingState {}
|
||||
|
||||
// The state when the page is changed during the onboarding process
|
||||
class OnboardingPageChanged extends OnboardingState {
|
||||
final int currentPage;
|
||||
|
||||
const OnboardingPageChanged(this.currentPage);
|
||||
|
||||
@override
|
||||
List<Object> get props => [currentPage];
|
||||
}
|
||||
26
lib/features/welcome/presentation/pages/weclome_screen.dart
Normal file
26
lib/features/welcome/presentation/pages/weclome_screen.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:tanami_app/features/welcome/presentation/pages/welcome_layout.dart';
|
||||
|
||||
import '../bloc/onboarding_bloc.dart';
|
||||
|
||||
class WelcomeScreen extends StatelessWidget {
|
||||
const WelcomeScreen({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
body: MultiBlocProvider(
|
||||
// Define the providers for the OnboardingBloc and other blocs
|
||||
providers: [
|
||||
BlocProvider(
|
||||
// Create an instance of the OnboardingBloc
|
||||
create: (_) => OnboardingBloc(),
|
||||
),
|
||||
],
|
||||
child: WelcomeLayout(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
43
lib/features/welcome/presentation/pages/welcome_layout.dart
Normal file
43
lib/features/welcome/presentation/pages/welcome_layout.dart
Normal file
@@ -0,0 +1,43 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
import '../bloc/onboarding_bloc.dart';
|
||||
import '../bloc/onboarding_event.dart';
|
||||
import '../bloc/onboarding_state.dart';
|
||||
import '../widgets/build_page_widget.dart';
|
||||
|
||||
class WelcomeLayout extends StatelessWidget {
|
||||
final PageController _pageController = PageController();
|
||||
WelcomeLayout({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
body: BlocListener<OnboardingBloc, OnboardingState>(
|
||||
// Define the listener for the BlocListener
|
||||
listener: (context, state) {
|
||||
// If the state is OnboardingPageChanged, animate to the corresponding page
|
||||
if (state is OnboardingPageChanged) {
|
||||
_pageController.animateToPage(
|
||||
state.currentPage,
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeInOut,
|
||||
);
|
||||
}
|
||||
},
|
||||
child: PageView.builder(
|
||||
controller: _pageController,
|
||||
itemCount: 3, // Number of onboarding pages
|
||||
itemBuilder: (context, index) {
|
||||
return buildPage(context, index, _pageController);
|
||||
},
|
||||
onPageChanged: (index) {
|
||||
// Dispatch the JumpToPage event to update the current page
|
||||
context.read<OnboardingBloc>().add(JumpToPage(index));
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:tanami_app/core/styles/app_color.dart';
|
||||
import 'package:tanami_app/core/styles/app_images.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:tanami_app/shared/components/text_widget.dart';
|
||||
|
||||
import 'login_signup_button.dart';
|
||||
import 'welcome_indicator.dart';
|
||||
|
||||
Widget buildOnboardingPage(
|
||||
BuildContext context, {
|
||||
required int index,
|
||||
required String imageAsset,
|
||||
required String title,
|
||||
required String description,
|
||||
bool isLastPage = false,
|
||||
required PageController pageController,
|
||||
}) {
|
||||
return Column(
|
||||
children: [
|
||||
const Gap(80),
|
||||
SvgPicture.asset(AppImages.weclomeLogo),
|
||||
Image.asset(
|
||||
imageAsset,
|
||||
width: 1.sw,
|
||||
height: index == 2 ? 380 : 450,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
const Gap(15),
|
||||
TextWidget().tex22W700(
|
||||
title,
|
||||
clr: AppColor.primaryColor,
|
||||
),
|
||||
const Gap(18),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 50,
|
||||
),
|
||||
child: TextWidget().tex15W500(
|
||||
description,
|
||||
clr: AppColor.darkGreyColor,
|
||||
),
|
||||
),
|
||||
const Gap(40),
|
||||
welcomeIndicator(pageController),
|
||||
if (isLastPage) const LoginSignUpButton(),
|
||||
],
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tanami_app/core/styles/app_images.dart';
|
||||
import 'package:tanami_app/core/styles/app_text.dart';
|
||||
|
||||
import 'build_onboarding_page_widget.dart';
|
||||
|
||||
Widget buildPage(
|
||||
BuildContext context, int index, PageController pageController) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return buildOnboardingPage(
|
||||
pageController: pageController,
|
||||
index: index,
|
||||
context,
|
||||
imageAsset: AppImages.firstWelcome,
|
||||
title: AppText.welcomeTitle1Text,
|
||||
description: AppText.weclomeDescription1Text,
|
||||
);
|
||||
case 1:
|
||||
return buildOnboardingPage(
|
||||
pageController: pageController,
|
||||
index: index,
|
||||
context,
|
||||
imageAsset: AppImages.secondWelcome,
|
||||
title: AppText.welcomeTitle2Text,
|
||||
description: AppText.weclomeDescription2Text,
|
||||
);
|
||||
case 2:
|
||||
return buildOnboardingPage(
|
||||
pageController: pageController,
|
||||
index: index,
|
||||
context,
|
||||
imageAsset: AppImages.thirdWelcome,
|
||||
title: AppText.welcomeTitle3Text,
|
||||
description: AppText.weclomeDescription3Text,
|
||||
isLastPage: true,
|
||||
);
|
||||
default:
|
||||
return Container();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:tanami_app/core/styles/app_color.dart';
|
||||
import 'package:tanami_app/shared/components/button_widget.dart';
|
||||
|
||||
import '../../../../core/styles/app_text.dart';
|
||||
|
||||
class LoginSignUpButton extends StatelessWidget {
|
||||
const LoginSignUpButton({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 40.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.symmetric(
|
||||
horizontal: 16,
|
||||
),
|
||||
width: 1.sw,
|
||||
height: 56.h,
|
||||
child: ButtonWidget().elevatedBtn(
|
||||
function: () {},
|
||||
text: AppText.signUpText,
|
||||
clr: AppColor.primaryColor,
|
||||
),
|
||||
),
|
||||
const Gap(16),
|
||||
ButtonWidget().textBtn(function: () {}, text: AppText.loginText)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:smooth_page_indicator/smooth_page_indicator.dart';
|
||||
|
||||
import '../../../../core/styles/app_color.dart';
|
||||
|
||||
Widget welcomeIndicator(PageController pageController) {
|
||||
return SmoothPageIndicator(
|
||||
controller: pageController,
|
||||
count: 3,
|
||||
effect: const ExpandingDotsEffect(
|
||||
activeDotColor: AppColor.indicatorActiveColor,
|
||||
dotColor: AppColor.indicatorInactiveColor,
|
||||
dotHeight: 10,
|
||||
dotWidth: 10,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
import 'core/routes/routes.dart';
|
||||
@@ -17,8 +16,7 @@ Future<void> main() async {
|
||||
// Set the preferred orientations of the device.
|
||||
SystemChrome.setPreferredOrientations([
|
||||
DeviceOrientation.portraitUp,
|
||||
]).then((value) =>
|
||||
runApp(MultiBlocProvider(providers: [], child: const MyApp())));
|
||||
]).then((value) => runApp(const MyApp()));
|
||||
}
|
||||
|
||||
class MyApp extends StatefulWidget {
|
||||
@@ -29,7 +27,8 @@ class MyApp extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
|
||||
late NetworkConnectivity _networkConnectivity;
|
||||
final NetworkConnectivity _networkConnectivity =
|
||||
NetworkConnectivity(onStatusChange: (String) {});
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
36
lib/shared/components/button_widget.dart
Normal file
36
lib/shared/components/button_widget.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tanami_app/core/styles/app_color.dart';
|
||||
import 'package:tanami_app/shared/components/text_widget.dart';
|
||||
|
||||
class ButtonWidget {
|
||||
//Text Button
|
||||
Widget textBtn({
|
||||
required String text,
|
||||
required VoidCallback function,
|
||||
}) {
|
||||
return TextButton(
|
||||
onPressed: function,
|
||||
child: TextWidget().tex14W700(text,
|
||||
clr: AppColor.darkGreyColor,
|
||||
textDecoration: TextDecoration.underline),
|
||||
);
|
||||
}
|
||||
|
||||
//Elevated Button
|
||||
Widget elevatedBtn({
|
||||
required String text,
|
||||
required Color clr,
|
||||
required VoidCallback function,
|
||||
}) {
|
||||
return ElevatedButton(
|
||||
onPressed: function,
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: clr,
|
||||
),
|
||||
child: TextWidget().tex14W700(
|
||||
text,
|
||||
clr: AppColor.plainWhite,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
44
lib/shared/components/text_widget.dart
Normal file
44
lib/shared/components/text_widget.dart
Normal file
@@ -0,0 +1,44 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:tanami_app/core/styles/app_color.dart';
|
||||
|
||||
class TextWidget {
|
||||
//Text Size 12
|
||||
Widget text12W400(String text, {Color? clr}) {
|
||||
return Text(text,
|
||||
style: GoogleFonts.dmSans(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w400,
|
||||
color: clr ?? AppColor.plainWhite));
|
||||
}
|
||||
|
||||
//Text Size 14
|
||||
Widget tex14W700(String text, {Color? clr, TextDecoration? textDecoration}) {
|
||||
return Text(text,
|
||||
textAlign: TextAlign.center,
|
||||
style: GoogleFonts.dmSans(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w700,
|
||||
decoration: textDecoration ?? TextDecoration.none,
|
||||
color: clr ?? AppColor.plainWhite));
|
||||
}
|
||||
|
||||
//Text Size 15
|
||||
Widget tex15W500(String text, {Color? clr}) {
|
||||
return Text(text,
|
||||
textAlign: TextAlign.center,
|
||||
style: GoogleFonts.dmSans(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: clr ?? AppColor.plainWhite));
|
||||
}
|
||||
|
||||
//Text Size 22
|
||||
Widget tex22W700(String text, {Color? clr}) {
|
||||
return Text(text,
|
||||
style: GoogleFonts.dmSans(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: clr ?? AppColor.plainWhite));
|
||||
}
|
||||
}
|
||||
10
pubspec.lock
10
pubspec.lock
@@ -226,7 +226,7 @@ packages:
|
||||
source: hosted
|
||||
version: "5.4.3+1"
|
||||
equatable:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: equatable
|
||||
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
|
||||
@@ -925,6 +925,14 @@ packages:
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.99"
|
||||
smooth_page_indicator:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: smooth_page_indicator
|
||||
sha256: "725bc638d5e79df0c84658e1291449996943f93bacbc2cec49963dbbab48d8ae"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
source_gen:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -26,6 +26,7 @@ dependencies:
|
||||
# State Management
|
||||
bloc: ^8.1.4
|
||||
flutter_bloc: ^8.1.5
|
||||
equatable: ^2.0.5
|
||||
|
||||
# Permissions
|
||||
permission_handler: ^11.3.1
|
||||
@@ -46,6 +47,7 @@ dependencies:
|
||||
# Animation
|
||||
lottie: ^3.1.2
|
||||
shimmer: ^3.0.0
|
||||
smooth_page_indicator: ^1.1.0
|
||||
|
||||
# Device Responsiveness
|
||||
gap: ^3.0.1
|
||||
@@ -77,3 +79,9 @@ dev_dependencies:
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
|
||||
assets:
|
||||
- assets/images/
|
||||
- assets/images/welcome_screen/
|
||||
- assets/images/welcome_screen/svg/
|
||||
- assets/images/welcome_screen/png/
|
||||
|
||||
Reference in New Issue
Block a user