This commit is contained in:
jantunesmesias 2024-07-26 09:50:35 -03:00
parent 453cec6040
commit dcc29abc21
134 changed files with 2596 additions and 3048 deletions

View File

@ -0,0 +1,29 @@
<svg width="220" height="210" viewBox="0 0 220 210" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_223_251)">
<path d="M126.788 209.589H63.2425C53.9997 209.589 46.481 201.688 46.481 191.976V17.6124C46.481 7.90033 53.9997 0 63.2425 0H126.788C136.031 0 143.549 7.90033 143.549 17.6124V191.976C143.549 201.688 136.031 209.589 126.788 209.589Z" fill="#6F6F6F"/>
<path d="M126.834 204.821H63.1964C56.3555 204.821 50.7881 198.971 50.7881 191.783V17.4637C50.7881 10.2756 56.3555 4.42556 63.1964 4.42556H126.834C133.675 4.42556 139.242 10.2756 139.242 17.4637V191.783C139.242 198.971 133.675 204.821 126.834 204.821Z" fill="#2E2E2E"/>
<path d="M104.011 16.0288H86.0157C83.64 16.0288 81.7085 13.9993 81.7085 11.503C81.7085 9.00672 83.64 6.97718 86.0157 6.97718H104.011C106.387 6.97718 108.318 9.00672 108.318 11.503C108.318 13.9993 106.387 16.0288 104.011 16.0288Z" fill="#D7D7D8"/>
<path d="M99.2075 96.505V108.935H65.0427C61.7819 108.935 59.1265 106.148 59.1265 102.718C59.1265 99.2883 61.7819 96.505 65.0427 96.505H99.2075Z" fill="#00C060"/>
<path d="M124.988 96.505H65.0427C61.7819 96.505 59.1265 99.2917 59.1265 102.718C59.1265 106.144 61.7819 108.935 65.0427 108.935H124.988C128.252 108.935 130.905 106.148 130.905 102.718C130.905 99.2883 128.252 96.505 124.988 96.505ZM124.988 106.86H65.0427C62.871 106.86 61.1007 105.003 61.1007 102.718C61.1007 100.433 62.871 98.5795 65.0427 98.5795H124.988C127.163 98.5795 128.93 100.436 128.93 102.718C128.93 105 127.163 106.86 124.988 106.86Z" fill="#D7D7D8"/>
<path d="M220 209.589C220 209.817 219.826 210 219.608 210H0.391564C0.174394 210 0 209.817 0 209.589C0 209.36 0.174394 209.177 0.391564 209.177H219.608C219.826 209.177 220 209.36 220 209.589Z" fill="#2E2E43"/>
<path d="M172.773 186.426L167.129 190.218L172.247 198.631L177.892 194.839L172.773 186.426Z" fill="#F3A3A6"/>
<path d="M154.872 73.333L147.742 75.8915L147.63 65.0731L154.119 64.997L154.872 73.333Z" fill="#F3A3A6"/>
<path d="M148.462 68.0604C152.4 68.0604 155.592 64.7059 155.592 60.568C155.592 56.4301 152.4 53.0757 148.462 53.0757C144.524 53.0757 141.332 56.4301 141.332 60.568C141.332 64.7059 144.524 68.0604 148.462 68.0604Z" fill="#F3A3A6"/>
<path d="M150.413 59.8039C149.222 59.7797 148.423 58.5246 147.946 57.3698C147.469 56.222 146.978 54.8943 145.869 54.4275C144.961 54.0472 143.395 56.7026 142.671 56.0111C141.918 55.2884 142.605 51.5129 143.392 50.8318C144.178 50.1506 145.257 50.0054 146.271 49.9397C148.755 49.7911 151.253 49.9709 153.694 50.4791C155.201 50.7903 156.761 51.2709 157.857 52.4015C159.248 53.8363 159.623 56.0214 159.742 58.0648C159.867 60.1566 159.772 62.3486 158.824 64.1949C157.873 66.0377 155.862 67.4103 153.911 66.9678C153.704 65.8579 153.888 64.7204 153.954 63.5864C154.02 62.4592 153.924 61.2422 153.26 60.3502C152.595 59.4582 151.193 59.1193 150.44 59.9249" fill="#2F2E43"/>
<path d="M159.212 62.2967C159.919 61.7401 160.765 61.2699 161.644 61.3736C162.595 61.4808 163.404 62.2967 163.657 63.2648C163.911 64.2329 163.647 65.3048 163.072 66.1069C162.496 66.909 161.63 67.4415 160.709 67.7146C160.176 67.8737 159.594 67.9393 159.08 67.7146C158.327 67.3827 157.912 66.3835 158.198 65.5779" fill="#2F2E43"/>
<path d="M132.678 133.078C132.231 135.543 133.122 137.784 134.675 138.078C136.225 138.372 137.847 136.608 138.298 134.143C138.492 133.161 138.449 132.145 138.173 131.18L143.658 92.5393L136.268 91.1701L133.836 130.364C133.241 131.166 132.843 132.096 132.678 133.089V133.078Z" fill="#F3A3A6"/>
<path d="M147.61 70.9266L142.575 70.9854C139.022 71.5904 138.077 73.5992 137.311 77.2918C136.136 82.924 134.636 90.4302 134.951 90.5339C135.455 90.7068 144.066 94.8419 148.426 93.8185L147.613 70.9266H147.61Z" fill="#00C060"/>
<path d="M153.793 193.74L147.094 193.819L147.2 203.804L153.899 203.725L153.793 193.74Z" fill="#F3A3A6"/>
<path d="M140.723 209.927C140.016 209.938 139.394 209.927 138.92 209.886C137.136 209.737 135.429 208.375 134.563 207.58C134.175 207.224 134.047 206.643 134.241 206.145C134.379 205.789 134.662 205.516 135.017 205.402L139.706 203.936L147.264 198.449L147.35 198.608C147.383 198.666 148.146 200.074 148.406 201.028C148.505 201.391 148.485 201.692 148.34 201.927C148.242 202.089 148.104 202.186 147.992 202.245C148.13 202.394 148.564 202.698 149.9 202.905C151.841 203.21 152.233 201.087 152.246 200.997L152.259 200.924L152.315 200.883C153.233 200.243 153.796 199.956 153.993 200.015C154.118 200.049 154.319 200.115 154.931 205.868C154.987 206.048 155.389 207.369 155.139 208.641C154.869 210.024 149.127 209.613 147.982 209.519C147.949 209.523 143.658 209.896 140.716 209.927H140.726H140.723Z" fill="#2F2E43"/>
<path d="M165.458 208.268C164.671 208.278 163.947 208.185 163.431 208.095C162.924 208.005 162.522 207.587 162.437 207.054C162.371 206.67 162.48 206.287 162.72 205.996L165.958 202.145L169.604 193.287L169.758 193.373C169.814 193.404 171.17 194.175 171.874 194.839C172.14 195.091 172.275 195.358 172.275 195.641C172.275 195.835 172.206 195.994 172.137 196.101C172.331 196.149 172.851 196.163 174.088 195.6C175.888 194.777 175.151 192.758 175.118 192.678L175.092 192.609L175.122 192.547C175.579 191.496 175.915 190.935 176.109 190.873C176.234 190.839 176.435 190.773 179.853 195.316C179.991 195.437 180.998 196.333 181.426 197.55C181.89 198.874 176.819 201.716 175.793 202.273C175.763 202.3 170.462 206.439 168.284 207.625C167.419 208.095 166.389 208.251 165.451 208.257L165.461 208.268H165.458Z" fill="#2F2E43"/>
<path d="M157.83 110.162L139.074 110.38L137.567 128.732L145.731 196.388L155.306 196.274L151.065 157.194L166.971 192.339L175.414 185.977L162.937 153.138C162.937 153.138 166.968 124.358 163.486 117.243C160.008 110.127 157.833 110.152 157.833 110.152V110.162H157.83Z" fill="#2F2E43"/>
<path d="M167.168 111.172L137.38 111.521L145.889 70.9508L158.87 70.7952L167.168 111.172Z" fill="#00C060"/>
<path d="M170.077 132.642C170.577 135.101 169.731 137.358 168.188 137.687C166.642 138.019 164.983 136.294 164.487 133.835C164.273 132.857 164.292 131.84 164.546 130.869L158.241 92.3629L165.599 90.8209L168.86 129.953C169.472 130.741 169.889 131.664 170.077 132.649V132.642Z" fill="#F3A3A6"/>
<path d="M153.839 70.854L158.873 70.7952C162.437 71.3208 163.424 73.3053 164.273 76.9806C165.566 82.5852 167.221 90.0499 166.912 90.164C166.408 90.3438 157.893 94.6794 153.513 93.7598L153.846 70.854H153.839Z" fill="#00C060"/>
</g>
<defs>
<clipPath id="clip0_223_251">
<rect width="220" height="210" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://github.com/

View File

@ -0,0 +1,30 @@
<svg width="218" height="274" viewBox="0 0 218 274" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M87.294 132H46.706C40.8024 132 36 127.024 36 120.908V11.0924C36 4.97567 40.8024 0 46.706 0H87.294C93.1976 0 98 4.97567 98 11.0924V120.908C98 127.024 93.1976 132 87.294 132Z" fill="#A9A9A9"/>
<path d="M87.1443 128H46.8557C42.5247 128 39 124.351 39 119.867V11.1328C39 6.64907 42.5247 3 46.8557 3H87.1443C91.4753 3 95 6.64907 95 11.1328V119.867C95 124.351 91.4753 128 87.1443 128Z" fill="#2E2E2E"/>
<path d="M159.579 117V128.366C158.163 131.106 156.774 134.666 155.415 139.124C155.415 139.124 157.498 146.08 159.579 154.486V178.527H107.598L103.987 183.65H94.0898V206.169H110.226V258H113.578V206.169H123.054V258H126.407V206.169H159.258V258H162.61V206.169H175.348V258H178.7L178.566 206.169H182.09V117H159.579Z" fill="#CCCCCC"/>
<path d="M83.2641 88.9576C81.0512 86.3681 77.9234 85.4126 76.2781 86.8234C74.6329 88.2342 75.0935 91.4764 77.3075 94.0666C78.1778 95.1134 79.2856 95.9362 80.5385 96.4663L90.0531 107.32L95.0432 102.739L85.1337 92.5261C84.804 91.2041 84.1629 89.9805 83.2641 88.9576Z" fill="#FFB6B6"/>
<path d="M154.679 102.193C154.679 102.193 156.76 111.733 148.5 114.775C140.241 117.817 118.836 129.497 117.252 128.962C115.667 128.427 110.484 131.04 104.366 125.465C98.248 119.891 83.4678 103.084 83.4678 103.084L89.5474 94.8145L112.437 110.651C112.437 110.651 112.927 110.506 115.097 110.281C117.266 110.055 115.569 111.426 118.963 108.685C122.357 105.943 144.02 96.117 144.02 96.117C144.02 96.117 150.376 92.9622 154.679 102.193Z" fill="#2F2E41"/>
<path d="M100.667 235.275L104.032 246.135L94.6848 252.502L87.9546 246.51C87.9546 246.51 90.5719 237.148 89.4502 234.901L100.667 235.275Z" fill="#FFB6B6"/>
<path d="M148.153 81.3643L153.514 93.209L137.828 102.975L136.936 88.8539L148.153 81.3643Z" fill="#FFB6B6"/>
<path opacity="0.1" d="M148.153 81.3643L153.514 93.209L137.828 102.975L136.936 88.8539L148.153 81.3643Z" fill="black"/>
<path d="M141.988 91.9239C148.279 91.9239 153.379 86.8162 153.379 80.5156C153.379 74.215 148.279 69.1073 141.988 69.1073C135.697 69.1073 130.598 74.215 130.598 80.5156C130.598 86.8162 135.697 91.9239 141.988 91.9239Z" fill="#FFB6B6"/>
<path d="M137.684 100.463L153.762 89.6028L151.144 181.35C151.144 181.35 137.871 158.32 127.775 157.196C127.775 157.196 128.897 154.575 129.645 153.077C130.393 151.579 131.514 144.09 131.514 144.09L136.749 103.646L137.684 100.463Z" fill="#00C060"/>
<path d="M150.583 195.393L136.375 145.213C136.375 145.213 138.618 104.769 153.761 89.6028L157.314 95.0328C157.314 95.0328 160.826 95.5547 160.191 97.9151C159.557 100.276 174.139 187.155 174.139 187.155H159.026C159.026 187.155 157.687 195.393 150.583 195.393Z" fill="#2F2E41"/>
<path d="M137.683 100.463V98.9648C137.683 98.9648 130.766 99.5266 130.392 103.646C130.018 107.765 127.027 123.868 130.018 133.604L126.279 139.596L123.662 153.826L131.888 156.073L136.375 121.516C136.375 121.516 139.366 103.271 137.683 100.463Z" fill="#2F2E41"/>
<path d="M150.957 171.801C150.957 171.801 157.313 190.151 143.853 190.525C130.392 190.9 109.423 190.9 109.423 190.9L98.9846 196.517L101.976 237.335L81.0373 237.71C81.0373 237.71 74.307 187.529 80.2895 181.538C86.2719 175.546 103.471 169.18 103.471 169.18L123.288 159.069L128.861 152.293L150.957 171.801Z" fill="#2F2E41"/>
<path d="M151.72 87.1687C152.514 86.8861 159.95 78.1586 153.761 72.3768C153.761 72.3768 151.35 65.3136 141.734 66.0545C132.118 66.7953 129.529 72.0629 129.529 74.8003C129.529 77.5376 132.075 80.6153 132.075 80.6153C132.075 80.6153 130.269 73.0925 134.337 73.463C138.405 73.8334 137.296 75.3151 140.255 74.5742C143.213 73.8334 146.172 74.9447 146.172 74.9447L149.131 76.0559V80.5754C149.131 80.5754 150.421 79.5385 150.516 80.5754C150.611 81.6123 151.72 87.1687 151.72 87.1687Z" fill="#2F2E41"/>
<path d="M87.3936 179.665L87.0197 191.274L72.4375 188.653C72.4375 188.653 78.6987 178.332 77.8115 175.441L87.3936 179.665Z" fill="#FFB6B6"/>
<path d="M85.8982 188.653C85.8982 188.653 88.5155 188.653 88.5155 190.151C88.5155 191.649 92.6284 203.257 84.7765 203.632C76.9245 204.006 77.2984 202.508 77.2984 202.508C77.2984 202.508 55.2382 212.619 47.3863 197.64C47.3863 197.64 45.5168 193.895 50.0036 193.146C54.4904 192.398 72.4377 186.127 72.4377 186.127C72.4377 186.127 82.907 190.151 85.8982 188.653Z" fill="#2F2E41"/>
<path d="M101.041 246.135C101.041 246.135 103.659 242.96 104.033 243.237C104.406 243.514 112.632 252.876 107.024 255.497C101.415 258.119 98.4241 259.242 98.4241 259.242L96.9284 256.995C96.9284 256.995 85.7114 267.855 68.5119 260.366C68.5119 260.366 67.0163 256.995 70.3814 256.246C73.7465 255.497 87.9548 244.086 87.9548 244.086C87.9548 244.086 93.9372 248.382 96.9284 247.633C99.9197 246.884 101.041 246.135 101.041 246.135Z" fill="#2F2E41"/>
<path d="M127.775 156.073C127.775 156.073 92.8152 138.285 89.824 138.285C86.8328 138.285 81.1153 139.518 79.8611 145.268C78.607 151.017 71.1289 178.729 71.1289 178.729L89.4501 183.223L96.5543 163.375L108.145 173.861L127.775 162.137V156.073Z" fill="#2F2E41"/>
<path d="M111.313 149.201C107.946 149.696 105.472 151.838 105.787 153.984C106.102 156.13 109.086 157.468 112.454 156.972C113.803 156.793 115.088 156.292 116.204 155.513L130.444 153.236L129.235 146.566L115.325 149.519C114.032 149.094 112.657 148.985 111.313 149.201Z" fill="#FFB6B6"/>
<path d="M160.56 95.7382C160.56 95.7382 169.729 99.0599 167.896 107.681C166.063 116.302 164.522 140.666 163.225 141.723C161.928 142.781 161.373 148.566 153.403 150.779C145.432 152.992 122.56 162.787 122.56 162.787L119.61 146.999L145.19 136.043C145.19 136.043 145.328 135.551 146.294 133.592C147.261 131.633 147.514 133.802 147.007 129.464C146.5 125.127 149.746 101.533 149.746 101.533C149.746 101.533 150.469 94.4646 160.56 95.7382Z" fill="#2F2E41"/>
<g clip-path="url(#clip0_224_385)">
<path d="M83.4167 45.2083H80.9583V40.2917C80.9583 33.5067 75.4517 28 68.6667 28C61.8817 28 56.375 33.5067 56.375 40.2917V45.2083H53.9167C51.2125 45.2083 49 47.4208 49 50.125V74.7083C49 77.4125 51.2125 79.625 53.9167 79.625H83.4167C86.1208 79.625 88.3333 77.4125 88.3333 74.7083V50.125C88.3333 47.4208 86.1208 45.2083 83.4167 45.2083ZM68.6667 67.3333C65.9625 67.3333 63.75 65.1208 63.75 62.4167C63.75 59.7125 65.9625 57.5 68.6667 57.5C71.3708 57.5 73.5833 59.7125 73.5833 62.4167C73.5833 65.1208 71.3708 67.3333 68.6667 67.3333ZM76.2875 45.2083H61.0458V40.2917C61.0458 36.0879 64.4629 32.6708 68.6667 32.6708C72.8704 32.6708 76.2875 36.0879 76.2875 40.2917V45.2083Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_224_385">
<rect width="59" height="59" fill="white" transform="translate(39 28)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://github.com/

View File

@ -0,0 +1,22 @@
<svg width="220" height="210" viewBox="0 0 220 210" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M126.788 209.589H63.2426C53.9997 209.589 46.481 201.688 46.481 191.976V17.6124C46.481 7.90033 53.9997 0 63.2426 0H126.788C136.031 0 143.549 7.90033 143.549 17.6124V191.976C143.549 201.688 136.031 209.589 126.788 209.589Z" fill="#D7D7D8"/>
<path d="M126.834 204.821H63.1965C56.3557 204.821 50.7882 198.971 50.7882 191.783V17.4637C50.7882 10.2756 56.3557 4.42557 63.1965 4.42557H126.834C133.675 4.42557 139.242 10.2756 139.242 17.4637V191.783C139.242 198.971 133.675 204.821 126.834 204.821Z" fill="white"/>
<path d="M104.011 16.0288H86.0159C83.6401 16.0288 81.7086 13.9993 81.7086 11.503C81.7086 9.00672 83.6401 6.97718 86.0159 6.97718H104.011C106.387 6.97718 108.319 9.00672 108.319 11.503C108.319 13.9993 106.387 16.0288 104.011 16.0288Z" fill="#D7D7D8"/>
<path d="M99.2073 96.505V108.935H65.0425C61.7816 108.935 59.1262 106.148 59.1262 102.718C59.1262 99.2883 61.7816 96.505 65.0425 96.505H99.2073Z" fill="#00C060"/>
<path d="M124.988 96.505H65.0425C61.7816 96.505 59.1262 99.2917 59.1262 102.718C59.1262 106.144 61.7816 108.935 65.0425 108.935H124.988C128.252 108.935 130.904 106.148 130.904 102.718C130.904 99.2883 128.252 96.505 124.988 96.505ZM124.988 106.86H65.0425C62.8708 106.86 61.1005 105.003 61.1005 102.718C61.1005 100.433 62.8708 98.5795 65.0425 98.5795H124.988C127.163 98.5795 128.93 100.436 128.93 102.718C128.93 105 127.163 106.86 124.988 106.86Z" fill="#D7D7D8"/>
<path d="M220 209.589C220 209.817 219.826 210 219.608 210H0.391564C0.174394 210 0 209.817 0 209.589C0 209.36 0.174394 209.177 0.391564 209.177H219.608C219.826 209.177 220 209.36 220 209.589Z" fill="#2E2E43"/>
<path d="M172.773 186.426L167.129 190.218L172.247 198.631L177.892 194.839L172.773 186.426Z" fill="#F3A3A6"/>
<path d="M154.872 73.333L147.742 75.8915L147.63 65.0731L154.118 64.997L154.872 73.333Z" fill="#F3A3A6"/>
<path d="M148.462 68.0604C152.4 68.0604 155.593 64.7059 155.593 60.568C155.593 56.4301 152.4 53.0757 148.462 53.0757C144.524 53.0757 141.332 56.4301 141.332 60.568C141.332 64.7059 144.524 68.0604 148.462 68.0604Z" fill="#F3A3A6"/>
<path d="M150.413 59.8039C149.222 59.7797 148.423 58.5246 147.946 57.3698C147.468 56.222 146.978 54.8943 145.869 54.4275C144.961 54.0472 143.395 56.7026 142.671 56.0111C141.917 55.2884 142.605 51.5129 143.392 50.8318C144.178 50.1506 145.257 50.0054 146.271 49.9397C148.755 49.7911 151.252 49.9709 153.694 50.4791C155.201 50.7903 156.761 51.2709 157.856 52.4015C159.248 53.8363 159.623 56.0214 159.742 58.0648C159.867 60.1566 159.771 62.3486 158.824 64.1949C157.873 66.0377 155.862 67.4103 153.911 66.9678C153.704 65.8579 153.888 64.7204 153.954 63.5864C154.02 62.4592 153.924 61.2422 153.26 60.3502C152.595 59.4582 151.193 59.1193 150.44 59.9249" fill="#2F2E43"/>
<path d="M159.212 62.2967C159.92 61.7401 160.765 61.2699 161.644 61.3736C162.595 61.4808 163.404 62.2967 163.658 63.2648C163.911 64.2329 163.648 65.3048 163.072 66.1069C162.496 66.909 161.631 67.4415 160.709 67.7146C160.176 67.8737 159.594 67.9394 159.08 67.7146C158.327 67.3827 157.912 66.3835 158.199 65.5779" fill="#2F2E43"/>
<path d="M132.678 133.078C132.23 135.543 133.122 137.784 134.675 138.078C136.225 138.372 137.847 136.608 138.298 134.143C138.492 133.161 138.449 132.145 138.173 131.18L143.658 92.5393L136.268 91.1701L133.836 130.364C133.241 131.166 132.842 132.096 132.678 133.089V133.078Z" fill="#F3A3A6"/>
<path d="M147.61 70.9266L142.576 70.9854C139.022 71.5904 138.077 73.5992 137.311 77.2918C136.136 82.924 134.636 90.4302 134.952 90.5339C135.455 90.7068 144.066 94.8419 148.426 93.8185L147.613 70.9266H147.61Z" fill="#00C060"/>
<path d="M153.793 193.74L147.094 193.819L147.2 203.804L153.899 203.725L153.793 193.74Z" fill="#F3A3A6"/>
<path d="M140.723 209.927C140.016 209.938 139.394 209.927 138.92 209.886C137.136 209.737 135.429 208.375 134.563 207.58C134.175 207.224 134.047 206.643 134.241 206.145C134.379 205.789 134.662 205.516 135.017 205.402L139.706 203.936L147.264 198.449L147.35 198.608C147.383 198.666 148.146 200.074 148.406 201.028C148.505 201.391 148.485 201.692 148.34 201.927C148.242 202.089 148.104 202.186 147.992 202.245C148.13 202.394 148.564 202.698 149.9 202.905C151.841 203.21 152.233 201.087 152.246 200.997L152.259 200.924L152.315 200.883C153.233 200.243 153.796 199.956 153.993 200.015C154.118 200.049 154.319 200.115 154.931 205.868C154.987 206.048 155.389 207.369 155.139 208.641C154.869 210.024 149.127 209.613 147.982 209.519C147.949 209.523 143.658 209.896 140.716 209.927H140.726H140.723Z" fill="#2F2E43"/>
<path d="M165.457 208.268C164.671 208.278 163.947 208.185 163.43 208.095C162.924 208.005 162.522 207.587 162.437 207.054C162.371 206.67 162.48 206.287 162.72 205.996L165.958 202.145L169.603 193.287L169.758 193.373C169.814 193.404 171.17 194.175 171.874 194.839C172.14 195.091 172.275 195.358 172.275 195.641C172.275 195.835 172.206 195.994 172.137 196.101C172.331 196.149 172.851 196.163 174.088 195.6C175.888 194.777 175.151 192.758 175.118 192.678L175.092 192.609L175.121 192.547C175.579 191.496 175.914 190.936 176.109 190.873C176.234 190.839 176.434 190.773 179.853 195.316C179.991 195.437 180.998 196.333 181.426 197.55C181.89 198.874 176.819 201.716 175.793 202.273C175.763 202.3 170.462 206.439 168.284 207.625C167.418 208.095 166.389 208.251 165.451 208.257L165.461 208.268H165.457Z" fill="#2F2E43"/>
<path d="M157.83 110.162L139.074 110.38L137.567 128.732L145.731 196.388L155.306 196.274L151.065 157.194L166.971 192.339L175.414 185.977L162.937 153.138C162.937 153.138 166.968 124.358 163.486 117.243C160.008 110.127 157.833 110.152 157.833 110.152V110.162H157.83Z" fill="#2F2E43"/>
<path d="M167.168 111.172L137.38 111.521L145.889 70.9508L158.87 70.7952L167.168 111.172Z" fill="#00C060"/>
<path d="M170.077 132.643C170.577 135.101 169.732 137.358 168.188 137.687C166.642 138.019 164.984 136.294 164.487 133.835C164.273 132.857 164.293 131.84 164.546 130.869L158.241 92.3629L165.599 90.8209L168.86 129.953C169.472 130.741 169.89 131.664 170.077 132.649V132.643Z" fill="#F3A3A6"/>
<path d="M153.839 70.854L158.873 70.7952C162.437 71.3208 163.424 73.3053 164.273 76.9806C165.566 82.5852 167.221 90.0499 166.912 90.164C166.408 90.3438 157.893 94.6794 153.513 93.7598L153.845 70.854H153.839Z" fill="#00C060"/>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://github.com/

View File

@ -0,0 +1,30 @@
<svg width="218" height="274" viewBox="0 0 218 274" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M87.294 132H46.706C40.8024 132 36 127.024 36 120.908V11.0924C36 4.97567 40.8024 0 46.706 0H87.294C93.1976 0 98 4.97567 98 11.0924V120.908C98 127.024 93.1976 132 87.294 132Z" fill="#D7D7D8"/>
<path d="M87.1443 128H46.8557C42.5247 128 39 124.351 39 119.867V11.1328C39 6.64907 42.5247 3 46.8557 3H87.1443C91.4753 3 95 6.64907 95 11.1328V119.867C95 124.351 91.4753 128 87.1443 128Z" fill="white"/>
<path d="M159.579 117V128.366C158.164 131.106 156.775 134.666 155.415 139.124C155.415 139.124 157.498 146.08 159.579 154.486V178.527H107.598L103.987 183.65H94.0901V206.169H110.227V258H113.579V206.169H123.055V258H126.407V206.169H159.258V258H162.61V206.169H175.348V258H178.7L178.566 206.169H182.09V117H159.579Z" fill="#CCCCCC"/>
<path d="M83.2643 88.9576C81.0514 86.3681 77.9236 85.4126 76.2784 86.8234C74.6332 88.2342 75.0937 91.4764 77.3077 94.0666C78.178 95.1134 79.2859 95.9362 80.5388 96.4663L90.0533 107.32L95.0434 102.739L85.134 92.5261C84.8042 91.2041 84.1631 89.9805 83.2643 88.9576Z" fill="#FFB6B6"/>
<path d="M154.679 102.193C154.679 102.193 156.76 111.733 148.5 114.775C140.241 117.817 118.836 129.497 117.252 128.962C115.667 128.427 110.484 131.04 104.366 125.465C98.248 119.891 83.4678 103.084 83.4678 103.084L89.5474 94.8145L112.437 110.651C112.437 110.651 112.927 110.506 115.097 110.281C117.266 110.055 115.569 111.426 118.963 108.685C122.357 105.943 144.02 96.117 144.02 96.117C144.02 96.117 150.376 92.9622 154.679 102.193Z" fill="#2F2E41"/>
<path d="M100.667 235.275L104.032 246.135L94.6848 252.502L87.9546 246.51C87.9546 246.51 90.5719 237.148 89.4502 234.901L100.667 235.275Z" fill="#FFB6B6"/>
<path d="M148.153 81.3643L153.514 93.209L137.828 102.975L136.936 88.8539L148.153 81.3643Z" fill="#FFB6B6"/>
<path opacity="0.1" d="M148.153 81.3643L153.514 93.209L137.828 102.975L136.936 88.8539L148.153 81.3643Z" fill="black"/>
<path d="M141.988 91.9239C148.279 91.9239 153.379 86.8162 153.379 80.5156C153.379 74.215 148.279 69.1073 141.988 69.1073C135.697 69.1073 130.597 74.215 130.597 80.5156C130.597 86.8162 135.697 91.9239 141.988 91.9239Z" fill="#FFB6B6"/>
<path d="M137.684 100.463L153.761 89.6028L151.144 181.35C151.144 181.35 137.871 158.32 127.775 157.196C127.775 157.196 128.897 154.575 129.645 153.077C130.392 151.579 131.514 144.09 131.514 144.09L136.749 103.646L137.684 100.463Z" fill="#00C060"/>
<path d="M150.583 195.393L136.375 145.213C136.375 145.213 138.618 104.769 153.761 89.6028L157.314 95.0328C157.314 95.0328 160.826 95.5547 160.191 97.9151C159.557 100.276 174.139 187.155 174.139 187.155H159.026C159.026 187.155 157.687 195.393 150.583 195.393Z" fill="#2F2E41"/>
<path d="M137.684 100.463V98.9648C137.684 98.9648 130.766 99.5266 130.393 103.646C130.019 107.765 127.027 123.868 130.019 133.604L126.28 139.596L123.662 153.826L131.888 156.073L136.375 121.516C136.375 121.516 139.366 103.271 137.684 100.463Z" fill="#2F2E41"/>
<path d="M150.957 171.801C150.957 171.801 157.314 190.151 143.853 190.525C130.393 190.9 109.423 190.9 109.423 190.9L98.9848 196.517L101.976 237.335L81.0375 237.71C81.0375 237.71 74.3073 187.529 80.2897 181.538C86.2721 175.546 103.472 169.18 103.472 169.18L123.288 159.069L128.862 152.293L150.957 171.801Z" fill="#2F2E41"/>
<path d="M151.72 87.1687C152.514 86.8861 159.95 78.1586 153.761 72.3768C153.761 72.3768 151.35 65.3136 141.734 66.0545C132.118 66.7953 129.529 72.0629 129.529 74.8003C129.529 77.5376 132.075 80.6153 132.075 80.6153C132.075 80.6153 130.269 73.0925 134.337 73.463C138.405 73.8334 137.296 75.3151 140.255 74.5742C143.213 73.8334 146.172 74.9447 146.172 74.9447L149.131 76.0559V80.5754C149.131 80.5754 150.421 79.5385 150.516 80.5754C150.611 81.6123 151.72 87.1687 151.72 87.1687Z" fill="#2F2E41"/>
<path d="M87.3938 179.665L87.0199 191.274L72.4377 188.653C72.4377 188.653 78.6989 178.332 77.8118 175.441L87.3938 179.665Z" fill="#FFB6B6"/>
<path d="M85.8982 188.653C85.8982 188.653 88.5155 188.653 88.5155 190.151C88.5155 191.649 92.6284 203.257 84.7765 203.632C76.9245 204.006 77.2984 202.508 77.2984 202.508C77.2984 202.508 55.2382 212.619 47.3863 197.64C47.3863 197.64 45.5168 193.895 50.0036 193.146C54.4904 192.398 72.4377 186.127 72.4377 186.127C72.4377 186.127 82.907 190.151 85.8982 188.653Z" fill="#2F2E41"/>
<path d="M101.041 246.135C101.041 246.135 103.658 242.96 104.032 243.237C104.406 243.514 112.632 252.876 107.024 255.497C101.415 258.119 98.4238 259.242 98.4238 259.242L96.9282 256.995C96.9282 256.995 85.7111 267.855 68.5116 260.366C68.5116 260.366 67.016 256.995 70.3811 256.246C73.7463 255.497 87.9545 244.086 87.9545 244.086C87.9545 244.086 93.937 248.382 96.9282 247.633C99.9194 246.884 101.041 246.135 101.041 246.135Z" fill="#2F2E41"/>
<path d="M127.775 156.073C127.775 156.073 92.8155 138.285 89.8243 138.285C86.833 138.285 81.1156 139.518 79.8614 145.268C78.6072 151.017 71.1292 178.729 71.1292 178.729L89.4504 183.223L96.5545 163.375L108.145 173.861L127.775 162.137V156.073Z" fill="#2F2E41"/>
<path d="M111.314 149.201C107.947 149.696 105.472 151.838 105.787 153.984C106.102 156.13 109.086 157.468 112.455 156.972C113.803 156.793 115.089 156.292 116.204 155.513L130.444 153.236L129.235 146.566L115.325 149.519C114.032 149.094 112.657 148.985 111.314 149.201Z" fill="#FFB6B6"/>
<path d="M160.56 95.7382C160.56 95.7382 169.729 99.0599 167.896 107.681C166.064 116.302 164.522 140.666 163.225 141.723C161.929 142.781 161.373 148.566 153.403 150.779C145.432 152.992 122.561 162.787 122.561 162.787L119.611 146.999L145.19 136.043C145.19 136.043 145.328 135.551 146.295 133.592C147.261 131.633 147.514 133.802 147.007 129.464C146.5 125.127 149.746 101.533 149.746 101.533C149.746 101.533 150.469 94.4646 160.56 95.7382Z" fill="#2F2E41"/>
<g clip-path="url(#clip0_224_422)">
<path d="M83.4167 45.2083H80.9583V40.2917C80.9583 33.5067 75.4517 28 68.6667 28C61.8817 28 56.375 33.5067 56.375 40.2917V45.2083H53.9167C51.2125 45.2083 49 47.4208 49 50.125V74.7083C49 77.4125 51.2125 79.625 53.9167 79.625H83.4167C86.1208 79.625 88.3333 77.4125 88.3333 74.7083V50.125C88.3333 47.4208 86.1208 45.2083 83.4167 45.2083ZM68.6667 67.3333C65.9625 67.3333 63.75 65.1208 63.75 62.4167C63.75 59.7125 65.9625 57.5 68.6667 57.5C71.3708 57.5 73.5833 59.7125 73.5833 62.4167C73.5833 65.1208 71.3708 67.3333 68.6667 67.3333ZM76.2875 45.2083H61.0458V40.2917C61.0458 36.0879 64.4629 32.6708 68.6667 32.6708C72.8704 32.6708 76.2875 36.0879 76.2875 40.2917V45.2083Z" fill="#1AAB5F"/>
</g>
<defs>
<clipPath id="clip0_224_422">
<rect width="59" height="59" fill="white" transform="translate(39 28)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://github.com/

View File

@ -1,20 +1,33 @@
import 'dart:convert';
import 'package:f_r_e_hub/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
import 'package:f_r_e_hub/custom_code/actions/get_dev_u_u_i_d.dart';
import 'package:f_r_e_hub/pages/home_page/home_page_widget.dart';
import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:sqflite/utils/utils.dart';
import 'dart:developer'; import 'dart:developer';
import '/actions/actions.dart' as action_blocks; // import 'package:hub/components/organisms/bottom_arrow_linked_locals/bottom_arrow_linked_locals_component_widget.dart';
import '/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart'; import 'package:hub/backend/api_requests/api_manager.dart';
import '/custom_code/actions/index.dart' as actions; import 'package:hub/components/molecular_components/option_selection_modal/option_selection_modal_widget.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
import '/flutter_flow/random_data_util.dart' as random_data; import 'package:hub/custom_code/actions/get_dev_u_u_i_d.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:flutter/material.dart';
import 'package:hub/flutter_flow/random_data_util.dart';
import 'package:hub/pages/home_page/home_page_model.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:url_launcher/url_launcher.dart';
Future<void> openTermsOfUse(BuildContext context) async {
log('openTermsOfUse');
final Uri url = Uri.parse('https://freaccess.com.br/pp/');
if (!await launchUrl(url)) {
throw Exception('Could not launch $url');
}
}
Future repeatVisitScheduleAction( Future repeatVisitScheduleAction(
BuildContext context, { BuildContext context, {
@ -107,14 +120,14 @@ Future singInLoginAction(
}), }),
]); ]);
if ((FFAppState().email != '') && (FFAppState().passwd != '')) { if ((FFAppState().email != '') && (FFAppState().passwd != '')) {
devUUID = await actions.getDevUUID(); devUUID = await getDevUUID();
FFAppState().devUUID = devUUID!; FFAppState().devUUID = devUUID!;
loginCall = await PhpGroup.loginCall.call( loginCall = await PhpGroup.loginCall.call(
email: FFAppState().email, email: FFAppState().email,
password: FFAppState().passwd, password: FFAppState().passwd,
uuid: FFAppState().devUUID, uuid: FFAppState().devUUID,
type: FFAppState().device, type: FFAppState().device,
description: random_data.randomString( description: randomString(
10, 10,
10, 10,
true, true,
@ -148,7 +161,7 @@ Future singInLoginAction(
)!; )!;
FFAppState().serialNumber = await getSerialNumber() ?? ''; FFAppState().serialNumber = await getSerialNumber() ?? '';
FFAppState().isLogged = true; FFAppState().isLogged = true;
await action_blocks.toggleHomePage(context); await toggleHomePage(context);
return; return;
} else { } else {
await showModalBottomSheet( await showModalBottomSheet(
@ -199,14 +212,14 @@ Future<bool> signUpRegisterAction(
name: name, name: name,
password: passwd, password: passwd,
email: email, email: email,
token: random_data.randomString( token: randomString(
36, 36,
36, 36,
false, false,
false, false,
true, true,
), ),
uuid: random_data.randomString( uuid: randomString(
36, 36,
36, 36,
false, false,
@ -214,7 +227,7 @@ Future<bool> signUpRegisterAction(
true, true,
), ),
tipo: device, tipo: device,
descricao: random_data.randomString( descricao: randomString(
36, 36,
36, 36,
true, true,
@ -234,8 +247,8 @@ Future<bool> signUpRegisterAction(
context: context, context: context,
builder: (alertDialogContext) { builder: (alertDialogContext) {
return AlertDialog( return AlertDialog(
title: const Text('ERROR2'), title: const Text('Error'),
content: const Text('ERROR2'), content: Text('${registerCall?.jsonBody}'),
actions: [ actions: [
TextButton( TextButton(
onPressed: () => Navigator.pop(alertDialogContext), onPressed: () => Navigator.pop(alertDialogContext),
@ -251,12 +264,21 @@ Future<bool> signUpRegisterAction(
context: context, context: context,
builder: (alertDialogContext) { builder: (alertDialogContext) {
return AlertDialog( return AlertDialog(
title: const Text('ERROR1'), title: Text(FFLocalizations.of(context).getVariableText(
content: const Text('ERROR1'), enText: 'Error',
ptText: 'Erro',
)),
content: Text(FFLocalizations.of(context).getVariableText(
enText: 'Please fill in all fields',
ptText: 'Por favor, preencha todos os campos',
)),
actions: [ actions: [
TextButton( TextButton(
onPressed: () => Navigator.pop(alertDialogContext), onPressed: () => Navigator.pop(alertDialogContext),
child: const Text('ERROR1 '), child: Text(FFLocalizations.of(context).getVariableText(
ptText: 'Fechar',
enText: 'Close',
)),
), ),
], ],
); );
@ -311,6 +333,7 @@ Future toggleSignInPage(BuildContext context) async {
} }
Future toggleSignUpPage(BuildContext context) async { Future toggleSignUpPage(BuildContext context) async {
context.pushNamed( context.pushNamed(
'signUpPage', 'signUpPage',
extra: <String, dynamic>{ extra: <String, dynamic>{
@ -651,4 +674,140 @@ Widget buildQrCode(
// String escapeMECARD(String content) { // String escapeMECARD(String content) {
// // Implementação para escapar caracteres. // // Implementação para escapar caracteres.
// return content.replaceAll(':', '\\:'); // Exemplo simplificado. // return content.replaceAll(':', '\\:'); // Exemplo simplificado.
// } // }
/// menu
Future scheduleVisitOptAction(BuildContext context) async {
await showAdaptiveDialog(
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: OptionSelectionModalWidget(
routesListStr: <String>[
'scheduleCompleteVisitPage',
'scheduleProvisionalVisitPage',
'fastPassPage',
],
iconsListIcon: <IconData>[
Icons.date_range_rounded,
Icons.date_range_rounded,
Icons.date_range_rounded,
],
nameListStr: <String>[
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nCompleta',
enText: 'Complete\nSchedule',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nProvisória',
enText: 'Provisional\nSchedule',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Visita\nRápida',
enText: 'Fast\nSchedule',
),
],
),
);
},
);
}
Future registerVisitorOptAction(BuildContext context) async {
context.pushNamed(
'registerVisitorPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
Future peopleOnThePropertyAction(BuildContext context) async {
context.pushNamed(
'peopleOnThePropertyPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.fade,
),
},
);
}
Future preferencesSettings(BuildContext context) async {
context.pushNamed(
'preferencesSettings',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
Future liberationHistoryOptAction(BuildContext context) async {
await showAdaptiveDialog(
// isScrollControlled: true,
// backgroundColor: Colors.transparent,
// enableDrag: false,
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.viewInsetsOf(context),
child: OptionSelectionModalWidget(
routesListStr: <String>[
'liberationHistory',
'acessHistoryPage',
'scheduleCompleteVisitPage',
// 'messageHistoryPage',
],
iconsListIcon: <IconData>[
Icons.history_rounded,
Icons.history_rounded,
Icons.history_rounded,
// Icons.history_rounded,
],
nameListStr: <String>[
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Liberação',
enText: 'Liberation\nHistory',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Acesso',
enText: 'Access\nHistory',
),
FFLocalizations.of(context).getVariableText(
ptText: 'Histórico\nde Visita',
enText: 'Visit\nHistory',
),
// FFLocalizations.of(context).getVariableText(
// ptText: 'Histórico\nde Mensagens',
// enText: 'Message\nHistory',
// ),
],
),
);
},
);
}
Future accessQRCodeOptAction(BuildContext context) async {
context.pushNamed(
'qrCodePage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}

View File

@ -1,11 +1,9 @@
import 'dart:ffi'; // import 'dart:ffi';
import 'package:f_r_e_hub/flutter_flow/permissions_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:csv/csv.dart'; import 'package:csv/csv.dart';
import 'package:local_auth/local_auth.dart'; import 'package:local_auth/local_auth.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:synchronized/synchronized.dart'; import 'package:synchronized/synchronized.dart';
class FFAppState extends ChangeNotifier { class FFAppState extends ChangeNotifier {
@ -488,4 +486,4 @@ extension FlutterSecureStorageExtensions on FlutterSecureStorage {
Future<void> setStringList(String key, List<String> value) async => Future<void> setStringList(String key, List<String> value) async =>
await writeSync( await writeSync(
key: key, value: const ListToCsvConverter().convert([value])); key: key, value: const ListToCsvConverter().convert([value]));
} }

View File

@ -11,6 +11,7 @@ export 'api_manager.dart' show ApiCallResponse;
const _kPrivateApiFunctionName = 'ffPrivateApiCall'; const _kPrivateApiFunctionName = 'ffPrivateApiCall';
/// Start PHP Group Code /// Start PHP Group Code
class PhpGroup { class PhpGroup {
@ -2432,4 +2433,4 @@ String _serializeJson(dynamic jsonVar, [bool isList = false]) {
} }
return isList ? '[]' : '{}'; return isList ? '[]' : '{}';
} }
} }

View File

@ -15,6 +15,9 @@ import '/flutter_flow/uploaded_file.dart';
import 'get_streamed_response.dart'; import 'get_streamed_response.dart';
enum ApiCallType { enum ApiCallType {
GET, GET,
POST, POST,
@ -512,4 +515,4 @@ class ApiManager {
return result; return result;
} }
} }

View File

@ -1,4 +1,4 @@
import 'package:http/http.dart'; import 'package:http/http.dart';
Future<StreamedResponse> getStreamedResponse(Request request) => Future<StreamedResponse> getStreamedResponse(Request request) =>
Client().send(request); Client().send(request);

View File

@ -4,20 +4,24 @@ import 'dart:developer';
import 'dart:io'; import 'dart:io';
import 'dart:math' as math; import 'dart:math' as math;
import 'package:f_r_e_hub/actions/actions.dart';
import 'package:f_r_e_hub/app_state.dart';
import 'package:f_r_e_hub/backend/api_requests/api_calls.dart';
import 'package:f_r_e_hub/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart';
import 'package:f_r_e_hub/components/templates_components/card_item_template_component/card_item_template_component_widget.dart';
import 'package:f_r_e_hub/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart';
import 'package:f_r_e_hub/components/templates_components/visit_request_template_component/visit_request_template_component_widget.dart';
import 'package:f_r_e_hub/flutter_flow/flutter_flow_util.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:hub/actions/actions.dart';
import 'package:hub/app_state.dart';
import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart';
import 'package:hub/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart';
import 'package:hub/components/templates_components/visit_request_template_component/visit_request_template_component_widget.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
//
class PushNotificationService { class PushNotificationService {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance; final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
@ -108,17 +112,17 @@ class PushNotificationService {
await Future.delayed(Duration(milliseconds: 100)); await Future.delayed(Duration(milliseconds: 100));
} }
const initializationSettingsAndroid = AndroidInitializationSettings('mipmap/ic_fre_black'); var initializationSettingsAndroid =
const initializationSettingsIOS = DarwinInitializationSettings( AndroidInitializationSettings('mipmap/ic_fre_black');
var initializationSettingsIOS = DarwinInitializationSettings(
requestAlertPermission: true, requestAlertPermission: true,
requestBadgePermission: true, requestBadgePermission: true,
requestSoundPermission: true, requestSoundPermission: true,
); );
const initializationSettings = InitializationSettings( var initializationSettings = InitializationSettings(
android: initializationSettingsAndroid, android: initializationSettingsAndroid,
iOS: initializationSettingsIOS, iOS: initializationSettingsIOS,
); );
_flutterLocalNotificationsPlugin.initialize( _flutterLocalNotificationsPlugin.initialize(
initializationSettings, initializationSettings,
onDidReceiveNotificationResponse: (NotificationResponse response) async { onDidReceiveNotificationResponse: (NotificationResponse response) async {
@ -130,7 +134,7 @@ class PushNotificationService {
log('Notification payload: $message'); log('Notification payload: $message');
var data = _notificationDetails; // Assuming getOnMessage() now returns the latest RemoteMessage var data = _notificationDetails; // Assuming getOnMessage() now returns the latest RemoteMessage
log('Extra: ${data.value}'); log('Extra: ${data.value}');
_handleNotificationClick(message, extra: data.value ?? {'extra': 'extra'}); _handleNotificationClick(message, extra: data.value);
} catch (e) { } catch (e) {
log('Error decoding notification payload: $e'); log('Error decoding notification payload: $e');
} }
@ -187,17 +191,7 @@ class PushNotificationService {
_onMessage.add(message); _onMessage.add(message);
log('Extra: ${message.notification?.body}'); log('Extra: ${message.notification?.body}');
Map<String, dynamic> extra = {}; NotificationHandler().handleMessage(message.data, context); });
log('Message: ${message.data}');
if (message.data['click_action'] == 'mensagem') {
extra['body'] = message.notification?.body;
}
log('New Extra: $extra');
NotificationHandler().handleMessage(message.data, context, extra: extra);
});
} }
void configureTokenRefresh() { void configureTokenRefresh() {
@ -273,11 +267,8 @@ class PushNotificationService {
} }
void _showNotification(RemoteMessage message) async { void _showNotification(RemoteMessage message) async {
Map<String, dynamic> messageParsed = message.toMap(); String channelId =
Map<String, dynamic> data = messageParsed['data']; _getChannelIdBasedOnClickAction(message.data['click_action']);
Map<String, dynamic> notification = messageParsed['notification'];
String channelId = _getChannelIdBasedOnClickAction(data['click_action']);
var androidDetails = AndroidNotificationDetails( var androidDetails = AndroidNotificationDetails(
channelId, channelId,
@ -286,33 +277,19 @@ class PushNotificationService {
importance: Importance.max, importance: Importance.max,
priority: Priority.high, priority: Priority.high,
); );
var iOSDetails = const DarwinNotificationDetails( var iOSDetails = DarwinNotificationDetails();
categoryIdentifier: 'plainCategory', var generalNotificationDetails =
sound: 'slow_spring_board.aiff', NotificationDetails(android: androidDetails, iOS: iOSDetails);
presentList: true,
interruptionLevel: InterruptionLevel.critical,
);
var generalNotificationDetails = NotificationDetails(android: androidDetails, iOS: iOSDetails);
log('Showing notification: ${message.messageId.hashCode}'); log('Showing notification: ${message.messageId.hashCode}');
log('Message Title: ${notification['title'].toString()}');
log('Message Body: ${notification['body'].toString()}');
log('Message Payload: ${data.toString()}');
await _flutterLocalNotificationsPlugin.show( await _flutterLocalNotificationsPlugin.show(
DateTime.now().microsecond, // DateTime.now().millisecondsSinceEpoch % (1 << 31),
notification['title'].toString(), math.Random().nextInt(1 << 30),
notification['body'].toString(), message.notification?.title,
message.notification?.body,
generalNotificationDetails, generalNotificationDetails,
payload: data.toString(), payload: message.data.toString(),
).catchError((err, stack) { );
log('Error: $err');
log('Stack: $stack');
});
} }
_handleNotificationClick(Map<String, dynamic> payload, {Map<String, dynamic> extra = const {}}) { _handleNotificationClick(Map<String, dynamic> payload, {Map<String, dynamic> extra = const {}}) {
@ -347,15 +324,15 @@ class NotificationHandler {
switch (message['click_action']) { switch (message['click_action']) {
case 'visit_request': case 'visit_request':
_showVisitRequestDialog(message, context); _showVisitRequestDialog(message, context);
break; break;
case 'cancel_request': case '':
_showVisitRequestResolvedDialog(message, context);
break; break;
case 'access': case 'access':
_showAcessNotificationModal(message, context); _showAcessNotificationModal(message, context);
break; break;
case 'mensagem': case 'mensagem':
_showMessageNotificationDialog(message, context, extra); _showMessageNotificationDialog(message, context, extra);
break; break;
case 'enroll_cond': case 'enroll_cond':
log('enroll_cond'); log('enroll_cond');
@ -382,35 +359,28 @@ class NotificationHandler {
void _showAcessNotificationModal( void _showAcessNotificationModal(
Map<String, dynamic> message, BuildContext context) { Map<String, dynamic> message, BuildContext context) {
log('Showing access notification dialog'); log('Showing access notification dialog');
log('Message: ${message}');
log('USR_TIPO: ${message['USR_TIPO']}'); log('USR_TIPO: ${message['USR_TIPO']}');
log('USR_ID: ${message['USR_ID']}'); log('USR_ID: ${message['USR_ID']}');
log('USR_DOCUMENTO: ${message['USR_DOCUMENTO']}'); log('USR_DOCUMENTO: ${message['USR_DOCUMENTO']}');
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
String id = _getIdBasedOnUserType(message); _getIdBasedOnUserType(message);
return Dialog(
return GestureDetector( backgroundColor: Colors.transparent,
onTap: () { child: AccessNotificationModalTemplateComponentWidget(
Navigator.pop(context); datetime: message['ACE_DATAHORA'].toString(),
}, drive: message['ACI_DESCRICAO'].toString(),
child: Dialog( id: message['USR_TIPO'].toString() == 'O'
backgroundColor: Colors.transparent, ? message['USR_ID'].toString() == ''
child: AccessNotificationModalTemplateComponentWidget( ? '0'
datetime: message['ACE_DATAHORA'].toString(), : message['USR_ID'].toString()
drive: message['SET_DESCRICAO'].toString(), : message['USR_DOCUMENTO'].toString() == ''
id: message['USR_TIPO'].toString() == 'O' ? '0'
? message['USR_ID'].toString() == '' : message['USR_DOCUMENTO'].toString(),
? '0' name: message['PES_NOME'].toString(),
: message['USR_ID'].toString() type: message['USR_TIPO'],
: message['USR_DOCUMENTO'].toString() == '' ));
? '0'
: message['USR_DOCUMENTO'].toString(),
name: message['PES_NOME'].toString(),
type: message['USR_TIPO'],
)),
);
}, },
); );
} }
@ -419,31 +389,17 @@ class NotificationHandler {
Map<String, dynamic> message, BuildContext context, Map<String, dynamic> extra) { Map<String, dynamic> message, BuildContext context, Map<String, dynamic> extra) {
log('Showing message notification dialog'); log('Showing message notification dialog');
log('Notification "message": $message'); log('Notification "message": $message');
log('Extra: $extra');
Map<String, dynamic> local = {};
try {
local = jsonDecode(message['local']);
} catch (err) {
local = message['local'];
}
showDialog( showDialog(
useSafeArea: true, useSafeArea: true,
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return GestureDetector( return Dialog(
onTap: () { backgroundColor: Colors.transparent,
Navigator.pop(context); child: MessageNotificationModalTemplateComponentWidget(
}, id: message['local']['CLI_ID'].toString(),
child: Dialog( from: message['remetente'].toString(),
backgroundColor: Colors.transparent, to: message['destinatario'].toString() == 'O' ? 'Morador' : 'Visitante',
child: MessageNotificationModalTemplateComponentWidget( message: extra['body'].toString().isEmpty ? 'Unknown' : extra['body'].toString(),
id: local['CLI_ID'].toString(),
from: message['remetente'].toString(),
to: message['destinatario'].toString() == 'O' ? 'Morador' : 'Visitante',
message: extra['body'].toString().isEmpty ? 'Unknown' : extra['body'].toString(),
),
), ),
); );
}, },
@ -457,7 +413,7 @@ class NotificationHandler {
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
String id = _getIdBasedOnUserType(message); _getIdBasedOnUserType(message);
return Dialog( return Dialog(
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
child: VisitRequestTemplateComponentWidget( child: VisitRequestTemplateComponentWidget(
@ -465,8 +421,8 @@ class NotificationHandler {
vteReason: message['motivo'] ?? 'Unknown', vteReason: message['motivo'] ?? 'Unknown',
vteMsg: message['mensagem'] ?? 'Unknown', vteMsg: message['mensagem'] ?? 'Unknown',
vteDocument: message['documento'] ?? '', vteDocument: message['documento'] ?? '',
vteUUID: message['idVisitante'].toString() ?? '0', vteUUID: message['idVisitante'].toString(),
vawRef: message['referencia'].toString() ?? '0', vawRef: message['referencia'].toString(),
vawStatus: 'S', vawStatus: 'S',
changeStatusAction: changeStatusAction, changeStatusAction: changeStatusAction,
), ),
@ -474,35 +430,6 @@ class NotificationHandler {
}, },
); );
} }
void _showVisitRequestResolvedDialog(
Map<String, dynamic> message, BuildContext context) {
log('Showing visit request notification dialog');
showDialog(
context: context,
builder: (BuildContext context) {
return GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Dialog(
backgroundColor: Colors.transparent,
child: VisitRequestTemplateComponentWidget(
vteName: message['nomevisita'].toString(),
vteReason: message['motivo'].toString(),
vteMsg: message['resposta'].toString(),
vteDocument: message['documento'].toString(),
vteUUID: message['codvisita'].toString(),
vawRef: message['referencia'].toString(),
vawStatus: message['status'].toString(),
),
),
);
},
);
}
} }
class PushNotificationManager { class PushNotificationManager {
@ -523,4 +450,4 @@ class PushNotificationManager {
} }
} }

View File

@ -5,6 +5,17 @@ enum AppHeaderComponent {
home, home,
} }
enum MenuView {
list_grid,
list,
grid,
}
enum MenuItem {
button,
card
}
extension FFEnumExtensions<T extends Enum> on T { extension FFEnumExtensions<T extends Enum> on T {
String serialize() => name; String serialize() => name;
} }
@ -21,4 +32,4 @@ T? deserializeEnum<T>(String? value) {
default: default:
return null; return null;
} }
} }

View File

@ -1,9 +1,10 @@
// ignore_for_file: unnecessary_getters_setters // ignore_for_file: unnecessary_getters_setters
import '/backend/schema/util/schema_util.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'index.dart'; import 'index.dart';
import '/flutter_flow/flutter_flow_util.dart';
class DeviceStruct extends BaseStruct { class DeviceStruct extends BaseStruct {
DeviceStruct({ DeviceStruct({
@ -110,4 +111,4 @@ DeviceStruct createDeviceStruct({
devUUID: devUUID, devUUID: devUUID,
version: version, version: version,
description: description, description: description,
); );

View File

@ -2,9 +2,11 @@ import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:from_css_color/from_css_color.dart'; import 'package:from_css_color/from_css_color.dart';
import 'package:hub/backend/schema/enums/enums.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/nav/serialization_util.dart';
import '/backend/schema/enums/enums.dart';
import '/flutter_flow/flutter_flow_util.dart';
export 'package:collection/collection.dart' show ListEquality; export 'package:collection/collection.dart' show ListEquality;
export 'package:flutter/material.dart' show Color, Colors; export 'package:flutter/material.dart' show Color, Colors;
@ -77,4 +79,4 @@ List<Color>? getColorsList(dynamic value) =>
value is! List ? null : value.map(getSchemaColor).withoutNulls; value is! List ? null : value.map(getSchemaColor).withoutNulls;
List<T>? getDataList<T>(dynamic value) => List<T>? getDataList<T>(dynamic value) =>
value is! List ? null : value.map((e) => castToType<T>(e)!).toList(); value is! List ? null : value.map((e) => castToType<T>(e)!).toList();

View File

@ -0,0 +1,145 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/molecular_components/menu_item/menu_item.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
class MenuButtonWidget extends MenuEntry {
const MenuButtonWidget({
Key? key,
this.action,
this.title,
this.icon,
}) : super(key: key);
final Function()? action;
final String? title;
final IconData? icon;
@override
_MenuButtonWidgetState createState() => _MenuButtonWidgetState();
}
class _MenuButtonWidgetState extends State<MenuButtonWidget> {
@override
Widget build(BuildContext context) {
return InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () async {
await widget.action?.call();
},
child: Container(
width: 100.0,
height: 100.0,
decoration: BoxDecoration(
color:
FlutterFlowTheme.of(context).primaryBackground,
boxShadow: [
BoxShadow(
blurRadius: 4.0,
color:
FlutterFlowTheme.of(context).customColor5,
offset: const Offset(
0.0,
2.0,
),
)
],
borderRadius: BorderRadius.circular(24.0),
shape: BoxShape.rectangle,
border: Border.all(
color: FlutterFlowTheme.of(context).alternate,
width: 0.5,
),
),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Align(
alignment:
const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: const AlignmentDirectional(
-1.0, 0.0),
child: Padding(
padding: const EdgeInsetsDirectional
.fromSTEB(8.0, 0.0, 0.0, 0.0),
child: Container(
width: 30.0,
height: 30.0,
decoration: BoxDecoration(
color:
FlutterFlowTheme.of(context)
.primaryBackground,
shape: BoxShape.circle,
),
alignment:
const AlignmentDirectional(
0.0, 0.0),
child: Icon(
widget.icon,
color:
FlutterFlowTheme.of(context)
.accent1,
size: 24.0,
),
),
),
),
),
],
),
),
Align(
alignment:
const AlignmentDirectional(0.0, 0.0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
alignment: const AlignmentDirectional(
0.0, 0.0),
child: Text(
widget.title ?? '',
style: FlutterFlowTheme.of(context)
.titleLarge
.override(
fontFamily: 'Nunito',
color:
FlutterFlowTheme.of(context)
.primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts:
GoogleFonts.asMap()
.containsKey('Nunito'),
),
),
),
],
),
),
].divide(const SizedBox(height: 0.0)),
),
),
),
);
}
}

View File

@ -0,0 +1,199 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/app_state.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/preferences_settings_page/preferences_settings_model.dart';
import 'package:provider/provider.dart';
class PreferencesPageWidget extends StatelessWidget {
const PreferencesPageWidget({super.key});
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<PreferencesPageModel>(
create: (_) => PreferencesPageModel(),
child: Consumer<PreferencesPageModel>(
builder: (context, model, child) => GestureDetector(
onTap: () => model.unfocusNode.canRequestFocus
? FocusScope.of(context).requestFocus(model.unfocusNode)
: FocusScope.of(context).unfocus(),
child: Scaffold(
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
appBar: AppBar(
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
automaticallyImplyLeading: false,
forceMaterialTransparency: true,
leading: FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 30.0,
borderWidth: 1.0,
buttonSize: 60.0,
icon: Icon(
Icons.keyboard_arrow_left,
color: FlutterFlowTheme.of(context).primaryText,
size: 30.0,
),
onPressed: () async {
context.pop();
},
),
title: Text(
FFLocalizations.of(context).getVariableText(
enText: 'Preferences',
ptText: 'Preferências',
),
style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 17.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey('Nunito'),
),
),
centerTitle: true,
elevation: 0.0,
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: [
Container(),
Expanded(
flex: 2,
child: ListView.builder(
// gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 3,
// crossAxisSpacing: 12.0,
// mainAxisSpacing: 12.0,
// childAspectRatio: 1.0,
// mainAxisExtent: 100.0,
// ),
itemCount: 6, // Assuming 4 items for simplicity
padding: const EdgeInsets.symmetric(horizontal: 20.0),
physics: const AlwaysScrollableScrollPhysics(),
itemBuilder: (BuildContext context, int index) {
return _buildIconButton(context, index, model);
},
),
),
],
),
),
),
),
);
}
Widget _buildIconButton(BuildContext context, int index, PreferencesPageModel model) {
IconData icon;
Function() onPressed =() => {};
bool isEnabled;
String content;
switch (index) {
case 0:
icon = Icons.fingerprint;
onPressed = () => model.toggleFingerprint(context); // Disable if fingerprint is false
isEnabled = FFAppState().fingerprint;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative a autenticação por impressão digital para login seguro.',
enText: 'Enable fingerprint authentication for secure login.',
);
break;
case 1:
icon = Icons.person;
onPressed = () => model.enablePerson(context);
isEnabled = FFAppState().person;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Exibir código de identificação remota',
enText: 'Display remote identification code',
);
break;
case 2:
icon = Icons.notifications;
onPressed = model.toggleNotify;
isEnabled = FFAppState().notify;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative para receber sua notificação de acesso',
enText: 'Enable to receive your access notification',
);
break;
case 3:
icon = Icons.lock_clock_sharp;
// onLongPress = model.togglePass(context, model);
isEnabled = FFAppState().pass;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative para inserir uma credencial de acesso para o QRCode',
enText: 'Enable to enter an access credential for the QRCode',
);
break;
case 4:
icon = Icons.landscape;
onPressed = model.localLogout;
isEnabled = false;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Ative para se desvincular do local selecionado',
enText: 'Enable to unlink from the selected location',
);
break;
case 5:
icon = Icons.delete;
onPressed = () => model.deleteAccount(context);
isEnabled = false;
content = FFLocalizations.of(context).getVariableText(
ptText: 'Delete sua conta e todos os dados associados permanentemente.',
enText: 'Delete your account and all associated data permanently.',
);
break;
default:
throw Exception('Invalid index: $index');
}
return Container(
height: 100,
child: GestureDetector(
onTap: index != 3 ? onPressed : () {model.togglePass(context);},
child: Row(
children: [
CircleAvatar(
backgroundColor: isEnabled ? FlutterFlowTheme.of(context).primary : FlutterFlowTheme.of(context).alternate,
child: Icon(
icon,
color: isEnabled ? FlutterFlowTheme.of(context).primaryBackground : FlutterFlowTheme.of(context).primary,
// icon: Icon(icon, color: isEnabled ? FlutterFlowTheme.of(context).primaryBackground : FlutterFlowTheme.of(context).primary, size: 40.0),
// onPressed: index != 3 ? onPressed : () {model.togglePass(context);},
// borderRadius: 20.0,
// borderWidth: 1.0,
// buttonSize: 40.0,
// fillColor: isEnabled ? FlutterFlowTheme.of(context).primary : FlutterFlowTheme.of(context).alternate,
// disabledColor: FlutterFlowTheme.of(context).alternate,
// disabledIconColor: FlutterFlowTheme.of(context).primary,
),
),
SizedBox(width: 8.0),
Expanded(
child: Text(
content,
style: FlutterFlowTheme.of(context).bodySmall.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.normal,
fontStyle: FontStyle.normal,
),
overflow: TextOverflow.clip,
),
),
],
),
),
);
}
}

View File

@ -2,6 +2,7 @@ import '/flutter_flow/flutter_flow_util.dart';
import 'text_field_component_widget.dart' show TextFieldComponentWidget; import 'text_field_component_widget.dart' show TextFieldComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class TextFieldComponentModel class TextFieldComponentModel
extends FlutterFlowModel<TextFieldComponentWidget> { extends FlutterFlowModel<TextFieldComponentWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
@ -19,4 +20,4 @@ class TextFieldComponentModel
textFieldFocusNode?.dispose(); textFieldFocusNode?.dispose();
textController?.dispose(); textController?.dispose();
} }
} }

View File

@ -5,6 +5,9 @@ import 'package:google_fonts/google_fonts.dart';
import 'text_field_component_model.dart'; import 'text_field_component_model.dart';
export 'text_field_component_model.dart'; export 'text_field_component_model.dart';
////
class TextFieldComponentWidget extends StatefulWidget { class TextFieldComponentWidget extends StatefulWidget {
const TextFieldComponentWidget({ const TextFieldComponentWidget({
super.key, super.key,
@ -114,4 +117,4 @@ class _TextFieldComponentWidgetState extends State<TextFieldComponentWidget> {
), ),
); );
} }
} }

View File

@ -0,0 +1,12 @@
import 'package:flutter/material.dart';
abstract class MenuEntry extends StatefulWidget {
const MenuEntry({
Key? key,
}) : super(key: key);
}

View File

@ -3,6 +3,7 @@ import '/flutter_flow/form_field_controller.dart';
import 'opt_modal_widget.dart' show OptModalWidget; import 'opt_modal_widget.dart' show OptModalWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class OptModalModel extends FlutterFlowModel<OptModalWidget> { class OptModalModel extends FlutterFlowModel<OptModalWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
@ -28,4 +29,4 @@ class OptModalModel extends FlutterFlowModel<OptModalWidget> {
textFieldFocusNode?.dispose(); textFieldFocusNode?.dispose();
textController?.dispose(); textController?.dispose();
} }
} }

View File

@ -1,8 +1,12 @@
import 'package:f_r_e_hub/components/molecular_components/opt_modal/opt_modal_model.dart';
import 'package:f_r_e_hub/flutter_flow/flutter_flow_theme.dart';
import 'package:f_r_e_hub/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/molecular_components/message_opt_modal/opt_modal_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/internationalization.dart';
class OptModalWidget extends StatefulWidget { class OptModalWidget extends StatefulWidget {
final String defaultPersonType; final String defaultPersonType;
@ -61,9 +65,9 @@ class _OptModalWidgetState extends State<OptModalWidget> {
Map<String, String> filterResult = { Map<String, String> filterResult = {
'personType': '', 'personType': '',
'accessType': '', 'accessType': '',
'search': _model.textController.text == '' 'search': _model.textController?.text == ''
? '.*' ? '.*'
: _model.textController.text.toLowerCase(), : _model.textController!.text.toLowerCase(),
}; };
if (selected['personType']!.isEmpty) { if (selected['personType']!.isEmpty) {
@ -327,4 +331,4 @@ class _OptModalWidgetState extends State<OptModalWidget> {
), ),
); );
} }
} }

View File

@ -3,6 +3,8 @@ import '/flutter_flow/form_field_controller.dart';
import 'opt_modal_widget.dart' show OptModalWidget; import 'opt_modal_widget.dart' show OptModalWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class OptModalModel extends FlutterFlowModel<OptModalWidget> { class OptModalModel extends FlutterFlowModel<OptModalWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
@ -28,4 +30,4 @@ class OptModalModel extends FlutterFlowModel<OptModalWidget> {
textFieldFocusNode?.dispose(); textFieldFocusNode?.dispose();
textController?.dispose(); textController?.dispose();
} }
} }

View File

@ -1,8 +1,10 @@
import 'package:f_r_e_hub/components/molecular_components/opt_modal/opt_modal_model.dart';
import 'package:f_r_e_hub/flutter_flow/flutter_flow_theme.dart';
import 'package:f_r_e_hub/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/molecular_components/message_opt_modal/opt_modal_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/internationalization.dart';
class OptModalWidget extends StatefulWidget { class OptModalWidget extends StatefulWidget {
final String defaultPersonType; final String defaultPersonType;
@ -61,9 +63,9 @@ class _OptModalWidgetState extends State<OptModalWidget> {
Map<String, String> filterResult = { Map<String, String> filterResult = {
'personType': '', 'personType': '',
'accessType': '', 'accessType': '',
'search': _model.textController.text == '' 'search': _model.textController?.text == ''
? '.*' ? '.*'
: _model.textController.text.toLowerCase(), : _model.textController!.text.toLowerCase(),
}; };
if (selected['personType']!.isEmpty) { if (selected['personType']!.isEmpty) {
@ -327,4 +329,4 @@ class _OptModalWidgetState extends State<OptModalWidget> {
), ),
); );
} }
} }

View File

@ -1,5 +1,7 @@
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/molecular_components/option_selection_modal/option_selection_modal_widget.dart';
import 'option_selection_modal_widget.dart' show OptionSelectionModalWidget; import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class OptionSelectionModalModel class OptionSelectionModalModel
@ -9,4 +11,4 @@ class OptionSelectionModalModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -1,14 +1,14 @@
// import 'package:f_r_e_hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart'; // import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart'; import 'package:flutter_animate/flutter_animate.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/molecular_components/option_selection_modal/option_selection_modal_model.dart';
import 'package:hub/flutter_flow/flutter_flow_animations.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_animations.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'option_selection_modal_model.dart';
export 'option_selection_modal_model.dart';
class OptionSelectionModalWidget extends StatefulWidget { class OptionSelectionModalWidget extends StatefulWidget {
const OptionSelectionModalWidget({ const OptionSelectionModalWidget({
@ -217,4 +217,4 @@ class _OptionSelectionModalWidgetState extends State<OptionSelectionModalWidget>
), ),
); );
} }
} }

View File

@ -2,10 +2,12 @@ import '/flutter_flow/flutter_flow_util.dart';
import 'throw_exception_widget.dart' show ThrowExceptionWidget; import 'throw_exception_widget.dart' show ThrowExceptionWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ThrowExceptionModel extends FlutterFlowModel<ThrowExceptionWidget> { class ThrowExceptionModel extends FlutterFlowModel<ThrowExceptionWidget> {
@override @override
void initState(BuildContext context) {} void initState(BuildContext context) {}
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -7,6 +7,8 @@ import 'package:google_fonts/google_fonts.dart';
import 'throw_exception_model.dart'; import 'throw_exception_model.dart';
export 'throw_exception_model.dart'; export 'throw_exception_model.dart';
///
class ThrowExceptionWidget extends StatefulWidget { class ThrowExceptionWidget extends StatefulWidget {
const ThrowExceptionWidget({ const ThrowExceptionWidget({
super.key, super.key,
@ -160,4 +162,4 @@ class _ThrowExceptionWidgetState extends State<ThrowExceptionWidget>
], ],
); );
} }
} }

View File

@ -1,6 +1,7 @@
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart';
import 'visitor_not_found_component_widget.dart' import 'package:hub/flutter_flow/flutter_flow_model.dart';
show VisitorNotFoundComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class VisitorNotFoundComponentModel class VisitorNotFoundComponentModel
@ -10,4 +11,4 @@ class VisitorNotFoundComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -1,12 +1,15 @@
import '/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
import '/flutter_flow/flutter_flow_icon_button.dart'; import 'package:hub/components/molecular_components/visitor_not_found_component/visitor_not_found_component_model.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import '/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'visitor_not_found_component_model.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart';
export 'visitor_not_found_component_model.dart'; import 'package:hub/flutter_flow/flutter_flow_widgets.dart';
class VisitorNotFoundComponentWidget extends StatefulWidget { class VisitorNotFoundComponentWidget extends StatefulWidget {
const VisitorNotFoundComponentWidget({super.key}); const VisitorNotFoundComponentWidget({super.key});
@ -174,4 +177,4 @@ class _VisitorNotFoundComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,6 +1,7 @@
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/organism_components/arrow_linked_locals_component/arrow_linked_locals_component_widget.dart';
import 'arrow_linked_locals_component_widget.dart'
show ArrowLinkedLocalsComponentWidget; import '../../../flutter_flow/flutter_flow_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ArrowLinkedLocalsComponentModel class ArrowLinkedLocalsComponentModel
@ -10,4 +11,4 @@ class ArrowLinkedLocalsComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -1,7 +1,7 @@
import '/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'arrow_linked_locals_component_model.dart'; import 'package:hub/components/organism_components/arrow_linked_locals_component/arrow_linked_locals_component_model.dart';
export 'arrow_linked_locals_component_model.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart';
class ArrowLinkedLocalsComponentWidget extends StatefulWidget { class ArrowLinkedLocalsComponentWidget extends StatefulWidget {
const ArrowLinkedLocalsComponentWidget({super.key}); const ArrowLinkedLocalsComponentWidget({super.key});
@ -38,4 +38,4 @@ class _ArrowLinkedLocalsComponentWidgetState
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container(); return Container();
} }
} }

View File

@ -1,6 +1,7 @@
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
import 'bottom_arrow_linked_locals_component_widget.dart' import 'package:hub/flutter_flow/flutter_flow_model.dart';
show BottomArrowLinkedLocalsComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class BottomArrowLinkedLocalsComponentModel class BottomArrowLinkedLocalsComponentModel
@ -10,4 +11,4 @@ class BottomArrowLinkedLocalsComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -1,14 +1,19 @@
import 'dart:developer'; import 'dart:developer';
import '/backend/api_requests/api_calls.dart'; import 'package:hub/app_state.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'bottom_arrow_linked_locals_component_model.dart';
export 'bottom_arrow_linked_locals_component_model.dart';
class BottomArrowLinkedLocalsComponentWidget extends StatefulWidget { class BottomArrowLinkedLocalsComponentWidget extends StatefulWidget {
const BottomArrowLinkedLocalsComponentWidget({super.key}); const BottomArrowLinkedLocalsComponentWidget({super.key});
@ -194,10 +199,10 @@ class _BottomArrowLinkedLocalsComponentWidgetState
topRight: Radius.circular(25.0), topRight: Radius.circular(25.0),
), ),
child: Image.network( child: Image.network(
'https://freaccess.com.br/freaccess/Images/Clients/${getJsonField( "https://freaccess.com.br/freaccess/Images/Clients/${getJsonField(
localItem, localItem,
r'''$.CLI_ID''', r'''$.CLI_ID''',
).toString()}.png', ).toString()}.png",
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
fit: BoxFit.fill, fit: BoxFit.fill,
@ -253,4 +258,4 @@ class _BottomArrowLinkedLocalsComponentWidgetState
), ),
); );
} }
} }

View File

@ -2,6 +2,8 @@ import '/flutter_flow/flutter_flow_util.dart';
import 'local_profile_component_widget.dart' show LocalProfileComponentWidget; import 'local_profile_component_widget.dart' show LocalProfileComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
///
class LocalProfileComponentModel class LocalProfileComponentModel
extends FlutterFlowModel<LocalProfileComponentWidget> { extends FlutterFlowModel<LocalProfileComponentWidget> {
@override @override
@ -9,4 +11,4 @@ class LocalProfileComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -1,16 +1,16 @@
import 'package:f_r_e_hub/actions/actions.dart';
import '/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart'; import '/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/custom_functions.dart' as functions; import '/flutter_flow/custom_functions.dart' as functions;
import '/flutter_flow/random_data_util.dart' as random_data;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'local_profile_component_model.dart'; import 'local_profile_component_model.dart';
export 'local_profile_component_model.dart'; export 'local_profile_component_model.dart';
////
class LocalProfileComponentWidget extends StatefulWidget { class LocalProfileComponentWidget extends StatefulWidget {
const LocalProfileComponentWidget({ const LocalProfileComponentWidget({
required bool localStatus, required bool localStatus,
@ -148,4 +148,4 @@ class _LocalProfileComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,12 +1,14 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:hub/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import '/components/molecular_components/option_selection_modal/option_selection_modal_widget.dart'; import '/components/molecular_components/option_selection_modal/option_selection_modal_widget.dart';
import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart'; import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
import '/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import 'menu_component_widget.dart' show MenuComponentWidget; import 'menu_component_widget.dart' show MenuComponentWidget;
class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> { class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
/// Local state fields for this component. /// Local state fields for this component.
@ -128,13 +130,13 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
'liberationHistory', 'liberationHistory',
'acessHistoryPage', 'acessHistoryPage',
'scheduleCompleteVisitPage', 'scheduleCompleteVisitPage',
// 'messageHistoryPage', 'messageHistoryPage'
], ],
iconsListIcon: <IconData>[ iconsListIcon: <IconData>[
Icons.history_rounded, Icons.history_rounded,
Icons.history_rounded, Icons.history_rounded,
Icons.history_rounded, Icons.history_rounded,
// Icons.history_rounded, Icons.history_rounded,
], ],
nameListStr: <String>[ nameListStr: <String>[
FFLocalizations.of(context).getVariableText( FFLocalizations.of(context).getVariableText(
@ -149,10 +151,10 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
ptText: 'Histórico\nde Visita', ptText: 'Histórico\nde Visita',
enText: 'Visit\nHistory', enText: 'Visit\nHistory',
), ),
// FFLocalizations.of(context).getVariableText( FFLocalizations.of(context).getVariableText(
// ptText: 'Histórico\nde Mensagens', ptText: 'Histórico\nde Mensagens',
// enText: 'Message\nHistory', enText: 'Message\nHistory',
// ), ),
], ],
), ),
); );
@ -172,4 +174,19 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
}, },
); );
} }
}
Future messageHistoryAction(BuildContext context) async {
context.pushNamed(
'messageHistoryPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
}

View File

@ -1,3 +1,9 @@
import 'dart:developer';
import 'package:hub/backend/schema/enums/enums.dart';
import 'package:hub/components/molecular_components/menu_item/menu_item.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart'; import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart';
import '/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart'; import '/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
@ -5,8 +11,19 @@ import 'package:flutter/material.dart';
import 'menu_component_model.dart'; import 'menu_component_model.dart';
export 'menu_component_model.dart'; export 'menu_component_model.dart';
class MenuComponentWidget extends StatefulWidget { class MenuComponentWidget extends StatefulWidget {
const MenuComponentWidget({super.key}); const MenuComponentWidget({
Key? key,
required this.style,
required this.item,
required this.expandable,
required this.options,
});
final MenuView style;
final MenuItem item;
final bool expandable;
final List<MenuEntry> options;
@override @override
State<MenuComponentWidget> createState() => _MenuComponentWidgetState(); State<MenuComponentWidget> createState() => _MenuComponentWidgetState();
@ -36,16 +53,111 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
log('MenuComponentWidget: ${widget.options.toList().toString()}');
return Padding( return Padding(
padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0), padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0),
child: Builder( child: Builder(
builder: (context) { builder: (context) {
if (_model.isGrid == true) { if (widget.style == MenuView.list_grid && widget.expandable == true && widget.item == MenuItem.button) {
if (_model.isGrid == true) {
return wrapWithModel(
model: _model.menuListViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuListViewComponentWidget(
options: widget.options,
expandable: widget.expandable,
item: widget.item,
changeMenuStyle: () async {
await _model.changeMenuStyle(context);
setState(() {});
},
registerVisitorOptAction: () async {
await _model.registerVisitorOptAction(context);
setState(() {});
},
scheduleVisitOptAction: () async {
await _model.scheduleVisitOptAction(context);
setState(() {});
},
peopleOnThePropertyOptAction: () async {
await _model.peopleOnThePropertyAction(context);
setState(() {});
},
preferencesSettings: () async {
await _model.preferencesSettings(context);
setState(() {});
},
liberationHistoryOptAction: () async {
await _model.liberationHistoryOptAction(context);
setState(() {});
},
accessQRCodeOptAction: () async {
await _model.accessQRCodeOptAction(context);
setState(() {});
},
messageHistoryAction: () async {
await _model.messageHistoryAction(context);
setState(() {});
},
),
);
} else {
return wrapWithModel(
model: _model.menuStaggeredViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuStaggeredViewComponentWidget(
changeMenuStyleAction: () async {
await _model.changeMenuStyle(context);
setState(() {});
},
registerVisitorOptAction: () async {
await _model.registerVisitorOptAction(context);
setState(() {});
},
scheduleVisitOptAction: () async {
await _model.scheduleVisitOptAction(context);
setState(() {});
},
peopleOnThePropertyOptAction: () async {
await _model.peopleOnThePropertyAction(context);
setState(() {});
},
preferencesSettings: () async {
await _model.preferencesSettings(context);
setState(() {});
},
liberationHistoryOptAction: () async {
await _model.liberationHistoryOptAction(context);
setState(() {});
},
accessQRCodeOptAction: () async {
await _model.accessQRCodeOptAction(context);
setState(() {});
},
),
);
}
}
if (widget.style == MenuView.list && widget.expandable == false && widget.item == MenuItem.card){
return wrapWithModel( return wrapWithModel(
model: _model.menuListViewComponentModel, model: _model.menuListViewComponentModel,
updateCallback: () => setState(() {}), updateCallback: () => setState(() {}),
updateOnChange: true, updateOnChange: true,
child: MenuListViewComponentWidget( child: MenuListViewComponentWidget(
expandable: widget.expandable,
item: widget.item,
options: widget.options,
messageHistoryAction: () async {
await _model.messageHistoryAction(context);
setState(() {});
},
changeMenuStyle: () async { changeMenuStyle: () async {
await _model.changeMenuStyle(context); await _model.changeMenuStyle(context);
setState(() {}); setState(() {});
@ -74,46 +186,13 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
await _model.accessQRCodeOptAction(context); await _model.accessQRCodeOptAction(context);
setState(() {}); setState(() {});
}, },
),
);
} else {
return wrapWithModel(
model: _model.menuStaggeredViewComponentModel,
updateCallback: () => setState(() {}),
updateOnChange: true,
child: MenuStaggeredViewComponentWidget(
changeMenuStyleAction: () async {
await _model.changeMenuStyle(context);
setState(() {});
},
registerVisitorOptAction: () async {
await _model.registerVisitorOptAction(context);
setState(() {});
},
scheduleVisitOptAction: () async {
await _model.scheduleVisitOptAction(context);
setState(() {});
},
peopleOnThePropertyOptAction: () async {
await _model.peopleOnThePropertyAction(context);
setState(() {});
},
preferencesSettings: () async {
await _model.preferencesSettings(context);
setState(() {});
},
liberationHistoryOptAction: () async {
await _model.liberationHistoryOptAction(context);
setState(() {});
},
accessQRCodeOptAction: () async {
await _model.accessQRCodeOptAction(context);
setState(() {});
},
), ),
); );
} }
}, return const SizedBox();
},
), ),
); );
} }
@ -132,4 +211,4 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
} }
} }

View File

@ -2,6 +2,8 @@ import '/flutter_flow/flutter_flow_util.dart';
import 'menu_list_view_component_widget.dart' show MenuListViewComponentWidget; import 'menu_list_view_component_widget.dart' show MenuListViewComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class MenuListViewComponentModel class MenuListViewComponentModel
extends FlutterFlowModel<MenuListViewComponentWidget> { extends FlutterFlowModel<MenuListViewComponentWidget> {
@override @override
@ -9,4 +11,4 @@ class MenuListViewComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -1,8 +1,10 @@
import 'package:hub/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import 'menu_staggered_view_component_widget.dart'
show MenuStaggeredViewComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class MenuStaggeredViewComponentModel class MenuStaggeredViewComponentModel
extends FlutterFlowModel<MenuStaggeredViewComponentWidget> { extends FlutterFlowModel<MenuStaggeredViewComponentWidget> {
@override @override
@ -10,4 +12,4 @@ class MenuStaggeredViewComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -3,13 +3,14 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:flutter_expandable_fab/flutter_expandable_fab.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart';
import 'package:hub/flutter_flow/custom_icons.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import '/flutter_flow/flutter_flow_icon_button.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'menu_staggered_view_component_model.dart';
export 'menu_staggered_view_component_model.dart';
class MenuStaggeredViewComponentWidget extends StatefulWidget { class MenuStaggeredViewComponentWidget extends StatefulWidget {
const MenuStaggeredViewComponentWidget({ const MenuStaggeredViewComponentWidget({
@ -1079,4 +1080,4 @@ Propriedade */
], ],
); );
} }
} }

View File

@ -1,10 +1,16 @@
import 'package:f_r_e_hub/backend/api_requests/api_manager.dart';
import 'package:f_r_e_hub/flutter_flow/request_manager.dart'; import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/flutter_flow/request_manager.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import 'message_well_component_widget.dart' show MessageWellComponentWidget; import 'message_well_component_widget.dart' show MessageWellComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
///
import 'package:flutter/material.dart';
class MessageWellComponentModel class MessageWellComponentModel
extends FlutterFlowModel<MessageWellComponentWidget> { extends FlutterFlowModel<MessageWellComponentWidget> {
final unfocusNode = FocusNode(); final unfocusNode = FocusNode();
@ -43,4 +49,4 @@ class MessageWellComponentModel
clearGetLiberationsCache(); clearGetLiberationsCache();
} }
} }

View File

@ -2,16 +2,19 @@ import 'dart:async';
import 'dart:collection'; import 'dart:collection';
import 'dart:developer'; import 'dart:developer';
import 'package:f_r_e_hub/app_state.dart';
import 'package:f_r_e_hub/backend/api_requests/api_calls.dart';
import 'package:f_r_e_hub/flutter_flow/flutter_flow_theme.dart';
import 'package:f_r_e_hub/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
//
final dropdown = BehaviorSubject<LinkedHashMap<String, String>>.seeded( final dropdown = BehaviorSubject<LinkedHashMap<String, String>>.seeded(
LinkedHashMap.from({ LinkedHashMap.from({
'All': 'A', 'All': 'A',
@ -340,4 +343,4 @@ class MessageWellNotifier extends StateNotifier<MessageWellState> {
final messageWellProvider = final messageWellProvider =
StateNotifierProvider<MessageWellNotifier, MessageWellState>((ref) { StateNotifierProvider<MessageWellNotifier, MessageWellState>((ref) {
return MessageWellNotifier(); return MessageWellNotifier();
}); });

View File

@ -1,7 +1,9 @@
import '/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_manager.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'schedule_visit_detail_widget.dart' show ScheduleVisitDetailWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
class ScheduleVisitDetailModel class ScheduleVisitDetailModel
extends FlutterFlowModel<ScheduleVisitDetailWidget> { extends FlutterFlowModel<ScheduleVisitDetailWidget> {
@ -57,4 +59,4 @@ class ScheduleVisitDetailModel
textFieldFocusNode6?.dispose(); textFieldFocusNode6?.dispose();
textController6?.dispose(); textController6?.dispose();
} }
} }

View File

@ -1,16 +1,20 @@
import '/backend/api_requests/api_calls.dart'; import 'package:hub/app_state.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
import '/flutter_flow/flutter_flow_icon_button.dart'; import 'package:hub/components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/custom_functions.dart' as functions;
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_model.dart';
import 'package:hub/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
import 'package:hub/flutter_flow/custom_functions.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'schedule_visit_detail_model.dart';
export 'schedule_visit_detail_model.dart';
class ScheduleVisitDetailWidget extends StatefulWidget { class ScheduleVisitDetailWidget extends StatefulWidget {
const ScheduleVisitDetailWidget({ const ScheduleVisitDetailWidget({
@ -68,11 +72,11 @@ class _ScheduleVisitDetailWidgetState extends State<ScheduleVisitDetailWidget> {
_model.textFieldFocusNode3 ??= FocusNode(); _model.textFieldFocusNode3 ??= FocusNode();
_model.textController4 ??= TextEditingController( _model.textController4 ??= TextEditingController(
text: functions.extractDescToStr(widget.visitResonStr!)); text: extractDescToStr(widget.visitResonStr!));
_model.textFieldFocusNode4 ??= FocusNode(); _model.textFieldFocusNode4 ??= FocusNode();
_model.textController5 ??= TextEditingController( _model.textController5 ??= TextEditingController(
text: functions.extractDescToStr(widget.visitLevelStr!)); text: extractDescToStr(widget.visitLevelStr!));
_model.textFieldFocusNode5 ??= FocusNode(); _model.textFieldFocusNode5 ??= FocusNode();
_model.textController6 ??= TextEditingController(text: widget.visitObsStr); _model.textController6 ??= TextEditingController(text: widget.visitObsStr);
@ -225,10 +229,10 @@ class _ScheduleVisitDetailWidgetState extends State<ScheduleVisitDetailWidget> {
const Duration(milliseconds: 500), const Duration(milliseconds: 500),
imageUrl: imageUrl:
valueOrDefault<String>( valueOrDefault<String>(
'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField( "https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${getJsonField(
visitorsDataItem, visitorsDataItem,
r'''$.VTE_DOCUMENTO''', r'''$.VTE_DOCUMENTO''',
).toString()}&tipo=E', ).toString()}&tipo=E",
'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg', 'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/flutter-freaccess-hub-0xgz9q/assets/7ftdetkzc3s0/360_F_64676383_LdbmhiNM6Ypzb3FM4PPuFP9rHe7ri8Ju.jpg',
), ),
width: 100.0, width: 100.0,
@ -931,8 +935,8 @@ class _ScheduleVisitDetailWidgetState extends State<ScheduleVisitDetailWidget> {
dtFim: widget.visitEndDate, dtFim: widget.visitEndDate,
unica: widget.visitTempStr, unica: widget.visitTempStr,
idMotivo: idMotivo:
functions.extractIdToStr(widget.visitResonStr!), extractIdToStr(widget.visitResonStr!),
idNAC: functions.extractIdToStr(widget.visitLevelStr!), idNAC: extractIdToStr(widget.visitLevelStr!),
obs: widget.visitObsStr, obs: widget.visitObsStr,
cliID: FFAppState().cliUUID, cliID: FFAppState().cliUUID,
); );
@ -977,4 +981,4 @@ class _ScheduleVisitDetailWidgetState extends State<ScheduleVisitDetailWidget> {
), ),
); );
} }
} }

View File

@ -1,6 +1,7 @@
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_widget.dart';
import 'up_arrow_linked_locals_component_widget.dart' import 'package:hub/flutter_flow/flutter_flow_model.dart';
show UpArrowLinkedLocalsComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class UpArrowLinkedLocalsComponentModel class UpArrowLinkedLocalsComponentModel
@ -10,4 +11,4 @@ class UpArrowLinkedLocalsComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -1,12 +1,16 @@
import '/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/backend/api_requests/api_manager.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'package:hub/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'up_arrow_linked_locals_component_model.dart';
export 'up_arrow_linked_locals_component_model.dart';
class UpArrowLinkedLocalsComponentWidget extends StatefulWidget { class UpArrowLinkedLocalsComponentWidget extends StatefulWidget {
const UpArrowLinkedLocalsComponentWidget({super.key}); const UpArrowLinkedLocalsComponentWidget({super.key});
@ -240,4 +244,4 @@ class _UpArrowLinkedLocalsComponentWidgetState
), ),
); );
} }
} }

View File

@ -4,6 +4,7 @@ import 'access_notification_modal_template_component_widget.dart'
show AccessNotificationModalTemplateComponentWidget; show AccessNotificationModalTemplateComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class AccessNotificationModalTemplateComponentModel class AccessNotificationModalTemplateComponentModel
extends FlutterFlowModel<AccessNotificationModalTemplateComponentWidget> { extends FlutterFlowModel<AccessNotificationModalTemplateComponentWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.

View File

@ -7,6 +7,9 @@ import 'package:provider/provider.dart';
import 'access_notification_modal_template_component_model.dart'; import 'access_notification_modal_template_component_model.dart';
export 'access_notification_modal_template_component_model.dart'; export 'access_notification_modal_template_component_model.dart';
class AccessNotificationModalTemplateComponentWidget extends StatefulWidget { class AccessNotificationModalTemplateComponentWidget extends StatefulWidget {
const AccessNotificationModalTemplateComponentWidget({ const AccessNotificationModalTemplateComponentWidget({
super.key, super.key,
@ -380,4 +383,4 @@ class _AccessNotificationModalTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -3,6 +3,7 @@ import 'card_item_template_component_widget.dart'
show CardItemTemplateComponentWidget; show CardItemTemplateComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class CardItemTemplateComponentModel class CardItemTemplateComponentModel
extends FlutterFlowModel<CardItemTemplateComponentWidget> { extends FlutterFlowModel<CardItemTemplateComponentWidget> {
@override @override
@ -10,4 +11,4 @@ class CardItemTemplateComponentModel
@override @override
void dispose() {} void dispose() {}
} }

View File

@ -10,6 +10,10 @@ import 'package:provider/provider.dart';
import 'card_item_template_component_model.dart'; import 'card_item_template_component_model.dart';
export 'card_item_template_component_model.dart'; export 'card_item_template_component_model.dart';
///
class CardItemTemplateComponentWidget extends StatefulWidget { class CardItemTemplateComponentWidget extends StatefulWidget {
const CardItemTemplateComponentWidget({ const CardItemTemplateComponentWidget({
super.key, super.key,
@ -20,8 +24,8 @@ class CardItemTemplateComponentWidget extends StatefulWidget {
}); });
final Map<String, String>? labelsHashMap; final Map<String, String>? labelsHashMap;
final Map<String, Color>? statusHashMap; final List<Map<String, Color>?> statusHashMap;
final Map<String, String> imageHashMap; //document/vteID and type final Map<String, String> imageHashMap;
final Future Function()? onTapCardItemAction; final Future Function()? onTapCardItemAction;
@override @override
@ -35,8 +39,8 @@ class _CardItemTemplateComponentWidgetState
LinkedHashMap<String, String> get labelsLinkedHashMap => LinkedHashMap<String, String> get labelsLinkedHashMap =>
LinkedHashMap.from(widget.labelsHashMap ?? {}); LinkedHashMap.from(widget.labelsHashMap ?? {});
LinkedHashMap<String, Color> get statusLinkedHashMap => List<LinkedHashMap<String, Color>> get statusLinkedHashMap =>
LinkedHashMap.from(widget.statusHashMap ?? {}); widget.statusHashMap.map((map) => LinkedHashMap<String, Color>.from(map ?? {})).toList();
@override @override
void setState(VoidCallback callback) { void setState(VoidCallback callback) {
@ -70,7 +74,8 @@ class _CardItemTemplateComponentWidgetState
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
context.watch<FFAppState>(); context.watch<FFAppState>();
log('imageHashMap: ${widget.imageHashMap}');
return InkWell( return InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
@ -178,36 +183,40 @@ class _CardItemTemplateComponentWidgetState
}, },
), ),
), ),
Container( Row(
child: Row( mainAxisAlignment: MainAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.max,
children: [ children: statusLinkedHashMap.expand((linkedHashMap) {
Padding( return linkedHashMap.entries.map((MapEntry<String, Color> item) {
padding: return Container(
const EdgeInsets.symmetric(vertical: 3.0), child: Row(
child: Container( mainAxisAlignment: MainAxisAlignment.spaceBetween,
width: 200.0, children: [
height: 27.0, Padding(
decoration: BoxDecoration( padding: const EdgeInsets.symmetric(horizontal: 1.0, vertical: 3.0),
color: statusLinkedHashMap.values.first, child: Container(
borderRadius: BorderRadius.circular(5.0), width: 100.0,
), height: 27.0,
child: Align( decoration: BoxDecoration(
alignment: Alignment.center, color: item.value, // Usa a cor do item atual
child: Text( borderRadius: BorderRadius.circular(5.0),
statusLinkedHashMap.keys ),
.first, // Acessa diretamente a chave como texto do status child: Align(
style: TextStyle( alignment: Alignment.center,
// Substitua por seu tema ou estilo de texto child: Text(
color: FlutterFlowTheme.of(context) item.key, // Usa a chave do item atual como texto
.info, // Cor do texto, ajuste conforme necessário style: TextStyle(
color: FlutterFlowTheme.of(context).info, // Ajuste conforme necessário
),
),
),
), ),
), ),
), ],
), ),
), );
], }).toList();
), }).toList(),
), ),
]), ]),
), ),
@ -236,4 +245,4 @@ class _CardItemTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -3,6 +3,7 @@ import 'change_pass_widget.dart'
show PassKeyTemplateWidget; show PassKeyTemplateWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class PassKeyTemplateComponentModel class PassKeyTemplateComponentModel
extends FlutterFlowModel<PassKeyTemplateWidget> { extends FlutterFlowModel<PassKeyTemplateWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
@ -19,11 +20,16 @@ class PassKeyTemplateComponentModel
String? Function(BuildContext, String?)? keyTextFieldTextControllerValidator2; String? Function(BuildContext, String?)? keyTextFieldTextControllerValidator2;
String? _keyTextFieldTextControllerValidator( String? _keyTextFieldTextControllerValidator(
BuildContext context, String? val) { BuildContext context, String? val) {
if (val == null || val.isEmpty) { if (val == null || val.isEmpty ) {
return FFLocalizations.of(context).getText( return FFLocalizations.of(context).getVariableText(
'f128ajey' /* Field is required */, enText: 'This field is required',
ptText: 'Este campo é obrigatório',
); );
} }
if ( val.length < 4 ) return FFLocalizations.of(context).getVariableText(
enText: 'This field must have at least 4 characters',
ptText: 'Este campo deve ter pelo menos 4 caracteres',
);
return null; return null;
} }
@ -42,4 +48,4 @@ class PassKeyTemplateComponentModel
keyTextFieldTextController1?.dispose(); keyTextFieldTextController1?.dispose();
keyTextFieldTextController2?.dispose(); keyTextFieldTextController2?.dispose();
} }
} }

View File

@ -1,3 +1,5 @@
import 'package:hub/flutter_flow/nav/nav.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart'; import '/flutter_flow/flutter_flow_widgets.dart';
@ -8,6 +10,7 @@ import 'package:google_fonts/google_fonts.dart';
import 'change_pass_model.dart'; import 'change_pass_model.dart';
export 'change_pass_model.dart'; export 'change_pass_model.dart';
class PassKeyTemplateWidget extends StatefulWidget { class PassKeyTemplateWidget extends StatefulWidget {
const PassKeyTemplateWidget({ const PassKeyTemplateWidget({
super.key, super.key,
@ -126,7 +129,7 @@ class _PassKeyTemplateWidgetState
child: Text( child: Text(
FFLocalizations.of(context).getVariableText( FFLocalizations.of(context).getVariableText(
enText: 'INSERT PASSWORD', enText: 'INSERT PASSWORD',
ptText: 'ADICIONAR SENHA', ptText: FFAppState().accessPass != '' ? 'ALTERAR SENHA' : 'ADICIONAR SENHA',
), ),
style: FlutterFlowTheme.of(context).headlineMedium.override( style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: 'Outfit', fontFamily: 'Outfit',
@ -158,7 +161,7 @@ class _PassKeyTemplateWidgetState
), ),
Form( Form(
key: _model.formKey, key: _model.formKey,
autovalidateMode: AutovalidateMode.always, autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column( child: Column(
children: [ children: [
Padding( Padding(
@ -166,101 +169,28 @@ class _PassKeyTemplateWidgetState
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
child: TextFormField( child: TextFormField(
controller: _model.keyTextFieldTextController1, controller: _model.keyTextFieldTextController1,
focusNode: _model.keyTextFieldFocusNode1, focusNode: _model.keyTextFieldFocusNode1,
onChanged: (_) => EasyDebounce.debounce( onChanged: (_) => EasyDebounce.debounce(
'_model.keyTextFieldTextController', '_model.keyTextFieldTextController',
const Duration(milliseconds: 2000), const Duration(milliseconds: 2000),
() { () {
if (mounted) setState(() {}); if (mounted) setState(() {});
}, },
),
autofillHints: const [AutofillHints.password],
textCapitalization: TextCapitalization.none,
textInputAction: TextInputAction.done,
obscureText: !_model.keyTextFieldVisibility1,
decoration: InputDecoration(
isDense: true,
labelText: FFLocalizations.of(context).getVariableText(
ptText: 'Senha',
enText: 'Password',
), ),
labelStyle: FlutterFlowTheme.of(context) autofillHints: const [AutofillHints.password],
.labelMedium textCapitalization: TextCapitalization.none,
.override( textInputAction: TextInputAction.done,
fontFamily: 'Plus Jakarta Sans', obscureText: !_model.keyTextFieldVisibility1,
color: FlutterFlowTheme.of(context).primary, decoration: InputDecoration(
fontSize: 14.0, isDense: true,
letterSpacing: 0.0, labelText: FFLocalizations.of(context).getVariableText(
fontWeight: FontWeight.w500, ptText: 'Senha',
useGoogleFonts: GoogleFonts.asMap() enText: 'Password',
.containsKey('Plus Jakarta Sans'), ),
), labelStyle: FlutterFlowTheme.of(context)
hintText: FFLocalizations.of(context).getVariableText( .labelMedium
ptText: 'Digite a sua senha.....', .override(
enText: 'Enter your password.....',
),
hintStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Plus Jakarta Sans'),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent3,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
filled: true,
fillColor:
FlutterFlowTheme.of(context).primaryBackground,
contentPadding:
const EdgeInsetsDirectional.fromSTEB(
24.0, 24.0, 20.0, 24.0),
suffixIcon: InkWell(
onTap: () => setState(
() => _model.keyTextFieldVisibility1 =
!_model.keyTextFieldVisibility1,
),
focusNode: FocusNode(skipTraversal: true),
child: Icon(
_model.keyTextFieldVisibility1
? Icons.visibility_outlined
: Icons.visibility_off_outlined,
color: FlutterFlowTheme.of(context).accent1,
size: 22.0,
),
),
),
style: FlutterFlowTheme.of(context).bodyMedium.override(
fontFamily: 'Plus Jakarta Sans', fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).primaryText, color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0, fontSize: 14.0,
@ -268,20 +198,94 @@ class _PassKeyTemplateWidgetState
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap() useGoogleFonts: GoogleFonts.asMap()
.containsKey('Plus Jakarta Sans'), .containsKey('Plus Jakarta Sans'),
),
hintText: FFLocalizations.of(context).getVariableText(
ptText: 'Digite a sua senha.....',
enText: 'Enter your password.....',
),
hintStyle: FlutterFlowTheme.of(context)
.labelMedium
.override(
fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0,
letterSpacing: 0.0,
fontWeight: FontWeight.w500,
useGoogleFonts: GoogleFonts.asMap()
.containsKey('Plus Jakarta Sans'),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).primary,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: FlutterFlowTheme.of(context).error,
width: 2.0,
),
borderRadius: BorderRadius.circular(12.0),
),
filled: true,
fillColor:
FlutterFlowTheme.of(context).primaryBackground,
contentPadding:
const EdgeInsetsDirectional.fromSTEB(
24.0, 24.0, 20.0, 24.0),
suffixIcon: InkWell(
onTap: () => setState(
() => _model.keyTextFieldVisibility1 =
!_model.keyTextFieldVisibility1,
),
focusNode: FocusNode(skipTraversal: true),
child: Icon(
_model.keyTextFieldVisibility1
? Icons.visibility_outlined
: Icons.visibility_off_outlined,
color: FlutterFlowTheme.of(context).accent1,
size: 22.0,
),
),
), ),
maxLength: 4, style: FlutterFlowTheme.of(context).bodyMedium.override(
maxLengthEnforcement: MaxLengthEnforcement.enforced, fontFamily: 'Plus Jakarta Sans',
buildCounter: (context, color: FlutterFlowTheme.of(context).primaryText,
{required currentLength, fontSize: 14.0,
required isFocused, letterSpacing: 0.0,
maxLength}) => fontWeight: FontWeight.w500,
null, useGoogleFonts: GoogleFonts.asMap()
keyboardType: TextInputType.number, .containsKey('Plus Jakarta Sans'),
cursorColor: FlutterFlowTheme.of(context).primary, ),
validator: _model.keyTextFieldTextControllerValidator1 maxLength: 4,
.asValidator(context), maxLengthEnforcement: MaxLengthEnforcement.enforced,
inputFormatters: [ buildCounter: (context,
{required currentLength,
required isFocused,
maxLength}) =>
null,
keyboardType: TextInputType.number,
cursorColor: FlutterFlowTheme.of(context).primary,
validator: _model.keyTextFieldTextControllerValidator1
.asValidator(context),
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp('[0-9]')), FilteringTextInputFormatter.allow(RegExp('[0-9]')),
LengthLimitingTextInputFormatter(4),
], ],
), ),
), ),
@ -340,4 +344,4 @@ class _PassKeyTemplateWidgetState
), ),
); );
} }
} }

View File

@ -4,6 +4,8 @@ import 'forgot_password_template_component_widget.dart'
show ForgotPasswordTemplateComponentWidget; show ForgotPasswordTemplateComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ForgotPasswordTemplateComponentModel class ForgotPasswordTemplateComponentModel
extends FlutterFlowModel<ForgotPasswordTemplateComponentWidget> { extends FlutterFlowModel<ForgotPasswordTemplateComponentWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
@ -23,4 +25,4 @@ class ForgotPasswordTemplateComponentModel
emailAddressFocusNode?.dispose(); emailAddressFocusNode?.dispose();
emailAddressTextController?.dispose(); emailAddressTextController?.dispose();
} }
} }

View File

@ -1,3 +1,5 @@
import 'package:hub/flutter_flow/nav/nav.dart';
import '/backend/api_requests/api_calls.dart'; import '/backend/api_requests/api_calls.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart'; import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
@ -8,6 +10,9 @@ import 'package:google_fonts/google_fonts.dart';
import 'forgot_password_template_component_model.dart'; import 'forgot_password_template_component_model.dart';
export 'forgot_password_template_component_model.dart'; export 'forgot_password_template_component_model.dart';
//
class ForgotPasswordTemplateComponentWidget extends StatefulWidget { class ForgotPasswordTemplateComponentWidget extends StatefulWidget {
const ForgotPasswordTemplateComponentWidget({super.key}); const ForgotPasswordTemplateComponentWidget({super.key});
@ -310,4 +315,4 @@ class _ForgotPasswordTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,7 +1,10 @@
import '/backend/api_requests/api_calls.dart'; import 'package:hub/app_state.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import 'liberation_history_item_details_template_component_widget.dart' import 'package:hub/backend/api_requests/api_manager.dart';
show LiberationHistoryItemDetailsTemplateComponentWidget; import 'package:hub/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class LiberationHistoryItemDetailsTemplateComponentModel class LiberationHistoryItemDetailsTemplateComponentModel
@ -75,4 +78,4 @@ class LiberationHistoryItemDetailsTemplateComponentModel
return false; return false;
} }
} }
} }

View File

@ -1,11 +1,13 @@
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/app_state.dart';
import 'package:hub/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'liberation_history_item_details_template_component_model.dart';
export 'liberation_history_item_details_template_component_model.dart';
class LiberationHistoryItemDetailsTemplateComponentWidget class LiberationHistoryItemDetailsTemplateComponentWidget
extends StatefulWidget { extends StatefulWidget {
@ -363,4 +365,4 @@ class _LiberationHistoryItemDetailsTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,8 +1,10 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'message_notification_widget.dart'
show MessageNotificationModalTemplateComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/app_state.dart';
import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
class MessageNotificationModalTemplateComponentModel class MessageNotificationModalTemplateComponentModel
extends FlutterFlowModel<MessageNotificationModalTemplateComponentWidget> { extends FlutterFlowModel<MessageNotificationModalTemplateComponentWidget> {
@ -74,4 +76,4 @@ class MessageNotificationModalTemplateComponentModel
return false; return false;
} }
} }
} }

View File

@ -1,10 +1,15 @@
import '/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/app_state.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/templates_components/message_notificaion_modal_template_component/message_notification_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'message_notification_model.dart';
class MessageNotificationModalTemplateComponentWidget extends StatefulWidget { class MessageNotificationModalTemplateComponentWidget extends StatefulWidget {
const MessageNotificationModalTemplateComponentWidget({ const MessageNotificationModalTemplateComponentWidget({
@ -285,4 +290,4 @@ class _MessageNotificationModalTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -16,10 +16,15 @@ class QrCodePassKeyTemplateComponentModel
String? _keyTextFieldTextControllerValidator( String? _keyTextFieldTextControllerValidator(
BuildContext context, String? val) { BuildContext context, String? val) {
if (val == null || val.isEmpty) { if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText( return FFLocalizations.of(context).getVariableText(
'f128ajey' /* Field is required */, enText: 'This field is required',
ptText: 'Este campo é obrigatório',
); );
} }
if (val.length < 4) return FFLocalizations.of(context).getVariableText(
enText: 'This field must be at least 4 characters',
ptText: 'Este campo deve ter pelo menos 4 caracteres',
);
return null; return null;
} }

View File

@ -1,3 +1,5 @@
import 'package:hub/flutter_flow/nav/nav.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart'; import '/flutter_flow/flutter_flow_widgets.dart';
@ -8,6 +10,9 @@ import 'package:google_fonts/google_fonts.dart';
import 'qr_code_pass_key_template_component_model.dart'; import 'qr_code_pass_key_template_component_model.dart';
export 'qr_code_pass_key_template_component_model.dart'; export 'qr_code_pass_key_template_component_model.dart';
class QrCodePassKeyTemplateComponentWidget extends StatefulWidget { class QrCodePassKeyTemplateComponentWidget extends StatefulWidget {
const QrCodePassKeyTemplateComponentWidget({ const QrCodePassKeyTemplateComponentWidget({
super.key, super.key,
@ -38,7 +43,7 @@ class _QrCodePassKeyTemplateComponentWidgetState
_model.keyTextFieldTextController ??= TextEditingController(); _model.keyTextFieldTextController ??= TextEditingController();
_model.keyTextFieldFocusNode ??= FocusNode(); _model.keyTextFieldFocusNode ??= FocusNode();
_model.keyTextFieldFocusNode!.addListener(() => setState(() {})); _model.keyTextFieldFocusNode!.addListener(() => safeSetState(() {}));
} }
@override @override
@ -156,19 +161,18 @@ class _QrCodePassKeyTemplateComponentWidgetState
), ),
Form( Form(
key: _model.formKey, key: _model.formKey,
autovalidateMode: AutovalidateMode.always, autovalidateMode: AutovalidateMode.onUserInteraction,
child: Padding( child: Padding(
padding: const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 16.0, 0.0), padding: const EdgeInsetsDirectional.fromSTEB(16.0, 12.0, 16.0, 0.0),
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
child: TextFormField( child: TextFormField(
controller: _model.keyTextFieldTextController, controller: _model.keyTextFieldTextController,
focusNode: _model.keyTextFieldFocusNode, focusNode: _model.keyTextFieldFocusNode,
onChanged: (_) => EasyDebounce.debounce( onChanged: (_) => EasyDebounce.debounce(
'_model.keyTextFieldTextController', '_model.keyTextFieldTextController',
const Duration(milliseconds: 2000), const Duration(milliseconds: 2000),
() => setState(() {}), () => safeSetState(() {}),
), ),
autofillHints: const [AutofillHints.password], autofillHints: const [AutofillHints.password],
textCapitalization: TextCapitalization.none, textCapitalization: TextCapitalization.none,
@ -182,7 +186,7 @@ class _QrCodePassKeyTemplateComponentWidgetState
labelStyle: labelStyle:
FlutterFlowTheme.of(context).labelMedium.override( FlutterFlowTheme.of(context).labelMedium.override(
fontFamily: 'Plus Jakarta Sans', fontFamily: 'Plus Jakarta Sans',
color: FlutterFlowTheme.of(context).primary, color: FlutterFlowTheme.of(context).primaryText,
fontSize: 14.0, fontSize: 14.0,
letterSpacing: 0.0, letterSpacing: 0.0,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -204,14 +208,14 @@ class _QrCodePassKeyTemplateComponentWidgetState
), ),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent1, color: FlutterFlowTheme.of(context).primary,
width: 2.0, width: 2.0,
), ),
borderRadius: BorderRadius.circular(12.0), borderRadius: BorderRadius.circular(12.0),
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: FlutterFlowTheme.of(context).accent3, color: FlutterFlowTheme.of(context).primary,
width: 2.0, width: 2.0,
), ),
borderRadius: BorderRadius.circular(12.0), borderRadius: BorderRadius.circular(12.0),
@ -235,7 +239,7 @@ class _QrCodePassKeyTemplateComponentWidgetState
contentPadding: const EdgeInsetsDirectional.fromSTEB( contentPadding: const EdgeInsetsDirectional.fromSTEB(
24.0, 24.0, 20.0, 24.0), 24.0, 24.0, 20.0, 24.0),
suffixIcon: InkWell( suffixIcon: InkWell(
onTap: () => setState( onTap: () => safeSetState(
() => _model.keyTextFieldVisibility = () => _model.keyTextFieldVisibility =
!_model.keyTextFieldVisibility, !_model.keyTextFieldVisibility,
), ),
@ -259,7 +263,7 @@ class _QrCodePassKeyTemplateComponentWidgetState
.containsKey('Plus Jakarta Sans'), .containsKey('Plus Jakarta Sans'),
), ),
maxLength: 4, maxLength: 4,
maxLengthEnforcement: MaxLengthEnforcement.none, maxLengthEnforcement: MaxLengthEnforcement.enforced,
buildCounter: (context, buildCounter: (context,
{required currentLength, {required currentLength,
required isFocused, required isFocused,
@ -270,7 +274,9 @@ class _QrCodePassKeyTemplateComponentWidgetState
validator: _model.keyTextFieldTextControllerValidator validator: _model.keyTextFieldTextControllerValidator
.asValidator(context), .asValidator(context),
inputFormatters: [ inputFormatters: [
FilteringTextInputFormatter.allow(RegExp('[0-9]')) FilteringTextInputFormatter.allow(RegExp('[0-9]')),
LengthLimitingTextInputFormatter(4),
], ],
), ),
), ),
@ -325,4 +331,4 @@ class _QrCodePassKeyTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,9 +1,12 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'dart:typed_data';
import '/flutter_flow/form_field_controller.dart';
import 'regisiter_vistor_template_component_widget.dart'
show RegisiterVistorTemplateComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/form_field_controller.dart';
import 'package:hub/flutter_flow/uploaded_file.dart';
class RegisiterVistorTemplateComponentModel class RegisiterVistorTemplateComponentModel
extends FlutterFlowModel<RegisiterVistorTemplateComponentWidget> { extends FlutterFlowModel<RegisiterVistorTemplateComponentWidget> {
@ -55,3 +58,4 @@ class RegisiterVistorTemplateComponentModel
textController4?.dispose(); textController4?.dispose();
} }
} }

View File

@ -1,17 +1,25 @@
import '/backend/api_requests/api_calls.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart'; import 'dart:typed_data';
import '/flutter_flow/flutter_flow_drop_down.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/flutter_flow/flutter_flow_widgets.dart';
import '/flutter_flow/form_field_controller.dart';
import '/flutter_flow/upload_data.dart';
import '/custom_code/actions/index.dart' as actions;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/app_state.dart';
import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/components/molecular_components/throw_exception/throw_exception_widget.dart';
import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_model.dart';
import 'package:hub/custom_code/actions/convert_image_file_to_base64.dart';
import 'package:hub/flutter_flow/flutter_flow_drop_down.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/flutter_flow_widgets.dart';
import 'package:hub/flutter_flow/form_field_controller.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:hub/flutter_flow/upload_data.dart';
import 'package:hub/flutter_flow/uploaded_file.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'regisiter_vistor_template_component_model.dart';
export 'regisiter_vistor_template_component_model.dart';
class RegisiterVistorTemplateComponentWidget extends StatefulWidget { class RegisiterVistorTemplateComponentWidget extends StatefulWidget {
const RegisiterVistorTemplateComponentWidget({super.key}); const RegisiterVistorTemplateComponentWidget({super.key});
@ -705,7 +713,7 @@ class _RegisiterVistorTemplateComponentWidgetState
_model.dropDownValue != '') && _model.dropDownValue != '') &&
(_model.textController2.text != '')) { (_model.textController2.text != '')) {
_model.imgBase64 = _model.imgBase64 =
await actions.convertImageFileToBase64( await convertImageFileToBase64(
_model.uploadedLocalFile, _model.uploadedLocalFile,
); );
_model.registerVisitor = _model.registerVisitor =
@ -818,4 +826,4 @@ class _RegisiterVistorTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,8 +1,10 @@
import '/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
import '/components/view_visit_detail/view_visit_detail_widget.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_model.dart';
import 'visit_details_modal_template_component_widget.dart' import 'package:hub/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart';
show VisitDetailsModalTemplateComponentWidget; import 'package:hub/components/view_visit_detail/view_visit_detail_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class VisitDetailsModalTemplateComponentModel class VisitDetailsModalTemplateComponentModel
@ -30,4 +32,4 @@ class VisitDetailsModalTemplateComponentModel
viewVisitDetailModel.dispose(); viewVisitDetailModel.dispose();
scheduleVisitDetailModel.dispose(); scheduleVisitDetailModel.dispose();
} }
} }

View File

@ -1,9 +1,11 @@
import '/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
import '/components/view_visit_detail/view_visit_detail_widget.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'visit_details_modal_template_component_model.dart'; import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart';
export 'visit_details_modal_template_component_model.dart'; import 'package:hub/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_model.dart';
import 'package:hub/components/view_visit_detail/view_visit_detail_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
class VisitDetailsModalTemplateComponentWidget extends StatefulWidget { class VisitDetailsModalTemplateComponentWidget extends StatefulWidget {
const VisitDetailsModalTemplateComponentWidget({ const VisitDetailsModalTemplateComponentWidget({
@ -118,4 +120,4 @@ class _VisitDetailsModalTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,8 +1,7 @@
import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'visit_request_template_component_widget.dart'
show VisitRequestTemplateComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/components/templates_components/visit_request_template_component/visit_request_template_component_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
class VisitRequestTemplateComponentModel class VisitRequestTemplateComponentModel
extends FlutterFlowModel<VisitRequestTemplateComponentWidget> { extends FlutterFlowModel<VisitRequestTemplateComponentWidget> {
@ -56,4 +55,4 @@ class VisitRequestTemplateComponentModel
textFieldFocusNodeStatus?.dispose(); textFieldFocusNodeStatus?.dispose();
textControllerStatus?.dispose(); textControllerStatus?.dispose();
} }
} }

View File

@ -1,14 +1,14 @@
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/templates_components/visit_request_template_component/visit_request_template_component_model.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '/flutter_flow/flutter_flow_icon_button.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'visit_request_template_component_model.dart';
export 'visit_request_template_component_model.dart';
class VisitRequestTemplateComponentWidget extends StatefulWidget { class VisitRequestTemplateComponentWidget extends StatefulWidget {
const VisitRequestTemplateComponentWidget({ const VisitRequestTemplateComponentWidget({
@ -836,4 +836,4 @@ class _VisitRequestTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,7 +1,8 @@
import '/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_manager.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart';
import 'visitor_search_modal_template_component_widget.dart' import 'package:hub/flutter_flow/flutter_flow_model.dart';
show VisitorSearchModalTemplateComponentWidget;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class VisitorSearchModalTemplateComponentModel class VisitorSearchModalTemplateComponentModel
@ -42,4 +43,4 @@ class VisitorSearchModalTemplateComponentModel
textFieldFocusNode?.dispose(); textFieldFocusNode?.dispose();
textController?.dispose(); textController?.dispose();
} }
} }

View File

@ -1,16 +1,20 @@
import '/backend/api_requests/api_calls.dart';
import '/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart'; import 'package:hub/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart';
import '/flutter_flow/flutter_flow_icon_button.dart'; import 'package:hub/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_model.dart';
import '/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import '/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/flutter_flow_widgets.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'visitor_search_modal_template_component_model.dart';
export 'visitor_search_modal_template_component_model.dart';
class VisitorSearchModalTemplateComponentWidget extends StatefulWidget { class VisitorSearchModalTemplateComponentWidget extends StatefulWidget {
const VisitorSearchModalTemplateComponentWidget({ const VisitorSearchModalTemplateComponentWidget({
@ -531,4 +535,4 @@ class _VisitorSearchModalTemplateComponentWidgetState
), ),
); );
} }
} }

View File

@ -1,6 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:developer'; import 'dart:developer';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/flutter_flow/nav/serialization_util.dart';
import '/backend/api_requests/api_calls.dart'; import '/backend/api_requests/api_calls.dart';
import '/components/molecular_components/throw_exception/throw_exception_widget.dart'; import '/components/molecular_components/throw_exception/throw_exception_widget.dart';
import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart'; import '/components/templates_components/visitor_details_modal_template_component/visitor_details_modal_template_component_widget.dart';

View File

@ -1,17 +1,12 @@
// Automatic FlutterFlow imports
import '/backend/schema/structs/index.dart';
import '/backend/schema/enums/enums.dart';
import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import 'index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom action code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
// Automatic FlutterFlow imports
import 'index.dart'; // Imports other custom actions
import 'package:flutter/material.dart';
import 'dart:convert'; import 'dart:convert';
import 'dart:typed_data'; import 'dart:typed_data';
import '../../flutter_flow/uploaded_file.dart';
Future<String?> convertImageFileToBase64(FFUploadedFile imageFile) async { Future<String?> convertImageFileToBase64(FFUploadedFile imageFile) async {
List<int>? imageBytes = imageFile.bytes; List<int>? imageBytes = imageFile.bytes;
@ -19,4 +14,4 @@ Future<String?> convertImageFileToBase64(FFUploadedFile imageFile) async {
String base64Image = base64Encode(imageBytes); String base64Image = base64Encode(imageBytes);
return base64Image; return base64Image;
} }
} }

View File

@ -14,6 +14,7 @@ import 'dart:convert'; // Import for base64 decoding
import 'dart:io'; // Import for file operations import 'dart:io'; // Import for file operations
import 'package:path_provider/path_provider.dart'; // Import for temporary directory import 'package:path_provider/path_provider.dart'; // Import for temporary directory
Future<FFUploadedFile> convertToUploadFile(String img) async { Future<FFUploadedFile> convertToUploadFile(String img) async {
// Decode the base64 string into bytes // Decode the base64 string into bytes
Uint8List bytes = base64.decode(img); Uint8List bytes = base64.decode(img);
@ -29,4 +30,4 @@ Future<FFUploadedFile> convertToUploadFile(String img) async {
bytes: bytes, bytes: bytes,
name: 'image.jpg', name: 'image.jpg',
); );
} }

View File

@ -12,6 +12,9 @@ import 'package:flutter/material.dart';
import 'dart:io'; import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
Future<String?> getDevUUID() async { Future<String?> getDevUUID() async {
var deviceInfo = DeviceInfoPlugin(); var deviceInfo = DeviceInfoPlugin();
if (Platform.isIOS) { if (Platform.isIOS) {
@ -58,4 +61,4 @@ Future<String?> getSerialNumber() async {
log('DeviceInfoPLugin => androidDeviceInfo.id: ${androidDeviceInfo.id}'); // e.g. "iPhone" log('DeviceInfoPLugin => androidDeviceInfo.id: ${androidDeviceInfo.id}'); // e.g. "iPhone"
return androidDeviceInfo.serialNumber; // unique ID on Android return androidDeviceInfo.serialNumber; // unique ID on Android
} }
} }

View File

@ -1,179 +1,181 @@
// Automatic FlutterFlow imports // // Automatic FlutterFlow imports
import '/backend/schema/structs/index.dart'; // import '/backend/schema/structs/index.dart';
import '/backend/schema/enums/enums.dart'; // import '/backend/schema/enums/enums.dart';
import '/actions/actions.dart' as action_blocks; // import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart'; // import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart'; // import '/flutter_flow/flutter_flow_util.dart';
import 'index.dart'; // Imports other custom widgets // import 'index.dart'; // Imports other custom widgets
import '/custom_code/actions/index.dart'; // Imports custom actions // import '/custom_code/actions/index.dart'; // Imports custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions // import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
// Begin custom widget code // // Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE! // // DO NOT REMOVE OR MODIFY THE CODE ABOVE!
import 'package:crop_your_image/crop_your_image.dart'; // import 'package:crop_your_image/crop_your_image.dart';
import 'package:google_fonts/google_fonts.dart'; // import 'package:google_fonts/google_fonts.dart';
import '/backend/firebase_storage/storage.dart'; // import '/backend/firebase_storage/storage.dart';
class ImageCropper extends StatefulWidget { // /////////////////
const ImageCropper({
super.key,
this.width,
this.height,
this.imageFile,
this.callBackAction,
this.currentUserId,
});
final double? width; // class ImageCropper extends StatefulWidget {
final double? height; // const ImageCropper({
final FFUploadedFile? imageFile; // super.key,
final Future Function(String? url)? callBackAction; // this.width,
final String? currentUserId; // this.height,
// this.imageFile,
// this.callBackAction,
// this.currentUserId,
// });
@override // final double? width;
State<ImageCropper> createState() => _ImageCropperState(); // final double? height;
} // final FFUploadedFile? imageFile;
// final Future Function(String? url)? callBackAction;
// final String? currentUserId;
class _ImageCropperState extends State<ImageCropper> { // @override
bool loading = false; // State<ImageCropper> createState() => _ImageCropperState();
final _crop_controller = CropController(); // }
@override
Widget build(BuildContext context) {
return Stack(
children: [
Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: widget.width ?? double.infinity,
height: (widget.height ?? 555) - 80,
child: Center(
child: Crop(
image: Uint8List.fromList(widget.imageFile!.bytes!),
controller: _crop_controller,
onCropped: (image) async {
final path = _getStoragePath(_firebasePathPrefix(),
widget.imageFile!.name!, false, 0);
uploadData(path, image).then((value) {
log('image cropped');
widget.callBackAction!.call(value!);
loading = false;
});
// add error handling here
},
aspectRatio: 1 / 1, // class _ImageCropperState extends State<ImageCropper> {
initialSize: 0.5, // bool loading = false;
// initialArea: Rect.fromLTWH(240, 212, 800, 600),\ // final _crop_controller = CropController();
//initialAreaBuilder: (rect) => Rect.fromLTRB(rect.left + 80, rect.top + 80, rect.right - 80, rect.bottom - 80), // @override
withCircleUi: true, // Widget build(BuildContext context) {
baseColor: Color.fromARGB(255, 0, 3, 22), // return Stack(
maskColor: Colors.white.withAlpha(100), // children: [
radius: 20, // Column(
// mainAxisSize: MainAxisSize.min,
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// Container(
// width: widget.width ?? double.infinity,
// height: (widget.height ?? 555) - 80,
// child: Center(
// child: Crop(
// image: Uint8List.fromList(widget.imageFile!.bytes!),
// controller: _crop_controller,
// onCropped: (image) async {
// final path = _getStoragePath(_firebasePathPrefix(),
// widget.imageFile!.name!, false, 0);
// uploadData(path, image).then((value) {
// log('image cropped');
// widget.callBackAction!.call(value!);
// loading = false;
// });
// // add error handling here
// },
onMoved: (newRect) { // aspectRatio: 1 / 1,
// do something with current cropping area. // initialSize: 0.5,
}, // // initialArea: Rect.fromLTWH(240, 212, 800, 600),\
onStatusChanged: (status) { // //initialAreaBuilder: (rect) => Rect.fromLTRB(rect.left + 80, rect.top + 80, rect.right - 80, rect.bottom - 80),
// do something with current CropStatus // withCircleUi: true,
}, // baseColor: Color.fromARGB(255, 0, 3, 22),
cornerDotBuilder: (size, edgeAlignment) => // maskColor: Colors.white.withAlpha(100),
const DotControl(color: Colors.white), // radius: 20,
interactive: true,
// fixArea: true,
))),
Padding(
padding: EdgeInsetsDirectional.fromSTEB(8, 5, 8, 5),
child: ElevatedButton(
onPressed: () async {
if (!loading) {
setState(() {
loading = true;
});
log('Button pressed ...');
_crop_controller.crop();
//widget.loading = true; // onMoved: (newRect) {
} // // do something with current cropping area.
}, // },
style: ButtonStyle( // onStatusChanged: (status) {
backgroundColor: MaterialStateProperty.all<Color>( // // do something with current CropStatus
FlutterFlowTheme.of(context).primaryColor, // },
), // cornerDotBuilder: (size, edgeAlignment) =>
padding: MaterialStateProperty.all<EdgeInsetsGeometry>( // const DotControl(color: Colors.white),
EdgeInsets.zero, // interactive: true,
), // // fixArea: true,
shape: MaterialStateProperty.all<RoundedRectangleBorder>( // ))),
RoundedRectangleBorder( // Padding(
borderRadius: BorderRadius.circular(100), // padding: EdgeInsetsDirectional.fromSTEB(8, 5, 8, 5),
side: BorderSide.none, // child: ElevatedButton(
), // onPressed: () async {
), // if (!loading) {
), // setState(() {
child: Container( // loading = true;
width: 250, // });
height: 50, // log('Button pressed ...');
alignment: Alignment.center, // _crop_controller.crop();
child: loading
? CircularProgressIndicator(
valueColor:
AlwaysStoppedAnimation<Color>(Colors.white),
)
: Text(
'Crop',
style: FlutterFlowTheme.of(context)
.subtitle2
.override(
fontFamily: 'Lexend',
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.normal,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(
FlutterFlowTheme.of(context)
.subtitle2Family),
),
),
),
)),
]),
Positioned(
top: 4,
right: 4,
child: IconButton(
icon: Icon(Icons.close),
onPressed: () => Navigator.pop(context),
))
],
);
}
String _getStoragePath( // //widget.loading = true;
String? pathPrefix, // }
String filePath, // },
bool isVideo, [ // style: ButtonStyle(
int? index, // backgroundColor: MaterialStateProperty.all<Color>(
]) { // FlutterFlowTheme.of(context).primaryColor,
pathPrefix ??= _firebasePathPrefix(); // ),
pathPrefix = _removeTrailingSlash(pathPrefix); // padding: MaterialStateProperty.all<EdgeInsetsGeometry>(
final timestamp = DateTime.now().microsecondsSinceEpoch; // EdgeInsets.zero,
final prefix = 'cropped-'; // ),
// Workaround fixed by https://github.com/flutter/plugins/pull/3685 // shape: MaterialStateProperty.all<RoundedRectangleBorder>(
// (not yet in stable). // RoundedRectangleBorder(
final ext = isVideo ? 'mp4' : filePath.split('.').last; // borderRadius: BorderRadius.circular(100),
final indexStr = index != null ? '_$index' : ''; // side: BorderSide.none,
return '$pathPrefix/$prefix$timestamp$indexStr.$ext'; // ),
} // ),
// ),
// child: Container(
// width: 250,
// height: 50,
// alignment: Alignment.center,
// child: loading
// ? CircularProgressIndicator(
// valueColor:
// AlwaysStoppedAnimation<Color>(Colors.white),
// )
// : Text(
// 'Crop',
// style: FlutterFlowTheme.of(context)
// .subtitle2
// .override(
// fontFamily: 'Lexend',
// color: Colors.white,
// fontSize: 16,
// fontWeight: FontWeight.normal,
// useGoogleFonts: GoogleFonts.asMap()
// .containsKey(
// FlutterFlowTheme.of(context)
// .subtitle2Family),
// ),
// ),
// ),
// )),
// ]),
// Positioned(
// top: 4,
// right: 4,
// child: IconButton(
// icon: Icon(Icons.close),
// onPressed: () => Navigator.pop(context),
// ))
// ],
// );
// }
String? _removeTrailingSlash(String? path) => // String _getStoragePath(
path != null && path.endsWith('/') // String? pathPrefix,
? path.substring(0, path.length - 1) // String filePath,
: path; // bool isVideo, [
// int? index,
// ]) {
// pathPrefix ??= _firebasePathPrefix();
// pathPrefix = _removeTrailingSlash(pathPrefix);
// final timestamp = DateTime.now().microsecondsSinceEpoch;
// final prefix = 'cropped-';
// // Workaround fixed by https://github.com/flutter/plugins/pull/3685
// // (not yet in stable).
// final ext = isVideo ? 'mp4' : filePath.split('.').last;
// final indexStr = index != null ? '_$index' : '';
// return '$pathPrefix/$prefix$timestamp$indexStr.$ext';
// }
String _firebasePathPrefix() => 'users/${widget.currentUserId}/uploads'; // String? _removeTrailingSlash(String? path) =>
} // path != null && path.endsWith('/')
// Set your widget name, define your parameter, and then add the // ? path.substring(0, path.length - 1)
// boilerplate code using the green button on the right! // : path;
// String _firebasePathPrefix() => 'users/${widget.currentUserId}/uploads';
// }
// // Set your widget name, define your parameter, and then add the
// // boilerplate code using the green button on the right!

View File

@ -0,0 +1,61 @@
import 'dart:collection';
import 'package:flutter/material.dart';
LinkedHashMap<String, dynamic> menu = LinkedHashMap.from({
"Schedule":
[{
"title": "Schedule\nVisit",
"icon": Icons.settings,
"route": "/Schedule",
},
{
"title": "Complete\Schedule",
"icon": Icons.calendar_today,
"route": "/Complete",
},
{
"title": "Provisional\Schedule",
"icon": Icons.calendar_today,
"route": "/Provisional",
},
{
"title": "Fast\Schedule",
"icon": Icons.calendar_today,
"route": "/Fast",
}],
"Consult":
[{
"title": "Consult",
"icon": Icons.search,
"route": "/consult",
},
{
"title": "Liberation\nConsult",
"icon": Icons.search,
"route": "/Liberation",
},
{
"title": "Access\nConsult",
"icon": Icons.search,
"route": "/Access",
},
{
"title": "Poeple\nConsult",
"icon": Icons.search,
"route": "/Poeple",
},
{
"title": "QR Code\nConsult",
"icon": Icons.search,
"route": "/qrcode",
}],
"Preferences":
[{
"title": "Preferences",
"icon": Icons.settings,
"route": "/preferences",
}],
});

View File

@ -8,8 +8,7 @@ import 'package:timeago/timeago.dart' as timeago;
import 'lat_lng.dart'; import 'lat_lng.dart';
import 'place.dart'; import 'place.dart';
import 'uploaded_file.dart'; import 'uploaded_file.dart';
import '/backend/schema/structs/index.dart';
import '/backend/schema/enums/enums.dart';
String? isOneAcliID(String jsonString) { String? isOneAcliID(String jsonString) {
// Converte o JSON em um Map // Converte o JSON em um Map

View File

@ -18,4 +18,4 @@ class FFIcons {
IconData(0xe900, fontFamily: _menuFamily); IconData(0xe900, fontFamily: _menuFamily);
static const IconData kvector2 = IconData(0xe905, fontFamily: _menuFamily); static const IconData kvector2 = IconData(0xe905, fontFamily: _menuFamily);
static const IconData kvector3 = IconData(0xe906, fontFamily: _menuFamily); static const IconData kvector3 = IconData(0xe906, fontFamily: _menuFamily);
} }

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart'; import 'package:flutter_animate/flutter_animate.dart';
enum AnimationTrigger { enum AnimationTrigger {
onPageLoad, onPageLoad,
onActionTrigger, onActionTrigger,
@ -108,4 +109,4 @@ class TiltEffect extends Effect<Offset> {
), ),
); );
} }
} }

View File

@ -6,6 +6,8 @@ import 'package:flutter/gestures.dart' show DragStartBehavior;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
const double _kTabHeight = 46.0; const double _kTabHeight = 46.0;
typedef _LayoutCallback = void Function( typedef _LayoutCallback = void Function(
@ -851,4 +853,4 @@ class _FlutterFlowButtonTabBarState extends State<FlutterFlowButtonTabBar>
return tabBar; return tabBar;
} }
} }

View File

@ -4,6 +4,9 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
////
class FlutterFlowCheckboxGroup extends StatefulWidget { class FlutterFlowCheckboxGroup extends StatefulWidget {
const FlutterFlowCheckboxGroup({ const FlutterFlowCheckboxGroup({
super.key, super.key,
@ -131,4 +134,4 @@ class _FlutterFlowCheckboxGroupState extends State<FlutterFlowCheckboxGroup> {
); );
}, },
); );
} }

View File

@ -1,5 +1,7 @@
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'form_field_controller.dart'; import 'form_field_controller.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -370,4 +372,4 @@ class _FlutterFlowDropDownState<T> extends State<FlutterFlowDropDown<T>> {
: null, : null,
); );
} }
} }

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class FlutterFlowIconButton extends StatefulWidget { class FlutterFlowIconButton extends StatefulWidget {
const FlutterFlowIconButton({ const FlutterFlowIconButton({
super.key, super.key,
@ -167,4 +169,4 @@ class _FlutterFlowIconButtonState extends State<FlutterFlowIconButton> {
), ),
); );
} }
} }

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
Widget wrapWithModel<T extends FlutterFlowModel>({ Widget wrapWithModel<T extends FlutterFlowModel>({
required T model, required T model,
required Widget child, required Widget child,
@ -164,4 +165,4 @@ T? _getDefaultValue<T>() {
extension TextValidationExtensions on String? Function(BuildContext, String?)? { extension TextValidationExtensions on String? Function(BuildContext, String?)? {
String? Function(String?)? asValidator(BuildContext context) => String? Function(String?)? asValidator(BuildContext context) =>
this != null ? (val) => this!(context, val) : null; this != null ? (val) => this!(context, val) : null;
} }

View File

@ -5,6 +5,7 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
const kThemeModeKey = '__theme_mode__'; const kThemeModeKey = '__theme_mode__';
SharedPreferences? _prefs; SharedPreferences? _prefs;
@ -50,6 +51,7 @@ abstract class FlutterFlowTheme {
late Color secondary; late Color secondary;
late Color tertiary; late Color tertiary;
late Color alternate; late Color alternate;
late Color alternate2;
late Color primaryText; late Color primaryText;
late Color secondaryText; late Color secondaryText;
late Color primaryBackground; late Color primaryBackground;
@ -160,6 +162,7 @@ class LightModeTheme extends FlutterFlowTheme {
late Color secondary = const Color(0xFFB59E9E); late Color secondary = const Color(0xFFB59E9E);
late Color tertiary = const Color(0xFF984BB6); late Color tertiary = const Color(0xFF984BB6);
late Color alternate = const Color(0xFFF2F2F2); late Color alternate = const Color(0xFFF2F2F2);
late Color alternate2 = const Color(0xFF232323);
late Color primaryText = const Color(0xFF000000); late Color primaryText = const Color(0xFF000000);
late Color secondaryText = const Color(0xFFFFFFFF); late Color secondaryText = const Color(0xFFFFFFFF);
late Color primaryBackground = const Color(0xFFFFFFFF); late Color primaryBackground = const Color(0xFFFFFFFF);
@ -559,6 +562,7 @@ class DarkModeTheme extends FlutterFlowTheme {
late Color secondary = const Color(0xFF18AA99); late Color secondary = const Color(0xFF18AA99);
late Color tertiary = const Color(0xFF984BB6); late Color tertiary = const Color(0xFF984BB6);
late Color alternate = const Color(0xFF232323); late Color alternate = const Color(0xFF232323);
late Color alternate2 = const Color(0xFF171717);
late Color primaryText = const Color(0xFFFFFFFF); late Color primaryText = const Color(0xFFFFFFFF);
late Color secondaryText = const Color(0xFF000000); late Color secondaryText = const Color(0xFF000000);
late Color primaryBackground = const Color(0xFF171717); late Color primaryBackground = const Color(0xFF171717);
@ -616,4 +620,4 @@ extension TextStyleHelper on TextStyle {
height: lineHeight, height: lineHeight,
shadows: shadows, shadows: shadows,
); );
} }

View File

@ -18,7 +18,7 @@ export 'keep_alive_wrapper.dart';
export 'lat_lng.dart'; export 'lat_lng.dart';
export 'place.dart'; export 'place.dart';
export 'uploaded_file.dart'; export 'uploaded_file.dart';
export '../app_state.dart'; export '/app_state.dart';
export 'flutter_flow_model.dart'; export 'flutter_flow_model.dart';
export 'dart:math' show min, max; export 'dart:math' show min, max;
export 'dart:typed_data' show Uint8List; export 'dart:typed_data' show Uint8List;
@ -27,7 +27,6 @@ export 'package:intl/intl.dart';
export 'package:page_transition/page_transition.dart'; export 'package:page_transition/page_transition.dart';
export 'custom_icons.dart' show FFIcons; export 'custom_icons.dart' show FFIcons;
export 'internationalization.dart' show FFLocalizations; export 'internationalization.dart' show FFLocalizations;
export 'nav/nav.dart';
T valueOrDefault<T>(T? value, T defaultValue) => T valueOrDefault<T>(T? value, T defaultValue) =>
(value is String && value.isEmpty) || value == null ? defaultValue : value; (value is String && value.isEmpty) || value == null ? defaultValue : value;
@ -568,4 +567,4 @@ double computeGradientAlignmentY(double evaluatedAngle) {
y = sin(2 * rads); y = sin(2 * rads);
} }
return double.parse(roundTo(y, 2)); return double.parse(roundTo(y, 2));
} }

View File

@ -2,6 +2,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:auto_size_text/auto_size_text.dart'; import 'package:auto_size_text/auto_size_text.dart';
class FFButtonOptions { class FFButtonOptions {
const FFButtonOptions({ const FFButtonOptions({
this.textAlign, this.textAlign,
@ -285,4 +286,4 @@ double? _getTextWidth(String? text, TextStyle? style, int maxLines) =>
)..layout()) )..layout())
.size .size
.width .width
: null; : null;

View File

@ -1,5 +1,6 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
class FormFieldController<T> extends ValueNotifier<T?> { class FormFieldController<T> extends ValueNotifier<T?> {
FormFieldController(this.initialValue) : super(initialValue); FormFieldController(this.initialValue) : super(initialValue);
@ -20,4 +21,4 @@ class FormListFieldController<T> extends FormFieldController<List<T>> {
@override @override
void reset() => value = List<T>.from(_initialListValue ?? []); void reset() => value = List<T>.from(_initialListValue ?? []);
} }

View File

@ -967,7 +967,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
}, },
'a9smhn5b': { 'a9smhn5b': {
'pt': 'Você já tem uma conta? ', 'pt': 'Você já tem uma conta? ',
'en': 'You already have an account?', 'en': 'You already have an account? ',
}, },
'09xv5ctc': { '09xv5ctc': {
'pt': 'Clique aqui', 'pt': 'Clique aqui',
@ -1272,4 +1272,4 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': 'Block completed', 'en': 'Block completed',
}, },
}, },
].reduce((a, b) => a..addAll(b)); ].reduce((a, b) => a..addAll(b));

View File

@ -22,4 +22,4 @@ class _KeepAliveWidgetWrapperState extends State<KeepAliveWidgetWrapper>
super.build(context); super.build(context);
return widget.builder(context); return widget.builder(context);
} }
} }

View File

@ -16,4 +16,4 @@ class LatLng {
other is LatLng && other is LatLng &&
latitude == other.latitude && latitude == other.latitude &&
longitude == other.longitude; longitude == other.longitude;
} }

View File

@ -1,9 +1,10 @@
import 'dart:async'; import 'dart:async';
import 'package:f_r_e_hub/pages/fast_pass_page/fast_pass_page_widget.dart';
import 'package:f_r_e_hub/pages/message_history_page/message_history_page_widget.dart';
import 'package:f_r_e_hub/pages/preferences_settings_page/preferences_settings_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/fast_pass_page/fast_pass_page_widget.dart';
import 'package:hub/pages/message_history_page/message_history_page_widget.dart';
import 'package:hub/pages/preferences_settings_page/preferences_settings_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '/backend/schema/structs/index.dart'; import '/backend/schema/structs/index.dart';
@ -17,6 +18,8 @@ export 'serialization_util.dart';
const kTransitionInfoKey = '__transition_info__'; const kTransitionInfoKey = '__transition_info__';
///
class AppStateNotifier extends ChangeNotifier { class AppStateNotifier extends ChangeNotifier {
AppStateNotifier._(); AppStateNotifier._();
@ -379,4 +382,4 @@ extension GoRouterLocationExtension on GoRouter {
: routerDelegate.currentConfiguration; : routerDelegate.currentConfiguration;
return matchList.uri.toString(); return matchList.uri.toString();
} }
} }

View File

@ -10,6 +10,7 @@ import '../../flutter_flow/lat_lng.dart';
import '../../flutter_flow/place.dart'; import '../../flutter_flow/place.dart';
import '../../flutter_flow/uploaded_file.dart'; import '../../flutter_flow/uploaded_file.dart';
/// SERIALIZATION HELPERS /// SERIALIZATION HELPERS
String dateTimeRangeToString(DateTimeRange dateTimeRange) { String dateTimeRangeToString(DateTimeRange dateTimeRange) {
@ -228,4 +229,4 @@ dynamic deserializeParam<T>(
log('Error deserializing parameter: $e'); log('Error deserializing parameter: $e');
return null; return null;
} }
} }

View File

@ -15,4 +15,4 @@ Future<bool> getPermissionStatus(Permission setting) async {
} }
Future<void> requestPermission(Permission setting) async => Future<void> requestPermission(Permission setting) async =>
await setting.request(); await setting.request();

View File

@ -43,4 +43,4 @@ class FFPlace {
state == other.state && state == other.state &&
country == other.country && country == other.country &&
zipCode == other.zipCode; zipCode == other.zipCode;
} }

View File

@ -48,4 +48,4 @@ String randomImageUrl(int width, int height) {
Color randomColor() { Color randomColor() {
return Color.fromARGB( return Color.fromARGB(
255, _random.nextInt(255), _random.nextInt(255), _random.nextInt(255)); 255, _random.nextInt(255), _random.nextInt(255), _random.nextInt(255));
} }

View File

@ -90,4 +90,4 @@ class StreamRequestManager<T> {
} }
String _requestKey(String? key) => String _requestKey(String? key) =>
key == null || key.isEmpty ? '__DEFAULT_KEY__' : key; key == null || key.isEmpty ? '__DEFAULT_KEY__' : key;

View File

@ -374,4 +374,4 @@ void showUploadMessage(
String? _removeTrailingSlash(String? path) => path != null && path.endsWith('/') String? _removeTrailingSlash(String? path) => path != null && path.endsWith('/')
? path.substring(0, path.length - 1) ? path.substring(0, path.length - 1)
: path; : path;

Some files were not shown because too many files have changed in this diff Show More