Compare commits
17 Commits
auto-setti
...
icon_setti
Author | SHA1 | Date | |
---|---|---|---|
3d56f33ec3 | |||
20fdfdde87 | |||
7fed2f17af | |||
769be41855 | |||
d4d7ced585 | |||
2be5d0e164 | |||
5844ea429b | |||
34762dee6e | |||
600ed7992d | |||
91ba2bad78 | |||
9e678fddaf | |||
5b1fd3bdd8 | |||
b7b326969a | |||
aa27ecf908 | |||
82ddc499ac | |||
ab66142568 | |||
e0dbbd67d1 |
23
assets/icons/automation_ic.svg
Normal file
@ -0,0 +1,23 @@
|
||||
<svg width="35" height="36" viewBox="0 0 35 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.66933 30.6933C5.53419 30.6933 5.39898 30.6418 5.29581 30.5386C5.08955 30.3323 5.08955 29.9979 5.29581 29.7917L13.1989 21.8886C13.4052 21.6823 13.7396 21.6823 13.9459 21.8886C14.1521 22.0949 14.1521 22.4293 13.9459 22.6355L6.04286 30.5386C5.93969 30.6418 5.80448 30.6933 5.66933 30.6933Z" fill="#E9EDF1"/>
|
||||
<path d="M20.7589 15.6035C20.6238 15.6035 20.4886 15.552 20.3854 15.4488C20.1791 15.2425 20.1791 14.9081 20.3854 14.7019L28.9575 6.1298C29.1639 5.92353 29.4982 5.92353 29.7045 6.1298C29.9108 6.33607 29.9108 6.6705 29.7045 6.8767L21.1325 15.4488C21.0293 15.5519 20.8941 15.6035 20.7589 15.6035Z" fill="#E9EDF1"/>
|
||||
<path d="M29.3309 30.6232C29.1958 30.6232 29.0605 30.5716 28.9574 30.4684L23.4486 24.9597C23.2424 24.7534 23.2424 24.419 23.4486 24.2128C23.655 24.0065 23.9894 24.0065 24.1956 24.2128L29.7043 29.7215C29.9106 29.9278 29.9106 30.2622 29.7043 30.4684C29.6013 30.5716 29.466 30.6232 29.3309 30.6232Z" fill="#E9EDF1"/>
|
||||
<path d="M11.2132 12.5055C11.0781 12.5055 10.9429 12.4539 10.8397 12.3508L5.33097 6.84203C5.1247 6.63576 5.1247 6.30133 5.33097 6.09513C5.53731 5.88886 5.87167 5.88886 6.07794 6.09513L11.5867 11.6039C11.7929 11.8101 11.7929 12.1446 11.5867 12.3508C11.4835 12.4539 11.3484 12.5055 11.2132 12.5055Z" fill="#E9EDF1"/>
|
||||
<path d="M29.1335 15.7045H27.1526C27.0645 15.7045 26.9878 15.6461 26.9631 15.5616C26.7624 14.8743 26.4885 14.2186 26.1511 13.6024C26.1089 13.525 26.1216 13.4299 26.1835 13.3672L27.585 11.9658C27.6624 11.8891 27.6624 11.7644 27.585 11.6869L24.1462 8.24822C24.0688 8.17075 23.9441 8.17075 23.8673 8.24822L22.4659 9.64962C22.4033 9.71159 22.3082 9.72427 22.2307 9.68202C21.6145 9.34469 20.9589 9.07075 20.2716 8.87005C20.1871 8.8454 20.1286 8.76864 20.1286 8.68061V6.69962C20.1286 6.59047 20.0406 6.50244 19.9314 6.50244H15.0681C14.9589 6.50244 14.8709 6.59047 14.8709 6.69962V8.68061C14.8709 8.76864 14.8124 8.8454 14.7279 8.87005C14.0406 9.07075 13.385 9.34469 12.7688 9.68202C12.6913 9.72427 12.5962 9.71159 12.5335 9.64962L11.1321 8.24822C11.0554 8.17075 10.9307 8.17075 10.8533 8.24822L7.41454 11.6869C7.33707 11.7644 7.33707 11.8891 7.41454 11.9658L8.81595 13.3672C8.87792 13.4299 8.89059 13.525 8.84834 13.6024C8.5258 14.1919 8.26102 14.8165 8.06313 15.4714C8.05397 15.501 8.06454 15.5651 8.05538 15.5954C8.03073 15.6799 7.95397 15.7384 7.86595 15.7384L6.03214 15.8306C5.92299 15.8306 5.83496 15.9186 5.83496 16.0278L5.86524 20.5644C5.86524 20.6736 5.95327 20.7616 6.06243 20.7616L7.93848 20.7679C8.02651 20.7679 8.10327 20.8264 8.12792 20.9109C8.32862 21.5982 8.71242 22.4461 9.04975 23.0623C9.092 23.1398 9.07933 23.2348 9.01735 23.2975L7.62721 24.7038C7.54975 24.7806 7.54975 24.9052 7.62721 24.9827L10.8575 28.0503C10.935 28.1278 11.0596 28.1278 11.1364 28.0503L12.4399 26.8398C12.5026 26.7778 12.5976 26.7651 12.6751 26.8074C13.2913 27.1447 14.2645 27.4503 14.9519 27.651C15.0364 27.6757 15.0948 27.7524 15.0948 27.8405L15.0413 29.7524C15.0413 29.8616 15.1293 29.9496 15.2385 29.9496L19.7159 29.9081C19.8251 29.9081 19.9131 29.82 19.9131 29.7109L19.9645 27.8764C19.9645 27.7883 20.023 27.7116 20.1075 27.6869C20.5575 27.556 21.1371 27.4771 21.5575 27.2855C21.6258 27.2545 21.7814 27.2158 21.7814 27.2158C21.9335 27.1426 22.0835 27.0658 22.2307 26.9848C22.3082 26.9426 22.4033 26.9552 22.4659 27.0172L23.8673 28.4186C23.9441 28.4961 24.0688 28.4961 24.1462 28.4186L27.585 24.9799C27.6624 24.9024 27.6624 24.7778 27.585 24.701L26.1835 23.2996C26.1216 23.2369 26.1089 23.1419 26.1511 23.0644C26.4885 22.4482 26.7624 21.7926 26.9631 21.1052C26.9878 21.0207 27.0645 20.9623 27.1526 20.9623H29.1335C29.2427 20.9623 29.3307 20.8743 29.3307 20.7651V15.9017C29.3307 15.7926 29.2427 15.7045 29.1335 15.7045ZM17.5399 21.2693C15.8962 21.2693 14.5638 19.9369 14.5638 18.2933C14.5638 16.6496 15.8962 15.3172 17.5399 15.3172C19.1835 15.3172 20.5159 16.6496 20.5159 18.2933C20.5159 19.9369 19.1835 21.2693 17.5399 21.2693Z" fill="#C3C1C9"/>
|
||||
<path d="M21.7816 27.2158C21.2992 27.4489 20.7943 27.6439 20.2718 27.7967C20.1872 27.8214 20.1288 27.8982 20.1288 27.9862V29.9672C20.1288 30.0763 20.0408 30.1644 19.9316 30.1644H15.0682C14.9591 30.1644 14.8711 30.0763 14.8711 29.9672V27.9862C14.8711 27.8982 14.8126 27.8214 14.7281 27.7967C14.0408 27.596 13.3851 27.3221 12.7689 26.9848C12.6915 26.9425 12.5964 26.9552 12.5337 27.0172L11.1323 28.4186C11.0556 28.496 10.9309 28.496 10.8534 28.4186L7.41472 24.9798C7.33725 24.9024 7.33725 24.7777 7.41472 24.701L8.81613 23.2996C8.8781 23.2369 8.89078 23.1418 8.84852 23.0644C8.5112 22.4482 8.23725 21.7925 8.03655 21.1052C8.0119 21.0207 7.93514 20.9622 7.84711 20.9622H5.86613C5.75697 20.9622 5.66895 20.8742 5.66895 20.7651V15.9017C5.66895 15.7925 5.75697 15.7045 5.86613 15.7045H7.84711C7.93514 15.7045 8.0119 15.6461 8.03655 15.5615C8.045 15.5313 8.05352 15.5008 8.06338 15.4712C8.12747 22.0367 13.4704 27.3397 20.0513 27.3397C20.6387 27.3397 21.2168 27.2975 21.7816 27.2158Z" fill="#ADACB5"/>
|
||||
<path d="M17.5401 12.272C14.2148 12.272 11.5183 14.9677 11.5183 18.2938C11.5183 21.6192 14.2148 24.3156 17.5401 24.3156C20.8662 24.3156 23.562 21.6192 23.562 18.2938C23.562 14.9677 20.8662 12.272 17.5401 12.272ZM17.5401 20.653C16.2373 20.653 15.181 19.5966 15.181 18.2938C15.181 16.991 16.2373 15.9346 17.5401 15.9346C18.843 15.9346 19.8993 16.991 19.8993 18.2938C19.8993 19.5966 18.843 20.653 17.5401 20.653Z" fill="#ADACB5"/>
|
||||
<path d="M34.9999 4.53117C34.9999 2.48926 33.3446 0.833984 31.3027 0.833984C30.589 0.833984 29.9225 1.03624 29.3574 1.38652C29.3574 1.38652 29.164 1.54589 29.0626 1.62441C28.1892 2.30067 27.7471 3.3411 27.7471 4.53124C27.7471 6.57314 29.2607 8.01637 31.3026 8.01637C32.404 8.01637 33.3538 7.71511 34.0312 6.95102C34.114 6.85757 34.3045 6.68997 34.3045 6.68997C34.7421 6.0825 34.9999 5.33694 34.9999 4.53117Z" fill="#73C2FB"/>
|
||||
<path d="M34.3045 6.69058C33.6334 7.62227 32.5386 8.22903 31.3026 8.22903C29.2611 8.22903 27.6055 6.5734 27.6055 4.53185C27.6055 3.20368 28.306 2.03862 29.3574 1.38721C28.9193 1.99425 28.6618 2.7403 28.6618 3.54594C28.6618 5.58749 30.3174 7.24312 32.359 7.24312C33.0731 7.24312 33.7397 7.04129 34.3045 6.69058Z" fill="#4B9CD3"/>
|
||||
<path d="M31.3028 6.11652C32.1779 6.11652 32.8873 5.40711 32.8873 4.53202C32.8873 3.65692 32.1779 2.94751 31.3028 2.94751C30.4277 2.94751 29.7183 3.65692 29.7183 4.53202C29.7183 5.40711 30.4277 6.11652 31.3028 6.11652Z" fill="#4B9CD3"/>
|
||||
<path d="M7.39434 4.53117C7.39434 2.48926 5.73906 0.833984 3.69716 0.833984C2.98343 0.833984 2.31695 1.03624 1.75188 1.38652C1.75188 1.38652 1.55843 1.54589 1.45709 1.62441C0.583714 2.3006 0.141602 3.3411 0.141602 4.53117C0.141602 6.57307 1.65526 8.0163 3.69716 8.0163C4.79857 8.0163 5.74836 7.71504 6.42568 6.95095C6.50857 6.8575 6.69899 6.6899 6.69899 6.6899C7.1366 6.0825 7.39434 5.33694 7.39434 4.53117Z" fill="#7CB9E8"/>
|
||||
<path d="M6.69901 6.69058C6.02788 7.62227 4.9331 8.22903 3.69718 8.22903C1.65563 8.22903 0 6.5734 0 4.53185C0 3.20368 0.700493 2.03862 1.7519 1.38721C1.31387 1.99425 1.05634 2.7403 1.05634 3.54594C1.05634 5.58749 2.71197 7.24312 4.75352 7.24312C5.4676 7.24312 6.13422 7.04129 6.69901 6.69058Z" fill="#6699CC"/>
|
||||
<path d="M3.69705 6.11652C4.57215 6.11652 5.28156 5.40711 5.28156 4.53202C5.28156 3.65692 4.57215 2.94751 3.69705 2.94751C2.82196 2.94751 2.11255 3.65692 2.11255 4.53202C2.11255 5.40711 2.82196 6.11652 3.69705 6.11652Z" fill="#6699CC"/>
|
||||
<path d="M35.0001 32.1376C35.0001 30.0957 33.3448 28.4404 31.3029 28.4404C30.5892 28.4404 29.9227 28.6427 29.3577 28.993C29.3577 28.993 29.1642 29.1523 29.0629 29.2309C28.1894 29.9071 27.7473 30.9475 27.7473 32.1377C27.7473 34.1796 29.261 35.6228 31.3029 35.6228C32.4043 35.6228 33.3541 35.3216 34.0314 34.5575C34.1143 34.464 34.3047 34.2964 34.3047 34.2964C34.7424 33.6889 35.0001 32.9434 35.0001 32.1376Z" fill="#6086FF"/>
|
||||
<path d="M34.305 34.2956C33.6338 35.2273 32.5391 35.834 31.3031 35.834C29.2616 35.834 27.606 34.1784 27.606 32.1368C27.606 30.8087 28.3065 29.6436 29.3579 28.9922C28.9198 29.5992 28.6623 30.3453 28.6623 31.1509C28.6623 33.1925 30.3179 34.8481 32.3595 34.8481C33.0736 34.8481 33.7402 34.6463 34.305 34.2956Z" fill="#023DFE"/>
|
||||
<path d="M31.3033 33.7217C32.1784 33.7217 32.8878 33.0123 32.8878 32.1372C32.8878 31.2621 32.1784 30.5527 31.3033 30.5527C30.4282 30.5527 29.7188 31.2621 29.7188 32.1372C29.7188 33.0123 30.4282 33.7217 31.3033 33.7217Z" fill="#023DFE"/>
|
||||
<path d="M7.39434 32.1376C7.39434 30.0957 5.73906 28.4404 3.69716 28.4404C2.98343 28.4404 2.31695 28.6427 1.75188 28.993C1.75188 28.993 1.55843 29.1523 1.45709 29.2309C0.583714 29.907 0.141602 30.9475 0.141602 32.1376C0.141602 34.1795 1.65526 35.6228 3.69716 35.6228C4.79857 35.6228 5.74836 35.3215 6.42568 34.5574C6.50857 34.4639 6.69899 34.2963 6.69899 34.2963C7.1366 33.6889 7.39434 32.9434 7.39434 32.1376Z" fill="#76ABDF"/>
|
||||
<path d="M6.69901 34.2956C6.02788 35.2273 4.9331 35.834 3.69718 35.834C1.65563 35.834 0 34.1784 0 32.1368C0 30.8087 0.700493 29.6436 1.7519 28.9922C1.31387 29.5992 1.05634 30.3453 1.05634 31.1509C1.05634 33.1925 2.71197 34.8481 4.75352 34.8481C5.4676 34.8481 6.13422 34.6463 6.69901 34.2956Z" fill="#4682B4"/>
|
||||
<path d="M3.69705 33.7217C4.57215 33.7217 5.28156 33.0123 5.28156 32.1372C5.28156 31.2621 4.57215 30.5527 3.69705 30.5527C2.82196 30.5527 2.11255 31.2621 2.11255 32.1372C2.11255 33.0123 2.82196 33.7217 3.69705 33.7217Z" fill="#4682B4"/>
|
||||
<path d="M11.5185 18.8222C11.6454 18.8222 11.7693 18.7765 11.8664 18.6915L13.8114 16.9891C14.0309 16.797 14.0532 16.4634 13.861 16.2439C13.669 16.0243 13.3352 16.0022 13.1157 16.1943L12.2055 16.9909C12.7957 14.5928 14.9731 12.8005 17.54 12.8005C19.8371 12.8005 21.9109 14.2491 22.7002 16.4051C22.8006 16.6791 23.1037 16.8198 23.3778 16.7195C23.6517 16.6192 23.7925 16.3158 23.6922 16.0419C22.751 13.4713 20.2786 11.7441 17.54 11.7441C15.8053 11.7441 14.1704 12.4155 12.9366 13.6347C12.1095 14.452 11.5277 15.4527 11.2267 16.5455L10.8242 15.7489C10.6926 15.4885 10.3748 15.384 10.1146 15.5156C9.85425 15.6472 9.74974 15.9648 9.88136 16.2252L11.0471 18.5322C11.1207 18.6779 11.2575 18.7814 11.4178 18.8125C11.4513 18.819 11.485 18.8222 11.5185 18.8222Z" fill="#F7F9FA"/>
|
||||
<path d="M25.1992 20.368L24.0335 18.061C23.9598 17.9153 23.823 17.8118 23.6627 17.7807C23.5027 17.7496 23.337 17.7942 23.2142 17.9018L21.2691 19.6042C21.0496 19.7963 21.0273 20.1299 21.2195 20.3494C21.4116 20.5689 21.7452 20.5911 21.9648 20.399L22.8727 19.6044C22.2802 21.999 20.1049 23.7877 17.5399 23.7877C15.2331 23.7877 13.1564 22.3309 12.3722 20.1627C12.273 19.8883 11.9701 19.7463 11.6959 19.8456C11.4215 19.9449 11.2796 20.2476 11.3788 20.522C12.3137 23.1071 14.7897 24.844 17.5399 24.844C19.2753 24.844 20.9105 24.1721 22.1446 22.9522C22.9704 22.1357 23.5515 21.1364 23.8524 20.0451L24.2563 20.8444C24.3492 21.0284 24.5351 21.1345 24.7281 21.1345C24.8082 21.1345 24.8895 21.1162 24.9659 21.0776C25.2263 20.9461 25.3308 20.6284 25.1992 20.368Z" fill="#F7F9FA"/>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
@ -1,14 +0,0 @@
|
||||
<svg width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.44697 3.24664C2.55653 1.43525 4.05999 0 5.899 0C7.38201 0 8.64697 0.933692 9.13846 2.2452C10.4156 2.26061 11.4464 3.30004 11.4464 4.58088C11.4464 5.87132 10.4002 6.91747 9.10977 6.91747C8.56961 6.91747 3.06603 6.91747 2.51106 6.91747C1.49695 6.91747 0.674805 6.09532 0.674805 5.08122C0.674805 4.08862 1.46262 3.28051 2.44697 3.24664Z" fill="#F0F5F7"/>
|
||||
<path d="M11.4458 4.58088C11.4458 5.51442 10.8979 6.32039 10.1063 6.69439C10.2489 6.39211 10.3289 6.05412 10.3289 5.69752C10.3289 4.41669 9.2983 3.3771 8.02113 3.36184C7.52948 2.05019 6.26467 1.11665 4.78151 1.11665C4.11271 1.11665 3.48816 1.30647 2.95898 1.63545C3.56934 0.653539 4.65745 0 5.89846 0C7.38132 0 8.64644 0.93354 9.13777 2.24489C10.4151 2.26045 11.4458 3.30004 11.4458 4.58088Z" fill="#DDE9ED"/>
|
||||
<path d="M18.0059 7.61715C17.8825 5.57887 16.1907 3.96387 14.1213 3.96387C12.4525 3.96387 11.0291 5.01444 10.476 6.49013C9.03874 6.50753 7.87891 7.67727 7.87891 9.11863C7.87891 10.5708 9.05613 11.7479 10.5082 11.7479H17.9338C19.075 11.7479 20 10.8227 20 9.68168C20 8.56458 19.1136 7.6553 18.0059 7.61715Z" fill="#C4E1E8"/>
|
||||
<path d="M20.0004 9.68153C20.0004 10.8227 19.0751 11.748 17.9339 11.748H17.7738C17.9237 11.4619 18.0085 11.1363 18.0085 10.7912C18.0085 9.67421 17.1221 8.76478 16.0143 8.72648C15.891 6.68834 14.199 5.07319 12.1297 5.07319C11.8506 5.07319 11.5786 5.10249 11.3164 5.15833C12.0243 4.42209 13.0193 3.96387 14.1216 3.96387C16.191 3.96387 17.8829 5.57872 18.0062 7.61731C19.114 7.65515 20.0004 8.56458 20.0004 9.68153Z" fill="#A4D5DD"/>
|
||||
<path d="M10.127 7.61715C10.0036 5.57887 8.31183 3.96387 6.24242 3.96387C4.57355 3.96387 3.1502 5.01444 2.59707 6.49013C1.15983 6.50753 0 7.67727 0 9.11863C0 10.5707 1.17722 11.7479 2.62926 11.7479H10.0549C11.1961 11.7479 12.1212 10.8227 12.1212 9.68153C12.1211 8.56458 11.2347 7.6553 10.127 7.61715Z" fill="#C4E1E8"/>
|
||||
<path d="M12.1215 9.68153C12.1215 10.8227 11.1962 11.748 10.055 11.748H9.89492C10.0448 11.4619 10.1296 11.1363 10.1296 10.7912C10.1296 9.67421 9.24321 8.76478 8.13541 8.72648C8.01212 6.68834 6.32006 5.07319 4.2508 5.07319C3.97171 5.07319 3.69965 5.10249 3.4375 5.15833C4.14536 4.42209 5.14039 3.96387 6.2427 3.96387C8.31211 3.96387 10.004 5.57872 10.1275 7.61731C11.2351 7.65515 12.1215 8.56458 12.1215 9.68153Z" fill="#A4D5DD"/>
|
||||
<path d="M16.3505 11.2763C16.2272 9.23805 14.5353 7.62305 12.4661 7.62305C10.797 7.62305 9.37368 8.67362 8.82055 10.1493C7.38346 10.1667 6.22363 11.3366 6.22363 12.7778C6.22363 14.23 7.4007 15.4071 8.85289 15.4071H16.2785C17.4195 15.4071 18.3447 14.4819 18.3447 13.3409C18.3447 12.2238 17.4583 11.3145 16.3505 11.2763Z" fill="#F0F5F7"/>
|
||||
<path d="M18.3453 13.3407C18.3453 14.4819 17.42 15.4072 16.2788 15.4072H16.1187C16.2685 15.1211 16.3534 14.7955 16.3534 14.4503C16.3534 13.3334 15.467 12.424 14.3592 12.3857C14.2359 10.3475 12.5438 8.73237 10.4744 8.73237C10.1953 8.73237 9.92328 8.76167 9.66113 8.81751C10.3691 8.08142 11.3642 7.62305 12.4665 7.62305C14.5359 7.62305 16.2278 9.2379 16.3511 11.2765C17.4589 11.3143 18.3453 12.2238 18.3453 13.3407Z" fill="#DDE9ED"/>
|
||||
<path d="M15.3204 11.0476C15.1842 11.0476 15.0606 10.9545 15.0273 10.8162C14.9924 10.671 14.9446 10.5277 14.8853 10.3905C14.819 10.2375 14.8894 10.0599 15.0424 9.99364C15.1955 9.92742 15.3731 9.99791 15.4393 10.1508C15.5124 10.3199 15.5712 10.4963 15.6142 10.6751C15.6532 10.8373 15.5533 11.0001 15.3913 11.0392C15.3676 11.0448 15.3438 11.0476 15.3204 11.0476Z" fill="#F0F5F7"/>
|
||||
<path d="M14.5849 9.70576C14.5055 9.70576 14.4263 9.67463 14.3671 9.61283C13.8645 9.08915 13.1893 8.80076 12.4659 8.80076C12.2993 8.80076 12.1641 8.66571 12.1641 8.49893C12.1641 8.33231 12.2993 8.19727 12.4659 8.19727C13.3552 8.19727 14.1851 8.55158 14.8026 9.19505C14.918 9.31513 14.9142 9.50633 14.7939 9.62168C14.7353 9.67784 14.6601 9.70576 14.5849 9.70576Z" fill="#F0F5F7"/>
|
||||
<path d="M3.08091 12.4545C3.16911 10.9973 4.37868 9.84277 5.85803 9.84277C7.05128 9.84277 8.06874 10.5938 8.46425 11.6488C9.49179 11.6613 10.321 12.4975 10.321 13.528C10.321 14.5662 9.47943 15.4077 8.44121 15.4077C8.00664 15.4077 3.57912 15.4077 3.13249 15.4077C2.31675 15.4077 1.65527 14.7464 1.65527 13.9305C1.65527 13.132 2.28898 12.4818 3.08091 12.4545Z" fill="#F0F5F7"/>
|
||||
<path d="M10.3214 13.528C10.3214 14.5572 9.49379 15.3932 8.46762 15.4072C8.77524 15.0723 8.96293 14.6261 8.96293 14.136C8.96293 13.1057 8.13391 12.2694 7.10607 12.2569C6.71071 11.202 5.69325 10.4507 4.49985 10.4507C4.35886 10.4507 4.22046 10.4614 4.08496 10.4817C4.56638 10.0825 5.18437 9.84277 5.8585 9.84277C7.05175 9.84277 8.06921 10.5937 8.46457 11.6488C9.49241 11.6613 10.3214 12.4974 10.3214 13.528Z" fill="#DDE9ED"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.6 KiB |
@ -1,6 +0,0 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.99676 20C15.5178 20 19.9935 15.5228 19.9935 10C19.9935 4.47715 15.5178 0 9.99676 0C4.4757 0 0 4.47715 0 10C0 15.5228 4.4757 20 9.99676 20Z" fill="#00DF76"/>
|
||||
<path d="M9.99695 0C9.99242 0 9.98793 0.00015623 9.9834 0.00015623V19.9998C9.98793 19.9998 9.99242 20 9.99695 20C15.518 20 19.9937 15.5228 19.9937 9.99996C19.9937 4.4771 15.518 0 9.99695 0Z" fill="#00AB5E"/>
|
||||
<path d="M4.34516 10.1989L8.38856 14.2423C8.56491 14.4186 8.85085 14.4186 9.02719 14.2423L15.6653 7.60414C15.8417 7.42779 15.8417 7.14185 15.6653 6.96551L14.4571 5.75726C14.2807 5.58091 13.9948 5.58091 13.8184 5.75726L8.99024 10.5854C8.8139 10.7617 8.52796 10.7617 8.35161 10.5854L6.18794 8.42169C6.01507 8.24882 5.736 8.24492 5.55837 8.41286L4.35422 9.55135C4.1694 9.72614 4.1653 10.019 4.34516 10.1989Z" fill="#FFF5F5"/>
|
||||
<path d="M14.457 5.75726C14.2806 5.58091 13.9947 5.58091 13.8183 5.75726L9.9834 9.59221V13.286L15.6652 7.60418C15.8416 7.42783 15.8416 7.14189 15.6652 6.96551L14.457 5.75726Z" fill="#DFEBF1"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,10 +0,0 @@
|
||||
<svg width="15" height="20" viewBox="0 0 15 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.4215 9.10771C12.3689 9.09123 11.5782 8.85045 10.6502 8.92217C10.9201 8.37846 11.0308 7.98472 11.0683 7.82656C11.0872 7.76945 11.0968 7.70898 11.094 7.64648C11.0798 7.32902 10.8366 7.06055 10.5081 7.06055C10.2289 7.06055 9.96121 7.28433 9.92629 7.56332C9.86653 7.80531 9.34821 9.62201 6.89781 11.5305C6.6425 11.7294 6.59672 12.0976 6.79558 12.3528C6.91113 12.5012 7.08374 12.5788 7.25823 12.5788C7.38409 12.5788 7.51089 12.5384 7.61788 12.4551C8.51693 11.7548 9.18661 11.0608 9.68446 10.4293C10.6082 9.78853 12.058 10.222 12.0713 10.226C12.3803 10.3229 12.7088 10.1508 12.8055 9.84197C12.9022 9.53314 12.7302 9.20443 12.4215 9.10771Z" fill="#9A4F4F"/>
|
||||
<path d="M3.78691 3.77187C3.648 3.77187 3.50859 3.72276 3.39683 3.62296C3.15547 3.40737 3.13453 3.03698 3.35008 2.79562C4.12921 1.92312 4.01019 0.788082 4.00878 0.776871C3.96808 0.455817 4.19535 0.162576 4.5164 0.121873C4.83757 0.0813259 5.1307 0.308435 5.17136 0.62945C5.17992 0.696911 5.36757 2.29574 4.22414 3.57616C4.10843 3.70577 3.94796 3.77187 3.78691 3.77187Z" fill="#AD6B5C"/>
|
||||
<path d="M6.61754 9.15352C3.59093 7.48869 2.50301 5.76597 2.49367 5.75093C2.3259 5.47422 1.96555 5.38601 1.68884 5.55371C1.41212 5.72152 1.32384 6.08187 1.49161 6.35854C1.49681 6.36714 1.51505 6.39671 1.54731 6.4446C1.43454 6.45729 1.32974 6.47679 1.23415 6.50034C0.59416 6.65807 0.174047 7.06815 0.174047 7.06815C0.063657 7.17514 -0.00661577 7.32193 0.000493537 7.48053C0.0147121 7.79798 0.257952 8.06646 0.586425 8.06646C0.739314 8.06646 0.888922 7.99939 0.998804 7.8929C0.998804 7.8929 1.84321 7.16264 3.05808 8.09814C3.76522 8.72696 4.74283 9.45976 6.05274 10.1803C6.14231 10.2296 6.2391 10.253 6.33461 10.253C6.54137 10.253 6.74183 10.1433 6.84855 9.94933C7.00449 9.66578 6.90105 9.30945 6.61754 9.15352Z" fill="#AD6B5C"/>
|
||||
<path d="M6.21033 12.7834C5.05557 12.4077 4.14369 11.7971 3.50006 10.9684C3.01815 10.348 2.86748 9.82801 2.86748 9.82801C2.79791 9.57785 2.58217 9.38672 2.30518 9.38672C1.9987 9.38672 1.70506 9.65621 1.71924 9.97266C1.72147 10.0225 1.72995 10.0708 1.74288 10.1173C1.74288 10.1173 2.46229 12.7965 5.84779 13.8977C5.90802 13.9173 5.96908 13.9266 6.02916 13.9266C6.27607 13.9266 6.50572 13.7693 6.58623 13.5217C6.68638 13.2141 6.51806 12.8834 6.21033 12.7834Z" fill="#AD6B5C"/>
|
||||
<path d="M14.776 2.55193C14.5619 2.3092 14.1917 2.28596 13.949 2.49998C13.9474 2.50139 13.7135 2.6592 13.1676 2.79131C12.7467 2.8931 12.1012 2.98927 11.1683 2.98853C11.1605 2.98845 11.1528 2.98814 11.145 2.98814C11.1379 2.98814 11.1306 2.98845 11.1235 2.98853C10.6238 2.9865 10.043 2.95673 9.3713 2.8856C9.04971 2.85205 8.761 3.08482 8.72694 3.40661C8.69287 3.72841 8.92615 4.01692 9.24795 4.05098C9.92298 4.12243 10.5197 4.15473 11.048 4.15899C11.0704 4.16067 11.0931 4.16141 11.1161 4.16051C11.7971 4.13649 12.3037 5.09601 12.3075 5.10363C12.4097 5.31011 12.6173 5.42984 12.8331 5.4298C12.9204 5.4298 13.009 5.41023 13.0926 5.3689C13.3826 5.22535 13.5013 4.87386 13.3578 4.58383C13.3451 4.55813 13.2207 4.3118 12.9909 4.02004C14.1848 3.81403 14.648 3.44599 14.7241 3.37892C14.9668 3.16494 14.99 2.79467 14.776 2.55193Z" fill="#9A4F4F"/>
|
||||
<path d="M5.20654 3.63366C3.48146 2.44261 1.69537 3.48397 1.69537 3.48397C1.52194 3.58807 1.39741 3.77557 1.40674 3.98397C1.42096 4.30143 1.6642 4.56991 1.99268 4.56991C2.09729 4.56991 2.2001 4.53796 2.28998 4.48397C2.28998 4.48397 3.44389 3.84065 4.54072 4.59795C4.64236 4.66811 4.7583 4.70174 4.8731 4.70174C5.05916 4.70174 5.24209 4.61335 5.3558 4.44866C5.53966 4.18245 5.47287 3.81753 5.20654 3.63366Z" fill="#AD6B5C"/>
|
||||
<path d="M11.6063 0.0353506C11.3023 -0.0749609 10.966 0.0819126 10.8556 0.386167C10.0675 2.55701 7.52841 4.1516 6.69936 4.62511C5.86987 4.15137 3.33111 2.55689 2.54311 0.386167C2.43268 0.0819517 2.09647 -0.0751171 1.79241 0.0353506C1.48824 0.145779 1.33113 0.48187 1.4416 0.786046C2.35889 3.31294 5.10015 5.06323 6.08374 5.62471L4.93867 19.3654C4.92508 19.5287 4.98047 19.6902 5.0914 19.8108C5.20234 19.9314 5.35871 20 5.52257 20H7.87606C8.03989 20 8.1963 19.9314 8.30723 19.8108C8.41821 19.6902 8.4736 19.5287 8.45996 19.3654L7.3149 5.62471C8.29848 5.06323 11.0397 3.31297 11.957 0.786046C12.0675 0.481831 11.9105 0.145779 11.6063 0.0353506Z" fill="#BE866A"/>
|
||||
<path d="M7.87597 19.9999C8.03979 19.9999 8.1962 19.9313 8.30713 19.8107C8.41811 19.6901 8.4735 19.5286 8.45987 19.3653L7.3148 5.62465C8.29838 5.06317 11.0396 3.31292 11.9569 0.785988C12.0674 0.481812 11.9103 0.145721 11.6061 0.0352925C11.3021 -0.0750189 10.9658 0.0818546 10.8554 0.386109C10.0674 2.55695 7.52827 4.15154 6.69922 4.62505V19.9999H7.87597Z" fill="#AD6B5C"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.5 KiB |
25
assets/icons/frequency_icon.svg
Normal file
@ -0,0 +1,25 @@
|
||||
<svg width="23" height="18" viewBox="0 0 23 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M22.3032 0.832703H1.4526C1.10932 0.832703 0.830078 1.11285 0.830078 1.45725V16.6318C0.830078 16.9762 1.10932 17.2563 1.4526 17.2563H22.3032C22.6463 17.2563 22.9257 16.9762 22.9257 16.6318V1.45725C22.9257 1.11265 22.6465 0.832703 22.3032 0.832703Z" fill="#E6E7E8"/>
|
||||
<path d="M21.8881 0.624556V15.7989C21.8881 16.029 21.7023 16.2153 21.4731 16.2153H0.622537C0.393143 16.2153 0.20752 16.029 0.20752 15.7989V0.624556C0.20752 0.394417 0.393143 0.208191 0.622537 0.208191H21.4731C21.7023 0.208191 21.8881 0.394417 21.8881 0.624556Z" fill="white"/>
|
||||
<path d="M0.20752 15.7989C0.20752 16.0288 0.393143 16.2152 0.622537 16.2152H21.4731C21.7023 16.2152 21.8881 16.0288 21.8881 15.7989V0.832703H0.20752V15.7989Z" fill="#D4FBFF"/>
|
||||
<path d="M4.44421 8.45071C4.36336 8.45071 4.29 8.3952 4.27055 8.31266C3.4626 4.87562 2.7657 4.37773 2.4283 4.37427C1.65825 4.38423 0.871172 6.79256 0.555856 8.30819C0.535592 8.40517 0.440754 8.46758 0.3447 8.44705C0.248038 8.42672 0.186231 8.33177 0.206293 8.235C0.29566 7.80501 1.11779 4.03293 2.42364 4.01605H2.43336C3.2484 4.01605 3.94267 5.35582 4.61829 8.23053C4.64098 8.32669 4.58161 8.42326 4.48555 8.44603C4.47157 8.44928 4.45799 8.45071 4.44421 8.45071Z" fill="#FFD7E5"/>
|
||||
<path d="M12.6696 8.59971C12.5887 8.59971 12.5156 8.54421 12.4959 8.46167C11.6916 5.03987 11.001 4.52328 10.6583 4.52328C10.6569 4.52328 10.6553 4.52348 10.6539 4.52348C9.88383 4.53344 9.09696 6.94157 8.78164 8.45719C8.76118 8.55417 8.66634 8.61679 8.57029 8.59605C8.47362 8.57572 8.41182 8.48078 8.43188 8.38401C8.52145 7.95402 9.34358 4.18193 10.6494 4.16526C11.4762 4.15693 12.1656 5.49364 12.8437 8.37953C12.8664 8.4757 12.807 8.57226 12.7109 8.59524C12.6972 8.59829 12.6834 8.59971 12.6696 8.59971Z" fill="#FFD7E5"/>
|
||||
<path d="M20.7961 8.29596C20.7152 8.29596 20.6418 8.24046 20.6224 8.15792C19.8181 4.73612 19.1275 4.21953 18.7848 4.21953C18.7832 4.21953 18.7818 4.21973 18.7803 4.21973C18.0103 4.2297 17.2234 6.63782 16.9081 8.15345C16.8878 8.25042 16.7928 8.31284 16.6968 8.2923C16.6001 8.27197 16.5383 8.17703 16.5583 8.08026C16.6477 7.65027 17.47 3.87818 18.7759 3.86151C19.5903 3.84647 20.2921 5.1899 20.9701 8.07579C20.9928 8.17195 20.9335 8.26852 20.8374 8.29149C20.8234 8.29454 20.8098 8.29596 20.7961 8.29596Z" fill="#FFD7E5"/>
|
||||
<path d="M6.52174 12.5619C6.5185 12.5619 6.51546 12.5617 6.51181 12.5617C5.17537 12.5448 4.33378 8.7729 4.24219 8.34291C4.22152 8.24594 4.28495 8.15099 4.38384 8.13087C4.48252 8.11074 4.57959 8.17275 4.60006 8.26972C4.92287 9.78535 5.729 12.1935 6.51668 12.2034C6.5181 12.2034 6.51972 12.2036 6.52114 12.2036C6.87212 12.2036 7.57915 11.6875 8.40229 8.26525C8.42519 8.16909 8.52388 8.10993 8.62216 8.13188C8.72065 8.15465 8.78144 8.25122 8.75814 8.34759C8.06671 11.2215 7.35583 12.5619 6.52174 12.5619Z" fill="#FFD7E5"/>
|
||||
<path d="M14.7221 12.5619C14.7187 12.5619 14.7157 12.5617 14.7124 12.5617C13.4066 12.5448 12.5842 8.7729 12.4949 8.34291C12.4748 8.24594 12.5366 8.15099 12.6333 8.13087C12.7299 8.11074 12.8244 8.17275 12.8446 8.26972C13.1599 9.78535 13.9472 12.1935 14.7169 12.2034C14.7183 12.2034 14.7197 12.2036 14.7213 12.2036C15.064 12.2036 15.7546 11.6875 16.5589 8.26525C16.5816 8.16909 16.6777 8.10972 16.7737 8.13188C16.8698 8.15465 16.9292 8.25122 16.9065 8.34759C16.2314 11.2215 15.5368 12.5619 14.7221 12.5619Z" fill="#FFD7E5"/>
|
||||
<path d="M21.7088 11.1408C21.6411 11.1408 21.5763 11.102 21.5463 11.0361C20.9983 9.83621 20.6678 8.26468 20.6542 8.1982C20.634 8.10142 20.696 8.00648 20.7926 7.98615C20.8887 7.96602 20.9837 8.02803 21.0038 8.12501C21.0072 8.14087 21.34 9.72419 21.8711 10.8871C21.912 10.9769 21.8727 11.0831 21.783 11.1245C21.7591 11.1357 21.7339 11.1408 21.7088 11.1408Z" fill="#FFD7E5"/>
|
||||
<path d="M3.03701 8.32623C2.97175 8.32623 2.91238 8.2811 2.89677 8.21462C2.36037 5.93295 1.90949 5.68532 1.73582 5.69386C1.28088 5.69976 0.771229 7.16923 0.554601 8.21096C0.538389 8.28923 0.46179 8.33945 0.383771 8.32298C0.305753 8.30671 0.255902 8.23007 0.271911 8.152C0.366952 7.69498 0.884102 5.41534 1.73177 5.40436H1.73845C2.28033 5.40436 2.7379 6.27653 3.17764 8.14814C3.19588 8.2258 3.14785 8.30387 3.07024 8.32237C3.0593 8.32461 3.04815 8.32623 3.03701 8.32623Z" fill="#FA759E"/>
|
||||
<path d="M8.34895 8.42239C8.2835 8.42239 8.22412 8.37746 8.20852 8.31078C7.67475 6.03927 7.22204 5.79002 7.04979 5.79002C7.04898 5.79002 7.04838 5.79002 7.04757 5.79002C6.59283 5.79592 6.08318 7.26539 5.86655 8.30712C5.85014 8.38539 5.77333 8.43561 5.69572 8.41914C5.6177 8.40288 5.56765 8.32623 5.58386 8.24816C5.6789 7.79114 6.19605 5.5115 7.04372 5.50052H7.0502C7.59207 5.50052 8.04965 6.37269 8.48939 8.2443C8.50762 8.32196 8.4596 8.40003 8.38198 8.41853C8.37084 8.42117 8.3599 8.42239 8.34895 8.42239Z" fill="#FA759E"/>
|
||||
<path d="M13.5964 8.22601C13.5309 8.22601 13.4716 8.18108 13.456 8.1144C12.9198 5.83293 12.4648 5.59039 12.295 5.59385C11.8401 5.59974 11.3304 7.06922 11.1138 8.11094C11.0976 8.18921 11.021 8.23984 10.9432 8.22296C10.8651 8.2067 10.8151 8.12985 10.8313 8.05178C10.9263 7.59476 11.4435 5.31532 12.2912 5.30414H12.2976C12.8395 5.30414 13.2971 6.17651 13.7368 8.04812C13.7551 8.12578 13.707 8.20385 13.6294 8.22235C13.6185 8.22479 13.6073 8.22601 13.5964 8.22601Z" fill="#FA759E"/>
|
||||
<path d="M18.895 8.42239C18.8298 8.42239 18.7704 8.37746 18.7548 8.31078C18.2186 6.02931 17.7635 5.78677 17.5938 5.79002C17.1389 5.79612 16.6292 7.26539 16.4126 8.30712C16.3962 8.38539 16.3198 8.43601 16.242 8.41914C16.1638 8.40288 16.1139 8.32623 16.1301 8.24816C16.2252 7.79114 16.7421 5.5115 17.5898 5.50052H17.5965C18.1383 5.50052 18.5959 6.37269 19.0357 8.2443C19.0539 8.32196 19.0059 8.40003 18.9283 8.41853C18.9171 8.42117 18.9062 8.42239 18.895 8.42239Z" fill="#FA759E"/>
|
||||
<path d="M4.4265 11.1188C4.42427 11.1188 4.42204 11.1188 4.41981 11.1188C3.57195 11.1076 3.055 8.8282 2.95996 8.37118C2.94375 8.2929 2.9938 8.21626 3.07162 8.19999C3.14984 8.18332 3.22623 8.23374 3.24245 8.31201C3.45928 9.35354 3.96913 10.8234 4.42367 10.8291H4.42589C4.59814 10.8291 5.05065 10.5799 5.58462 8.30856C5.60286 8.2309 5.68067 8.18312 5.75808 8.20081C5.8357 8.2191 5.88352 8.29717 5.86528 8.37504C5.42575 10.2464 4.96838 11.1188 4.4265 11.1188Z" fill="#FA759E"/>
|
||||
<path d="M9.67406 10.9584C9.67183 10.9584 9.6696 10.9584 9.66737 10.9584C8.81951 10.9474 8.30256 8.66778 8.20752 8.21076C8.19131 8.13248 8.24136 8.05584 8.31917 8.03978C8.3976 8.02311 8.47359 8.07353 8.49 8.1518C8.70683 9.19332 9.21669 10.663 9.67122 10.6689H9.67345C9.8457 10.6689 10.2982 10.4196 10.8322 8.14814C10.8504 8.07027 10.928 8.0229 11.0056 8.04059C11.0833 8.05889 11.1311 8.13696 11.1128 8.21482C10.6733 10.086 10.2159 10.9584 9.67406 10.9584Z" fill="#FA759E"/>
|
||||
<path d="M14.9774 10.9842C14.9752 10.9842 14.9732 10.9842 14.971 10.9842C14.1229 10.9732 13.6061 8.69361 13.5111 8.23658C13.4949 8.15831 13.5449 8.08166 13.6228 8.0656C13.701 8.04893 13.7772 8.09915 13.7934 8.17762C14.0102 9.21915 14.5201 10.6888 14.9746 10.6947H14.9768C15.1491 10.6947 15.6016 10.4455 16.1356 8.17396C16.1538 8.0963 16.2316 8.04873 16.309 8.06642C16.3866 8.08471 16.4347 8.16278 16.4164 8.24065C15.9767 10.1121 15.5193 10.9842 14.9774 10.9842Z" fill="#FA759E"/>
|
||||
<path d="M20.234 11.1188C20.2318 11.1188 20.2298 11.1188 20.2274 11.1188C19.3795 11.1076 18.8627 8.8282 18.7677 8.37118C18.7515 8.2929 18.8015 8.21626 18.8794 8.19999C18.9576 8.18332 19.0338 8.23374 19.05 8.31201C19.2668 9.35354 19.7767 10.8234 20.2312 10.8291H20.2334C20.4057 10.8291 20.8582 10.5799 21.3922 8.30856C21.4104 8.2309 21.4882 8.18312 21.5656 8.20081C21.6432 8.2191 21.6913 8.29717 21.673 8.37504C21.2335 10.2464 20.7759 11.1188 20.234 11.1188Z" fill="#FA759E"/>
|
||||
<path d="M5.67451 8.26302C5.58717 8.26302 5.50794 8.20284 5.48707 8.11399C4.43696 3.6462 3.52019 2.97225 3.06363 2.97225C3.06161 2.97225 3.05958 2.97225 3.05776 2.97225C2.03541 2.98567 1.00151 6.12996 0.589942 8.10912C0.568258 8.21382 0.46572 8.28091 0.361763 8.25895C0.257401 8.2372 0.190528 8.13473 0.212211 8.02983C0.327719 7.47501 1.38816 2.60651 3.05269 2.58496H3.06404C4.08719 2.58496 5.00254 4.36447 5.86257 8.02495C5.88709 8.12884 5.82265 8.23333 5.7191 8.25793C5.7043 8.26139 5.68931 8.26302 5.67451 8.26302Z" fill="#0089EF"/>
|
||||
<path d="M16.3507 8.26302C16.2633 8.26302 16.1841 8.20284 16.163 8.11399C15.1131 3.6462 14.1964 2.97225 13.7398 2.97225C13.7378 2.97225 13.7357 2.97225 13.7337 2.97225C12.7116 2.98567 11.6779 6.12996 11.2661 8.10912C11.2442 8.21382 11.1419 8.28091 11.0379 8.25895C10.9336 8.2372 10.8667 8.13473 10.8882 8.02983C11.0039 7.47501 12.0641 2.60651 13.7286 2.58496H13.74C14.7627 2.58496 15.6781 4.36447 16.5385 8.02495C16.563 8.12884 16.4986 8.23333 16.3951 8.25793C16.3805 8.26139 16.3655 8.26302 16.3507 8.26302Z" fill="#0089EF"/>
|
||||
<path d="M8.46634 13.838C8.46269 13.838 8.45884 13.838 8.45499 13.838C6.79046 13.8164 5.73002 8.94794 5.61431 8.39292C5.59263 8.28843 5.6595 8.18576 5.76406 8.164C5.86802 8.14205 5.97056 8.20934 5.99224 8.31384C6.40422 10.2928 7.43832 13.4375 8.45985 13.4505H8.46593C8.9227 13.4505 9.83926 12.777 10.8892 8.30896C10.9137 8.20507 11.0178 8.14123 11.1212 8.16482C11.2249 8.18942 11.2892 8.29371 11.2647 8.3978C10.4046 12.0583 9.48909 13.838 8.46634 13.838Z" fill="#0089EF"/>
|
||||
<path d="M19.014 13.6947C19.0103 13.6947 19.0065 13.6947 19.0026 13.6947C17.3381 13.6729 16.2776 8.80464 16.1619 8.24963C16.1402 8.14513 16.2069 8.04246 16.3117 8.0205C16.416 7.99875 16.518 8.06604 16.5399 8.17054C16.9518 10.1495 17.9859 13.294 19.0075 13.3072H19.0135C19.4703 13.3072 20.3869 12.6335 21.4368 8.16546C21.4613 8.06157 21.5655 7.99794 21.6688 8.02152C21.7726 8.04592 21.837 8.15021 21.8123 8.2543C20.9523 11.9148 20.0367 13.6947 19.014 13.6947Z" fill="#0089EF"/>
|
||||
<path d="M21.4731 0H0.622526C0.279245 0 0 0.280152 0 0.624547V15.7991C0 16.1435 0.279245 16.4236 0.622526 16.4236H21.4731C21.8162 16.4236 22.0956 16.1435 22.0956 15.7991V6.08324C22.0956 5.96817 22.0026 5.87506 21.8881 5.87506C21.7734 5.87506 21.6806 5.96817 21.6806 6.08324V8.00323H18.0263C17.7882 6.70921 16.7602 1.48066 15.5275 0.416365H21.4731C21.5874 0.416365 21.6806 0.509681 21.6806 0.624547V2.90866C21.6806 3.02373 21.7734 3.11684 21.8881 3.11684C22.0026 3.11684 22.0956 3.02373 22.0956 2.90866V0.624547C22.0956 0.279949 21.8164 0 21.4731 0ZM17.6453 8.4196C17.94 9.69594 19.2156 14.9412 20.4964 16.0071H9.63335C10.8664 14.9428 11.8945 9.71342 12.1324 8.4196H17.6453ZM9.20192 15.7828C8.47685 15.7828 7.18702 12.0658 6.33874 8.4196H11.7101C11.0348 12.0642 9.92273 15.7828 9.20192 15.7828ZM5.80943 8.00323H0.438119C1.11576 4.35902 2.23011 0.640405 2.95072 0.640405C3.67558 0.640405 4.96319 4.3574 5.80943 8.00323ZM0.622526 0.416365H2.51908C1.64751 1.16899 0.876441 4.00121 0.415017 6.0564V0.624547C0.415017 0.509681 0.508032 0.416365 0.622526 0.416365ZM0.415017 15.7989V8.4196H5.91258C6.20723 9.69594 7.48288 14.9412 8.7636 16.0071H0.622526C0.508032 16.0071 0.415017 15.9138 0.415017 15.7989ZM21.4731 16.0071H21.3939C21.4934 15.9217 21.5902 15.8062 21.6806 15.6543V15.7989C21.6806 15.9138 21.5874 16.0071 21.4731 16.0071ZM21.6806 14.2969C21.5136 15.3866 21.1434 15.7828 20.9347 15.7828C20.2096 15.7828 18.9198 12.0658 18.0715 8.4196H21.6802V14.2969H21.6806ZM17.604 8.00323H12.2329C13.081 4.3574 14.3708 0.640405 15.0959 0.640405C15.8167 0.640405 16.9288 4.35902 17.604 8.00323ZM11.8065 8.00323H6.2356C5.94156 6.72629 4.66915 1.48249 3.38944 0.416365H14.6569C13.3768 1.48269 12.1014 6.72669 11.8065 8.00323Z" fill="#3A2C60"/>
|
||||
<path d="M21.8882 3.50696C21.7735 3.50696 21.6807 3.60007 21.6807 3.71514V5.22446C21.6807 5.33953 21.7735 5.43265 21.8882 5.43265C22.0027 5.43265 22.0957 5.33953 22.0957 5.22446V3.71514C22.0957 3.60027 22.0027 3.50696 21.8882 3.50696Z" fill="#3A2C60"/>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
@ -1,9 +0,0 @@
|
||||
<svg width="20" height="18" viewBox="0 0 20 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M15.8441 3.32657C15.4204 3.32657 14.9979 3.39203 14.5952 3.51852C14.2801 2.62024 13.7254 1.81458 12.9921 1.20255C12.0627 0.427094 10.8871 0 9.68155 0C7.00439 0 4.79218 2.05658 4.50089 4.6936H3.42758C1.53763 4.69376 0 6.25137 0 8.16605C0 10.0807 1.53763 11.6383 3.42758 11.6383H15.9355C16.2102 11.6383 16.4848 11.6048 16.7523 11.5384C17.6587 11.3362 18.4818 10.8263 19.0706 10.1021C19.67 9.36462 20 8.43445 20 7.4826C20 5.19089 18.1357 3.32657 15.8441 3.32657Z" fill="#DEFAFA"/>
|
||||
<path d="M15.8442 3.32657C15.4205 3.32657 14.998 3.39203 14.5953 3.51852C14.2802 2.62024 13.7255 1.81458 12.9922 1.20255C12.0628 0.427094 10.8872 0 9.68164 0V11.6383H15.9356C16.2101 11.6383 16.4849 11.6046 16.7524 11.5384C17.6588 11.3361 18.4818 10.8263 19.0705 10.1019C19.67 9.36462 20.0001 8.4343 20.0001 7.48245C20.0001 5.19089 18.1358 3.32657 15.8442 3.32657Z" fill="#B5EFFF"/>
|
||||
<path d="M12.8419 5.28036H11.6572C11.6572 4.19104 10.771 3.30481 9.68164 3.30481V2.12012C11.4242 2.12012 12.8419 3.53781 12.8419 5.28036Z" fill="#80DBFF"/>
|
||||
<path d="M2.49023 13.3135H17.3099V14.498H2.49023V13.3135Z" fill="#B5EFFF"/>
|
||||
<path d="M2.49023 16.0059H17.3099V17.1906H2.49023V16.0059Z" fill="#B5EFFF"/>
|
||||
<path d="M9.68164 16.0059H17.3101V17.1906H9.68164V16.0059Z" fill="#80DBFF"/>
|
||||
<path d="M9.68164 13.3135H17.3101V14.498H9.68164V13.3135Z" fill="#80DBFF"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,4 +0,0 @@
|
||||
<svg width="15" height="20" viewBox="0 0 15 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.3259 0.768152C6.06762 1.05318 0 7.80822 0 12.978C0 16.8499 3.15008 20 7.02203 20L8.59528 12.4218L7.02209 0L6.3259 0.768152Z" fill="#A7EAF9"/>
|
||||
<path d="M7.71761 0.768152L7.02148 0V20C10.8934 20 14.0435 16.8499 14.0435 12.978C14.0435 7.80822 7.9759 1.05318 7.71761 0.768152Z" fill="#72BBFF"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 406 B |
3
assets/icons/power_active_icon.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="13" height="23" viewBox="0 0 13 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M3.95088 0L0.141105 11.2883H4.3742L0 23L11.5706 9.17177H7.47851L12.8404 0H3.95088Z" fill="#F7CF52"/>
|
||||
</svg>
|
After Width: | Height: | Size: 213 B |
43
assets/icons/power_clamp.svg
Normal file
@ -0,0 +1,43 @@
|
||||
<svg width="37" height="40" viewBox="0 0 37 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M29.7686 39.9196H7.39439C6.50537 39.9196 5.78473 39.1989 5.78473 38.3099V28.9739L18.5413 29.0544L31.3783 28.9739L31.4588 30.1006V38.3904C31.4588 38.5295 31.4411 38.6645 31.4079 38.7933C31.2291 39.4873 30.5185 39.9196 29.7686 39.9196Z" fill="#8D9CA8"/>
|
||||
<path d="M31.4588 30.1006V28.8933L18.6217 28.6921L5.70422 28.8933V38.3903C5.70422 39.2793 6.42487 40 7.31388 40H29.8491C30.5989 40 31.227 39.4866 31.406 38.7927H7.7163C7.27179 38.7927 6.91147 38.4324 6.91147 37.9879V30.9054C6.91147 30.4609 7.27179 30.1006 7.7163 30.1006H31.4588Z" fill="#7A8C98"/>
|
||||
<path d="M16.0865 36.7002H15.4426C14.9981 36.7002 14.6378 36.3399 14.6378 35.8954V28.9739H16.8913L16.9718 30.1006V35.5735L16.8913 35.8954C16.8913 36.3399 16.531 36.7002 16.0865 36.7002Z" fill="#CCF49F"/>
|
||||
<path d="M10.4527 36.7002H9.80886C9.36435 36.7002 9.00403 36.3399 9.00403 35.8954V28.9739H11.2575L11.338 30.1006V35.5735L11.2575 35.8954C11.2575 36.3399 10.8972 36.7002 10.4527 36.7002Z" fill="#CCF49F"/>
|
||||
<path d="M21.7203 36.7002H21.0764C20.6319 36.7002 20.2716 36.3399 20.2716 35.8954V28.9739H22.5251L22.6056 30.1006V35.5735L22.5251 35.8954C22.5251 36.3399 22.1648 36.7002 21.7203 36.7002Z" fill="#CCF49F"/>
|
||||
<path d="M27.3541 36.7002H26.7102C26.2657 36.7002 25.9054 36.3399 25.9054 35.8954V28.9739H28.1589L28.2394 30.1006V35.5735L28.1589 35.8954C28.1589 36.3399 27.7986 36.7002 27.3541 36.7002Z" fill="#CCF49F"/>
|
||||
<path d="M16.9718 30.1005V28.8933L15.7646 28.6519L14.5573 28.8933V35.9758C14.5573 36.4203 14.9176 36.7806 15.3621 36.7806H16.167C16.6115 36.7806 16.9718 36.4203 16.9718 35.9758V35.5734H16.006C15.8726 35.5734 15.7646 35.4653 15.7646 35.3319V30.342C15.7646 30.2086 15.8726 30.1005 16.006 30.1005H16.9718Z" fill="#B3E59F"/>
|
||||
<path d="M11.338 30.1005V28.8933L10.1308 28.6519L8.92352 28.8933V35.9758C8.92352 36.4203 9.28384 36.7806 9.72835 36.7806H10.5332C10.9777 36.7806 11.338 36.4203 11.338 35.9758V35.5734H10.3722C10.2389 35.5734 10.1308 35.4653 10.1308 35.3319V30.342C10.1308 30.2086 10.2389 30.1005 10.3722 30.1005H11.338Z" fill="#B3E59F"/>
|
||||
<path d="M22.6056 30.1005V28.8933L21.3984 28.6519L20.1912 28.8933V35.9758C20.1912 36.4203 20.5515 36.7806 20.996 36.7806H21.8008C22.2453 36.7806 22.6056 36.4203 22.6056 35.9758V35.5734H21.6399C21.5065 35.5734 21.3984 35.4653 21.3984 35.3319V30.342C21.3984 30.2086 21.5065 30.1005 21.6399 30.1005H22.6056Z" fill="#B3E59F"/>
|
||||
<path d="M28.2394 30.1005V28.8933L27.0322 28.6519L25.825 28.8933V35.9758C25.825 36.4203 26.1853 36.7806 26.6298 36.7806H27.4346C27.8791 36.7806 28.2394 36.4203 28.2394 35.9758V35.5734H27.2736C27.1403 35.5734 27.0322 35.4653 27.0322 35.3319V30.342C27.0322 30.2086 27.1403 30.1005 27.2736 30.1005H28.2394Z" fill="#B3E59F"/>
|
||||
<path d="M28.2394 31.3079H9.32592L9.00399 31.3883C8.55948 31.3883 8.19916 31.7487 8.19916 32.1932V32.837C8.19916 33.2815 8.55948 33.6419 9.00399 33.6419H28.1589C28.6034 33.6419 28.9637 33.2815 28.9637 32.837L29.0442 32.5151V32.1127C29.0442 31.6682 28.6839 31.3079 28.2394 31.3079Z" fill="#B6C4CF"/>
|
||||
<path d="M9.56741 32.5151C9.43405 32.5151 9.32596 32.407 9.32596 32.2737V31.3079H8.92354C8.47904 31.3079 8.11871 31.6682 8.11871 32.1127V32.9175C8.11871 33.362 8.47904 33.7223 8.92354 33.7223H28.2394C28.6839 33.7223 29.0443 33.362 29.0443 32.9175V32.5151H9.56741Z" fill="#9FACBA"/>
|
||||
<path d="M33.7123 28.8129H3.37024C2.03672 28.8129 0.95575 27.7319 0.95575 26.3984V2.49497C0.95575 1.60145 1.36066 0.740765 2.08219 0.323219C2.43736 0.117666 2.84983 0 3.28975 0H33.7928C35.1263 0 36.2073 1.08097 36.2073 2.41449V26.4789C36.2073 26.9188 36.0896 27.3313 35.884 27.6864C35.4665 28.408 34.6058 28.8129 33.7123 28.8129Z" fill="#B6C4CF"/>
|
||||
<path d="M3.48498 27.6861C2.71042 27.6861 2.08249 27.0581 2.08249 26.2836V0.32373C1.36104 0.741276 0.875244 1.52091 0.875244 2.41443V26.4788C0.875244 27.8123 1.95621 28.8933 3.28973 28.8933H33.7928C34.6863 28.8933 35.4659 28.4075 35.8835 27.6861H3.48498Z" fill="#9FACBA"/>
|
||||
<path d="M32.9075 26.3983H4.17507C3.73056 26.3983 3.37024 26.038 3.37024 25.5935V3.29974C3.37024 2.85523 3.73056 2.49491 4.17507 2.49491L4.497 2.41443H32.9879C33.4325 2.41443 33.7928 2.77475 33.7928 3.21926V25.2716L33.7123 25.5935C33.7123 26.038 33.352 26.3983 32.9075 26.3983Z" fill="#F8F7F7"/>
|
||||
<path d="M4.89939 25.2716C4.67718 25.2716 4.49698 25.0914 4.49698 24.8692V2.41443H4.09456C3.65006 2.41443 3.28973 2.77475 3.28973 3.21926V25.674C3.28973 26.1185 3.65006 26.4788 4.09456 26.4788H32.9879C33.4324 26.4788 33.7928 26.1185 33.7928 25.674V25.2716H4.89939Z" fill="#E8E8E8"/>
|
||||
<path d="M29.4467 17.7062H7.71634C7.04962 17.7062 6.50909 17.1657 6.50909 16.4989V13.2796C6.50909 12.6129 7.04962 12.0724 7.71634 12.0724H29.4467C30.1134 12.0724 30.654 12.6129 30.654 13.2796V16.4989C30.654 17.1657 30.1134 17.7062 29.4467 17.7062Z" fill="#B6C4CF"/>
|
||||
<path d="M29.4467 11.4689H7.71632C6.71777 11.4689 5.90546 12.2812 5.90546 13.2797V16.4991C5.90546 17.4976 6.71777 18.3099 7.71632 18.3099H29.4467C30.4453 18.3099 31.2576 17.4976 31.2576 16.4991V13.2797C31.2576 12.2812 30.4453 11.4689 29.4467 11.4689ZM17.3743 12.6761H19.7888C20.1221 12.6761 20.3924 12.9464 20.3924 13.2797V16.4991C20.3924 16.8324 20.1221 17.1027 19.7888 17.1027H17.3743C17.0409 17.1027 16.7706 16.8324 16.7706 16.4991V13.2797C16.7706 12.9464 17.0409 12.6761 17.3743 12.6761ZM14.9598 17.1027H12.5453C12.2119 17.1027 11.9417 16.8324 11.9417 16.4991V13.2797C11.9417 12.9464 12.2119 12.6761 12.5453 12.6761H14.9598C15.2931 12.6761 15.5634 12.9464 15.5634 13.2797V16.4991C15.5634 16.8324 15.2931 17.1027 14.9598 17.1027ZM22.2032 12.6761H24.6177C24.9511 12.6761 25.2214 12.9464 25.2214 13.2797V16.4991C25.2214 16.8324 24.9511 17.1027 24.6177 17.1027H22.2032C21.8699 17.1027 21.5996 16.8324 21.5996 16.4991V13.2797C21.5996 12.9464 21.8699 12.6761 22.2032 12.6761ZM7.1127 16.4991V13.2797C7.1127 12.9464 7.38296 12.6761 7.71632 12.6761H10.1308C10.4642 12.6761 10.7344 12.9464 10.7344 13.2797V16.4991C10.7344 16.8324 10.4642 17.1027 10.1308 17.1027H7.71632C7.38296 17.1027 7.1127 16.8324 7.1127 16.4991ZM30.0503 16.4991C30.0503 16.8324 29.7801 17.1027 29.4467 17.1027H27.0322C26.6989 17.1027 26.4286 16.8324 26.4286 16.4991V13.2797C26.4286 12.9464 26.6989 12.6761 27.0322 12.6761H29.4467C29.7801 12.6761 30.0503 12.9464 30.0503 13.2797V16.4991Z" fill="#9FACBA"/>
|
||||
<path d="M14.5573 10.2616H12.9477C12.6143 10.2616 12.3441 9.9913 12.3441 9.65794C12.3441 9.32458 12.6143 9.05432 12.9477 9.05432H14.5573C14.8907 9.05432 15.161 9.32458 15.161 9.65794C15.161 9.9913 14.8907 10.2616 14.5573 10.2616Z" fill="#E8E8E8"/>
|
||||
<path d="M19.3863 10.2616H17.7767C17.4433 10.2616 17.173 9.9913 17.173 9.65794C17.173 9.32458 17.4433 9.05432 17.7767 9.05432H19.3863C19.7197 9.05432 19.9899 9.32458 19.9899 9.65794C19.9899 9.9913 19.7197 10.2616 19.3863 10.2616Z" fill="#E8E8E8"/>
|
||||
<path d="M24.2153 10.2616H22.6056C22.2723 10.2616 22.002 9.9913 22.002 9.65794C22.002 9.32458 22.2723 9.05432 22.6056 9.05432H24.2153C24.5487 9.05432 24.8189 9.32458 24.8189 9.65794C24.8189 9.9913 24.5487 10.2616 24.2153 10.2616Z" fill="#E8E8E8"/>
|
||||
<path d="M29.0443 10.2616H27.4346C27.1013 10.2616 26.831 9.9913 26.831 9.65794C26.831 9.32458 27.1013 9.05432 27.4346 9.05432H29.0443C29.3776 9.05432 29.6479 9.32458 29.6479 9.65794C29.6479 9.9913 29.3776 10.2616 29.0443 10.2616Z" fill="#E8E8E8"/>
|
||||
<path d="M9.72836 10.2616H8.1187C7.78534 10.2616 7.51508 9.9913 7.51508 9.65794C7.51508 9.32458 7.78534 9.05432 8.1187 9.05432H9.72836C10.0617 9.05432 10.332 9.32458 10.332 9.65794C10.332 9.9913 10.0617 10.2616 9.72836 10.2616Z" fill="#E8E8E8"/>
|
||||
<path d="M19.7887 22.1328C19.7887 21.4661 19.2482 20.9255 18.5815 20.9255C18.4152 20.9255 18.2567 20.9592 18.1126 21.0199C17.6787 21.203 17.4547 21.6323 17.4547 22.1328C17.4547 22.7995 17.9148 23.2595 18.5815 23.2595C19.0815 23.2595 19.5106 23.036 19.6938 22.6027C19.7549 22.4583 19.7887 22.2995 19.7887 22.1328Z" fill="#DF646E"/>
|
||||
<path d="M14.9597 22.1328C14.9597 21.4661 14.4192 20.9255 13.7525 20.9255C13.5862 20.9255 13.4277 20.9592 13.2836 21.0199C12.8497 21.203 12.6257 21.6323 12.6257 22.1328C12.6257 22.7995 13.0858 23.2595 13.7525 23.2595C14.2525 23.2595 14.6816 23.036 14.8648 22.6027C14.9259 22.4583 14.9597 22.2995 14.9597 22.1328Z" fill="#DF646E"/>
|
||||
<path d="M10.1308 22.1328C10.1308 21.4661 9.59023 20.9255 8.92351 20.9255C8.75724 20.9255 8.59877 20.9592 8.45462 21.0199C8.02074 21.203 7.79675 21.6323 7.79675 22.1328C7.79675 22.7995 8.25679 23.2595 8.92351 23.2595C9.42355 23.2595 9.85261 23.036 10.0359 22.6027C10.097 22.4583 10.1308 22.2995 10.1308 22.1328Z" fill="#DF646E"/>
|
||||
<path d="M24.6177 22.1328C24.6177 21.4661 24.0772 20.9255 23.4105 20.9255C23.2442 20.9255 23.0857 20.9592 22.9416 21.0199C22.5077 21.203 22.2837 21.6323 22.2837 22.1328C22.2837 22.7995 22.7437 23.2595 23.4105 23.2595C23.9105 23.2595 24.3395 23.036 24.5228 22.6027C24.5839 22.4583 24.6177 22.2995 24.6177 22.1328Z" fill="#DF646E"/>
|
||||
<path d="M29.4467 22.1328C29.4467 21.4661 28.9062 20.9255 28.2394 20.9255C28.0732 20.9255 27.9147 20.9592 27.7705 21.0199C27.3367 21.203 27.1127 21.6323 27.1127 22.1328C27.1127 22.7995 27.5727 23.2595 28.2394 23.2595C28.7395 23.2595 29.1685 23.036 29.3518 22.6027C29.4129 22.4583 29.4467 22.2995 29.4467 22.1328Z" fill="#DF646E"/>
|
||||
<path d="M19.2254 22.6962C18.5587 22.6962 18.0181 22.1556 18.0181 21.4889C18.0181 21.3226 18.0518 21.1642 18.1126 21.02C17.6788 21.203 17.3743 21.6323 17.3743 22.1328C17.3743 22.7995 17.9148 23.34 18.5815 23.34C19.082 23.34 19.5112 23.0355 19.6943 22.6017C19.5501 22.6625 19.3917 22.6962 19.2254 22.6962Z" fill="#DC4955"/>
|
||||
<path d="M14.3964 22.6962C13.7297 22.6962 13.1892 22.1556 13.1892 21.4889C13.1892 21.3226 13.2228 21.1642 13.2836 21.02C12.8498 21.203 12.5453 21.6323 12.5453 22.1328C12.5453 22.7995 13.0858 23.34 13.7525 23.34C14.253 23.34 14.6823 23.0355 14.8653 22.6017C14.7211 22.6625 14.5627 22.6962 14.3964 22.6962Z" fill="#DC4955"/>
|
||||
<path d="M9.56742 22.6962C8.90069 22.6962 8.36017 22.1556 8.36017 21.4889C8.36017 21.3226 8.39381 21.1642 8.45466 21.02C8.02086 21.203 7.71631 21.6323 7.71631 22.1328C7.71631 22.7995 8.25683 23.34 8.92355 23.34C9.42399 23.34 9.85329 23.0355 10.0363 22.6017C9.89216 22.6625 9.73369 22.6962 9.56742 22.6962Z" fill="#DC4955"/>
|
||||
<path d="M24.0544 22.6962C23.3876 22.6962 22.8471 22.1556 22.8471 21.4889C22.8471 21.3226 22.8808 21.1642 22.9416 21.02C22.5078 21.203 22.2032 21.6323 22.2032 22.1328C22.2032 22.7995 22.7438 23.34 23.4105 23.34C23.9109 23.34 24.3402 23.0355 24.5232 22.6017C24.3791 22.6625 24.2206 22.6962 24.0544 22.6962Z" fill="#DC4955"/>
|
||||
<path d="M28.8833 22.6962C28.2166 22.6962 27.676 22.1556 27.676 21.4889C27.676 21.3226 27.7097 21.1642 27.7705 21.02C27.3367 21.203 27.0322 21.6323 27.0322 22.1328C27.0322 22.7995 27.5727 23.34 28.2394 23.34C28.7399 23.34 29.1691 23.0355 29.3522 22.6017C29.208 22.6625 29.0495 22.6962 28.8833 22.6962Z" fill="#DC4955"/>
|
||||
<path d="M19.4668 6.63986H16.006C15.6727 6.63986 15.4024 6.3696 15.4024 6.03624C15.4024 5.70288 15.6727 5.43262 16.006 5.43262H19.4668C19.8002 5.43262 20.0704 5.70288 20.0704 6.03624C20.0704 6.3696 19.8002 6.63986 19.4668 6.63986Z" fill="#E8E8E8"/>
|
||||
<path d="M13.5915 6.63986H7.71629C7.38293 6.63986 7.11267 6.3696 7.11267 6.03624C7.11267 5.70288 7.38293 5.43262 7.71629 5.43262H13.5915C13.9249 5.43262 14.1952 5.70288 14.1952 6.03624C14.1952 6.3696 13.9249 6.63986 13.5915 6.63986Z" fill="#E8E8E8"/>
|
||||
<path d="M30.4125 4.82898H28.4809C28.3475 4.82898 28.2394 4.93707 28.2394 5.07043V7.00202C28.2394 7.13538 28.3475 7.24347 28.4809 7.24347H30.4125C30.5458 7.24347 30.6539 7.13538 30.6539 7.00202V5.07043C30.6539 4.93707 30.5458 4.82898 30.4125 4.82898Z" fill="#B6C4CF"/>
|
||||
<path d="M8.92351 15.8954C8.59015 15.8954 8.31989 15.6251 8.31989 15.2918V14.4869C8.31989 14.1536 8.59015 13.8833 8.92351 13.8833C9.25687 13.8833 9.52713 14.1536 9.52713 14.4869V15.2918C9.52713 15.6251 9.25687 15.8954 8.92351 15.8954Z" fill="#9FACBA"/>
|
||||
<path d="M13.7525 15.8954C13.4191 15.8954 13.1489 15.6251 13.1489 15.2918V14.4869C13.1489 14.1536 13.4191 13.8833 13.7525 13.8833C14.0858 13.8833 14.3561 14.1536 14.3561 14.4869V15.2918C14.3561 15.6251 14.0858 15.8954 13.7525 15.8954Z" fill="#9FACBA"/>
|
||||
<path d="M18.5815 15.8954C18.2481 15.8954 17.9778 15.6251 17.9778 15.2918V14.4869C17.9778 14.1536 18.2481 13.8833 18.5815 13.8833C18.9148 13.8833 19.1851 14.1536 19.1851 14.4869V15.2918C19.1851 15.6251 18.9148 15.8954 18.5815 15.8954Z" fill="#9FACBA"/>
|
||||
<path d="M23.4104 15.8954C23.0771 15.8954 22.8068 15.6251 22.8068 15.2918V14.4869C22.8068 14.1536 23.0771 13.8833 23.4104 13.8833C23.7438 13.8833 24.0141 14.1536 24.0141 14.4869V15.2918C24.0141 15.6251 23.7438 15.8954 23.4104 15.8954Z" fill="#9FACBA"/>
|
||||
<path d="M28.2394 15.8954C27.9061 15.8954 27.6358 15.6251 27.6358 15.2918V14.4869C27.6358 14.1536 27.9061 13.8833 28.2394 13.8833C28.5728 13.8833 28.843 14.1536 28.843 14.4869V15.2918C28.843 15.6251 28.5728 15.8954 28.2394 15.8954Z" fill="#9FACBA"/>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
@ -1,23 +0,0 @@
|
||||
<svg width="20" height="17" viewBox="0 0 20 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.5125 10.8906C11.3376 11.2934 10.9552 11.4076 10.6094 11.2579C10.2637 11.1081 10.0857 10.7512 10.2605 10.3484C10.3993 10.0284 10.9923 9.74323 11.2303 9.63948C11.2848 9.61573 11.3475 9.64287 11.3674 9.69881C11.4542 9.9433 11.6513 10.5706 11.5125 10.8906Z" fill="#62DBFB"/>
|
||||
<path d="M16.7195 6.23104C16.6435 6.23104 16.5683 6.23409 16.4937 6.23936C16.4563 6.24202 16.4245 6.2137 16.4227 6.17628C16.3346 4.43218 14.8946 3.04495 13.1299 3.04495C12.9606 3.04495 12.7946 3.05843 12.6323 3.0832C12.5973 3.08855 12.564 3.06824 12.5527 3.03468C11.9613 1.27086 10.2964 0 8.33467 0C5.8778 0 3.93206 1.99355 3.88616 4.45171C3.88573 4.47378 3.88874 4.49065 3.8721 4.4937C2.85863 4.70288 2.11121 5.59784 2.11121 6.67401C2.11121 6.8626 2.13504 7.04557 2.17918 7.22049C2.18453 7.2417 2.17171 7.2628 2.15046 7.26788C0.917303 7.56147 0 8.67018 0 9.99393C0 11.5419 1.25398 12.7968 2.80081 12.7968H16.7195C18.5313 12.7968 20 11.327 20 9.51393C20 7.70088 18.5312 6.23104 16.7195 6.23104Z" fill="#EAF9FA"/>
|
||||
<path d="M7.80371 8.20881C7.80371 8.20881 10.4632 6.20752 13.3548 8.98549C13.4109 9.03935 13.5034 8.989 13.4883 8.91271C13.3508 8.21631 12.3918 6.17045 9.99968 6.3985C8.33789 6.5569 7.80371 8.20881 7.80371 8.20881Z" fill="#D4F2F6"/>
|
||||
<path d="M16.7197 6.23104C16.6438 6.23104 16.5686 6.23409 16.494 6.23936C16.4566 6.24202 16.4248 6.2137 16.4229 6.17628C16.3349 4.43218 14.8949 3.04495 13.1302 3.04495C12.9609 3.04495 12.7949 3.05843 12.6326 3.0832C12.5976 3.08855 12.5642 3.06824 12.553 3.03468C11.9616 1.27086 10.2967 0 8.33496 0C7.84207 0 7.36793 0.0803904 6.9248 0.228515C6.92805 0.228515 6.93129 0.228398 6.93453 0.228398C8.91781 0.228398 11.2847 1.44547 11.6892 3.89534C11.8033 4.44554 12.6123 4.75683 12.7835 4.83999C12.8574 4.54843 12.8822 4.1237 12.7835 3.56316C14.0744 3.61378 15.334 5.98053 15.1079 6.65417C15.6208 6.39842 15.8063 6.33323 15.9055 6.33323C17.7173 6.33323 18.5999 7.92924 18.5999 9.74228C18.5999 11.1306 17.7383 12.3168 16.5213 12.7968H16.7198C18.5316 12.7968 20.0003 11.327 20.0003 9.51393C20.0003 7.70088 18.5315 6.23104 16.7197 6.23104Z" fill="#D4F2F6"/>
|
||||
<path d="M5.34296 8.88222C5.30507 8.89863 5.26562 8.90644 5.22695 8.90644C5.11367 8.90644 5.00546 8.84003 4.95781 8.72949C4.56015 7.80996 3.65625 7.21582 2.65508 7.21582C2.48711 7.21582 2.31992 7.23223 2.15703 7.26504C2.17422 7.25762 2.18398 7.23848 2.1793 7.21973C2.13555 7.0459 2.11172 6.86465 2.11133 6.67754C2.29023 6.6459 2.47227 6.62988 2.65508 6.62988C3.88984 6.62988 5.00507 7.36269 5.4957 8.49707C5.55976 8.6455 5.4914 8.81777 5.34296 8.88222Z" fill="#CBE5E8"/>
|
||||
<path d="M16.4858 6.23848C15.9436 6.28926 15.4307 6.48457 14.9909 6.81035C14.9397 6.84824 14.8807 6.86699 14.8218 6.86816C14.7304 6.86972 14.6397 6.82871 14.5811 6.74941C14.4847 6.61933 14.512 6.43613 14.6421 6.33965C15.1487 5.96426 15.7358 5.7334 16.3565 5.66309C16.3917 5.82988 16.4139 6.00098 16.4229 6.17598C16.4249 6.21074 16.4526 6.2373 16.4858 6.23848Z" fill="#CBE5E8"/>
|
||||
<path d="M13.3189 4.24941C13.3189 4.41113 13.3107 4.57441 13.2943 4.73418C13.2791 4.88496 13.1518 4.99746 13.0033 4.99746C12.9936 4.99746 12.9834 4.99707 12.9732 4.99589C12.8123 4.97949 12.6951 4.83574 12.7115 4.6748C12.7256 4.53457 12.733 4.3916 12.733 4.24941C12.733 3.82637 12.6701 3.41113 12.5459 3.0127C12.5486 3.01973 12.551 3.02715 12.5533 3.03418C12.5646 3.06777 12.5979 3.08809 12.633 3.08301C12.7955 3.05801 12.9615 3.04473 13.1307 3.04473C13.142 3.04473 13.1533 3.04473 13.1646 3.04512C13.2674 3.43613 13.3189 3.83926 13.3189 4.24941Z" fill="#CBE5E8"/>
|
||||
<path d="M3.86211 5.94746C3.83398 5.95566 3.80586 5.95957 3.77773 5.95957C3.65195 5.95957 3.53516 5.87754 3.49727 5.75058C3.39453 5.40683 3.33125 5.05176 3.30859 4.69199C3.48359 4.60176 3.67266 4.53418 3.87187 4.49316C3.8832 4.49082 3.88555 4.48223 3.88555 4.46973C3.89297 4.84863 3.95117 5.22246 4.05859 5.58262C4.10508 5.73769 4.01719 5.90097 3.86211 5.94746Z" fill="#CBE5E8"/>
|
||||
<path d="M12.7671 7.16537C12.3661 6.70646 11.8424 6.37838 11.2526 6.2165C10.4528 5.99697 9.61537 6.10236 8.89479 6.5131C8.17416 6.92384 7.65655 7.59076 7.43725 8.39107C7.39448 8.54712 7.48635 8.70829 7.64237 8.75103C7.6683 8.75814 7.69436 8.76154 7.71995 8.76154C7.84869 8.76154 7.96666 8.67607 8.00233 8.54591C8.1803 7.89654 8.60026 7.35537 9.1849 7.02216C9.76951 6.689 10.4487 6.60353 11.0975 6.78154C11.576 6.91287 12.0008 7.17892 12.3259 7.55091C12.4324 7.67283 12.6174 7.68521 12.7393 7.57873C12.8611 7.47224 12.8736 7.2872 12.7671 7.16537Z" fill="#CBE5E8"/>
|
||||
<path d="M4.05227 15.6521C3.90973 15.5755 3.73211 15.6292 3.65563 15.7717L3.25364 16.5208C3.17712 16.6634 3.23067 16.841 3.37325 16.9175C3.41731 16.9412 3.46477 16.9524 3.51149 16.9524C3.61598 16.9524 3.71708 16.8964 3.76989 16.7979L4.17188 16.0488C4.24844 15.9062 4.19489 15.7286 4.05227 15.6521Z" fill="#62DBFB"/>
|
||||
<path d="M5.01707 13.8259C4.87442 13.7494 4.69692 13.803 4.62043 13.9455L4.21848 14.6947C4.14196 14.8373 4.19551 15.0148 4.33809 15.0914C4.38219 15.115 4.42961 15.1262 4.47633 15.1262C4.58083 15.1262 4.68192 15.0702 4.73473 14.9717L5.13668 14.2226C5.21321 14.08 5.15965 13.9024 5.01707 13.8259Z" fill="#62DBFB"/>
|
||||
<path d="M5.89309 15.6521C5.75059 15.5755 5.57293 15.6292 5.49645 15.7717L5.09446 16.5208C5.01794 16.6634 5.07149 16.841 5.21407 16.9175C5.25813 16.9412 5.30559 16.9524 5.35231 16.9524C5.4568 16.9524 5.5579 16.8964 5.61071 16.7979L6.0127 16.0488C6.08926 15.9062 6.03567 15.7286 5.89309 15.6521Z" fill="#62DBFB"/>
|
||||
<path d="M6.85793 13.8259C6.71543 13.7493 6.53778 13.803 6.46129 13.9455L6.0593 14.6947C5.98278 14.8372 6.03633 15.0148 6.17891 15.0913C6.22297 15.115 6.27043 15.1262 6.31715 15.1262C6.42165 15.1262 6.52274 15.0702 6.57555 14.9717L6.97754 14.2226C7.05411 14.08 7.00055 13.9024 6.85793 13.8259Z" fill="#62DBFB"/>
|
||||
<path d="M7.73485 15.652C7.59223 15.5756 7.41469 15.6292 7.33821 15.7717L6.93626 16.5208C6.85973 16.6634 6.91329 16.841 7.05586 16.9175C7.09997 16.9411 7.14739 16.9524 7.19411 16.9524C7.2986 16.9524 7.39969 16.8964 7.4525 16.7979L7.85446 16.0487C7.93098 15.9061 7.87743 15.7286 7.73485 15.652Z" fill="#62DBFB"/>
|
||||
<path d="M8.69969 13.8259C8.55704 13.7494 8.37954 13.803 8.30305 13.9455L7.9011 14.6947C7.82458 14.8373 7.87813 15.0148 8.02071 15.0914C8.06481 15.115 8.11223 15.1262 8.15895 15.1262C8.26344 15.1262 8.36454 15.0702 8.41735 14.9717L8.8193 14.2226C8.89586 14.08 8.84231 13.9024 8.69969 13.8259Z" fill="#62DBFB"/>
|
||||
<path d="M9.57571 15.6521C9.43317 15.5755 9.25555 15.6292 9.17907 15.7717L8.77708 16.5208C8.70055 16.6634 8.75411 16.841 8.89669 16.9175C8.94075 16.9412 8.98821 16.9524 9.03493 16.9524C9.13942 16.9524 9.24051 16.8964 9.29332 16.7979L9.69532 16.0488C9.77184 15.9062 9.71828 15.7286 9.57571 15.6521Z" fill="#62DBFB"/>
|
||||
<path d="M10.5405 13.8259C10.3979 13.7494 10.2204 13.803 10.1439 13.9455L9.74192 14.6947C9.6654 14.8373 9.71895 15.0148 9.86153 15.0914C9.90563 15.115 9.95305 15.1262 9.99977 15.1262C10.1043 15.1262 10.2054 15.0702 10.2582 14.9717L10.6601 14.2226C10.7366 14.08 10.6831 13.9024 10.5405 13.8259Z" fill="#62DBFB"/>
|
||||
<path d="M11.4165 15.652C11.2739 15.5756 11.0963 15.6292 11.0198 15.7717L10.6179 16.5208C10.5414 16.6634 10.5949 16.841 10.7375 16.9175C10.7816 16.9411 10.829 16.9524 10.8757 16.9524C10.9802 16.9524 11.0813 16.8964 11.1341 16.7979L11.5361 16.0487C11.6127 15.9061 11.5591 15.7286 11.4165 15.652Z" fill="#62DBFB"/>
|
||||
<path d="M12.3814 13.8259C12.2389 13.7493 12.0612 13.803 11.9847 13.9455L11.5827 14.6947C11.5062 14.8372 11.5598 15.0148 11.7023 15.0913C11.7464 15.115 11.7939 15.1262 11.8406 15.1262C11.9451 15.1262 12.0462 15.0702 12.099 14.9717L12.501 14.2226C12.5775 14.08 12.5239 13.9024 12.3814 13.8259Z" fill="#62DBFB"/>
|
||||
<path d="M8.03101 12.9297C7.8562 13.3325 7.47374 13.4467 7.128 13.2969C6.78226 13.1472 6.60421 12.7903 6.77902 12.3875C6.91788 12.0675 7.51089 11.7823 7.7489 11.6785C7.80335 11.6548 7.86605 11.6819 7.88593 11.7379C7.9728 11.9823 8.16987 12.6097 8.03101 12.9297Z" fill="#62DBFB"/>
|
||||
<path d="M14.8103 15.7187C14.6355 16.1215 14.253 16.2357 13.9073 16.086C13.5616 15.9363 13.3835 15.5794 13.5583 15.1765C13.6972 14.8565 14.2902 14.5714 14.5282 14.4676C14.5826 14.4439 14.6453 14.471 14.6652 14.5269C14.7521 14.7714 14.9492 15.3987 14.8103 15.7187Z" fill="#62DBFB"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 8.0 KiB |
@ -1,24 +0,0 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M3.77584 12.0301C3.64982 11.904 3.44568 11.904 3.31971 12.0301L3.22521 12.1246L3.13072 12.0301C3.00471 11.904 2.80057 11.904 2.67459 12.0301C2.54861 12.1561 2.54857 12.3602 2.67459 12.4862L2.76908 12.5807L2.67459 12.6752C2.54857 12.8012 2.54857 13.0053 2.67459 13.1313C2.7376 13.1943 2.82014 13.2258 2.90268 13.2258C2.98521 13.2258 3.06775 13.1943 3.13076 13.1313L3.22525 13.0368L3.31971 13.1313C3.38271 13.1944 3.46525 13.2258 3.54779 13.2258C3.63033 13.2258 3.71287 13.1944 3.77588 13.1313C3.90189 13.0053 3.90189 12.8012 3.77588 12.6752L3.68139 12.5807L3.77588 12.4862C3.90186 12.3602 3.90186 12.1561 3.77584 12.0301Z" fill="#C3DDFF"/>
|
||||
<path d="M7.00244 16.5467C6.87643 16.4206 6.67228 16.4206 6.54631 16.5467L6.45178 16.6412L6.35729 16.5467C6.23127 16.4206 6.02713 16.4206 5.90115 16.5467C5.77514 16.6727 5.77514 16.8768 5.90115 17.0028L5.99564 17.0973L5.90115 17.1918C5.77514 17.3178 5.77514 17.5219 5.90115 17.6479C5.96416 17.7109 6.0467 17.7424 6.12924 17.7424C6.21178 17.7424 6.29432 17.7109 6.35732 17.6479L6.45182 17.5534L6.54631 17.6479C6.60932 17.7109 6.69186 17.7424 6.77439 17.7424C6.85693 17.7424 6.93947 17.7109 7.00248 17.6479C7.1285 17.5219 7.1285 17.3178 7.00248 17.1918L6.90799 17.0973L7.00248 17.0028C7.12846 16.8768 7.12846 16.6726 7.00244 16.5467Z" fill="#C3DDFF"/>
|
||||
<path d="M5.16109 14.5159C5.16109 14.3378 5.0168 14.1934 4.83852 14.1934C4.6602 14.1934 4.51594 14.3378 4.51594 14.5159C4.33762 14.5159 4.19336 14.6604 4.19336 14.8385C4.19336 15.0166 4.33766 15.1611 4.51594 15.1611C4.51594 15.3392 4.66023 15.4837 4.83852 15.4837C5.01684 15.4837 5.16109 15.3392 5.16109 15.1611C5.33941 15.1611 5.48367 15.0166 5.48367 14.8385C5.48367 14.6604 5.33941 14.5159 5.16109 14.5159Z" fill="#DBEAFF"/>
|
||||
<path d="M8.38766 19.0325C8.38766 18.8544 8.24336 18.71 8.06508 18.71C7.8868 18.71 7.7425 18.8544 7.7425 19.0325C7.56418 19.0325 7.41992 19.177 7.41992 19.3551C7.41992 19.5332 7.56422 19.6777 7.7425 19.6777C7.7425 19.8558 7.8868 20.0003 8.06508 20.0003C8.24336 20.0003 8.38766 19.8558 8.38766 19.6777C8.56598 19.6777 8.71023 19.5332 8.71023 19.3551C8.71023 19.177 8.56594 19.0325 8.38766 19.0325Z" fill="#DBEAFF"/>
|
||||
<path d="M7.09664 12.2581C7.09664 12.08 6.95234 11.9355 6.77406 11.9355C6.59578 11.9355 6.45148 12.08 6.45148 12.2581C6.27316 12.2581 6.12891 12.4026 6.12891 12.5807C6.12891 12.7588 6.2732 12.9033 6.45148 12.9033C6.45148 13.0814 6.59578 13.2259 6.77406 13.2259C6.95234 13.2259 7.09664 13.0814 7.09664 12.9033C7.27496 12.9033 7.41922 12.7588 7.41922 12.5807C7.41922 12.4026 7.27496 12.2581 7.09664 12.2581Z" fill="#DBEAFF"/>
|
||||
<path d="M8.93795 14.2879C8.81193 14.1619 8.60779 14.1619 8.48182 14.2879L8.38732 14.3824L8.29283 14.2879C8.16682 14.1619 7.96268 14.1619 7.8367 14.2879C7.71068 14.4139 7.71068 14.618 7.8367 14.744L7.93119 14.8385L7.8367 14.933C7.71068 15.059 7.71068 15.2631 7.8367 15.3891C7.89971 15.4521 7.98225 15.4836 8.06479 15.4836C8.14732 15.4836 8.22986 15.4521 8.29287 15.3891L8.38736 15.2946L8.48186 15.3891C8.54486 15.4521 8.6274 15.4836 8.70994 15.4836C8.79248 15.4836 8.87502 15.4521 8.93803 15.3891C9.06404 15.2631 9.06404 15.059 8.93803 14.933L8.84354 14.8385L8.93803 14.744C9.06396 14.618 9.06396 14.4139 8.93795 14.2879Z" fill="#C3DDFF"/>
|
||||
<path d="M10.3222 16.7737C10.3222 16.5956 10.1779 16.4512 9.99965 16.4512C9.82137 16.4512 9.67707 16.5956 9.67707 16.7737C9.49875 16.7737 9.35449 16.9182 9.35449 17.0963C9.35449 17.2745 9.49879 17.4189 9.67707 17.4189C9.67707 17.597 9.82137 17.7415 9.99965 17.7415C10.1779 17.7415 10.3222 17.597 10.3222 17.4189C10.5005 17.4189 10.6448 17.2745 10.6448 17.0963C10.6448 16.9182 10.5005 16.7737 10.3222 16.7737Z" fill="#DBEAFF"/>
|
||||
<path d="M12.1635 18.8045C12.0375 18.6785 11.8334 18.6785 11.7074 18.8045L11.6129 18.899L11.5184 18.8045C11.3924 18.6785 11.1883 18.6785 11.0623 18.8045C10.9363 18.9305 10.9363 19.1346 11.0623 19.2606L11.1568 19.3551L11.0623 19.4496C10.9363 19.5756 10.9363 19.7797 11.0623 19.9057C11.1253 19.9687 11.2078 20.0002 11.2904 20.0002C11.3729 20.0002 11.4554 19.9687 11.5185 19.9057L11.6129 19.8112L11.7074 19.9057C11.7704 19.9687 11.853 20.0002 11.9355 20.0002C12.0181 20.0002 12.1006 19.9687 12.1636 19.9057C12.2896 19.7797 12.2896 19.5756 12.1636 19.4496L12.0691 19.3551L12.1636 19.2606C12.2896 19.1346 12.2896 18.9305 12.1635 18.8045Z" fill="#C3DDFF"/>
|
||||
<path d="M10.8735 12.6752L10.779 12.5807L10.8735 12.4862C10.9995 12.3602 10.9995 12.156 10.8735 12.0301C10.7475 11.904 10.5433 11.904 10.4174 12.0301L10.3229 12.1246L10.2284 12.0301C10.1024 11.904 9.89822 11.904 9.77225 12.0301C9.64623 12.1561 9.64623 12.3602 9.77225 12.4862L9.86674 12.5807L9.77225 12.6752C9.64623 12.8012 9.64623 13.0053 9.77225 13.1313C9.83525 13.1943 9.91779 13.2258 10.0003 13.2258C10.0829 13.2258 10.1654 13.1943 10.2284 13.1313L10.3229 13.0368L10.4174 13.1313C10.4804 13.1943 10.5629 13.2258 10.6455 13.2258C10.728 13.2258 10.8106 13.1943 10.8736 13.1313C10.9995 13.0053 10.9995 12.8012 10.8735 12.6752Z" fill="#C3DDFF"/>
|
||||
<path d="M14.0991 16.5467C13.9731 16.4206 13.7689 16.4206 13.6429 16.5467L13.5485 16.6412L13.454 16.5467C13.3279 16.4206 13.1238 16.4206 12.9978 16.5467C12.8718 16.6727 12.8718 16.8768 12.9978 17.0028L13.0923 17.0973L12.9978 17.1918C12.8718 17.3178 12.8718 17.5219 12.9978 17.6479C13.0608 17.7109 13.1434 17.7424 13.2259 17.7424C13.3085 17.7424 13.391 17.7109 13.454 17.6479L13.5485 17.5534L13.643 17.6479C13.706 17.7109 13.7885 17.7424 13.8711 17.7424C13.9536 17.7424 14.0362 17.7109 14.0992 17.6479C14.2252 17.5219 14.2252 17.3178 14.0992 17.1918L14.0047 17.0973L14.0992 17.0028C14.2251 16.8768 14.2251 16.6726 14.0991 16.5467Z" fill="#C3DDFF"/>
|
||||
<path d="M12.2578 14.5159C12.2578 14.3378 12.1135 14.1934 11.9352 14.1934C11.7569 14.1934 11.6126 14.3378 11.6126 14.5159C11.4343 14.5159 11.29 14.6604 11.29 14.8385C11.29 15.0166 11.4343 15.1611 11.6126 15.1611C11.6126 15.3392 11.7569 15.4837 11.9352 15.4837C12.1135 15.4837 12.2578 15.3392 12.2578 15.1611C12.4361 15.1611 12.5804 15.0166 12.5804 14.8385C12.5804 14.6604 12.4361 14.5159 12.2578 14.5159Z" fill="#DBEAFF"/>
|
||||
<path d="M15.4843 19.0325C15.4843 18.8544 15.34 18.71 15.1618 18.71C14.9835 18.71 14.8392 18.8544 14.8392 19.0325C14.6609 19.0325 14.5166 19.177 14.5166 19.3551C14.5166 19.5332 14.6609 19.6777 14.8392 19.6777C14.8392 19.8558 14.9835 20.0003 15.1618 20.0003C15.34 20.0003 15.4843 19.8558 15.4843 19.6777C15.6627 19.6777 15.8069 19.5332 15.8069 19.3551C15.8069 19.177 15.6627 19.0325 15.4843 19.0325Z" fill="#DBEAFF"/>
|
||||
<path d="M14.1933 12.2581C14.1933 12.08 14.049 11.9355 13.8707 11.9355C13.6925 11.9355 13.5482 12.08 13.5482 12.2581C13.3698 12.2581 13.2256 12.4026 13.2256 12.5807C13.2256 12.7588 13.3699 12.9033 13.5482 12.9033C13.5482 13.0814 13.6925 13.2259 13.8707 13.2259C14.049 13.2259 14.1933 13.0814 14.1933 12.9033C14.3716 12.9033 14.5159 12.7588 14.5159 12.5807C14.5159 12.4026 14.3716 12.2581 14.1933 12.2581Z" fill="#DBEAFF"/>
|
||||
<path d="M16.0346 14.2879C15.9086 14.1619 15.7045 14.1619 15.5785 14.2879L15.484 14.3824L15.3895 14.2879C15.2635 14.1619 15.0594 14.1619 14.9334 14.2879C14.8074 14.4139 14.8074 14.618 14.9334 14.744L15.0279 14.8385L14.9334 14.933C14.8074 15.059 14.8074 15.2631 14.9334 15.3891C14.9964 15.4521 15.0789 15.4836 15.1615 15.4836C15.244 15.4836 15.3265 15.4521 15.3896 15.3891L15.484 15.2946L15.5785 15.3891C15.6415 15.4521 15.7241 15.4836 15.8066 15.4836C15.8892 15.4836 15.9717 15.4521 16.0347 15.3891C16.1607 15.2631 16.1607 15.059 16.0347 14.933L15.9402 14.8385L16.0347 14.744C16.1606 14.618 16.1606 14.4139 16.0346 14.2879Z" fill="#C3DDFF"/>
|
||||
<path d="M17.4189 16.7737C17.4189 16.5956 17.2746 16.4512 17.0963 16.4512C16.918 16.4512 16.7737 16.5956 16.7737 16.7737C16.5954 16.7737 16.4512 16.9182 16.4512 17.0963C16.4512 17.2745 16.5955 17.4189 16.7737 17.4189C16.7737 17.597 16.918 17.7415 17.0963 17.7415C17.2746 17.7415 17.4189 17.597 17.4189 17.4189C17.5972 17.4189 17.7415 17.2745 17.7415 17.0963C17.7415 16.9182 17.5972 16.7737 17.4189 16.7737Z" fill="#DBEAFF"/>
|
||||
<path d="M19.2602 18.8045C19.1342 18.6785 18.9301 18.6785 18.8041 18.8045L18.7096 18.899L18.6151 18.8045C18.4891 18.6785 18.2849 18.6785 18.159 18.8045C18.0329 18.9305 18.0329 19.1346 18.159 19.2606L18.2535 19.3551L18.159 19.4496C18.0329 19.5756 18.0329 19.7797 18.159 19.9057C18.222 19.9687 18.3045 20.0002 18.3871 20.0002C18.4696 20.0002 18.5521 19.9687 18.6151 19.9057L18.7096 19.8112L18.8041 19.9057C18.8671 19.9687 18.9497 20.0002 19.0322 20.0002C19.1147 20.0002 19.1973 19.9687 19.2603 19.9057C19.3863 19.7797 19.3863 19.5756 19.2603 19.4496L19.1658 19.3551L19.2603 19.2606C19.3862 19.1346 19.3862 18.9305 19.2602 18.8045Z" fill="#C3DDFF"/>
|
||||
<path d="M17.9702 12.6752L17.8757 12.5807L17.9702 12.4862C18.0962 12.3602 18.0962 12.156 17.9702 12.0301C17.8442 11.9041 17.64 11.904 17.514 12.0301L17.4196 12.1246L17.3251 12.0301C17.199 11.904 16.9949 11.904 16.8689 12.0301C16.7429 12.1561 16.7429 12.3602 16.8689 12.4862L16.9634 12.5807L16.8689 12.6752C16.7429 12.8012 16.7429 13.0053 16.8689 13.1313C16.9319 13.1943 17.0145 13.2258 17.097 13.2258C17.1796 13.2258 17.2621 13.1943 17.3251 13.1313L17.4196 13.0368L17.5141 13.1313C17.5771 13.1943 17.6596 13.2258 17.7422 13.2258C17.8247 13.2258 17.9072 13.1943 17.9703 13.1313C18.0962 13.0053 18.0962 12.8012 17.9702 12.6752Z" fill="#C3DDFF"/>
|
||||
<path d="M19.3545 14.5159C19.3545 14.3378 19.2102 14.1934 19.0319 14.1934C18.8536 14.1934 18.7093 14.3378 18.7093 14.5159C18.531 14.5159 18.3867 14.6604 18.3867 14.8385C18.3867 15.0166 18.531 15.1611 18.7093 15.1611C18.7093 15.3392 18.8536 15.4837 19.0319 15.4837C19.2102 15.4837 19.3545 15.3392 19.3545 15.1611C19.5328 15.1611 19.677 15.0166 19.677 14.8385C19.677 14.6604 19.5327 14.5159 19.3545 14.5159Z" fill="#DBEAFF"/>
|
||||
<path d="M17.0968 4.51613C17.0314 4.51613 16.9675 4.52164 16.9032 4.5259C16.235 3.36453 14.9845 2.58066 13.5484 2.58066C13.1184 2.58066 12.7062 2.65367 12.3197 2.78305C11.4593 1.13039 9.73402 0 7.74195 0C5.10551 0 2.93484 1.97805 2.62305 4.53027C1.15117 4.67129 0 5.91051 0 7.41934C0 9.02273 1.2998 10.3226 2.90324 10.3226H17.0968C18.7002 10.3226 20 9.02273 20 7.41934C20 5.81594 18.7002 4.51613 17.0968 4.51613Z" fill="#DBEAFF"/>
|
||||
<path d="M9.03227 9.67742C6.35992 9.67742 4.19355 7.51105 4.19355 4.83871C4.19355 2.37824 6.03711 0.350195 8.41406 0.0435156C8.1957 0.0152734 7.96805 0 7.74195 0C5.10551 0 2.93484 1.97805 2.62305 4.53027C1.15117 4.67129 0 5.91051 0 7.41934C0 9.02273 1.2998 10.3226 2.90324 10.3226H17.0968C17.7876 10.3226 18.4233 10.0803 18.9218 9.67742H9.03227Z" fill="#C3DDFF"/>
|
||||
<path d="M12.7601 3.94703C12.7957 4.09477 12.9277 4.19402 13.0732 4.19402C13.0984 4.19402 13.1236 4.19117 13.1492 4.18504C13.3224 4.14328 13.4289 3.9691 13.387 3.79582C13.288 3.38469 13.1414 2.9941 12.9638 2.62598C12.7438 2.66016 12.5307 2.71328 12.3242 2.78219C12.5118 3.14543 12.6607 3.53453 12.7601 3.94703Z" fill="#C3DDFF"/>
|
||||
<path d="M17.658 4.57078C17.4758 4.53496 17.2889 4.5166 17.0962 4.5166C17.0317 4.5166 16.963 4.5218 16.8994 4.52598C17.1336 4.92883 17.2991 5.37672 17.3731 5.85621C17.3977 6.01562 17.535 6.12949 17.6916 6.12949C17.708 6.12949 17.7244 6.12824 17.7411 6.1257C17.9171 6.09844 18.0378 5.93371 18.0107 5.75762C17.946 5.33836 17.8248 4.93973 17.658 4.57078Z" fill="#C3DDFF"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 11 KiB |
16
assets/icons/speedo_meter.svg
Normal file
@ -0,0 +1,16 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12 24C8.8072 24 5.79717 22.7483 3.52439 20.4756C1.25166 18.2028 0 15.1928 0 12C0 8.8072 1.25166 5.79717 3.52444 3.52444C5.79717 1.25166 8.8072 0 12 0C15.1928 0 18.2028 1.25166 20.4756 3.52444C22.7483 5.79717 24 8.8072 24 12C24 15.1928 22.7483 18.2028 20.4756 20.4756C18.2028 22.7483 15.1928 24 12 24Z" fill="#EDF3F9"/>
|
||||
<path d="M20.4756 20.4756C22.7483 18.2028 24 15.1928 24 12C24 8.8072 22.7483 5.79717 20.4756 3.52444C18.2028 1.25166 15.1928 0 12 0V24C15.1928 24 18.2028 22.7483 20.4756 20.4756Z" fill="#C2DBF2"/>
|
||||
<path d="M12 22.5938C17.8508 22.5938 22.5938 17.8508 22.5938 12C22.5938 6.14923 17.8508 1.40625 12 1.40625C6.14923 1.40625 1.40625 6.14923 1.40625 12C1.40625 17.8508 6.14923 22.5938 12 22.5938Z" fill="#465A61"/>
|
||||
<path d="M22.5938 12C22.5938 6.15858 17.8414 1.40625 12 1.40625V22.5938C17.8414 22.5938 22.5938 17.8414 22.5938 12Z" fill="#3B4A51"/>
|
||||
<path d="M7.88953 9.29576C7.37672 10.072 7.07812 11.002 7.07812 12V12.7031H2.85938V12C2.85938 9.83717 3.61453 7.84779 4.87453 6.28076L7.88953 9.29576Z" fill="#F36A3D"/>
|
||||
<path d="M21.1408 12V12.7031H16.922V12C16.922 11.002 16.6234 10.072 16.1106 9.29576L19.1256 6.28076C20.3856 7.84779 21.1408 9.83717 21.1408 12Z" fill="#66A6FF"/>
|
||||
<path d="M19.1255 6.28078L16.1105 9.29578C15.2292 7.96078 13.7161 7.07812 12 7.07812V2.85938C14.8772 2.85938 17.4488 4.19578 19.1255 6.28078Z" fill="#FFDF40"/>
|
||||
<path d="M12 2.85938V7.07812C10.2839 7.07812 8.77076 7.96078 7.88951 9.29578L4.87451 6.28078C6.55123 4.19578 9.12279 2.85938 12 2.85938Z" fill="#FF9F40"/>
|
||||
<path d="M11.2969 8.48438H12.7031V14.8594H11.2969V8.48438Z" fill="#F36A3D"/>
|
||||
<path d="M12 8.48438H12.7031V14.8594H12V8.48438Z" fill="#EC4C36"/>
|
||||
<path d="M12 24C15.1066 24 17.625 21.4816 17.625 18.375C17.625 15.2684 15.1066 12.75 12 12.75C8.8934 12.75 6.375 15.2684 6.375 18.375C6.375 21.4816 8.8934 24 12 24Z" fill="#FFDF40"/>
|
||||
<path d="M17.625 18.375C17.625 15.2734 15.1016 12.75 12 12.75V24C15.1016 24 17.625 21.4766 17.625 18.375Z" fill="#FFBE40"/>
|
||||
<path d="M11.8818 21.5776L10.7118 20.7976L11.7983 19.1678L10.3921 17.7615L12.1182 15.1724L13.2882 15.9524L12.2017 17.5823L13.6079 18.9886L11.8818 21.5776Z" fill="#465A61"/>
|
||||
<path d="M12.1182 15.1724L12 15.3496V21.4004L13.6079 18.9886L12.2017 17.5823L13.2882 15.9524L12.1182 15.1724Z" fill="#3B4A51"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
@ -1,16 +0,0 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.99996 15.6571C13.1243 15.6571 15.6571 13.1243 15.6571 9.99996C15.6571 6.87558 13.1243 4.34277 9.99996 4.34277C6.87558 4.34277 4.34277 6.87558 4.34277 9.99996C4.34277 13.1243 6.87558 15.6571 9.99996 15.6571Z" fill="#FFD347"/>
|
||||
<path d="M9.99949 2.22066C9.83258 2.22066 9.69727 2.08539 9.69727 1.91844V0.302227C9.69727 0.135273 9.83258 0 9.99949 0C10.1664 0 10.3017 0.135273 10.3017 0.302227V1.91848C10.3017 2.08539 10.1664 2.22066 9.99949 2.22066Z" fill="#FFD347"/>
|
||||
<path d="M5.95925 3.30301C5.85479 3.30301 5.75323 3.24883 5.69725 3.15188L4.88917 1.75219C4.80573 1.60766 4.85522 1.42281 4.99979 1.33934C5.14436 1.25598 5.32917 1.30535 5.41265 1.44996L6.22073 2.84965C6.30417 2.99418 6.25468 3.17902 6.11011 3.2625C6.06249 3.28996 6.01054 3.30301 5.95925 3.30301Z" fill="#FFD347"/>
|
||||
<path d="M3.00049 6.26126C2.94924 6.26126 2.89725 6.24821 2.84967 6.22071L1.44998 5.41263C1.30545 5.32919 1.25592 5.14435 1.33936 4.99978C1.42279 4.85521 1.60764 4.80575 1.75221 4.88915L3.15189 5.69724C3.29643 5.78067 3.34596 5.96552 3.26252 6.11009C3.2065 6.20708 3.10494 6.26126 3.00049 6.26126Z" fill="#FFD347"/>
|
||||
<path d="M1.91844 10.3017H0.302227C0.135312 10.3017 0 10.1664 0 9.99949C0 9.83254 0.135312 9.69727 0.302227 9.69727H1.91848C2.08539 9.69727 2.2207 9.83254 2.2207 9.99949C2.2207 10.1664 2.08535 10.3017 1.91844 10.3017Z" fill="#FFD347"/>
|
||||
<path d="M1.60136 15.1509C1.4969 15.1509 1.39534 15.0967 1.33936 14.9997C1.25593 14.8552 1.30542 14.6704 1.44999 14.5869L2.84968 13.7788C2.99421 13.6954 3.17905 13.7448 3.26253 13.8894C3.34597 14.0339 3.29647 14.2188 3.1519 14.3023L1.75222 15.1104C1.7046 15.1378 1.65261 15.1509 1.60136 15.1509Z" fill="#FFD347"/>
|
||||
<path d="M5.15061 18.7005C5.09936 18.7005 5.04736 18.6875 4.99979 18.66C4.85525 18.5765 4.80572 18.3917 4.88916 18.2471L5.69725 16.8474C5.78068 16.7029 5.96553 16.6534 6.1101 16.7368C6.25463 16.8202 6.30416 17.0051 6.22072 17.1497L5.41264 18.5493C5.35662 18.6463 5.25506 18.7005 5.15061 18.7005Z" fill="#FFD347"/>
|
||||
<path d="M9.99949 20C9.83258 20 9.69727 19.8647 9.69727 19.6978V18.0815C9.69727 17.9146 9.83258 17.7793 9.99949 17.7793C10.1664 17.7793 10.3017 17.9146 10.3017 18.0815V19.6978C10.3017 19.8647 10.1664 20 9.99949 20Z" fill="#FFD347"/>
|
||||
<path d="M14.8489 18.7014C14.7444 18.7014 14.6429 18.6473 14.5869 18.5503L13.7788 17.1506C13.6954 17.0061 13.7449 16.8213 13.8894 16.7378C14.034 16.6544 14.2188 16.7038 14.3023 16.8484L15.1104 18.2481C15.1938 18.3926 15.1443 18.5775 14.9998 18.6609C14.9521 18.6884 14.9002 18.7014 14.8489 18.7014Z" fill="#FFD347"/>
|
||||
<path d="M18.3989 15.1509C18.3477 15.1509 18.2957 15.1379 18.2481 15.1104L16.8484 14.3023C16.7039 14.2188 16.6544 14.034 16.7378 13.8894C16.8212 13.7449 17.0061 13.6954 17.1506 13.7788L18.5503 14.5869C18.6949 14.6703 18.7444 14.8552 18.661 14.9997C18.6049 15.0967 18.5034 15.1509 18.3989 15.1509Z" fill="#FFD347"/>
|
||||
<path d="M19.6978 10.3017H18.0815C17.9146 10.3017 17.7793 10.1664 17.7793 9.99949C17.7793 9.83254 17.9146 9.69727 18.0815 9.69727H19.6978C19.8647 9.69727 20 9.83254 20 9.99949C20 10.1664 19.8647 10.3017 19.6978 10.3017Z" fill="#FFD347"/>
|
||||
<path d="M16.9998 6.26121C16.8953 6.26121 16.7938 6.20703 16.7378 6.11008C16.6544 5.96555 16.7039 5.7807 16.8484 5.69723L18.2481 4.88914C18.3926 4.80578 18.5775 4.85516 18.661 4.99977C18.7444 5.1443 18.6949 5.32914 18.5503 5.41262L17.1507 6.2207C17.103 6.24817 17.051 6.26121 16.9998 6.26121Z" fill="#FFD347"/>
|
||||
<path d="M14.0403 3.30306C13.989 3.30306 13.937 3.29001 13.8894 3.26251C13.7449 3.17907 13.6954 2.99423 13.7788 2.84966L14.5869 1.44997C14.6703 1.3054 14.8552 1.25595 14.9997 1.33935C15.1443 1.42278 15.1938 1.60763 15.1104 1.7522L14.3023 3.15189C14.2463 3.24888 14.1447 3.30306 14.0403 3.30306Z" fill="#FFD347"/>
|
||||
<path d="M9.99965 4.34277C9.79488 4.34277 9.5927 4.35395 9.39355 4.37512C12.2328 4.67758 14.4445 7.08027 14.4445 9.99976C14.4445 12.9193 12.2328 15.322 9.39355 15.6245C9.5927 15.6457 9.79484 15.6568 9.99965 15.6568C13.1239 15.6568 15.6567 13.1241 15.6567 9.99976C15.6567 6.87547 13.124 4.34277 9.99965 4.34277Z" fill="#FFBE31"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.0 KiB |
26
assets/icons/volt_meter_icon.svg
Normal file
@ -0,0 +1,26 @@
|
||||
<svg width="22" height="23" viewBox="0 0 22 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18.1346 0H3.09615C1.3862 0 0 1.3862 0 3.09615V19.9038C0 21.6138 1.3862 23 3.09615 23H18.1346C19.8446 23 21.2308 21.6138 21.2308 19.9038V3.09615C21.2308 1.3862 19.8446 0 18.1346 0Z" fill="#EF5350"/>
|
||||
<path d="M20.6445 1.29056C17.6514 17.7494 4.1507 20.9781 0.482056 21.5556C0.760485 21.9974 1.1462 22.3615 1.60328 22.6141C2.06036 22.8666 2.57393 22.9994 3.09614 23H18.1346C18.9554 22.999 19.7424 22.6725 20.3228 22.0921C20.9032 21.5116 21.2298 20.7247 21.2308 19.9038V3.09615C21.2306 2.44752 21.0254 1.81554 20.6445 1.29056Z" fill="#E53935"/>
|
||||
<path d="M18.1347 1.76923H3.09621C2.36337 1.76923 1.76929 2.36331 1.76929 3.09615V12.8269C1.76929 13.5598 2.36337 14.1538 3.09621 14.1538H18.1347C18.8675 14.1538 19.4616 13.5598 19.4616 12.8269V3.09615C19.4616 2.36331 18.8675 1.76923 18.1347 1.76923Z" fill="#BBDEFB"/>
|
||||
<path d="M16.5513 12.3846C16.8258 11.4606 16.8808 10.4852 16.7119 9.53621C16.543 8.58718 16.1549 7.69068 15.5785 6.91809C15.0021 6.14549 14.2532 5.51814 13.3916 5.08598C12.53 4.65381 11.5793 4.42877 10.6154 4.42877C9.65145 4.42877 8.70082 4.65381 7.83918 5.08598C6.97755 5.51814 6.2287 6.14549 5.65227 6.91809C5.07583 7.69068 4.68773 8.58718 4.51885 9.53621C4.34997 10.4852 4.40498 11.4606 4.67951 12.3846L2.875 12.1635V2.875H18.3558V12.1635L16.5513 12.3846Z" fill="#90CAF9"/>
|
||||
<path d="M10.6154 5.30769C10.5573 5.30772 10.4998 5.2963 10.4461 5.27408C10.3924 5.25187 10.3436 5.21929 10.3026 5.17821C10.2615 5.13713 10.2289 5.08836 10.2067 5.03468C10.1845 4.981 10.1731 4.92347 10.1731 4.86538V3.09615C10.1731 2.97884 10.2197 2.86634 10.3026 2.78339C10.3856 2.70044 10.4981 2.65384 10.6154 2.65384C10.7327 2.65384 10.8452 2.70044 10.9282 2.78339C11.0111 2.86634 11.0577 2.97884 11.0577 3.09615V4.86538C11.0577 4.92347 11.0463 4.981 11.0241 5.03468C11.0019 5.08836 10.9693 5.13713 10.9282 5.17821C10.8872 5.21929 10.8384 5.25187 10.7847 5.27408C10.731 5.2963 10.6735 5.30772 10.6154 5.30769Z" fill="#37474F"/>
|
||||
<path d="M6.54954 6.99182C6.49145 6.99189 6.43392 6.98047 6.38026 6.95823C6.32659 6.93599 6.27785 6.90336 6.23683 6.86223L4.995 5.62039C4.9133 5.5372 4.86776 5.42511 4.86829 5.30851C4.86882 5.19191 4.91537 5.08024 4.99782 4.99779C5.08027 4.91534 5.19194 4.86879 5.30854 4.86826C5.42514 4.86773 5.53723 4.91327 5.62043 4.99497L6.86226 6.2368C6.9241 6.29866 6.96621 6.37746 6.98327 6.46325C7.00032 6.54904 6.99156 6.63796 6.9581 6.71877C6.92463 6.79958 6.86795 6.86865 6.79523 6.91725C6.72251 6.96585 6.63701 6.9918 6.54954 6.99182Z" fill="#37474F"/>
|
||||
<path d="M14.6812 6.99184C14.5938 6.99182 14.5083 6.96587 14.4355 6.91727C14.3628 6.86867 14.3061 6.79959 14.2727 6.71878C14.2392 6.63797 14.2304 6.54906 14.2475 6.46327C14.2646 6.37748 14.3067 6.29868 14.3685 6.23682L15.6103 4.99499C15.6513 4.95331 15.7001 4.92015 15.7539 4.89743C15.8077 4.87471 15.8655 4.86288 15.9239 4.86261C15.9823 4.86235 16.0402 4.87366 16.0942 4.89589C16.1482 4.91812 16.1973 4.95084 16.2386 4.99214C16.2799 5.03345 16.3126 5.08253 16.3349 5.13655C16.3571 5.19057 16.3684 5.24846 16.3681 5.30687C16.3679 5.36529 16.356 5.42307 16.3333 5.47689C16.3106 5.5307 16.2774 5.57948 16.2358 5.62041L14.9939 6.86224C14.9529 6.90338 14.9042 6.93601 14.8505 6.95825C14.7969 6.98049 14.7393 6.99191 14.6812 6.99184Z" fill="#37474F"/>
|
||||
<path d="M10.6154 11.0577C10.5573 11.0578 10.4997 11.0463 10.4461 11.0241C10.3924 11.0019 10.3437 10.9692 10.3026 10.9281L7.48769 8.11314C7.40475 8.0302 7.35815 7.91771 7.35815 7.80041C7.35815 7.68312 7.40475 7.57063 7.48769 7.48769C7.57063 7.40475 7.68312 7.35815 7.80041 7.35815C7.91771 7.35815 8.0302 7.40475 8.11314 7.48769L10.9281 10.3027C10.9899 10.3645 11.032 10.4433 11.0491 10.5291C11.0661 10.6149 11.0574 10.7038 11.0239 10.7846C10.9904 10.8654 10.9338 10.9345 10.861 10.9831C10.7883 11.0317 10.7028 11.0577 10.6154 11.0577Z" fill="#37474F"/>
|
||||
<path d="M3.98083 19.9039C5.20222 19.9039 6.19236 18.9137 6.19236 17.6923C6.19236 16.4709 5.20222 15.4808 3.98083 15.4808C2.75943 15.4808 1.76929 16.4709 1.76929 17.6923C1.76929 18.9137 2.75943 19.9039 3.98083 19.9039Z" fill="#CFD8DC"/>
|
||||
<path d="M5.7035 16.3228C5.78399 16.7463 5.75972 17.1831 5.6328 17.5952C5.50588 18.0072 5.28016 18.382 4.9753 18.6868C4.67043 18.9917 4.29567 19.2174 3.88363 19.3443C3.47159 19.4713 3.03477 19.4955 2.61121 19.415C2.9987 19.7293 3.48188 19.9017 3.98075 19.9038C4.56708 19.9032 5.12919 19.6699 5.54379 19.2553C5.95838 18.8407 6.1916 18.2786 6.19229 17.6923C6.19015 17.1934 6.0177 16.7103 5.7035 16.3228Z" fill="#B0BEC5"/>
|
||||
<path d="M17.25 19.9039C18.4714 19.9039 19.4615 18.9137 19.4615 17.6923C19.4615 16.4709 18.4714 15.4808 17.25 15.4808C16.0286 15.4808 15.0385 16.4709 15.0385 17.6923C15.0385 18.9137 16.0286 19.9039 17.25 19.9039Z" fill="#CFD8DC"/>
|
||||
<path d="M18.9728 16.3228C19.0533 16.7463 19.029 17.1831 18.9021 17.5952C18.7752 18.0072 18.5495 18.382 18.2446 18.6868C17.9397 18.9917 17.565 19.2174 17.1529 19.3443C16.7409 19.4713 16.3041 19.4955 15.8805 19.415C16.268 19.7293 16.7512 19.9017 17.25 19.9038C17.8364 19.9032 18.3985 19.6699 18.8131 19.2553C19.2277 18.8407 19.4609 18.2786 19.4616 17.6923C19.4594 17.1934 19.287 16.7103 18.9728 16.3228Z" fill="#B0BEC5"/>
|
||||
<path d="M4.42312 17.6923C4.42277 17.8095 4.37606 17.9218 4.29319 18.0047C4.21032 18.0876 4.09802 18.1343 3.98082 18.1346H1.81351C1.75455 17.8427 1.75455 17.5419 1.81351 17.25H3.98082C4.09802 17.2504 4.21032 17.2971 4.29319 17.3799C4.37606 17.4628 4.42277 17.5751 4.42312 17.6923Z" fill="#546E7A"/>
|
||||
<path d="M19.0989 16.4716L17.5641 18.0064C17.4802 18.0886 17.3675 18.1346 17.25 18.1346C17.1326 18.1346 17.0199 18.0886 16.936 18.0064C16.8531 17.9228 16.8066 17.81 16.8066 17.6923C16.8066 17.5747 16.8531 17.4618 16.936 17.3783L18.4708 15.8435C18.7181 16.0111 18.9312 16.2243 19.0989 16.4716Z" fill="#546E7A"/>
|
||||
<path d="M15.4808 21.6731H5.75005C5.63274 21.6731 5.52024 21.6265 5.43729 21.5435C5.35434 21.4606 5.30774 21.3481 5.30774 21.2308C5.30774 21.1135 5.35434 21.0009 5.43729 20.918C5.52024 20.8351 5.63274 20.7885 5.75005 20.7885H15.4808C15.5981 20.7885 15.7106 20.8351 15.7936 20.918C15.8765 21.0009 15.9231 21.1135 15.9231 21.2308C15.9231 21.3481 15.8765 21.4606 15.7936 21.5435C15.7106 21.6265 15.5981 21.6731 15.4808 21.6731Z" fill="#37474F"/>
|
||||
<path d="M14.1539 19.9038H7.07695C6.95964 19.9038 6.84714 19.8572 6.76419 19.7743C6.68124 19.6913 6.63464 19.5788 6.63464 19.4615C6.63464 19.3442 6.68124 19.2317 6.76419 19.1488C6.84714 19.0658 6.95964 19.0192 7.07695 19.0192H14.1539C14.2712 19.0192 14.3837 19.0658 14.4666 19.1488C14.5496 19.2317 14.5962 19.3442 14.5962 19.4615C14.5962 19.5788 14.5496 19.6913 14.4666 19.7743C14.3837 19.8572 14.2712 19.9038 14.1539 19.9038Z" fill="#37474F"/>
|
||||
<path d="M14.1539 16.3654H7.07695C6.95964 16.3654 6.84714 16.3188 6.76419 16.2358C6.68124 16.1529 6.63464 16.0404 6.63464 15.9231C6.63464 15.8058 6.68124 15.6933 6.76419 15.6103C6.84714 15.5274 6.95964 15.4808 7.07695 15.4808H14.1539C14.2712 15.4808 14.3837 15.5274 14.4666 15.6103C14.5496 15.6933 14.5962 15.8058 14.5962 15.9231C14.5962 16.0404 14.5496 16.1529 14.4666 16.2358C14.3837 16.3188 14.2712 16.3654 14.1539 16.3654Z" fill="#37474F"/>
|
||||
<path d="M18.1347 1.76923H3.09621C2.74441 1.76961 2.40712 1.90953 2.15836 2.1583C1.90959 2.40706 1.76967 2.74435 1.76929 3.09615V12.8269C1.76967 13.1787 1.90959 13.516 2.15836 13.7648C2.40712 14.0135 2.74441 14.1535 3.09621 14.1538H18.1347C18.4865 14.1535 18.8238 14.0135 19.0725 13.7648C19.3213 13.516 19.4612 13.1787 19.4616 12.8269V3.09615C19.4612 2.74435 19.3213 2.40706 19.0725 2.1583C18.8238 1.90953 18.4865 1.76961 18.1347 1.76923ZM17.2501 11.0577H13.7116C13.6535 11.0577 13.596 11.0463 13.5423 11.0241C13.4886 11.0019 13.4398 10.9693 13.3988 10.9282C13.3577 10.8871 13.3251 10.8384 13.3029 10.7847C13.2807 10.731 13.2693 10.6735 13.2693 10.6154C13.2693 9.91154 12.9897 9.23652 12.492 8.73883C11.9943 8.24113 11.3193 7.96153 10.6154 7.96153C9.9116 7.96153 9.23658 8.24113 8.73889 8.73883C8.2412 9.23652 7.9616 9.91154 7.9616 10.6154C7.96163 10.6735 7.95021 10.731 7.92799 10.7847C7.90578 10.8384 7.8732 10.8871 7.83212 10.9282C7.79104 10.9693 7.74227 11.0019 7.68859 11.0241C7.63491 11.0463 7.57738 11.0577 7.51929 11.0577H3.98083C3.92273 11.0577 3.8652 11.0463 3.81152 11.0241C3.75784 11.0019 3.70907 10.9693 3.66799 10.9282C3.62691 10.8871 3.59434 10.8384 3.57212 10.7847C3.5499 10.731 3.53848 10.6735 3.53852 10.6154C3.53852 8.73846 4.28412 6.93842 5.6113 5.61124C6.93848 4.28406 8.73852 3.53846 10.6154 3.53846C12.4924 3.53846 14.2924 4.28406 15.6196 5.61124C16.9468 6.93842 17.6924 8.73846 17.6924 10.6154C17.6924 10.6735 17.681 10.731 17.6588 10.7847C17.6365 10.8384 17.604 10.8871 17.5629 10.9282C17.5218 10.9693 17.473 11.0019 17.4194 11.0241C17.3657 11.0463 17.3082 11.0577 17.2501 11.0577Z" fill="#FFEE58"/>
|
||||
<path d="M18.1347 1.76923H18.1031C17.4341 11.9799 5.19342 12.4807 1.76929 12.4194V12.8269C1.76967 13.1787 1.90959 13.516 2.15836 13.7648C2.40712 14.0135 2.74441 14.1535 3.09621 14.1538H18.1347C18.4865 14.1535 18.8238 14.0135 19.0725 13.7648C19.3213 13.516 19.4612 13.1787 19.4616 12.8269V3.09615C19.4612 2.74435 19.3213 2.40706 19.0725 2.1583C18.8238 1.90953 18.4865 1.76961 18.1347 1.76923Z" fill="#90CAF9"/>
|
||||
<path d="M18.1347 1.76923H18.1031C18.0218 3.53365 17.4778 5.24565 16.5259 6.7335C17.2874 7.88491 17.693 9.23498 17.6924 10.6154C17.6924 10.6735 17.681 10.731 17.6588 10.7847C17.6365 10.8384 17.604 10.8871 17.5629 10.9282C17.5218 10.9693 17.473 11.0019 17.4194 11.0241C17.3657 11.0463 17.3082 11.0577 17.2501 11.0577H13.7116C13.6535 11.0577 13.596 11.0463 13.5423 11.0241C13.4886 11.0019 13.4398 10.9693 13.3988 10.9282C13.3577 10.8871 13.3251 10.8384 13.3029 10.7847C13.2807 10.731 13.2693 10.6735 13.2693 10.6154C13.2688 10.3667 13.2332 10.1193 13.1635 9.88054C9.14984 12.2871 3.84304 12.4565 1.76929 12.4194V12.8269C1.76967 13.1787 1.90959 13.516 2.15836 13.7648C2.40712 14.0135 2.74441 14.1535 3.09621 14.1538H18.1347C18.4865 14.1535 18.8238 14.0135 19.0725 13.7648C19.3213 13.516 19.4612 13.1787 19.4616 12.8269V3.09615C19.4612 2.74435 19.3213 2.40706 19.0725 2.1583C18.8238 1.90953 18.4865 1.76961 18.1347 1.76923Z" fill="#FDD835"/>
|
||||
<path d="M10.6154 12.3846C11.5925 12.3846 12.3847 11.5925 12.3847 10.6154C12.3847 9.63827 11.5925 8.84616 10.6154 8.84616C9.6383 8.84616 8.84619 9.63827 8.84619 10.6154C8.84619 11.5925 9.6383 12.3846 10.6154 12.3846Z" fill="#CFD8DC"/>
|
||||
<path d="M11.9109 9.41928C11.9288 9.52222 11.9393 9.62632 11.9423 9.73076C11.9418 10.3171 11.7086 10.8793 11.2939 11.2939C10.8793 11.7085 10.3172 11.9417 9.73079 11.9423C9.62635 11.9393 9.52225 11.9288 9.41931 11.9108C9.75346 12.2224 10.1955 12.392 10.6523 12.3841C11.1091 12.3761 11.545 12.191 11.868 11.868C12.1911 11.5449 12.3761 11.1091 12.3841 10.6523C12.3921 10.1955 12.2224 9.75343 11.9109 9.41928Z" fill="#B0BEC5"/>
|
||||
<path d="M3.53842 4.86538C4.02698 4.86538 4.42304 4.37031 4.42304 3.75961C4.42304 3.14891 4.02698 2.65384 3.53842 2.65384C3.04986 2.65384 2.65381 3.14891 2.65381 3.75961C2.65381 4.37031 3.04986 4.86538 3.53842 4.86538Z" fill="white"/>
|
||||
<path d="M3.09612 6.63462C3.3404 6.63462 3.53842 6.43659 3.53842 6.19231C3.53842 5.94803 3.3404 5.75 3.09612 5.75C2.85184 5.75 2.65381 5.94803 2.65381 6.19231C2.65381 6.43659 2.85184 6.63462 3.09612 6.63462Z" fill="white"/>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
41
assets/icons/voltage_icon.svg
Normal file
@ -0,0 +1,41 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.998 2.5882C11.8004 2.5882 11.6403 2.42817 11.6403 2.23069V0.357516C11.6403 0.160078 11.8004 0 11.998 0C12.1956 0 12.3558 0.160031 12.3558 0.357516V2.23073C12.3558 2.42817 12.1956 2.5882 11.998 2.5882Z" fill="#E6E2E6"/>
|
||||
<path d="M5.22457 2.5882C5.02699 2.5882 4.86682 2.42817 4.86682 2.23069V0.357516C4.86682 0.160078 5.02699 0 5.22457 0C5.42215 0 5.58232 0.160031 5.58232 0.357516V2.23073C5.58232 2.42817 5.42215 2.5882 5.22457 2.5882Z" fill="#E6E2E6"/>
|
||||
<path d="M18.7714 2.5882C18.5738 2.5882 18.4137 2.42817 18.4137 2.23069V0.357516C18.4137 0.160078 18.5739 0 18.7714 0C18.969 0 19.1292 0.160031 19.1292 0.357516V2.23073C19.1292 2.42817 18.969 2.5882 18.7714 2.5882Z" fill="#E6E2E6"/>
|
||||
<path d="M17.6937 1.7467H19.8492C20.0782 1.7467 20.2814 1.8937 20.3528 2.1112L20.7326 3.26672C20.7832 3.42084 20.6683 3.57942 20.506 3.57942H17.0369C16.8746 3.57942 16.7596 3.42084 16.8103 3.26672L17.19 2.1112C17.2615 1.8937 17.4647 1.7467 17.6937 1.7467Z" fill="#545454"/>
|
||||
<path d="M17.6935 3.57938H19.8492C20.0782 3.57938 20.2814 3.72638 20.3528 3.94383L20.7326 5.0993C20.7832 5.25342 20.6683 5.412 20.506 5.412H17.0369C16.8746 5.412 16.7596 5.25342 16.8103 5.0993L17.1901 3.94359C17.2615 3.72628 17.4646 3.57938 17.6935 3.57938Z" fill="#545454"/>
|
||||
<path d="M17.6935 5.41205H19.8492C20.0782 5.41205 20.2814 5.55905 20.3528 5.77655L20.7326 6.93206C20.7832 7.08619 20.6683 7.24477 20.506 7.24477H17.0369C16.8746 7.24477 16.7596 7.08619 16.8103 6.93206L17.1901 5.77636C17.2615 5.55895 17.4646 5.41205 17.6935 5.41205Z" fill="#545454"/>
|
||||
<path d="M13.0759 1.7467H10.9203C10.6912 1.7467 10.488 1.8937 10.4166 2.1112L10.0369 3.26672C9.9862 3.42084 10.1011 3.57942 10.2635 3.57942H13.7325C13.8949 3.57942 14.0098 3.42084 13.9591 3.26672L13.5793 2.11102C13.5079 1.89361 13.3049 1.7467 13.0759 1.7467Z" fill="#545454"/>
|
||||
<path d="M13.0757 3.57938H10.9203C10.6912 3.57938 10.4881 3.72638 10.4166 3.94383L10.0369 5.0993C9.9862 5.25342 10.1011 5.412 10.2635 5.412H13.7325C13.8949 5.412 14.0098 5.25342 13.9591 5.0993L13.5794 3.94378C13.508 3.72638 13.3048 3.57938 13.0757 3.57938Z" fill="#545454"/>
|
||||
<path d="M13.0759 5.41205H10.9203C10.6912 5.41205 10.4881 5.55905 10.4166 5.77655L10.0369 6.93206C9.9862 7.08619 10.1011 7.24477 10.2635 7.24477H13.7325C13.8949 7.24477 14.0098 7.08619 13.9591 6.93206L13.5793 5.77636C13.5079 5.55895 13.3049 5.41205 13.0759 5.41205Z" fill="#545454"/>
|
||||
<path d="M6.30253 1.7467H4.14689C3.91781 1.7467 3.71465 1.8937 3.64321 2.1112L3.26343 3.26667C3.21276 3.4208 3.3277 3.57938 3.49003 3.57938H6.9591C7.12143 3.57938 7.23637 3.4208 7.1857 3.26667L6.80592 2.11097C6.73448 1.89361 6.53146 1.7467 6.30253 1.7467Z" fill="#545454"/>
|
||||
<path d="M3.44264 2.72137L3.26343 3.26667C3.21276 3.4208 3.3277 3.57937 3.49003 3.57937H6.9591C7.12143 3.57937 7.23637 3.4208 7.1857 3.26667L7.0065 2.72137H3.44264Z" fill="#494949"/>
|
||||
<path d="M6.30248 3.57938H4.14684C3.91776 3.57938 3.71461 3.72638 3.64317 3.94383L3.26343 5.0993C3.21276 5.25342 3.3277 5.412 3.49003 5.412H6.95911C7.12143 5.412 7.23637 5.25342 7.1857 5.0993L6.80592 3.94359C6.73443 3.72628 6.53142 3.57938 6.30248 3.57938Z" fill="#545454"/>
|
||||
<path d="M3.44264 4.55405L3.26343 5.09934C3.21276 5.25347 3.3277 5.41205 3.49003 5.41205H6.9591C7.12143 5.41205 7.23637 5.25347 7.1857 5.09934L7.0065 4.55405H3.44264Z" fill="#494949"/>
|
||||
<path d="M6.30225 5.41205H4.14684C3.91776 5.41205 3.71461 5.55905 3.64317 5.77655L3.26343 6.93206C3.21276 7.08619 3.3277 7.24477 3.49003 7.24477H6.95911C7.12143 7.24477 7.23637 7.08619 7.1857 6.93206L6.80596 5.77655C6.73448 5.55905 6.53132 5.41205 6.30225 5.41205Z" fill="#545454"/>
|
||||
<path d="M3.44264 6.38666L3.26343 6.93196C3.21276 7.08608 3.3277 7.24466 3.49003 7.24466H6.9591C7.12143 7.24466 7.23637 7.08608 7.1857 6.93196L7.0065 6.38666H3.44264Z" fill="#494949"/>
|
||||
<path d="M10.2161 2.72137L10.0369 3.26667C9.9862 3.4208 10.1011 3.57937 10.2635 3.57937H13.7325C13.8949 3.57937 14.0098 3.4208 13.9591 3.26667L13.7799 2.72137H10.2161Z" fill="#494949"/>
|
||||
<path d="M10.2161 4.55405L10.0369 5.09934C9.9862 5.25347 10.1011 5.41205 10.2635 5.41205H13.7325C13.8949 5.41205 14.0098 5.25347 13.9591 5.09934L13.7799 4.55405H10.2161Z" fill="#494949"/>
|
||||
<path d="M10.2161 6.38666L10.0369 6.93196C9.9862 7.08608 10.1011 7.24466 10.2635 7.24466H13.7325C13.8949 7.24466 14.0098 7.08608 13.9591 6.93196L13.7799 6.38666H10.2161Z" fill="#494949"/>
|
||||
<path d="M16.9895 2.72137L16.8103 3.26667C16.7596 3.4208 16.8746 3.57937 17.0369 3.57937H20.506C20.6683 3.57937 20.7832 3.4208 20.7326 3.26667L20.5534 2.72137H16.9895Z" fill="#494949"/>
|
||||
<path d="M16.9895 4.55405L16.8103 5.09934C16.7596 5.25347 16.8746 5.41205 17.0369 5.41205H20.506C20.6683 5.41205 20.7832 5.25347 20.7326 5.09934L20.5534 4.55405H16.9895Z" fill="#494949"/>
|
||||
<path d="M16.9895 6.38666L16.8103 6.93196C16.7596 7.08608 16.8746 7.24466 17.0369 7.24466H20.506C20.6683 7.24466 20.7832 7.08608 20.7326 6.93196L20.5534 6.38666H16.9895Z" fill="#494949"/>
|
||||
<path d="M11.0522 7.24466H12.9437V8.88885H11.0522V7.24466Z" fill="#545454"/>
|
||||
<path d="M4.27881 7.24466H6.17031V8.88885H4.27881V7.24466Z" fill="#545454"/>
|
||||
<path d="M19.7172 8.88892H17.8257V7.24473H19.7172V8.88892Z" fill="#545454"/>
|
||||
<path d="M1.21143 10.9806H22.7886V21.9083H1.21143V10.9806Z" fill="#545454"/>
|
||||
<path d="M1.21143 10.9806H22.7886V11.8386H1.21143V10.9806Z" fill="#494949"/>
|
||||
<path d="M11.998 12.3605C11.8004 12.3605 11.6403 12.2004 11.6403 12.003V10.7935C11.6403 10.596 11.8004 10.436 11.998 10.436C12.1956 10.436 12.3558 10.596 12.3558 10.7935V12.003C12.3558 12.2004 12.1956 12.3605 11.998 12.3605Z" fill="#E6E2E6"/>
|
||||
<path d="M5.22457 12.3605C5.02699 12.3605 4.86682 12.2004 4.86682 12.003V10.7935C4.86682 10.596 5.02699 10.436 5.22457 10.436C5.42215 10.436 5.58232 10.596 5.58232 10.7935V12.003C5.58232 12.2004 5.42215 12.3605 5.22457 12.3605Z" fill="#E6E2E6"/>
|
||||
<path d="M18.7714 12.3605C18.5738 12.3605 18.4137 12.2004 18.4137 12.003V10.7935C18.4137 10.596 18.5739 10.436 18.7714 10.436C18.969 10.436 19.1292 10.596 19.1292 10.7935V12.003C19.1292 12.2004 18.969 12.3605 18.7714 12.3605Z" fill="#E6E2E6"/>
|
||||
<path d="M23.5233 10.9806H0.476672C0.213422 10.9806 0 10.7672 0 10.5039V9.36559C0 9.10234 0.213422 8.88892 0.476672 8.88892H23.5233C23.7865 8.88892 24 9.10234 24 9.36559V10.5039C24 10.7672 23.7866 10.9806 23.5233 10.9806Z" fill="#A8A7A8"/>
|
||||
<path d="M23.5231 10.1226H0.476859C0.213516 10.1226 0 9.90929 0 9.64609V10.5041C0 10.7673 0.213516 10.9806 0.476859 10.9806H23.5231C23.7865 10.9806 24 10.7673 24 10.5041V9.64609C24 9.90929 23.7865 10.1226 23.5231 10.1226Z" fill="#818181"/>
|
||||
<path d="M23.5233 24H0.476672C0.213422 24 0 23.7866 0 23.5234V22.385C0 22.1217 0.213422 21.9083 0.476672 21.9083H23.5233C23.7865 21.9083 24 22.1217 24 22.385V23.5234C24 23.7866 23.7866 24 23.5233 24Z" fill="#A8A7A8"/>
|
||||
<path d="M23.5231 23.142H0.476859C0.213516 23.142 0 22.9287 0 22.6655V23.5235C0 23.7867 0.213516 24 0.476859 24H23.5231C23.7865 24 24 23.7867 24 23.5235V22.6655C24 22.9287 23.7865 23.142 23.5231 23.142Z" fill="#818181"/>
|
||||
<path d="M15.6454 19.172L12.6056 14.0633C12.3317 13.6029 11.6644 13.6029 11.3904 14.0633L8.35062 19.172C8.07068 19.6425 8.4102 20.2384 8.95816 20.2384H15.0378C15.5858 20.2384 15.9253 19.6425 15.6454 19.172Z" fill="#F6E266"/>
|
||||
<path d="M15.6023 19.0995C15.4767 19.2667 15.2772 19.3804 15.0379 19.3804H8.95829C8.71894 19.3804 8.51944 19.2667 8.39387 19.0995L8.35074 19.172C8.0708 19.6425 8.41032 20.2384 8.95829 20.2384H15.0379C15.5859 20.2384 15.9254 19.6425 15.6454 19.172L15.6023 19.0995Z" fill="#FFC239"/>
|
||||
<path d="M11.0522 8.06677H12.9437V8.88887H11.0522V8.06677Z" fill="#494949"/>
|
||||
<path d="M4.27881 8.06677H6.17031V8.88887H4.27881V8.06677Z" fill="#494949"/>
|
||||
<path d="M17.8257 8.06677H19.7172V8.88887H17.8257V8.06677Z" fill="#494949"/>
|
||||
<path d="M11.9225 15.9461L10.9958 17.4033C10.9256 17.5136 10.9211 17.6534 10.9841 17.7679C11.0471 17.8825 11.1675 17.9536 11.2983 17.9536H11.7902L11.2135 18.8605C11.1073 19.0275 11.1567 19.2488 11.3237 19.355C11.4658 19.449 11.7038 19.4221 11.8185 19.2448L12.7453 17.7876C12.8154 17.6773 12.8198 17.5376 12.7569 17.423C12.6939 17.3085 12.5735 17.2373 12.4427 17.2373H11.9508L12.5276 16.3304C12.6338 16.1634 12.5844 15.942 12.4173 15.8359C12.2503 15.7298 12.0287 15.7792 11.9225 15.9461Z" fill="#DD636E"/>
|
||||
</svg>
|
After Width: | Height: | Size: 8.1 KiB |
@ -370,6 +370,9 @@ class HomeCubit extends Cubit<HomeState> {
|
||||
.add(const SmartSceneClearEvent());
|
||||
BlocProvider.of<EffectPeriodBloc>(NavigationService.navigatorKey.currentState!.context)
|
||||
.add(ResetEffectivePeriod());
|
||||
NavigationService.navigatorKey.currentContext!
|
||||
.read<CreateSceneBloc>()
|
||||
.add(const ClearTabToRunSetting());
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:firebase_database/firebase_database.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
@ -171,6 +171,9 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorSensorState> {
|
||||
code: 'switch_1',
|
||||
);
|
||||
recordGroups = response;
|
||||
|
||||
|
||||
|
||||
emit(UpdateState(garageSensor: deviceStatus));
|
||||
} on DioException catch (e) {
|
||||
final errorData = e.response!.data;
|
||||
|
792
lib/features/devices/bloc/power_clamp_bloc/power_clamp_bloc.dart
Normal file
@ -0,0 +1,792 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_event.dart';
|
||||
import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_state.dart';
|
||||
import 'package:syncrow_app/features/devices/model/device_report_model.dart';
|
||||
import 'package:syncrow_app/features/devices/model/power_clamp_model.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_chart.dart';
|
||||
import 'package:syncrow_app/services/api/devices_api.dart';
|
||||
|
||||
class PowerClampBloc extends Bloc<PowerClampEvent, PowerClampState> {
|
||||
final String PCId;
|
||||
PowerClampBloc({
|
||||
required this.PCId,
|
||||
}) : super(const PowerClampState()) {
|
||||
on<PowerClampInitial>(_fetchPowerClampInfo);
|
||||
// on<ReportLogsInitial>(fetchLogsForLastMonth);
|
||||
// on<FetchEnergyData>(_mapReportToEnergyData);
|
||||
on<SelectDateEvent>(checkDayMonthYearSelected);
|
||||
on<FilterRecordsByDateEvent>(_filterRecordsByDate);
|
||||
}
|
||||
DateTime? dateTime = DateTime.now();
|
||||
String formattedDate = DateFormat('yyyy/MM/dd').format(DateTime.now());
|
||||
bool lowBattery = false;
|
||||
bool closingReminder = false;
|
||||
bool doorAlarm = false;
|
||||
|
||||
PowerClampModel deviceStatus = PowerClampModel(
|
||||
productType: '',
|
||||
productUuid: '',
|
||||
status: PowerStatus(
|
||||
phaseA: Phase(
|
||||
dataPoints: [
|
||||
DataPoint(
|
||||
code: '', customName: '', dpId: 0, time: 0, type: '', value: 0),
|
||||
],
|
||||
),
|
||||
phaseB: Phase(
|
||||
dataPoints: [
|
||||
DataPoint(
|
||||
code: '', customName: '', dpId: 0, time: 0, type: '', value: 0),
|
||||
],
|
||||
),
|
||||
phaseC: Phase(
|
||||
dataPoints: [
|
||||
DataPoint(
|
||||
code: '', customName: '', dpId: 0, time: 0, type: '', value: 0),
|
||||
],
|
||||
),
|
||||
general: Phase(
|
||||
dataPoints: [
|
||||
DataPoint(
|
||||
code: '', customName: '', dpId: 0, time: 0, type: '', value: 0),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
void _fetchPowerClampInfo(
|
||||
PowerClampInitial event, Emitter<PowerClampState> emit) async {
|
||||
emit(PowerClampLoadingState());
|
||||
try {
|
||||
var response = await DevicesAPI.getPowerClampStatus(PCId);
|
||||
PowerClampModel deviceStatus = PowerClampModel.fromJson(response);
|
||||
emit(UpdateState(powerClampModel: deviceStatus));
|
||||
} catch (e) {
|
||||
emit(PowerClampFailedState(errorMessage: e.toString()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
DeviceReport recordGroups =
|
||||
DeviceReport(startTime: '0', endTime: '0', data: []);
|
||||
|
||||
EventDevice recordGroupsDateTime =
|
||||
EventDevice(code: '', eventTime: DateTime.now(), value: '');
|
||||
|
||||
List<EventDevice> record = [
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:15:43'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:15:35'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:15:29'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:15:25'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:15:21'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:15:17'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:15:07'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:14:47'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:14:40'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:14:23'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2024-10-23 11:14:13'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:15:43'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:15:35'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:15:29'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:15:25'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:15:21'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:15:17'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:15:07'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:14:47'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:14:40'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:14:23'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-10-23 11:14:13'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:15:43'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:15:35'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:15:29'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:15:25'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:15:21'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:15:17'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:15:07'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:14:47'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:14:40'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:14:23'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-23 11:14:13'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-11 11:15:43'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-11 11:15:35'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-12 11:15:29'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-13 11:15:25'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-14 11:15:21'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-15 11:15:17'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-16 11:15:07'),
|
||||
value: '2286'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-17 11:14:47'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-18 11:14:40'),
|
||||
value: '2284'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-19 11:14:23'),
|
||||
value: '2285'),
|
||||
EventDevice(
|
||||
code: 'VoltageA',
|
||||
eventTime: DateTime.parse('2023-02-20 11:14:13'),
|
||||
value: '2284'),
|
||||
];
|
||||
List<EventDevice> filteredRecords = [];
|
||||
|
||||
int currentIndex = 0;
|
||||
final List<String> views = ['Day', 'Month', 'Year'];
|
||||
|
||||
Widget dateSwitcher() {
|
||||
void switchView(int direction) {
|
||||
currentIndex = (currentIndex + direction + views.length) % views.length;
|
||||
}
|
||||
|
||||
return StatefulBuilder(
|
||||
builder: (BuildContext context, StateSetter setState) {
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.arrow_left),
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
switchView(-1);
|
||||
});
|
||||
},
|
||||
),
|
||||
Text(
|
||||
views[currentIndex],
|
||||
style: const TextStyle(fontSize: 15, fontWeight: FontWeight.w500),
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.arrow_right),
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
switchView(1);
|
||||
});
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void checkDayMonthYearSelected(
|
||||
SelectDateEvent event, Emitter<PowerClampState> emit) async {
|
||||
emit(PowerClampLoadingState());
|
||||
|
||||
if (currentIndex == 0) {
|
||||
await dayMonthYearPicker(context: event.context).then(
|
||||
(newDate) {
|
||||
if (newDate != null) {
|
||||
dateTime = newDate;
|
||||
formattedDate = DateFormat('yyyy/MM/dd').format(dateTime!);
|
||||
|
||||
add(FilterRecordsByDateEvent(
|
||||
selectedDate: dateTime!,
|
||||
viewType: views[currentIndex],
|
||||
));
|
||||
}
|
||||
},
|
||||
);
|
||||
} else if (currentIndex == 1) {
|
||||
await selectMonthAndYear(event.context).then(
|
||||
(newDate) {
|
||||
if (newDate != null) {
|
||||
dateTime = newDate;
|
||||
formattedDate = DateFormat('yyyy-MM').format(dateTime!);
|
||||
|
||||
add(FilterRecordsByDateEvent(
|
||||
selectedDate: dateTime!,
|
||||
viewType: views[currentIndex],
|
||||
));
|
||||
}
|
||||
},
|
||||
);
|
||||
} else if (currentIndex == 2) {
|
||||
await selectYear(event.context).then(
|
||||
(newDate) {
|
||||
if (newDate != null) {
|
||||
dateTime = newDate;
|
||||
formattedDate = DateFormat('yyyy').format(dateTime!);
|
||||
|
||||
add(FilterRecordsByDateEvent(
|
||||
selectedDate: dateTime!,
|
||||
viewType: views[currentIndex],
|
||||
));
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
emit(DateSelectedState());
|
||||
}
|
||||
|
||||
Future<DateTime?> selectMonthAndYear(BuildContext context) async {
|
||||
int selectedYear = DateTime.now().year;
|
||||
int selectedMonth = DateTime.now().month;
|
||||
|
||||
FixedExtentScrollController yearController =
|
||||
FixedExtentScrollController(initialItem: selectedYear - 1905);
|
||||
FixedExtentScrollController monthController =
|
||||
FixedExtentScrollController(initialItem: selectedMonth - 1);
|
||||
|
||||
return await showModalBottomSheet<DateTime>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return SizedBox(
|
||||
height: 300,
|
||||
child: Column(
|
||||
children: [
|
||||
const Padding(
|
||||
padding: EdgeInsets.all(16.0),
|
||||
child: Text(
|
||||
'Select Month and Year',
|
||||
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
Expanded(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Spacer(),
|
||||
Expanded(
|
||||
child: ListWheelScrollView.useDelegate(
|
||||
controller: yearController,
|
||||
overAndUnderCenterOpacity: 0.2,
|
||||
itemExtent: 50,
|
||||
onSelectedItemChanged: (index) {
|
||||
selectedYear = 1905 + index;
|
||||
},
|
||||
childDelegate: ListWheelChildBuilderDelegate(
|
||||
builder: (context, index) {
|
||||
return Center(
|
||||
child: Text(
|
||||
(1905 + index).toString(),
|
||||
style: const TextStyle(fontSize: 18),
|
||||
),
|
||||
);
|
||||
},
|
||||
childCount: 200,
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: ListWheelScrollView.useDelegate(
|
||||
controller: monthController,
|
||||
overAndUnderCenterOpacity: 0.2,
|
||||
itemExtent: 50,
|
||||
onSelectedItemChanged: (index) {
|
||||
selectedMonth = index + 1;
|
||||
},
|
||||
childDelegate: ListWheelChildBuilderDelegate(
|
||||
builder: (context, index) {
|
||||
return Center(
|
||||
child: Text(
|
||||
DateFormat.MMMM()
|
||||
.format(DateTime(0, index + 1)),
|
||||
style: const TextStyle(fontSize: 18),
|
||||
),
|
||||
);
|
||||
},
|
||||
childCount: 12,
|
||||
),
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
],
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
TextButton(
|
||||
child: const Text('Cancel'),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
TextButton(
|
||||
child: const Text('OK'),
|
||||
onPressed: () {
|
||||
final selectedDateTime =
|
||||
DateTime(selectedYear, selectedMonth);
|
||||
Navigator.of(context).pop(selectedDateTime);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<DateTime?> selectYear(BuildContext context) async {
|
||||
int selectedYear = DateTime.now().year;
|
||||
FixedExtentScrollController yearController =
|
||||
FixedExtentScrollController(initialItem: selectedYear - 1905);
|
||||
|
||||
return await showModalBottomSheet<DateTime>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return SizedBox(
|
||||
height: 300,
|
||||
child: Column(
|
||||
children: [
|
||||
const Padding(
|
||||
padding: EdgeInsets.all(16.0),
|
||||
child: Text(
|
||||
'Select Year',
|
||||
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
Expanded(
|
||||
child: ListWheelScrollView.useDelegate(
|
||||
controller: yearController,
|
||||
overAndUnderCenterOpacity: 0.2,
|
||||
itemExtent: 50,
|
||||
onSelectedItemChanged: (index) {
|
||||
selectedYear = 1905 + index;
|
||||
},
|
||||
childDelegate: ListWheelChildBuilderDelegate(
|
||||
builder: (context, index) {
|
||||
return Center(
|
||||
child: Text(
|
||||
(1905 + index).toString(),
|
||||
style: const TextStyle(fontSize: 18),
|
||||
),
|
||||
);
|
||||
},
|
||||
childCount: 200,
|
||||
),
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
TextButton(
|
||||
child: const Text('Cancel'),
|
||||
onPressed: () {
|
||||
Navigator.of(context)
|
||||
.pop(); // Pops without value, returning null
|
||||
},
|
||||
),
|
||||
TextButton(
|
||||
child: const Text('OK'),
|
||||
onPressed: () {
|
||||
final selectedDateTime = DateTime(selectedYear);
|
||||
Navigator.of(context).pop(
|
||||
selectedDateTime); // Pops with the selected date
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<DateTime?> dayMonthYearPicker({
|
||||
required BuildContext context,
|
||||
}) async {
|
||||
DateTime selectedDate = DateTime.now(); // Default selected date
|
||||
|
||||
return await showModalBottomSheet<DateTime>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return SizedBox(
|
||||
height: 350, // Increased height to accommodate the buttons
|
||||
child: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: CupertinoDatePicker(
|
||||
mode: CupertinoDatePickerMode.date,
|
||||
initialDateTime: DateTime.now(),
|
||||
minimumYear: 1900,
|
||||
maximumYear: DateTime.now().year,
|
||||
onDateTimeChanged: (DateTime newDateTime) {
|
||||
selectedDate =
|
||||
newDateTime; // Update the selected date when changed
|
||||
},
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
TextButton(
|
||||
child: const Text('Cancel'),
|
||||
onPressed: () {
|
||||
Navigator.of(context)
|
||||
.pop(); // Dismiss the modal without returning a value
|
||||
},
|
||||
),
|
||||
TextButton(
|
||||
child: const Text('OK'),
|
||||
onPressed: () {
|
||||
Navigator.of(context)
|
||||
.pop(selectedDate); // Return the selected date
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
List<EnergyData> energyDataList = [];
|
||||
void _filterRecordsByDate(
|
||||
FilterRecordsByDateEvent event, Emitter<PowerClampState> emit) {
|
||||
emit(PowerClampLoadingState());
|
||||
if (event.viewType == 'Year') {
|
||||
filteredRecords = record
|
||||
.where((record) => record.eventTime!.year == event.selectedDate.year)
|
||||
.toList();
|
||||
} else if (event.viewType == 'Month') {
|
||||
filteredRecords = record
|
||||
.where((record) =>
|
||||
record.eventTime!.year == event.selectedDate.year &&
|
||||
record.eventTime!.month == event.selectedDate.month)
|
||||
.toList();
|
||||
} else if (event.viewType == 'Day') {
|
||||
filteredRecords = record
|
||||
.where((record) =>
|
||||
record.eventTime!.year == event.selectedDate.year &&
|
||||
record.eventTime!.month == event.selectedDate.month &&
|
||||
record.eventTime!.day == event.selectedDate.day)
|
||||
.toList();
|
||||
}
|
||||
String getMonthShortName(int month) {
|
||||
final date = DateTime(0, month);
|
||||
return DateFormat.MMM().format(date);
|
||||
}
|
||||
|
||||
energyDataList = filteredRecords.map((eventDevice) {
|
||||
return EnergyData(
|
||||
event.viewType == 'Year'
|
||||
? getMonthShortName(
|
||||
int.tryParse(DateFormat('MM').format(eventDevice.eventTime!))!)
|
||||
: event.viewType == 'Month'
|
||||
? DateFormat('yyyy/MM/dd').format(eventDevice.eventTime!)
|
||||
: DateFormat('HH:mm:ss').format(eventDevice.eventTime!),
|
||||
double.parse(eventDevice.value!),
|
||||
);
|
||||
}).toList();
|
||||
|
||||
Future.delayed(const Duration(milliseconds: 500));
|
||||
emit(FilterRecordsState(filteredRecords: energyDataList));
|
||||
}
|
||||
}
|
||||
|
||||
// Event for filtering records by date
|
||||
|
||||
|
||||
// _listenToChanges() {
|
||||
// try {
|
||||
// DatabaseReference ref =
|
||||
// FirebaseDatabase.instance.ref('device-status/$PCId');
|
||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||
|
||||
// stream.listen((DatabaseEvent event) async {
|
||||
// if (_timer != null) {
|
||||
// await Future.delayed(const Duration(seconds: 2));
|
||||
// }
|
||||
// Map<dynamic, dynamic> usersMap =
|
||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
||||
// List<StatusModel> statusList = [];
|
||||
|
||||
// usersMap['status'].forEach((element) {
|
||||
// statusList.add(StatusModel(code: element['code'], value: true));
|
||||
// });
|
||||
|
||||
// deviceStatus = PowerClampModel.fromJson(statusList);
|
||||
// if (!isClosed) {
|
||||
// add(
|
||||
// PowerClampSwitch(switchD: deviceStatus.doorContactState),
|
||||
// );
|
||||
// }
|
||||
// });
|
||||
// } catch (_) {}
|
||||
// }
|
||||
|
||||
// New Function: Convert the device report data into EnergyData and emit it.
|
||||
// void _mapReportToEnergyData(
|
||||
// FetchEnergyData event, Emitter<PowerClampState> emit) {
|
||||
// try {
|
||||
// List<EnergyData> energyDataList = recordGroups.data
|
||||
// ?.map((event) {
|
||||
// if (event.code == "VoltageA" && event.eventTime != null) {
|
||||
// // Convert eventTime to readable format
|
||||
// DateTime eventDateTime =
|
||||
// DateTime.fromMillisecondsSinceEpoch(event.eventTime!);
|
||||
// String formattedTime =
|
||||
// "${eventDateTime.hour}:${eventDateTime.minute.toString().padLeft(2, '0')} ${eventDateTime.hour >= 12 ? 'PM' : 'AM'}";
|
||||
// double value = double.tryParse(event.value ?? "0") ?? 0;
|
||||
// return EnergyData(
|
||||
// formattedTime, value / 1000); // Assume kWh format
|
||||
// }
|
||||
// return null;
|
||||
// })
|
||||
// .where((data) => data != null)
|
||||
// .cast<EnergyData>()
|
||||
// .toList() ??
|
||||
// [];
|
||||
|
||||
// emit(EnergyDataState(energyData: energyDataList));
|
||||
// } catch (e) {
|
||||
// emit(PowerClampFailedState(errorMessage: e.toString()));
|
||||
// }
|
||||
// }
|
||||
|
||||
// Future<void> selectTimeOfLinePassword(
|
||||
// SelectDateEvent event, Emitter<PowerClampState> emit) async {
|
||||
// emit(ChangeTimeState());
|
||||
// final DateTime? picked = await showDatePicker(
|
||||
// initialDatePickerMode: DatePickerMode.year,
|
||||
// context: event.context,
|
||||
// initialDate: DateTime.now(),
|
||||
// firstDate: DateTime(1905),
|
||||
// lastDate: DateTime(2101),
|
||||
// );
|
||||
// if (picked != null) {
|
||||
// final selectedDateTime = DateTime(
|
||||
// picked.year,
|
||||
// picked.month,
|
||||
// picked.day,
|
||||
// 0,
|
||||
// 0,
|
||||
// );
|
||||
// final selectedTimestamp = DateTime(
|
||||
// selectedDateTime.year,
|
||||
// selectedDateTime.month,
|
||||
// selectedDateTime.day,
|
||||
// selectedDateTime.hour,
|
||||
// selectedDateTime.minute,
|
||||
// ).millisecondsSinceEpoch ~/
|
||||
// 1000;
|
||||
|
||||
// DateTime dateTime = selectedDateTime;
|
||||
// formattedDate = DateFormat('yyyy/MM/dd').format(dateTime);
|
||||
// emit(DateSelectedState());
|
||||
// }
|
||||
// }
|
||||
|
||||
// void _fetchStatus(
|
||||
// PowerClampInitial event, Emitter<PowerClampState> emit) async {
|
||||
// emit(PowerClampLoadingState());
|
||||
// try {
|
||||
// var response = await DevicesAPI.getDeviceStatus(PCId);
|
||||
// List<StatusModel> statusModelList = [];
|
||||
// for (var status in response['status']) {
|
||||
// statusModelList.add(StatusModel.fromJson(status));
|
||||
// }
|
||||
// deviceStatus = PowerClampModel.fromJson(
|
||||
// statusModelList,
|
||||
// );
|
||||
// emit(UpdateState(powerClampModel: deviceStatus));
|
||||
// Future.delayed(const Duration(milliseconds: 500));
|
||||
// // _listenToChanges();
|
||||
// } catch (e) {
|
||||
// emit(PowerClampFailedState(errorMessage: e.toString()));
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// Future<void> fetchLogsForLastMonth(
|
||||
// ReportLogsInitial event, Emitter<PowerClampState> emit) async {
|
||||
// DateTime now = DateTime.now();
|
||||
// DateTime lastMonth = DateTime(now.year, now.month - 1, now.day);
|
||||
|
||||
// int startTime = lastMonth.millisecondsSinceEpoch;
|
||||
// int endTime = now.millisecondsSinceEpoch;
|
||||
|
||||
// try {
|
||||
// emit(PowerClampLoadingState());
|
||||
// var response = await DevicesAPI.getReportLogs(
|
||||
// startTime: startTime.toString(),
|
||||
// endTime: endTime.toString(),
|
||||
// deviceUuid: PCId,
|
||||
// code: event.code!,
|
||||
// );
|
||||
// recordGroups = response;
|
||||
// record = recordGroups.data!.map((event) {
|
||||
// return EventDevice(
|
||||
// code: event.code,
|
||||
// eventTime: event.eventTime != null
|
||||
// ? DateTime.fromMillisecondsSinceEpoch(event.eventTime!)
|
||||
// : null,
|
||||
// value: event.value,
|
||||
// );
|
||||
// }).toList();
|
||||
// for (var event in record) {
|
||||
// print(
|
||||
// 'Code: ${event.code}, Event Time: ${DateFormat('yyyy-MM-dd hh:mm:ss a').format(event.eventTime!)}, Value: ${event.value}');
|
||||
// }
|
||||
// emit(UpdateState(powerClampModel: deviceStatus));
|
||||
// } on DioException catch (e) {
|
||||
// final errorData = e.response!.data;
|
||||
// String errorMessage = errorData['message'];
|
||||
// }
|
||||
// }
|
||||
// int transformTimestamp(int originalTime) {
|
||||
// DateTime originalDateTime =
|
||||
// DateTime.fromMillisecondsSinceEpoch(originalTime);
|
||||
// DateTime transformedDateTime = originalDateTime.add(Duration(hours: 1));
|
||||
// return transformedDateTime.millisecondsSinceEpoch;
|
||||
// }
|
||||
|
||||
// void addDataToRecord(List<Map<String, dynamic>> rawData) {
|
||||
// for (var dataPoint in rawData) {
|
||||
// EventDevice event = EventDevice.fromJson(dataPoint);
|
||||
// record.add(event);
|
||||
// }
|
||||
// }
|
@ -0,0 +1,119 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
abstract class PowerClampEvent extends Equatable {
|
||||
const PowerClampEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class PowerClampLoading extends PowerClampEvent {}
|
||||
|
||||
class PowerClampSwitch extends PowerClampEvent {
|
||||
final bool switchD;
|
||||
final String deviceId;
|
||||
final String productId;
|
||||
const PowerClampSwitch(
|
||||
{required this.switchD, this.deviceId = '', this.productId = ''});
|
||||
|
||||
@override
|
||||
List<Object> get props => [switchD, deviceId, productId];
|
||||
}
|
||||
|
||||
class PowerClampUpdated extends PowerClampEvent {}
|
||||
|
||||
class FetchEnergyData extends PowerClampEvent {}
|
||||
|
||||
class SelectDateEvent extends PowerClampEvent {
|
||||
BuildContext context;
|
||||
SelectDateEvent({required this.context});
|
||||
}
|
||||
|
||||
class PowerClampInitial extends PowerClampEvent {
|
||||
const PowerClampInitial();
|
||||
}
|
||||
|
||||
class ReportLogsInitial extends PowerClampEvent {
|
||||
final String? code;
|
||||
const ReportLogsInitial({required this.code});
|
||||
|
||||
@override
|
||||
List<Object> get props => [code!];
|
||||
}
|
||||
|
||||
class PowerClampChangeStatus extends PowerClampEvent {}
|
||||
|
||||
class GetCounterEvent extends PowerClampEvent {
|
||||
final String deviceCode;
|
||||
const GetCounterEvent({required this.deviceCode});
|
||||
@override
|
||||
List<Object> get props => [deviceCode];
|
||||
}
|
||||
|
||||
class ToggleLowBatteryEvent extends PowerClampEvent {
|
||||
final bool isLowBatteryEnabled;
|
||||
|
||||
const ToggleLowBatteryEvent(this.isLowBatteryEnabled);
|
||||
|
||||
@override
|
||||
List<Object> get props => [isLowBatteryEnabled];
|
||||
}
|
||||
|
||||
class ToggleClosingReminderEvent extends PowerClampEvent {
|
||||
final bool isClosingReminderEnabled;
|
||||
|
||||
const ToggleClosingReminderEvent(this.isClosingReminderEnabled);
|
||||
|
||||
@override
|
||||
List<Object> get props => [isClosingReminderEnabled];
|
||||
}
|
||||
|
||||
class ToggleDoorAlarmEvent extends PowerClampEvent {
|
||||
final bool isDoorAlarmEnabled;
|
||||
|
||||
const ToggleDoorAlarmEvent(this.isDoorAlarmEnabled);
|
||||
|
||||
@override
|
||||
List<Object> get props => [isDoorAlarmEnabled];
|
||||
}
|
||||
|
||||
class SetCounterValue extends PowerClampEvent {
|
||||
final Duration duration;
|
||||
final String deviceCode;
|
||||
const SetCounterValue({required this.duration, required this.deviceCode});
|
||||
@override
|
||||
List<Object> get props => [duration, deviceCode];
|
||||
}
|
||||
|
||||
class StartTimer extends PowerClampEvent {
|
||||
final int duration;
|
||||
|
||||
const StartTimer(this.duration);
|
||||
|
||||
@override
|
||||
List<Object> get props => [duration];
|
||||
}
|
||||
|
||||
class TickTimer extends PowerClampEvent {
|
||||
final int remainingTime;
|
||||
|
||||
const TickTimer(this.remainingTime);
|
||||
|
||||
@override
|
||||
List<Object> get props => [remainingTime];
|
||||
}
|
||||
|
||||
class StopTimer extends PowerClampEvent {}
|
||||
|
||||
class OnClose extends PowerClampEvent {}
|
||||
|
||||
|
||||
class FilterRecordsByDateEvent extends PowerClampEvent {
|
||||
final DateTime selectedDate;
|
||||
final String viewType; // 'Day', 'Month', 'Year'
|
||||
|
||||
const FilterRecordsByDateEvent(
|
||||
{required this.selectedDate, required this.viewType});
|
||||
}
|
||||
|
@ -0,0 +1,57 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:syncrow_app/features/devices/model/power_clamp_model.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_chart.dart';
|
||||
|
||||
class PowerClampState extends Equatable {
|
||||
const PowerClampState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class PowerClampInitialState extends PowerClampState {}
|
||||
|
||||
class PowerClampLoadingState extends PowerClampState {}
|
||||
|
||||
class ChangeTimeState extends PowerClampState {}
|
||||
|
||||
class DateSelectedState extends PowerClampState {}
|
||||
//DateSelectedState
|
||||
|
||||
class PowerClampFailedState extends PowerClampState {
|
||||
final String errorMessage;
|
||||
|
||||
const PowerClampFailedState({required this.errorMessage});
|
||||
|
||||
@override
|
||||
List<Object> get props => [errorMessage];
|
||||
}
|
||||
|
||||
class UpdateState extends PowerClampState {
|
||||
final PowerClampModel powerClampModel;
|
||||
const UpdateState({required this.powerClampModel});
|
||||
|
||||
@override
|
||||
List<Object> get props => [powerClampModel];
|
||||
}
|
||||
|
||||
class LoadingNewSate extends PowerClampState {
|
||||
final PowerClampModel powerClampModel;
|
||||
const LoadingNewSate({required this.powerClampModel});
|
||||
|
||||
@override
|
||||
List<Object> get props => [powerClampModel];
|
||||
}
|
||||
|
||||
class EnergyDataState extends PowerClampState {
|
||||
final List<EnergyData> energyData;
|
||||
|
||||
const EnergyDataState({required this.energyData});
|
||||
}
|
||||
|
||||
// State for filtered records
|
||||
class FilterRecordsState extends PowerClampState {
|
||||
final List<EnergyData> filteredRecords;
|
||||
|
||||
const FilterRecordsState({required this.filteredRecords});
|
||||
}
|
@ -76,6 +76,8 @@ class DeviceModel {
|
||||
tempIcon = Assets.gang3touch;
|
||||
} else if (type == DeviceType.WaterLeak) {
|
||||
tempIcon = Assets.waterLeakIcon;
|
||||
} else if (type == DeviceType.PC) {
|
||||
tempIcon = Assets.powerClampIcon;
|
||||
} else {
|
||||
tempIcon = Assets.assetsIconsLogo;
|
||||
}
|
||||
|
@ -27,6 +27,33 @@ class DeviceReport {
|
||||
};
|
||||
}
|
||||
|
||||
class EventDevice {
|
||||
final String? code;
|
||||
final DateTime? eventTime;
|
||||
final String? value;
|
||||
|
||||
EventDevice({
|
||||
this.code,
|
||||
this.eventTime,
|
||||
this.value,
|
||||
});
|
||||
|
||||
EventDevice.fromJson(Map<String, dynamic> json)
|
||||
: code = json['code'] as String?,
|
||||
eventTime = json['eventTime'] ,
|
||||
value = json['value'] as String?;
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'code': code,
|
||||
'eventTime': eventTime,
|
||||
'value': value,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class DeviceEvent {
|
||||
final String? code;
|
||||
final int? eventTime;
|
||||
|
86
lib/features/devices/model/power_clamp_model.dart
Normal file
@ -0,0 +1,86 @@
|
||||
// PowerClampModel class to represent the response
|
||||
class PowerClampModel {
|
||||
String productUuid;
|
||||
String productType;
|
||||
PowerStatus status;
|
||||
|
||||
PowerClampModel({
|
||||
required this.productUuid,
|
||||
required this.productType,
|
||||
required this.status,
|
||||
});
|
||||
|
||||
factory PowerClampModel.fromJson(Map<String, dynamic> json) {
|
||||
return PowerClampModel(
|
||||
productUuid: json['productUuid'],
|
||||
productType: json['productType'],
|
||||
status: PowerStatus.fromJson(json['status']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class PowerStatus {
|
||||
Phase phaseA;
|
||||
Phase phaseB;
|
||||
Phase phaseC;
|
||||
Phase general;
|
||||
|
||||
PowerStatus({
|
||||
required this.phaseA,
|
||||
required this.phaseB,
|
||||
required this.phaseC,
|
||||
required this.general,
|
||||
});
|
||||
|
||||
factory PowerStatus.fromJson(Map<String, dynamic> json) {
|
||||
return PowerStatus(
|
||||
phaseA: Phase.fromJson(json['phaseA']),
|
||||
phaseB: Phase.fromJson(json['phaseB']),
|
||||
phaseC: Phase.fromJson(json['phaseC']),
|
||||
general: Phase.fromJson(json['general']
|
||||
// List<DataPoint>.from(
|
||||
// json['general'].map((x) => DataPoint.fromJson(x))),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
class Phase {
|
||||
List<DataPoint> dataPoints;
|
||||
|
||||
Phase({required this.dataPoints});
|
||||
|
||||
factory Phase.fromJson(List<dynamic> json) {
|
||||
return Phase(
|
||||
dataPoints: json.map((x) => DataPoint.fromJson(x)).toList(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class DataPoint {
|
||||
dynamic code;
|
||||
dynamic customName;
|
||||
dynamic dpId;
|
||||
dynamic time;
|
||||
dynamic type;
|
||||
dynamic value;
|
||||
|
||||
DataPoint({
|
||||
required this.code,
|
||||
required this.customName,
|
||||
required this.dpId,
|
||||
required this.time,
|
||||
required this.type,
|
||||
required this.value,
|
||||
});
|
||||
|
||||
factory DataPoint.fromJson(Map<String, dynamic> json) {
|
||||
return DataPoint(
|
||||
code: json['code'],
|
||||
customName: json['customName'],
|
||||
dpId: json['dpId'],
|
||||
time: json['time'],
|
||||
type: json['type'],
|
||||
value: json['value'],
|
||||
);
|
||||
}
|
||||
}
|
177
lib/features/devices/view/widgets/power_clamp/power_chart.dart
Normal file
@ -0,0 +1,177 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fl_chart/fl_chart.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class EnergyConsumptionPage extends StatefulWidget {
|
||||
final List<dynamic> chartData;
|
||||
final double totalConsumption;
|
||||
final String date;
|
||||
|
||||
EnergyConsumptionPage({
|
||||
required this.chartData,
|
||||
required this.totalConsumption,
|
||||
required this.date,
|
||||
});
|
||||
|
||||
@override
|
||||
_EnergyConsumptionPageState createState() => _EnergyConsumptionPageState();
|
||||
}
|
||||
|
||||
class _EnergyConsumptionPageState extends State<EnergyConsumptionPage> {
|
||||
late List<dynamic> _chartData;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_chartData = widget.chartData;
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 19),
|
||||
child: LineChart(
|
||||
LineChartData(
|
||||
lineTouchData: LineTouchData(
|
||||
handleBuiltInTouches: true,
|
||||
touchSpotThreshold: 2,
|
||||
getTouchLineEnd: (barData, spotIndex) {
|
||||
return 10.0;
|
||||
},
|
||||
touchTooltipData: LineTouchTooltipData(
|
||||
getTooltipColor: (touchTooltipItem) => Colors.white,
|
||||
tooltipRoundedRadius: 10.0,
|
||||
tooltipPadding: const EdgeInsets.all(8.0),
|
||||
tooltipBorder: BorderSide(color: Colors.grey, width: 1),
|
||||
getTooltipItems: (List<LineBarSpot> touchedSpots) {
|
||||
return touchedSpots.map((spot) {
|
||||
return LineTooltipItem(
|
||||
'${spot.x},\n ${spot.y.toStringAsFixed(2)} kWh',
|
||||
const TextStyle(
|
||||
color: Colors.blue,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 12,
|
||||
),
|
||||
);
|
||||
}).toList();
|
||||
},
|
||||
)),
|
||||
titlesData: FlTitlesData(
|
||||
bottomTitles: AxisTitles(
|
||||
sideTitles: SideTitles(
|
||||
showTitles: false,
|
||||
),
|
||||
),
|
||||
leftTitles: const AxisTitles(
|
||||
sideTitles: SideTitles(
|
||||
showTitles: false,
|
||||
),
|
||||
),
|
||||
rightTitles: AxisTitles(
|
||||
sideTitles: SideTitles(
|
||||
showTitles: false,
|
||||
),
|
||||
),
|
||||
topTitles: AxisTitles(
|
||||
sideTitles: SideTitles(
|
||||
showTitles: true,
|
||||
reservedSize: 70,
|
||||
getTitlesWidget: (value, meta) {
|
||||
int index = value.toInt();
|
||||
if (index >= 0 && index < _chartData.length) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: RotatedBox(
|
||||
quarterTurns: -1,
|
||||
child: Text(_chartData[index].time,
|
||||
style: TextStyle(fontSize: 10)),
|
||||
),
|
||||
);
|
||||
}
|
||||
return const SizedBox.shrink();
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
gridData: FlGridData(
|
||||
show: true,
|
||||
drawVerticalLine: true,
|
||||
horizontalInterval: 1,
|
||||
verticalInterval: 1,
|
||||
getDrawingVerticalLine: (value) {
|
||||
return FlLine(
|
||||
color: Colors.grey.withOpacity(0.2),
|
||||
dashArray: [8, 8],
|
||||
strokeWidth: 1,
|
||||
);
|
||||
},
|
||||
getDrawingHorizontalLine: (value) {
|
||||
return FlLine(
|
||||
color: Colors.grey.withOpacity(0.2),
|
||||
dashArray: [5, 5],
|
||||
strokeWidth: 1,
|
||||
);
|
||||
},
|
||||
drawHorizontalLine: false,
|
||||
),
|
||||
lineBarsData: [
|
||||
LineChartBarData(
|
||||
preventCurveOvershootingThreshold: 0.1,
|
||||
curveSmoothness: 0.5,
|
||||
preventCurveOverShooting: true,
|
||||
aboveBarData: BarAreaData(),
|
||||
spots: _chartData
|
||||
.asMap()
|
||||
.entries
|
||||
.map((entry) => FlSpot(
|
||||
entry.key.toDouble(), entry.value.consumption))
|
||||
.toList(),
|
||||
isCurved: true,
|
||||
color: ColorsManager.chart.withOpacity(0.6),
|
||||
show: true,
|
||||
shadow: Shadow(color: Colors.black12),
|
||||
belowBarData: BarAreaData(
|
||||
show: true,
|
||||
gradient: LinearGradient(
|
||||
colors: [
|
||||
ColorsManager.chart.withOpacity(0.5),
|
||||
Colors.blue.withOpacity(0.1),
|
||||
],
|
||||
begin: Alignment.center,
|
||||
end: Alignment.bottomCenter,
|
||||
),
|
||||
),
|
||||
dotData: FlDotData(
|
||||
show: false,
|
||||
),
|
||||
isStrokeCapRound: true,
|
||||
barWidth: 2,
|
||||
),
|
||||
],
|
||||
borderData: FlBorderData(
|
||||
show: false,
|
||||
border: Border.all(
|
||||
color: Color(0xff023DFE).withOpacity(0.7),
|
||||
width: 10,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class EnergyData {
|
||||
EnergyData(this.time, this.consumption);
|
||||
final String time;
|
||||
final double consumption;
|
||||
}
|
||||
//
|
@ -0,0 +1,235 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_info_card.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
|
||||
import 'package:syncrow_app/generated/assets.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
import 'power_chart.dart';
|
||||
|
||||
class PowerClampCard extends StatelessWidget {
|
||||
final bool? isGeneral;
|
||||
final String? title;
|
||||
final String? totalCurrent;
|
||||
final String? totalActiveGeneral;
|
||||
final String? totalCurrentGeneral;
|
||||
final String? totalFrequencyGeneral;
|
||||
final String? totalVoltage;
|
||||
final String? totalActive;
|
||||
final String? totalFrequency;
|
||||
final String? dateTimeSelected;
|
||||
final String? totalFactor;
|
||||
final Widget? dateSwitcher;
|
||||
final String? formattedDate;
|
||||
final String? energyConsumption;
|
||||
final Function()? selectDateEvent;
|
||||
final List<EnergyData>? chartData;
|
||||
final BuildContext? context;
|
||||
|
||||
const PowerClampCard({
|
||||
Key? key,
|
||||
this.isGeneral,
|
||||
this.title,
|
||||
this.totalCurrent,
|
||||
this.totalActiveGeneral,
|
||||
this.dateTimeSelected,
|
||||
this.totalCurrentGeneral,
|
||||
this.totalFrequencyGeneral,
|
||||
this.totalVoltage,
|
||||
this.totalActive,
|
||||
this.totalFrequency,
|
||||
this.totalFactor,
|
||||
this.dateSwitcher,
|
||||
this.formattedDate,
|
||||
this.selectDateEvent,
|
||||
this.chartData,
|
||||
this.context,
|
||||
this.energyConsumption,
|
||||
//nConsumption
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultContainer(
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Text('Energy usage'),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
BodyLarge(
|
||||
text: title!,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w700,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
BodyLarge(
|
||||
text: energyConsumption!,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w700,
|
||||
),
|
||||
const BodySmall(text: 'kWh')
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
isGeneral == true
|
||||
? Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
PowerClampInfoCard(
|
||||
iconPath: Assets.powerActiveIcon,
|
||||
title: 'Active',
|
||||
value: '$totalActiveGeneral',
|
||||
unit: ' w',
|
||||
),
|
||||
PowerClampInfoCard(
|
||||
iconPath: Assets.voltMeterIcon,
|
||||
title: 'Current',
|
||||
value: '$totalCurrentGeneral',
|
||||
unit: ' A',
|
||||
),
|
||||
PowerClampInfoCard(
|
||||
iconPath: Assets.frequencyIcon,
|
||||
title: 'Frequency',
|
||||
value: '$totalFrequencyGeneral',
|
||||
unit: ' Hz',
|
||||
),
|
||||
],
|
||||
)
|
||||
: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
PowerClampInfoCard(
|
||||
iconPath: Assets.voltageIcon,
|
||||
title: 'Voltage',
|
||||
value: totalVoltage!,
|
||||
unit: ' V',
|
||||
),
|
||||
PowerClampInfoCard(
|
||||
iconPath: Assets.voltMeterIcon,
|
||||
title: 'Current',
|
||||
value: '$totalCurrent',
|
||||
unit: ' A',
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
PowerClampInfoCard(
|
||||
iconPath: Assets.powerActiveIcon,
|
||||
title: 'Active Power',
|
||||
value: '$totalActive',
|
||||
unit: ' w',
|
||||
),
|
||||
PowerClampInfoCard(
|
||||
iconPath: Assets.speedoMeter,
|
||||
title: 'Power Factor',
|
||||
value: '$totalFactor',
|
||||
unit: '',
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const BodyMedium(
|
||||
text: 'Total consumption',
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w700,
|
||||
),
|
||||
Text(
|
||||
dateTimeSelected !,
|
||||
style: const TextStyle(
|
||||
fontSize: 8, fontWeight: FontWeight.w400),
|
||||
),
|
||||
],
|
||||
),
|
||||
const Row(
|
||||
children: [
|
||||
BodyMedium(
|
||||
text: '1000.00 ',
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w700),
|
||||
BodyMedium(
|
||||
text: 'kWh',
|
||||
fontSize: 8,
|
||||
fontWeight: FontWeight.w700),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
child: EnergyConsumptionPage(
|
||||
chartData: chartData!.isNotEmpty
|
||||
? chartData!
|
||||
: [
|
||||
EnergyData('12:00 AM', 4.0),
|
||||
EnergyData('01:00 AM', 3.5),
|
||||
EnergyData('02:00 AM', 3.8),
|
||||
EnergyData('03:00 AM', 3.2),
|
||||
EnergyData('04:00 AM', 4.0),
|
||||
EnergyData('05:00 AM', 3.4),
|
||||
EnergyData('06:00 AM', 3.2),
|
||||
EnergyData('07:00 AM', 3.5),
|
||||
EnergyData('08:00 AM', 3.8),
|
||||
EnergyData('09:00 AM', 3.6),
|
||||
EnergyData('10:00 AM', 3.9),
|
||||
EnergyData('11:00 AM', 4.0),
|
||||
],
|
||||
totalConsumption: chartData!
|
||||
.fold(0, (sum, data) => sum + data.consumption),
|
||||
date: '10/08/2024',
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
DefaultContainer(
|
||||
padding: EdgeInsets.all(0),
|
||||
color: ColorsManager.grayBox,
|
||||
child: SizedBox(
|
||||
child: dateSwitcher,
|
||||
)),
|
||||
InkWell(
|
||||
onTap: selectDateEvent,
|
||||
child: DefaultContainer(
|
||||
color: ColorsManager.grayBox,
|
||||
child: SizedBox(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(5),
|
||||
child: Text(formattedDate!),
|
||||
),
|
||||
)),
|
||||
),
|
||||
],
|
||||
)
|
||||
]),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,242 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_bloc.dart';
|
||||
import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_event.dart';
|
||||
import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_state.dart';
|
||||
import 'package:syncrow_app/features/devices/model/device_model.dart';
|
||||
import 'package:syncrow_app/features/devices/model/power_clamp_model.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_chart.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_clamp_card.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class PowerClampPage extends StatefulWidget {
|
||||
final DeviceModel? device;
|
||||
|
||||
const PowerClampPage({super.key, this.device});
|
||||
|
||||
@override
|
||||
State<PowerClampPage> createState() => _PowerClampPageState();
|
||||
}
|
||||
|
||||
class _PowerClampPageState extends State<PowerClampPage> {
|
||||
final PageController _pageController = PageController();
|
||||
int _currentPage = 0;
|
||||
static const int _pageCount = 4;
|
||||
late PowerClampModel model;
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_pageController.addListener(_handlePageChange);
|
||||
model = _initialPowerClampModel();
|
||||
}
|
||||
|
||||
void _handlePageChange() {
|
||||
int nextPage = _pageController.page?.round() ?? 0;
|
||||
if (_currentPage != nextPage) {
|
||||
setState(() {
|
||||
_currentPage = nextPage;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_pageController.removeListener(_handlePageChange);
|
||||
_pageController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultScaffold(
|
||||
title: 'Power Clamp',
|
||||
child: BlocProvider(
|
||||
create: (context) => PowerClampBloc(PCId: widget.device?.uuid ?? '')
|
||||
..add(const PowerClampInitial()),
|
||||
// ..add(const ReportLogsInitial(code: 'VoltageA')),
|
||||
child: BlocBuilder<PowerClampBloc, PowerClampState>(
|
||||
builder: (context, state) {
|
||||
final blocProvider = context.read<PowerClampBloc>();
|
||||
List<EnergyData> chartData = [];
|
||||
|
||||
if (state is UpdateState) {
|
||||
model = state.powerClampModel;
|
||||
} else if (state is EnergyDataState) {
|
||||
chartData = state.energyData;
|
||||
} else if (state is FilterRecordsState) {
|
||||
chartData = state.filteredRecords;
|
||||
}
|
||||
|
||||
if (state is PowerClampLoadingState) {
|
||||
return const Center(
|
||||
child: DefaultContainer(
|
||||
width: 50,
|
||||
height: 50,
|
||||
child: CircularProgressIndicator(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
Flexible(
|
||||
child: RefreshIndicator(
|
||||
onRefresh: () async {
|
||||
blocProvider.add(const PowerClampInitial());
|
||||
},
|
||||
child: PageView(controller: _pageController, children: [
|
||||
_buildPowerClampCard(
|
||||
title: 'Total Energy \nConsumption',
|
||||
phase: model.status.general,
|
||||
isGeneral: true,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
_buildPowerClampCard(
|
||||
title: 'Phase A Energy \nConsumption',
|
||||
phase: model.status.phaseA,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
_buildPowerClampCard(
|
||||
title: 'Phase B Energy \nConsumption',
|
||||
phase: model.status.phaseB,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
_buildPowerClampCard(
|
||||
title: 'Phase C Energy \nConsumption',
|
||||
phase: model.status.phaseC,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
]),
|
||||
),
|
||||
),
|
||||
_buildPageIndicator(),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
PowerClampModel _initialPowerClampModel() {
|
||||
return PowerClampModel(
|
||||
productType: '',
|
||||
productUuid: '',
|
||||
status: PowerStatus(
|
||||
phaseA: Phase(dataPoints: _emptyDataPoints()),
|
||||
phaseB: Phase(dataPoints: _emptyDataPoints()),
|
||||
phaseC: Phase(dataPoints: _emptyDataPoints()),
|
||||
general: Phase(dataPoints: _emptyDataPoints()),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
List<DataPoint> _emptyDataPoints() {
|
||||
return [
|
||||
DataPoint(
|
||||
code: '',
|
||||
customName: '',
|
||||
dpId: 0,
|
||||
time: 0,
|
||||
type: '',
|
||||
value: 0,
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
List<Widget> _buildPowerClampCards(PowerClampModel model,
|
||||
List<EnergyData> chartData, PowerClampBloc blocProvider) {
|
||||
return [
|
||||
_buildPowerClampCard(
|
||||
title: 'Total Energy \nConsumption',
|
||||
phase: model.status.general,
|
||||
isGeneral: true,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
_buildPowerClampCard(
|
||||
title: 'Phase A Energy \nConsumption',
|
||||
phase: model.status.phaseA,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
_buildPowerClampCard(
|
||||
title: 'Phase B Energy \nConsumption',
|
||||
phase: model.status.phaseB,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
_buildPowerClampCard(
|
||||
title: 'Phase C Energy \nConsumption',
|
||||
phase: model.status.phaseC,
|
||||
chartData: chartData,
|
||||
blocProvider: blocProvider,
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
Widget _buildPowerClampCard({
|
||||
required String title,
|
||||
required Phase phase,
|
||||
bool isGeneral = false,
|
||||
required List<EnergyData> chartData,
|
||||
required PowerClampBloc blocProvider,
|
||||
}) {
|
||||
return PowerClampCard(
|
||||
dateTimeSelected:blocProvider.formattedDate,
|
||||
energyConsumption: _getValueOrNA(phase.dataPoints, isGeneral ? 0 : 5),
|
||||
title: title,
|
||||
isGeneral: isGeneral,
|
||||
dateSwitcher: blocProvider.dateSwitcher(),
|
||||
formattedDate: blocProvider.formattedDate,
|
||||
selectDateEvent: () {
|
||||
blocProvider.add(SelectDateEvent(context: context));
|
||||
},
|
||||
totalActiveGeneral: isGeneral ? _getValueOrNA(phase.dataPoints, 2) : null,
|
||||
totalCurrentGeneral:
|
||||
isGeneral ? _getValueOrNA(phase.dataPoints, 1) : null,
|
||||
totalFrequencyGeneral:
|
||||
isGeneral ? _getValueOrNA(phase.dataPoints, 4) : null,
|
||||
totalFactor: !isGeneral ? _getValueOrNA(phase.dataPoints, 3) : null,
|
||||
totalActive: !isGeneral ? _getValueOrNA(phase.dataPoints, 2) : null,
|
||||
totalCurrent: !isGeneral ? _getValueOrNA(phase.dataPoints, 1) : null,
|
||||
totalVoltage: !isGeneral ? _getValueOrNA(phase.dataPoints, 0) : null,
|
||||
chartData: chartData,
|
||||
context: context,
|
||||
);
|
||||
}
|
||||
|
||||
String _getValueOrNA(List<DataPoint> dataPoints, int index) {
|
||||
return dataPoints.length > index
|
||||
? dataPoints[index].value.toString()
|
||||
: 'N/A';
|
||||
}
|
||||
|
||||
Widget _buildPageIndicator() {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 10.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: List.generate(_pageCount, (index) {
|
||||
return AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
margin: const EdgeInsets.symmetric(horizontal: 4.0),
|
||||
height: 10.0,
|
||||
width: _currentPage == index ? 10.0 : 10.0,
|
||||
decoration: BoxDecoration(
|
||||
color:
|
||||
_currentPage == index ? Colors.grey : ColorsManager.greyColor,
|
||||
borderRadius: BorderRadius.circular(5.0),
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,312 @@
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
// import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_bloc.dart';
|
||||
// import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_event.dart';
|
||||
// import 'package:syncrow_app/features/devices/bloc/power_clamp_bloc/power_clamp_state.dart';
|
||||
// import 'package:syncrow_app/features/devices/model/device_model.dart';
|
||||
// import 'package:syncrow_app/features/devices/model/power_clamp_model.dart';
|
||||
// import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_chart.dart';
|
||||
// import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_clamp_card.dart';
|
||||
// import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
// import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
|
||||
// import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
// class PowerClampTestPage extends StatefulWidget {
|
||||
// late final DeviceModel? device;
|
||||
|
||||
// PowerClampTestPage({super.key, this.device});
|
||||
|
||||
// @override
|
||||
// _PowerClampTestPageState createState() => _PowerClampTestPageState();
|
||||
// }
|
||||
|
||||
// class _PowerClampTestPageState extends State<PowerClampTestPage> {
|
||||
// final PageController _pageController = PageController();
|
||||
// int _currentPage = 0;
|
||||
// final int _pageCount = 4;
|
||||
// @override
|
||||
// void initState() {
|
||||
// super.initState();
|
||||
// _pageController.addListener(() {
|
||||
// int nextPage = _pageController.page?.round() ?? 0;
|
||||
// if (_currentPage != nextPage) {
|
||||
// setState(() {
|
||||
// _currentPage = nextPage;
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
// @override
|
||||
// void dispose() {
|
||||
// _pageController.dispose();
|
||||
// super.dispose();
|
||||
// }
|
||||
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// return DefaultScaffold(
|
||||
// title: 'Power Clamp',
|
||||
// child: BlocProvider(
|
||||
// create: (context) => PowerClampBloc(PCId: widget.device?.uuid ?? '')
|
||||
// ..add(const PowerClampInitial()),
|
||||
// child: BlocBuilder<PowerClampBloc, PowerClampState>(
|
||||
// builder: (context, state) {
|
||||
// final _blocProvider = BlocProvider.of<PowerClampBloc>(context);
|
||||
// PowerClampModel model = PowerClampModel(
|
||||
// productType: '',
|
||||
// productUuid: '',
|
||||
// status: PowerStatus(
|
||||
// phaseA: Phase(
|
||||
// dataPoints: [
|
||||
// DataPoint(
|
||||
// code: '',
|
||||
// customName: '',
|
||||
// dpId: 0,
|
||||
// time: 0,
|
||||
// type: '',
|
||||
// value: 0),
|
||||
// ],
|
||||
// ),
|
||||
// phaseB: Phase(
|
||||
// dataPoints: [
|
||||
// DataPoint(
|
||||
// code: '',
|
||||
// customName: '',
|
||||
// dpId: 0,
|
||||
// time: 0,
|
||||
// type: '',
|
||||
// value: 0),
|
||||
// ],
|
||||
// ),
|
||||
// phaseC: Phase(
|
||||
// dataPoints: [
|
||||
// DataPoint(
|
||||
// code: '',
|
||||
// customName: '',
|
||||
// dpId: 0,
|
||||
// time: 0,
|
||||
// type: '',
|
||||
// value: 0),
|
||||
// ],
|
||||
// ),
|
||||
// general: Phase(
|
||||
// dataPoints: [
|
||||
// DataPoint(
|
||||
// code: '',
|
||||
// customName: '',
|
||||
// dpId: 0,
|
||||
// time: 0,
|
||||
// type: '',
|
||||
// value: 0),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// List<EnergyData> chartData = [];
|
||||
|
||||
// if (state is UpdateState) {
|
||||
// model = state.powerClampModel;
|
||||
// } else if (state is EnergyDataState) {
|
||||
// chartData = state.energyData;
|
||||
// }
|
||||
// return state is PowerClampLoadingState
|
||||
// ? const Center(
|
||||
// child: DefaultContainer(
|
||||
// width: 50,
|
||||
// height: 50,
|
||||
// child: CircularProgressIndicator()),
|
||||
// )
|
||||
// : Column(
|
||||
// children: [
|
||||
// Flexible(
|
||||
// child: RefreshIndicator(
|
||||
// onRefresh: () async {
|
||||
// _blocProvider.add(const PowerClampInitial());
|
||||
// },
|
||||
// child: PageView(
|
||||
// controller: _pageController,
|
||||
// children: [
|
||||
// PowerClampCard(
|
||||
// energyConsumption:
|
||||
// model.status.general.dataPoints.length > 0
|
||||
// ? model.status.general.dataPoints[0].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// title: 'Total Energy \nConsumption',
|
||||
// isGeneral: true,
|
||||
// dateSwitcher: Container(),
|
||||
// formattedDate: _blocProvider.formattedDate,
|
||||
// selectDateEvent: () {
|
||||
// _blocProvider.add(
|
||||
// SelectDateEvent(context: context));
|
||||
// },
|
||||
// totalFrequencyGeneral:
|
||||
// model.status.general.dataPoints.length > 4
|
||||
// ? model.status.general.dataPoints[4].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalActiveGeneral:
|
||||
// model.status.general.dataPoints.length > 2
|
||||
// ? model.status.general.dataPoints[2].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalCurrentGeneral:
|
||||
// model.status.general.dataPoints.length > 1
|
||||
// ? model.status.general.dataPoints[1].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalVoltage:
|
||||
// model.status.general.dataPoints.length > 0
|
||||
// ? model.status.general.dataPoints[0].value.toString()
|
||||
// : 'N/A',
|
||||
// chartData: chartData,
|
||||
// context: context),
|
||||
|
||||
|
||||
|
||||
// PowerClampCard(
|
||||
// energyConsumption:
|
||||
// model.status.phaseA.dataPoints.length > 5
|
||||
// ? model.status.phaseA.dataPoints[5].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// title: 'Phase A Energy \nConsumption',
|
||||
// dateSwitcher: _blocProvider.dateSwitcher(),
|
||||
// formattedDate: _blocProvider.formattedDate,
|
||||
// selectDateEvent: () {
|
||||
// _blocProvider.add(
|
||||
// SelectDateEvent(context: context));
|
||||
// },
|
||||
// totalFactor: model.status.phaseA.dataPoints.length > 3
|
||||
// ? model.status.phaseA.dataPoints[3].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalActive: model.status.phaseA.dataPoints.length > 2
|
||||
// ? model.status.phaseA.dataPoints[2].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalCurrent:
|
||||
// model.status.phaseA.dataPoints.length > 1
|
||||
// ? model.status.phaseA.dataPoints[1]
|
||||
// .value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalVoltage:
|
||||
// model.status.phaseA.dataPoints.length > 0
|
||||
// ? model.status.phaseA.dataPoints[0]
|
||||
// .value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// chartData: chartData,
|
||||
// context: context),
|
||||
|
||||
|
||||
// PowerClampCard(
|
||||
// energyConsumption:
|
||||
// model.status.phaseB.dataPoints.length > 5
|
||||
// ? model.status.phaseB.dataPoints[5].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// title: 'Phase B Energy \nConsumption',
|
||||
// dateSwitcher: _blocProvider.dateSwitcher(),
|
||||
// formattedDate: _blocProvider.formattedDate,
|
||||
// selectDateEvent: () {
|
||||
// _blocProvider.add(
|
||||
// SelectDateEvent(context: context));
|
||||
// },
|
||||
// totalFactor: model.status.phaseA.dataPoints.length > 3
|
||||
// ? model.status.phaseB.dataPoints[3].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalActive: model.status.phaseB.dataPoints.length > 2
|
||||
// ? model.status.phaseB.dataPoints[2].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalCurrent:
|
||||
// model.status.phaseB.dataPoints.length > 1
|
||||
// ? model.status.phaseB.dataPoints[1]
|
||||
// .value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalVoltage:
|
||||
// model.status.phaseB.dataPoints.length > 0
|
||||
// ? model.status.phaseB.dataPoints[0]
|
||||
// .value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// chartData: chartData,
|
||||
// context: context),
|
||||
|
||||
|
||||
// PowerClampCard(
|
||||
// energyConsumption:
|
||||
// model.status.phaseC.dataPoints.length > 5
|
||||
// ? model.status.phaseC.dataPoints[5].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// title: 'Phase A Energy \nConsumption',
|
||||
// dateSwitcher: _blocProvider.dateSwitcher(),
|
||||
// formattedDate: _blocProvider.formattedDate,
|
||||
// selectDateEvent: () {
|
||||
// _blocProvider.add(
|
||||
// SelectDateEvent(context: context));
|
||||
// },
|
||||
// totalFactor: model.status.phaseC.dataPoints.length > 3
|
||||
// ? model.status.phaseC.dataPoints[3].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalActive: model.status.phaseC.dataPoints.length > 2
|
||||
// ? model.status.phaseC.dataPoints[2].value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalCurrent:
|
||||
// model.status.phaseC.dataPoints.length > 1
|
||||
// ? model.status.phaseC.dataPoints[1]
|
||||
// .value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// totalVoltage:
|
||||
// model.status.phaseC.dataPoints.length > 0
|
||||
// ? model.status.phaseC.dataPoints[0]
|
||||
// .value
|
||||
// .toString()
|
||||
// : 'N/A',
|
||||
// chartData: chartData,
|
||||
// context: context),
|
||||
|
||||
// ]),
|
||||
// ),
|
||||
// ),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.symmetric(vertical: 10.0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
// children: List.generate(_pageCount, (index) {
|
||||
// return AnimatedContainer(
|
||||
// duration: const Duration(milliseconds: 300),
|
||||
// margin:
|
||||
// const EdgeInsets.symmetric(horizontal: 4.0),
|
||||
// height: 10.0,
|
||||
// width: _currentPage == index
|
||||
// ? 10.0
|
||||
// : 10.0, // Change width for current page
|
||||
// decoration: BoxDecoration(
|
||||
// color: _currentPage == index
|
||||
// ? Colors
|
||||
// .grey // Use a different color for the active indicator
|
||||
// : ColorsManager.greyColor,
|
||||
// borderRadius: BorderRadius.circular(5.0),
|
||||
// ),
|
||||
// );
|
||||
// }),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
@ -0,0 +1,75 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class PowerClampInfoCard extends StatelessWidget {
|
||||
final String iconPath;
|
||||
final String title;
|
||||
final String value;
|
||||
final String unit;
|
||||
|
||||
const PowerClampInfoCard({
|
||||
Key? key,
|
||||
required this.iconPath,
|
||||
required this.title,
|
||||
required this.value,
|
||||
required this.unit,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(5.0),
|
||||
child: DefaultContainer(
|
||||
height: 55,
|
||||
color: ColorsManager.grayBox,
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Expanded(
|
||||
child: SvgPicture.asset(
|
||||
iconPath,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 3,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
BodyMedium(
|
||||
fontWeight: FontWeight.w400,
|
||||
fontSize: 8,
|
||||
text: title,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
BodyMedium(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 15,
|
||||
text: value,
|
||||
),
|
||||
BodyMedium(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 8,
|
||||
text: unit,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,30 +1,88 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:syncrow_app/features/devices/model/room_model.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/room_page_switch.dart';
|
||||
import 'package:syncrow_app/generated/assets.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class RoomPage extends StatelessWidget {
|
||||
class RoomPage extends StatefulWidget {
|
||||
const RoomPage({super.key, required this.room});
|
||||
|
||||
final RoomModel room;
|
||||
|
||||
@override
|
||||
_RoomPageState createState() => _RoomPageState();
|
||||
}
|
||||
|
||||
class _RoomPageState extends State<RoomPage> {
|
||||
final TextEditingController _searchController = TextEditingController();
|
||||
List<dynamic> _filteredDevices = [];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_filteredDevices = widget.room.devices ?? [];
|
||||
_searchController.addListener(_filterDevices);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_searchController.removeListener(_filterDevices);
|
||||
_searchController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _filterDevices() {
|
||||
final query = _searchController.text.toLowerCase();
|
||||
setState(() {
|
||||
_filteredDevices = widget.room.devices!
|
||||
.where((device) => device.type!.toLowerCase().contains(query))
|
||||
.toList();
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SingleChildScrollView(
|
||||
child: GridView.builder(
|
||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
crossAxisSpacing: 10,
|
||||
mainAxisSpacing: 10,
|
||||
childAspectRatio: 1.5,
|
||||
return Column(
|
||||
children: [
|
||||
if (widget.room.devices!.isNotEmpty)
|
||||
TextFormField(
|
||||
controller: _searchController,
|
||||
decoration: InputDecoration(
|
||||
hintText: 'Search',
|
||||
hintStyle: const TextStyle(
|
||||
color: ColorsManager.textGray,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w400),
|
||||
prefixIcon: Container(
|
||||
padding: const EdgeInsets.all(5.0),
|
||||
margin: const EdgeInsets.all(10.0),
|
||||
child: SvgPicture.asset(
|
||||
Assets.searchIcon,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: GridView.builder(
|
||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
crossAxisSpacing: 10,
|
||||
mainAxisSpacing: 10,
|
||||
childAspectRatio: 1.5,
|
||||
),
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
itemCount: _filteredDevices.length,
|
||||
itemBuilder: (context, index) {
|
||||
return RoomPageSwitch(device: _filteredDevices[index]);
|
||||
},
|
||||
),
|
||||
),
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
shrinkWrap: true,
|
||||
itemCount: room.devices!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return RoomPageSwitch(device: room.devices![index]);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import 'package:syncrow_app/features/devices/view/widgets/gateway/gateway_view.d
|
||||
import 'package:syncrow_app/features/devices/view/widgets/lights/light_interface.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/one_gang/one_gang_Interface.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/one_touch/one_touch_screen.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/power_clamp/power_clamp_page.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/three_touch/three_touch_interface.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/two_gang/two_gang_Interface.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/two_touch/two_touch_Interface.dart';
|
||||
@ -170,6 +171,13 @@ void showDeviceInterface(DeviceModel device, BuildContext context) {
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
DoorSensorScreen(device: device)));
|
||||
|
||||
case DeviceType.PC:
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
PowerClampPage(device: device)));
|
||||
|
||||
case DeviceType.OneTouch:
|
||||
Navigator.push(
|
||||
context,
|
||||
|
@ -40,13 +40,10 @@ class SceneListview extends StatelessWidget {
|
||||
sceneName: scene.name,
|
||||
),
|
||||
);
|
||||
context
|
||||
.read<SmartSceneSelectBloc>()
|
||||
.add(const SmartSceneClearEvent());
|
||||
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent());
|
||||
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(
|
||||
FetchSceneTasksEvent(
|
||||
sceneId: scene.id, isAutomation: false));
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
.add(FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false));
|
||||
|
||||
/// the state to set the scene type must be after the fetch
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
@ -59,11 +56,13 @@ class SceneListview extends StatelessWidget {
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Image.asset(
|
||||
child: Image.memory(
|
||||
height: 32,
|
||||
width: 32,
|
||||
Assets.assetsIconsLogo,
|
||||
scene.iconInBytes,
|
||||
fit: BoxFit.fill,
|
||||
errorBuilder: (context, error, stackTrace) => Image.asset(
|
||||
height: 32, width: 32, fit: BoxFit.fill, Assets.assetsIconsLogo),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
|
@ -13,7 +13,9 @@ import 'package:syncrow_app/features/devices/view/widgets/two_touch/two_touch_wi
|
||||
import 'package:syncrow_app/features/devices/view/widgets/water_heater/wh_wizard.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
|
||||
import 'package:syncrow_app/generated/assets.dart';
|
||||
import 'package:syncrow_app/utils/context_extension.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class WizardPage extends StatelessWidget {
|
||||
final List<DevicesCategoryModel> groupsList;
|
||||
@ -21,126 +23,171 @@ class WizardPage extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GridView.builder(
|
||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
crossAxisSpacing: 10,
|
||||
mainAxisSpacing: 10,
|
||||
childAspectRatio: 1.5,
|
||||
),
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
shrinkWrap: true,
|
||||
itemCount: groupsList.length,
|
||||
itemBuilder: (_, index) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
if (groupsList[index].name == 'AC') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const ACsView()));
|
||||
}
|
||||
if (groupsList[index].name == '3G') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const ThreeGangWizard()));
|
||||
}
|
||||
if (groupsList[index].name == '2G') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const TwoGangWizard()));
|
||||
}
|
||||
if (groupsList[index].name == '1G') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const OneGangWizard()));
|
||||
}
|
||||
if (groupsList[index].name == 'WH') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const WHWizard()));
|
||||
}
|
||||
final TextEditingController _searchController = TextEditingController();
|
||||
List<DevicesCategoryModel> _filteredGroups = groupsList;
|
||||
|
||||
if (groupsList[index].name == '1GT') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const OneTouchWizard()));
|
||||
}
|
||||
void _filterGroups(String query) {
|
||||
_filteredGroups = groupsList
|
||||
.where((group) =>
|
||||
group.name!.toLowerCase().contains(query.toLowerCase()))
|
||||
.toList();
|
||||
}
|
||||
|
||||
if (groupsList[index].name == '2GT') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const TwoTouchWizard()));
|
||||
}
|
||||
|
||||
if (groupsList[index].name == '3GT') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const ThreeTouchWizard()));
|
||||
}
|
||||
|
||||
if (groupsList[index].name == 'GD') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const GarageWizard()));
|
||||
}
|
||||
if (groupsList[index].name == 'CUR') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const CurtainsWizard()));
|
||||
}
|
||||
},
|
||||
child: DefaultContainer(
|
||||
padding: const EdgeInsets.all(15),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
groupsList[index].icon!,
|
||||
return StatefulBuilder(
|
||||
builder: (context, setState) {
|
||||
return ListView(
|
||||
children: [
|
||||
if (groupsList.isNotEmpty)
|
||||
TextFormField(
|
||||
controller: _searchController,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
_filterGroups(value);
|
||||
});
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: 'Search',
|
||||
hintStyle: const TextStyle(
|
||||
color: ColorsManager.textGray,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w400),
|
||||
prefixIcon: Container(
|
||||
padding: const EdgeInsets.all(5.0),
|
||||
margin: const EdgeInsets.all(10.0),
|
||||
child: SvgPicture.asset(
|
||||
Assets.searchIcon,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
// CustomSwitch(
|
||||
],
|
||||
),
|
||||
FittedBox(
|
||||
fit: BoxFit.scaleDown,
|
||||
child: BodyLarge(
|
||||
text: groupsList[index].name!,
|
||||
style: context.bodyLarge.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 0,
|
||||
fontSize: 20,
|
||||
color: Colors.grey,
|
||||
),
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
GridView.builder(
|
||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
crossAxisSpacing: 10,
|
||||
mainAxisSpacing: 10,
|
||||
childAspectRatio: 1.5,
|
||||
),
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemCount: _filteredGroups.length,
|
||||
itemBuilder: (_, index) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
if (_filteredGroups[index].name == 'AC') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const ACsView()));
|
||||
}
|
||||
if (_filteredGroups[index].name == '3G') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const ThreeGangWizard()));
|
||||
}
|
||||
if (_filteredGroups[index].name == '2G') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const TwoGangWizard()));
|
||||
}
|
||||
if (_filteredGroups[index].name == '1G') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const OneGangWizard()));
|
||||
}
|
||||
if (_filteredGroups[index].name == 'WH') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const WHWizard()));
|
||||
}
|
||||
|
||||
if (_filteredGroups[index].name == '1GT') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const OneTouchWizard()));
|
||||
}
|
||||
|
||||
if (_filteredGroups[index].name == '2GT') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const TwoTouchWizard()));
|
||||
}
|
||||
|
||||
if (_filteredGroups[index].name == '3GT') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const ThreeTouchWizard()));
|
||||
}
|
||||
|
||||
if (_filteredGroups[index].name == 'GD') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const GarageWizard()));
|
||||
}
|
||||
if (_filteredGroups[index].name == 'CUR') {
|
||||
Navigator.push(
|
||||
context,
|
||||
PageRouteBuilder(
|
||||
pageBuilder: (context, animation1, animation2) =>
|
||||
const CurtainsWizard()));
|
||||
}
|
||||
},
|
||||
child: DefaultContainer(
|
||||
padding: const EdgeInsets.all(15),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
_filteredGroups[index].icon!,
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
],
|
||||
),
|
||||
FittedBox(
|
||||
fit: BoxFit.scaleDown,
|
||||
child: BodyLarge(
|
||||
text: _filteredGroups[index].name!,
|
||||
style: context.bodyLarge.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 0,
|
||||
fontSize: 20,
|
||||
color: Colors.grey,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'dart:async';
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
|
||||
@ -10,6 +9,7 @@ import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart';
|
||||
import 'package:syncrow_app/features/scene/helper/scene_operations_data_helper.dart';
|
||||
import 'package:syncrow_app/features/scene/model/create_automation_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/icon_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
|
||||
import 'package:syncrow_app/navigation/navigation_service.dart';
|
||||
import 'package:syncrow_app/services/api/scene_api.dart';
|
||||
@ -36,6 +36,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
||||
on<SelectConditionEvent>(_selectConditionRule);
|
||||
on<SceneTypeEvent>(_sceneTypeEvent);
|
||||
on<EffectiveTimePeriodEvent>(_onEffectiveTimeEvent);
|
||||
on<SceneIconEvent>(_fetchIconScene);
|
||||
on<IconSelected>(_iconSelected);
|
||||
on<ShowOnDeviceClicked>(_showInDeviceClicked);
|
||||
on<ClearTabToRunSetting>(_clearTabToRunSetting);
|
||||
}
|
||||
|
||||
CreateSceneEnum sceneType = CreateSceneEnum.none;
|
||||
@ -52,6 +56,9 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
||||
final Map<String, String> automationComparatorValues = {};
|
||||
String conditionRule = 'or';
|
||||
EffectiveTime? effectiveTime;
|
||||
List<IconModel> iconModelList = [];
|
||||
String selectedIcon = '';
|
||||
bool showInDeviceScreen = false;
|
||||
|
||||
FutureOr<void> _onAddSceneTask(AddTaskEvent event, Emitter<CreateSceneState> emit) {
|
||||
emit(CreateSceneLoading());
|
||||
@ -350,6 +357,8 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
||||
automationTempTasksList.clear();
|
||||
automationSelectedValues.clear();
|
||||
automationComparatorValues.clear();
|
||||
selectedIcon = '';
|
||||
showInDeviceScreen = false;
|
||||
effectiveTime = EffectiveTime(start: '00:00', end: '23:59', loops: '1111111');
|
||||
sceneType = CreateSceneEnum.none;
|
||||
conditionRule = 'or';
|
||||
@ -380,6 +389,19 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
||||
));
|
||||
}
|
||||
|
||||
FutureOr<void> _clearTabToRunSetting(ClearTabToRunSetting event, Emitter<CreateSceneState> emit) {
|
||||
emit(CreateSceneLoading());
|
||||
selectedIcon = '';
|
||||
showInDeviceScreen = false;
|
||||
emit(AddSceneTask(
|
||||
tasksList: tasksList,
|
||||
automationTasksList: automationTasksList,
|
||||
condition: conditionRule,
|
||||
showInDevice: showInDeviceScreen,
|
||||
selectedIcon: selectedIcon,
|
||||
iconModels: iconModelList));
|
||||
}
|
||||
|
||||
FutureOr<void> _fetchSceneTasks(
|
||||
FetchSceneTasksEvent event, Emitter<CreateSceneState> emit) async {
|
||||
emit(CreateSceneLoading());
|
||||
@ -392,6 +414,8 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
||||
automationTempTasksList.clear();
|
||||
automationSelectedValues.clear();
|
||||
automationComparatorValues.clear();
|
||||
selectedIcon = '';
|
||||
showInDeviceScreen = false;
|
||||
effectiveTime = EffectiveTime(start: '00:00', end: '23:59', loops: '1111111');
|
||||
sceneType = CreateSceneEnum.none;
|
||||
conditionRule = 'or';
|
||||
@ -425,17 +449,23 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
||||
.add(SetCustomTime(effectiveTime!.start, effectiveTime!.end));
|
||||
|
||||
emit(AddSceneTask(
|
||||
automationTasksList: automationTasksList,
|
||||
tasksList: tasksList,
|
||||
condition: conditionRule,
|
||||
));
|
||||
automationTasksList: automationTasksList,
|
||||
tasksList: tasksList,
|
||||
condition: conditionRule,
|
||||
iconModels: iconModelList,
|
||||
selectedIcon: selectedIcon,
|
||||
showInDevice: showInDeviceScreen));
|
||||
} else {
|
||||
tasksList = List<SceneStaticFunction>.from(
|
||||
getTaskListFunctionsFromApi(actions: response.actions, isAutomation: false));
|
||||
selectedIcon = response.icon!;
|
||||
showInDeviceScreen = response.showInDevice!;
|
||||
emit(AddSceneTask(
|
||||
tasksList: tasksList,
|
||||
condition: conditionRule,
|
||||
));
|
||||
tasksList: tasksList,
|
||||
condition: conditionRule,
|
||||
iconModels: iconModelList,
|
||||
selectedIcon: selectedIcon,
|
||||
showInDevice: showInDeviceScreen));
|
||||
}
|
||||
} else {
|
||||
emit(const CreateSceneError(message: 'Something went wrong'));
|
||||
@ -445,6 +475,57 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _fetchIconScene(SceneIconEvent event, Emitter<CreateSceneState> emit) async {
|
||||
emit(CreateSceneLoading());
|
||||
try {
|
||||
iconModelList = await SceneApi.getIcon();
|
||||
emit(AddSceneTask(
|
||||
tasksList: tasksList,
|
||||
automationTasksList: automationTasksList,
|
||||
condition: conditionRule,
|
||||
showInDevice: showInDeviceScreen,
|
||||
selectedIcon: selectedIcon,
|
||||
iconModels: iconModelList));
|
||||
} catch (e) {
|
||||
emit(const CreateSceneError(message: 'Something went wrong'));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _iconSelected(IconSelected event, Emitter<CreateSceneState> emit) async {
|
||||
try {
|
||||
if (event.confirmSelection) {
|
||||
selectedIcon = event.iconId;
|
||||
}
|
||||
emit(CreateSceneLoading());
|
||||
emit(AddSceneTask(
|
||||
tasksList: tasksList,
|
||||
automationTasksList: automationTasksList,
|
||||
showInDevice: showInDeviceScreen,
|
||||
condition: conditionRule,
|
||||
selectedIcon: event.iconId,
|
||||
iconModels: iconModelList));
|
||||
} catch (e) {
|
||||
emit(const CreateSceneError(message: 'Something went wrong'));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _showInDeviceClicked(
|
||||
ShowOnDeviceClicked event, Emitter<CreateSceneState> emit) async {
|
||||
try {
|
||||
emit(CreateSceneLoading());
|
||||
showInDeviceScreen = event.value;
|
||||
emit(AddSceneTask(
|
||||
tasksList: tasksList,
|
||||
automationTasksList: automationTasksList,
|
||||
condition: conditionRule,
|
||||
selectedIcon: selectedIcon,
|
||||
iconModels: iconModelList,
|
||||
showInDevice: showInDeviceScreen));
|
||||
} catch (e) {
|
||||
emit(const CreateSceneError(message: 'Something went wrong'));
|
||||
}
|
||||
}
|
||||
|
||||
String _getDayFromIndex(int index) {
|
||||
const days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
|
||||
return days[index];
|
||||
|
@ -149,8 +149,7 @@ class FetchSceneTasksEvent extends CreateSceneEvent {
|
||||
final String sceneId;
|
||||
final bool isAutomation;
|
||||
|
||||
const FetchSceneTasksEvent(
|
||||
{this.isAutomation = false, required this.sceneId});
|
||||
const FetchSceneTasksEvent({this.isAutomation = false, required this.sceneId});
|
||||
|
||||
@override
|
||||
List<Object> get props => [sceneId, isAutomation];
|
||||
@ -183,3 +182,33 @@ class EffectiveTimePeriodEvent extends CreateSceneEvent {
|
||||
final EffectiveTime period;
|
||||
const EffectiveTimePeriodEvent(this.period);
|
||||
}
|
||||
|
||||
class SceneIconEvent extends CreateSceneEvent {}
|
||||
|
||||
class IconSelected extends CreateSceneEvent {
|
||||
final String iconId;
|
||||
final bool confirmSelection;
|
||||
|
||||
const IconSelected({required this.iconId, required this.confirmSelection});
|
||||
|
||||
@override
|
||||
List<Object> get props => [iconId];
|
||||
}
|
||||
|
||||
class ShowOnDeviceClicked extends CreateSceneEvent {
|
||||
final bool value;
|
||||
|
||||
const ShowOnDeviceClicked({
|
||||
required this.value,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object> get props => [value];
|
||||
}
|
||||
|
||||
class ClearTabToRunSetting extends CreateSceneEvent {
|
||||
const ClearTabToRunSetting();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
@ -23,8 +23,16 @@ class AddSceneTask extends CreateSceneState {
|
||||
final List<SceneStaticFunction> tasksList;
|
||||
final List<SceneStaticFunction>? automationTasksList;
|
||||
final String? condition;
|
||||
final String? selectedIcon;
|
||||
final List<IconModel>? iconModels;
|
||||
final bool? showInDevice;
|
||||
const AddSceneTask(
|
||||
{required this.tasksList, this.automationTasksList, this.condition});
|
||||
{required this.tasksList,
|
||||
this.automationTasksList,
|
||||
this.condition,
|
||||
this.iconModels,
|
||||
this.selectedIcon,
|
||||
this.showInDevice});
|
||||
|
||||
@override
|
||||
List<Object> get props => [tasksList];
|
||||
@ -33,8 +41,7 @@ class AddSceneTask extends CreateSceneState {
|
||||
class TempHoldSceneTask extends CreateSceneState {
|
||||
final List<SceneStaticFunction> tempTasksList;
|
||||
final List<SceneStaticFunction>? automationTempTasksList;
|
||||
const TempHoldSceneTask(
|
||||
{required this.tempTasksList, this.automationTempTasksList});
|
||||
const TempHoldSceneTask({required this.tempTasksList, this.automationTempTasksList});
|
||||
|
||||
@override
|
||||
List<Object> get props => [tempTasksList];
|
||||
|
@ -24,7 +24,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
|
||||
|
||||
try {
|
||||
if (event.unitId.isNotEmpty) {
|
||||
scenes = await SceneApi.getScenesByUnitId(event.unitId);
|
||||
scenes = await SceneApi.getScenesByUnitId(event.unitId, showInDevice: event.showInDevice);
|
||||
emit(SceneLoaded(scenes, automationList));
|
||||
} else {
|
||||
emit(const SceneError(message: 'Unit ID is empty'));
|
||||
@ -34,8 +34,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onLoadAutomation(
|
||||
LoadAutomation event, Emitter<SceneState> emit) async {
|
||||
Future<void> _onLoadAutomation(LoadAutomation event, Emitter<SceneState> emit) async {
|
||||
emit(SceneLoading());
|
||||
|
||||
try {
|
||||
@ -50,8 +49,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onSceneTrigger(
|
||||
SceneTrigger event, Emitter<SceneState> emit) async {
|
||||
Future<void> _onSceneTrigger(SceneTrigger event, Emitter<SceneState> emit) async {
|
||||
final currentState = state;
|
||||
if (currentState is SceneLoaded) {
|
||||
emit(SceneLoaded(
|
||||
@ -78,9 +76,8 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
|
||||
UpdateAutomationStatus event, Emitter<SceneState> emit) async {
|
||||
final currentState = state;
|
||||
if (currentState is SceneLoaded) {
|
||||
final newLoadingStates =
|
||||
Map<String, bool>.from(currentState.loadingStates)
|
||||
..[event.automationId] = true;
|
||||
final newLoadingStates = Map<String, bool>.from(currentState.loadingStates)
|
||||
..[event.automationId] = true;
|
||||
|
||||
emit(SceneLoaded(
|
||||
currentState.scenes,
|
||||
@ -89,11 +86,11 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
|
||||
));
|
||||
|
||||
try {
|
||||
final success = await SceneApi.updateAutomationStatus(
|
||||
event.automationId, event.automationStatusUpdate);
|
||||
final success =
|
||||
await SceneApi.updateAutomationStatus(event.automationId, event.automationStatusUpdate);
|
||||
if (success) {
|
||||
automationList = await SceneApi.getAutomationByUnitId(
|
||||
event.automationStatusUpdate.unitUuid);
|
||||
automationList =
|
||||
await SceneApi.getAutomationByUnitId(event.automationStatusUpdate.unitUuid);
|
||||
newLoadingStates[event.automationId] = false;
|
||||
emit(SceneLoaded(
|
||||
currentState.scenes,
|
||||
|
@ -10,11 +10,12 @@ abstract class SceneEvent extends Equatable {
|
||||
|
||||
class LoadScenes extends SceneEvent {
|
||||
final String unitId;
|
||||
final bool showInDevice;
|
||||
|
||||
const LoadScenes(this.unitId);
|
||||
const LoadScenes(this.unitId, {this.showInDevice = false});
|
||||
|
||||
@override
|
||||
List<Object> get props => [unitId];
|
||||
List<Object> get props => [unitId, showInDevice];
|
||||
}
|
||||
|
||||
class LoadAutomation extends SceneEvent {
|
||||
@ -41,8 +42,7 @@ class UpdateAutomationStatus extends SceneEvent {
|
||||
final String automationId;
|
||||
final AutomationStatusUpdate automationStatusUpdate;
|
||||
|
||||
const UpdateAutomationStatus(
|
||||
{required this.automationStatusUpdate, required this.automationId});
|
||||
const UpdateAutomationStatus({required this.automationStatusUpdate, required this.automationId});
|
||||
|
||||
@override
|
||||
List<Object> get props => [automationStatusUpdate];
|
||||
|
@ -125,6 +125,8 @@ mixin SceneLogicHelper {
|
||||
} else {
|
||||
final createSceneModel = CreateSceneModel(
|
||||
unitUuid: HomeCubit.getInstance().selectedSpace!.id ?? '',
|
||||
iconId: sceneBloc.selectedIcon,
|
||||
showInDevice: sceneBloc.showInDeviceScreen,
|
||||
sceneName: sceneName.text,
|
||||
decisionExpr: 'and',
|
||||
actions: [
|
||||
@ -171,24 +173,21 @@ mixin SceneLogicHelper {
|
||||
}
|
||||
}
|
||||
|
||||
Widget getTheCorrectDialogBody(
|
||||
SceneStaticFunction taskItem, dynamic functionValue,
|
||||
Widget getTheCorrectDialogBody(SceneStaticFunction taskItem, dynamic functionValue,
|
||||
{required bool isAutomation}) {
|
||||
if (taskItem.operationDialogType == OperationDialogType.temperature) {
|
||||
return AlertDialogTemperatureBody(
|
||||
taskItem: taskItem,
|
||||
functionValue: functionValue ?? taskItem.functionValue,
|
||||
);
|
||||
} else if ((taskItem.operationDialogType ==
|
||||
OperationDialogType.countdown) ||
|
||||
} else if ((taskItem.operationDialogType == OperationDialogType.countdown) ||
|
||||
(taskItem.operationDialogType == OperationDialogType.delay)) {
|
||||
return AlertDialogCountdown(
|
||||
durationValue: taskItem.functionValue ?? 0,
|
||||
functionValue: functionValue ?? taskItem.functionValue,
|
||||
function: taskItem,
|
||||
);
|
||||
} else if (taskItem.operationDialogType ==
|
||||
OperationDialogType.integerSteps) {
|
||||
} else if (taskItem.operationDialogType == OperationDialogType.integerSteps) {
|
||||
return AlertDialogSliderSteps(
|
||||
taskItem: taskItem,
|
||||
functionValue: functionValue ?? taskItem.functionValue,
|
||||
|
@ -4,12 +4,16 @@ import 'package:flutter/foundation.dart';
|
||||
|
||||
class CreateSceneModel {
|
||||
String unitUuid;
|
||||
String iconId;
|
||||
bool showInDevice;
|
||||
String sceneName;
|
||||
String decisionExpr;
|
||||
List<CreateSceneAction> actions;
|
||||
|
||||
CreateSceneModel({
|
||||
required this.unitUuid,
|
||||
required this.iconId,
|
||||
required this.showInDevice,
|
||||
required this.sceneName,
|
||||
required this.decisionExpr,
|
||||
required this.actions,
|
||||
@ -17,12 +21,16 @@ class CreateSceneModel {
|
||||
|
||||
CreateSceneModel copyWith({
|
||||
String? unitUuid,
|
||||
String? iconId,
|
||||
bool? showInDevice,
|
||||
String? sceneName,
|
||||
String? decisionExpr,
|
||||
List<CreateSceneAction>? actions,
|
||||
}) {
|
||||
return CreateSceneModel(
|
||||
unitUuid: unitUuid ?? this.unitUuid,
|
||||
iconId: iconId ?? this.iconId,
|
||||
showInDevice: showInDevice ?? this.showInDevice,
|
||||
sceneName: sceneName ?? this.sceneName,
|
||||
decisionExpr: decisionExpr ?? this.decisionExpr,
|
||||
actions: actions ?? this.actions,
|
||||
@ -32,6 +40,8 @@ class CreateSceneModel {
|
||||
Map<String, dynamic> toMap([String? sceneId]) {
|
||||
return {
|
||||
if (sceneId == null) 'unitUuid': unitUuid,
|
||||
if (iconId.isNotEmpty) 'iconUuid': iconId,
|
||||
'showInHomePage': showInDevice,
|
||||
'sceneName': sceneName,
|
||||
'decisionExpr': decisionExpr,
|
||||
'actions': actions.map((x) => x.toMap()).toList(),
|
||||
@ -41,17 +51,18 @@ class CreateSceneModel {
|
||||
factory CreateSceneModel.fromMap(Map<String, dynamic> map) {
|
||||
return CreateSceneModel(
|
||||
unitUuid: map['unitUuid'] ?? '',
|
||||
iconId: map['iconUuid'] ?? '',
|
||||
showInDevice: map['showInHomePage'] ?? false,
|
||||
sceneName: map['sceneName'] ?? '',
|
||||
decisionExpr: map['decisionExpr'] ?? '',
|
||||
actions: List<CreateSceneAction>.from(
|
||||
map['actions']?.map((x) => CreateSceneAction.fromMap(x))),
|
||||
actions:
|
||||
List<CreateSceneAction>.from(map['actions']?.map((x) => CreateSceneAction.fromMap(x))),
|
||||
);
|
||||
}
|
||||
|
||||
String toJson([String? sceneId]) => json.encode(toMap(sceneId));
|
||||
|
||||
factory CreateSceneModel.fromJson(String source) =>
|
||||
CreateSceneModel.fromMap(json.decode(source));
|
||||
factory CreateSceneModel.fromJson(String source) => CreateSceneModel.fromMap(json.decode(source));
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
@ -64,6 +75,8 @@ class CreateSceneModel {
|
||||
|
||||
return other is CreateSceneModel &&
|
||||
other.unitUuid == unitUuid &&
|
||||
other.iconId == iconId &&
|
||||
other.showInDevice == showInDevice &&
|
||||
other.sceneName == sceneName &&
|
||||
other.decisionExpr == decisionExpr &&
|
||||
listEquals(other.actions, actions);
|
||||
@ -71,10 +84,7 @@ class CreateSceneModel {
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return unitUuid.hashCode ^
|
||||
sceneName.hashCode ^
|
||||
decisionExpr.hashCode ^
|
||||
actions.hashCode;
|
||||
return unitUuid.hashCode ^ sceneName.hashCode ^ decisionExpr.hashCode ^ actions.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,8 +130,7 @@ class CreateSceneAction {
|
||||
return CreateSceneAction(
|
||||
entityId: map['entityId'] ?? '',
|
||||
actionExecutor: map['actionExecutor'] ?? '',
|
||||
executorProperty:
|
||||
CreateSceneExecutorProperty.fromMap(map['executorProperty']),
|
||||
executorProperty: CreateSceneExecutorProperty.fromMap(map['executorProperty']),
|
||||
);
|
||||
}
|
||||
|
||||
@ -145,8 +154,7 @@ class CreateSceneAction {
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
entityId.hashCode ^ actionExecutor.hashCode ^ executorProperty.hashCode;
|
||||
int get hashCode => entityId.hashCode ^ actionExecutor.hashCode ^ executorProperty.hashCode;
|
||||
}
|
||||
|
||||
class CreateSceneExecutorProperty {
|
||||
@ -210,6 +218,5 @@ class CreateSceneExecutorProperty {
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
functionCode.hashCode ^ functionValue.hashCode ^ delaySeconds.hashCode;
|
||||
int get hashCode => functionCode.hashCode ^ functionValue.hashCode ^ delaySeconds.hashCode;
|
||||
}
|
||||
|
39
lib/features/scene/model/icon_model.dart
Normal file
@ -0,0 +1,39 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
class IconModel {
|
||||
final String uuid;
|
||||
final DateTime createdAt;
|
||||
final DateTime updatedAt;
|
||||
final String iconBase64;
|
||||
|
||||
IconModel({
|
||||
required this.uuid,
|
||||
required this.createdAt,
|
||||
required this.updatedAt,
|
||||
required this.iconBase64,
|
||||
});
|
||||
|
||||
// Method to decode the icon from Base64 and return as Uint8List
|
||||
Uint8List get iconBytes => base64Decode(iconBase64);
|
||||
|
||||
// Factory constructor to create an instance from JSON
|
||||
factory IconModel.fromJson(Map<String, dynamic> json) {
|
||||
return IconModel(
|
||||
uuid: json['uuid'] as String,
|
||||
createdAt: DateTime.parse(json['createdAt'] as String),
|
||||
updatedAt: DateTime.parse(json['updatedAt'] as String),
|
||||
iconBase64: json['icon'] as String,
|
||||
);
|
||||
}
|
||||
|
||||
// Method to convert an instance back to JSON
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'uuid': uuid,
|
||||
'createdAt': createdAt.toIso8601String(),
|
||||
'updatedAt': updatedAt.toIso8601String(),
|
||||
'icon': iconBase64,
|
||||
};
|
||||
}
|
||||
}
|
@ -4,6 +4,8 @@ class SceneDetailsModel {
|
||||
final String id;
|
||||
final String name;
|
||||
final String status;
|
||||
final String? icon;
|
||||
final bool? showInDevice;
|
||||
final String type;
|
||||
final List<Action> actions;
|
||||
final List<Condition>? conditions;
|
||||
@ -16,37 +18,35 @@ class SceneDetailsModel {
|
||||
required this.status,
|
||||
required this.type,
|
||||
required this.actions,
|
||||
this.icon,
|
||||
this.showInDevice,
|
||||
this.conditions,
|
||||
this.decisionExpr,
|
||||
this.effectiveTime,
|
||||
});
|
||||
|
||||
factory SceneDetailsModel.fromRawJson(String str) =>
|
||||
SceneDetailsModel.fromJson(json.decode(str));
|
||||
factory SceneDetailsModel.fromRawJson(String str) => SceneDetailsModel.fromJson(json.decode(str));
|
||||
|
||||
String toRawJson() => json.encode(toJson());
|
||||
|
||||
factory SceneDetailsModel.fromJson(Map<String, dynamic> json) =>
|
||||
SceneDetailsModel(
|
||||
id: json["id"],
|
||||
name: json["name"],
|
||||
status: json["status"],
|
||||
type: json["type"],
|
||||
actions: (json["actions"] as List)
|
||||
.map((x) => Action.fromJson(x))
|
||||
.where((x) => x != null)
|
||||
.toList()
|
||||
.cast<Action>(),
|
||||
conditions: json["conditions"] != null
|
||||
? (json["conditions"] as List)
|
||||
.map((x) => Condition.fromJson(x))
|
||||
.toList()
|
||||
: null,
|
||||
decisionExpr: json["decisionExpr"],
|
||||
effectiveTime: json["effectiveTime"] != null
|
||||
? EffectiveTime.fromJson(json["effectiveTime"])
|
||||
: null,
|
||||
);
|
||||
factory SceneDetailsModel.fromJson(Map<String, dynamic> json) => SceneDetailsModel(
|
||||
id: json["id"],
|
||||
name: json["name"],
|
||||
status: json["status"],
|
||||
type: json["type"],
|
||||
actions: (json["actions"] as List)
|
||||
.map((x) => Action.fromJson(x))
|
||||
.where((x) => x != null)
|
||||
.toList()
|
||||
.cast<Action>(),
|
||||
conditions: json["conditions"] != null
|
||||
? (json["conditions"] as List).map((x) => Condition.fromJson(x)).toList()
|
||||
: null,
|
||||
decisionExpr: json["decisionExpr"],
|
||||
effectiveTime:
|
||||
json["effectiveTime"] != null ? EffectiveTime.fromJson(json["effectiveTime"]) : null,
|
||||
icon: json["iconUuid"] != null ? json["iconUuid"] ?? '' : '',
|
||||
showInDevice: json['showInHome'] != null ? json['showInHome'] ?? false : false);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"id": id,
|
||||
@ -54,9 +54,8 @@ class SceneDetailsModel {
|
||||
"status": status,
|
||||
"type": type,
|
||||
"actions": List<dynamic>.from(actions.map((x) => x.toJson())),
|
||||
"conditions": conditions != null
|
||||
? List<dynamic>.from(conditions!.map((x) => x.toJson()))
|
||||
: null,
|
||||
"conditions":
|
||||
conditions != null ? List<dynamic>.from(conditions!.map((x) => x.toJson())) : null,
|
||||
"decisionExpr": decisionExpr,
|
||||
"effectiveTime": effectiveTime?.toJson(),
|
||||
};
|
||||
@ -89,7 +88,7 @@ class Action {
|
||||
);
|
||||
}
|
||||
if (json["executorProperty"] == null) {
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
return Action(
|
||||
@ -117,8 +116,7 @@ class ExecutorProperty {
|
||||
this.delaySeconds,
|
||||
});
|
||||
|
||||
factory ExecutorProperty.fromJson(Map<String, dynamic> json) =>
|
||||
ExecutorProperty(
|
||||
factory ExecutorProperty.fromJson(Map<String, dynamic> json) => ExecutorProperty(
|
||||
functionCode: json["functionCode"] ?? '',
|
||||
functionValue: json["functionValue"] ?? '',
|
||||
delaySeconds: json["delaySeconds"] ?? 0,
|
||||
@ -144,8 +142,7 @@ class Condition {
|
||||
required this.expr,
|
||||
});
|
||||
|
||||
factory Condition.fromRawJson(String str) =>
|
||||
Condition.fromJson(json.decode(str));
|
||||
factory Condition.fromRawJson(String str) => Condition.fromJson(json.decode(str));
|
||||
|
||||
String toRawJson() => json.encode(toJson());
|
||||
|
||||
@ -203,8 +200,7 @@ class EffectiveTime {
|
||||
required this.loops,
|
||||
});
|
||||
|
||||
factory EffectiveTime.fromRawJson(String str) =>
|
||||
EffectiveTime.fromJson(json.decode(str));
|
||||
factory EffectiveTime.fromRawJson(String str) => EffectiveTime.fromJson(json.decode(str));
|
||||
|
||||
String toRawJson() => json.encode(toJson());
|
||||
|
||||
|
@ -1,29 +1,31 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
class ScenesModel {
|
||||
final String id;
|
||||
final String name;
|
||||
final String status;
|
||||
final String type;
|
||||
final String icon;
|
||||
|
||||
ScenesModel({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.status,
|
||||
required this.type,
|
||||
});
|
||||
ScenesModel(
|
||||
{required this.id,
|
||||
required this.name,
|
||||
required this.status,
|
||||
required this.type,
|
||||
required this.icon});
|
||||
|
||||
factory ScenesModel.fromRawJson(String str) =>
|
||||
ScenesModel.fromJson(json.decode(str));
|
||||
factory ScenesModel.fromRawJson(String str) => ScenesModel.fromJson(json.decode(str));
|
||||
|
||||
String toRawJson() => json.encode(toJson());
|
||||
Uint8List get iconInBytes => base64Decode(icon);
|
||||
|
||||
factory ScenesModel.fromJson(Map<String, dynamic> json) => ScenesModel(
|
||||
id: json["id"],
|
||||
name: json["name"] ?? '',
|
||||
status: json["status"] ?? '',
|
||||
type: json["type"] ?? '',
|
||||
);
|
||||
id: json["id"],
|
||||
name: json["name"] ?? '',
|
||||
status: json["status"] ?? '',
|
||||
type: json["type"] ?? '',
|
||||
icon: json["icon"] ?? '');
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"id": id,
|
||||
|
@ -1,9 +1,10 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
||||
import 'package:syncrow_app/features/scene/enum/create_scene_enum.dart';
|
||||
import 'package:syncrow_app/features/scene/view/scene_tasks_view.dart';
|
||||
import 'package:syncrow_app/features/scene/view/settings/validity_page.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/alert_dialogs/icons_dialog.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/effective_period_setting/effective_period_bottom_sheet.dart';
|
||||
import 'package:syncrow_app/features/scene/widgets/scene_list_tile.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
@ -17,170 +18,240 @@ class SceneAutoSettings extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final sceneSettings =
|
||||
ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>? ??
|
||||
{};
|
||||
final sceneSettings = ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>? ?? {};
|
||||
final sceneId = sceneSettings['sceneId'] as String? ?? '';
|
||||
final isAutomation = context.read<CreateSceneBloc>().sceneType ==
|
||||
CreateSceneEnum.deviceStatusChanges;
|
||||
final isAutomation =
|
||||
context.read<CreateSceneBloc>().sceneType == CreateSceneEnum.deviceStatusChanges;
|
||||
final sceneName = sceneSettings['sceneName'] as String? ?? '';
|
||||
|
||||
bool showInDevice = context.read<CreateSceneBloc>().showInDeviceScreen;
|
||||
String selectedIcon = '';
|
||||
return DefaultScaffold(
|
||||
title: 'Settings',
|
||||
padding: EdgeInsets.zero,
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
icon: const Icon(
|
||||
Icons.arrow_back_ios,
|
||||
)),
|
||||
child: SizedBox(
|
||||
height: MediaQuery.sizeOf(context).height,
|
||||
child: Column(
|
||||
children: [
|
||||
DefaultContainer(
|
||||
child: Column(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (context) =>const ValidityPage(),
|
||||
));
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(top: 12, bottom: 12),
|
||||
child: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
BodyMedium(
|
||||
text: 'Validity',
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 15,
|
||||
color: ColorsManager.textGray,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const Divider(
|
||||
color: ColorsManager.backgroundColor,
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
context.customBottomSheet(
|
||||
child: const EffectPeriodBottomSheetContent(),
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(top: 12, bottom: 12),
|
||||
child: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
BodyMedium(
|
||||
text: 'Effective Period',
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
title: 'Settings',
|
||||
padding: EdgeInsets.zero,
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
icon: const Icon(
|
||||
Icons.arrow_back_ios,
|
||||
)),
|
||||
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(builder: (context, state) {
|
||||
if (state is AddSceneTask) {
|
||||
showInDevice = state.showInDevice ?? false;
|
||||
}
|
||||
|
||||
return SizedBox(
|
||||
height: MediaQuery.sizeOf(context).height,
|
||||
child: Column(
|
||||
children: [
|
||||
if (!isAutomation)
|
||||
DefaultContainer(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 10),
|
||||
child: Column(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(SceneIconEvent());
|
||||
return IconsDialog(
|
||||
widgetList: Container(
|
||||
height: MediaQuery.sizeOf(context).height * 0.4,
|
||||
width: MediaQuery.sizeOf(context).width,
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
|
||||
builder: (context, state) {
|
||||
if (state is CreateSceneLoading) {
|
||||
return const Center(
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
width: 50,
|
||||
child: CircularProgressIndicator()),
|
||||
);
|
||||
} else if (state is AddSceneTask) {
|
||||
return GridView.builder(
|
||||
gridDelegate:
|
||||
const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 5,
|
||||
crossAxisSpacing: 12,
|
||||
mainAxisSpacing: 12,
|
||||
),
|
||||
itemCount: state.iconModels?.length ?? 0,
|
||||
itemBuilder: (context, index) {
|
||||
final iconModel = state.iconModels![index];
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(
|
||||
IconSelected(
|
||||
iconId: iconModel.uuid,
|
||||
confirmSelection: false));
|
||||
selectedIcon = iconModel.uuid;
|
||||
},
|
||||
child: ClipOval(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(1),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
color: state.selectedIcon == iconModel.uuid
|
||||
? ColorsManager.primaryColorWithOpacity
|
||||
: Colors.transparent,
|
||||
width: 2,
|
||||
),
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: Image.memory(
|
||||
iconModel.iconBytes,
|
||||
width: 35,
|
||||
height: 35,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
} else if (state is CreateSceneError) {
|
||||
return Text(state.message);
|
||||
} else {
|
||||
return Container();
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
cancelTab: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
confirmTab: () {
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(
|
||||
IconSelected(iconId: selectedIcon, confirmSelection: true));
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
title: 'Icons',
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
child: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
BodyMedium(text: 'Icons'),
|
||||
Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 15,
|
||||
Icons.arrow_forward_ios_outlined,
|
||||
color: ColorsManager.textGray,
|
||||
size: 15,
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const Divider(
|
||||
color: ColorsManager.backgroundColor,
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(top: 12, bottom: 12),
|
||||
child: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
BodyMedium(
|
||||
text: 'Executed by',
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
BodyMedium(
|
||||
fontColor: ColorsManager.textGray,
|
||||
text: 'Cloud',
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 13,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 16),
|
||||
child: DefaultContainer(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Visibility(
|
||||
visible: isAutomation,
|
||||
child: SceneListTile(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16, vertical: 8),
|
||||
titleString: "Effective Period",
|
||||
trailingWidget:
|
||||
const Icon(Icons.arrow_forward_ios_rounded),
|
||||
onPressed: () {
|
||||
|
||||
},
|
||||
),
|
||||
),
|
||||
Visibility(
|
||||
visible: sceneName.isNotEmpty && isAutomation,
|
||||
child: SizedBox(
|
||||
width: context.width * 0.9,
|
||||
child: const Divider(
|
||||
color: ColorsManager.greyColor,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
const Divider(
|
||||
color: ColorsManager.graysColor,
|
||||
),
|
||||
const SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const BodyMedium(text: 'Show on devices page'),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Container(
|
||||
height: 30,
|
||||
width: 1,
|
||||
color: ColorsManager.graysColor,
|
||||
),
|
||||
Transform.scale(
|
||||
scale: .8,
|
||||
child: CupertinoSwitch(
|
||||
value: showInDevice,
|
||||
onChanged: (value) {
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
.add(ShowOnDeviceClicked(value: value));
|
||||
},
|
||||
applyTheme: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
const Divider(
|
||||
color: ColorsManager.graysColor,
|
||||
),
|
||||
const SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
//Cloud
|
||||
BodyMedium(text: 'Executed by'),
|
||||
Text('Cloud',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.textGray,
|
||||
)),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Visibility(
|
||||
visible: sceneName.isNotEmpty,
|
||||
child: DeleteBottomSheetContent(
|
||||
isAutomation: isAutomation,
|
||||
sceneId: sceneId,
|
||||
),
|
||||
)),
|
||||
if (isAutomation)
|
||||
DefaultContainer(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 8,
|
||||
),
|
||||
const SizedBox(
|
||||
height: 16,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Visibility(
|
||||
visible: isAutomation,
|
||||
child: SceneListTile(
|
||||
titleString: "Effective Period",
|
||||
trailingWidget: const Icon(Icons.arrow_forward_ios_rounded),
|
||||
onPressed: () {
|
||||
context.customBottomSheet(
|
||||
child: const EffectPeriodBottomSheetContent(),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
Visibility(
|
||||
visible: sceneName.isNotEmpty && isAutomation,
|
||||
child: SizedBox(
|
||||
width: context.width * 0.9,
|
||||
child: const Divider(
|
||||
color: ColorsManager.greyColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
Visibility(
|
||||
visible: sceneName.isNotEmpty,
|
||||
child: DeleteBottomSheetContent(
|
||||
isAutomation: isAutomation,
|
||||
sceneId: sceneId,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 16,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
@ -21,35 +21,32 @@ class SceneView extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return BlocProvider(
|
||||
create: (BuildContext context) => SceneBloc()
|
||||
..add(LoadScenes(HomeCubit.getInstance().selectedSpace?.id ?? ''))
|
||||
..add(LoadScenes(HomeCubit.getInstance().selectedSpace?.id ?? '', showInDevice: pageType))
|
||||
..add(LoadAutomation(HomeCubit.getInstance().selectedSpace?.id ?? '')),
|
||||
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
|
||||
builder: (context, state) {
|
||||
if (state is DeleteSceneSuccess) {
|
||||
if (state.success) {
|
||||
BlocProvider.of<SceneBloc>(context)
|
||||
.add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
BlocProvider.of<SceneBloc>(context).add(
|
||||
LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
LoadScenes(HomeCubit.getInstance().selectedSpace!.id!, showInDevice: pageType));
|
||||
BlocProvider.of<SceneBloc>(context)
|
||||
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
}
|
||||
}
|
||||
if (state is CreateSceneWithTasks) {
|
||||
if (state.success == true) {
|
||||
BlocProvider.of<SceneBloc>(context)
|
||||
.add(LoadScenes(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
BlocProvider.of<SceneBloc>(context).add(
|
||||
LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
context
|
||||
.read<SmartSceneSelectBloc>()
|
||||
.add(const SmartSceneClearEvent());
|
||||
LoadScenes(HomeCubit.getInstance().selectedSpace!.id!, showInDevice: pageType));
|
||||
BlocProvider.of<SceneBloc>(context)
|
||||
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id!));
|
||||
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent());
|
||||
}
|
||||
}
|
||||
return BlocListener<SceneBloc, SceneState>(
|
||||
listener: (context, state) {
|
||||
if (state is SceneTriggerSuccess) {
|
||||
context.showCustomSnackbar(
|
||||
message:
|
||||
'Scene ${state.sceneName} triggered successfully!');
|
||||
message: 'Scene ${state.sceneName} triggered successfully!');
|
||||
}
|
||||
},
|
||||
child: HomeCubit.getInstance().spaces?.isEmpty ?? true
|
||||
@ -86,30 +83,25 @@ class SceneView extends StatelessWidget {
|
||||
child: ListView(
|
||||
children: [
|
||||
Theme(
|
||||
data: ThemeData().copyWith(
|
||||
dividerColor: Colors.transparent),
|
||||
data: ThemeData()
|
||||
.copyWith(dividerColor: Colors.transparent),
|
||||
child: ExpansionTile(
|
||||
tilePadding:
|
||||
const EdgeInsets.symmetric(
|
||||
horizontal: 6),
|
||||
tilePadding: const EdgeInsets.symmetric(horizontal: 6),
|
||||
initiallyExpanded: true,
|
||||
iconColor: ColorsManager.grayColor,
|
||||
title: const BodyMedium(
|
||||
text: 'Tap to run routines'),
|
||||
title: const BodyMedium(text: 'Tap to run routines'),
|
||||
children: [
|
||||
scenes.isNotEmpty
|
||||
? SceneGrid(
|
||||
scenes: scenes,
|
||||
loadingSceneId:
|
||||
state.loadingSceneId,
|
||||
loadingSceneId: state.loadingSceneId,
|
||||
disablePlayButton: false,
|
||||
loadingStates: state
|
||||
.loadingStates, // Add this line
|
||||
loadingStates:
|
||||
state.loadingStates, // Add this line
|
||||
)
|
||||
: const Center(
|
||||
child: BodyMedium(
|
||||
text:
|
||||
'No scenes have been added yet',
|
||||
text: 'No scenes have been added yet',
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
@ -119,30 +111,25 @@ class SceneView extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
Theme(
|
||||
data: ThemeData().copyWith(
|
||||
dividerColor: Colors.transparent),
|
||||
data: ThemeData()
|
||||
.copyWith(dividerColor: Colors.transparent),
|
||||
child: ExpansionTile(
|
||||
initiallyExpanded: true,
|
||||
iconColor: ColorsManager.grayColor,
|
||||
tilePadding:
|
||||
const EdgeInsets.symmetric(
|
||||
horizontal: 6),
|
||||
title: const BodyMedium(
|
||||
text: 'Automation'),
|
||||
tilePadding: const EdgeInsets.symmetric(horizontal: 6),
|
||||
title: const BodyMedium(text: 'Automation'),
|
||||
children: [
|
||||
automationList.isNotEmpty
|
||||
? SceneGrid(
|
||||
scenes: automationList,
|
||||
loadingSceneId:
|
||||
state.loadingSceneId,
|
||||
loadingSceneId: state.loadingSceneId,
|
||||
disablePlayButton: true,
|
||||
loadingStates: state
|
||||
.loadingStates, // Add this line
|
||||
loadingStates:
|
||||
state.loadingStates, // Add this line
|
||||
)
|
||||
: const Center(
|
||||
child: BodyMedium(
|
||||
text:
|
||||
'No automations have been added yet',
|
||||
text: 'No automations have been added yet',
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
|
@ -1,165 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class TemperatureDialog extends StatefulWidget {
|
||||
final Function(String label, int toggleIndex, String selectedCity)?
|
||||
confirmTab;
|
||||
|
||||
const TemperatureDialog({Key? key, this.confirmTab}) : super(key: key);
|
||||
|
||||
@override
|
||||
_TemperatureDialogState createState() => _TemperatureDialogState();
|
||||
}
|
||||
|
||||
class _TemperatureDialogState extends State<TemperatureDialog> {
|
||||
double _currentTemperature = 40;
|
||||
String _selectedCity = 'Current City';
|
||||
int selectedToggleIndex = 1;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
backgroundColor: Colors.white,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text(
|
||||
'Temperature',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.blue),
|
||||
),
|
||||
const Divider(color: ColorsManager.greyColor),
|
||||
ToggleButtons(
|
||||
isSelected: [
|
||||
selectedToggleIndex == 0,
|
||||
selectedToggleIndex == 1,
|
||||
selectedToggleIndex == 2
|
||||
],
|
||||
onPressed: (index) {
|
||||
setState(() {
|
||||
selectedToggleIndex = index;
|
||||
});
|
||||
},
|
||||
borderRadius: BorderRadius.circular(30),
|
||||
selectedColor: Colors.white,
|
||||
color: ColorsManager.blackColor,
|
||||
fillColor: ColorsManager.primaryColorWithOpacity,
|
||||
borderColor: ColorsManager.greyColor,
|
||||
constraints: BoxConstraints.tight(const Size(70, 30)),
|
||||
children: [
|
||||
_buildToggleOption('<', selectedToggleIndex == 0),
|
||||
_buildToggleOption('=', selectedToggleIndex == 1),
|
||||
_buildToggleOption('>', selectedToggleIndex == 2),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
'${_currentTemperature.toStringAsFixed(0)}°C',
|
||||
style: TextStyle(
|
||||
fontSize: 40,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: ColorsManager.secondaryColor.withOpacity(0.5)),
|
||||
),
|
||||
Slider(
|
||||
activeColor: ColorsManager.secondaryColor.withOpacity(0.5),
|
||||
inactiveColor: ColorsManager.grayBox,
|
||||
thumbColor: ColorsManager.primaryColor,
|
||||
value: _currentTemperature,
|
||||
min: -40,
|
||||
max: 40,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
_currentTemperature = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: _selectCity,
|
||||
child: Text(
|
||||
_selectedCity,
|
||||
style: const TextStyle(
|
||||
color: ColorsManager.grayColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: ColorsManager.grayBox.withOpacity(0.6),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Row(
|
||||
children: [
|
||||
_buildActionButton(context, 'Cancel', ColorsManager.textGray,
|
||||
() => Navigator.of(context).pop()),
|
||||
_buildActionButton(
|
||||
context,
|
||||
'Confirm',
|
||||
ColorsManager.primaryColor,
|
||||
() {
|
||||
widget.confirmTab!.call(
|
||||
_currentTemperature.toStringAsFixed(0),
|
||||
selectedToggleIndex,
|
||||
_selectedCity);
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildToggleOption(String label, bool isSelected) {
|
||||
return SizedBox(
|
||||
width: 70,
|
||||
height: 30,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
color: isSelected
|
||||
? ColorsManager.secondaryColor.withOpacity(0.2)
|
||||
: ColorsManager.textGray,
|
||||
child: Text(label),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildActionButton(
|
||||
BuildContext context, String text, Color color, VoidCallback onTap) {
|
||||
return Expanded(
|
||||
child: InkWell(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(15),
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
top: const BorderSide(color: ColorsManager.textGray),
|
||||
left: text == 'Confirm'
|
||||
? const BorderSide(color: ColorsManager.textGray, width: 0.5)
|
||||
: BorderSide.none,
|
||||
),
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
color: color, fontSize: 14, fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _selectCity() {
|
||||
// Placeholder for the city selection function
|
||||
setState(() {
|
||||
_selectedCity = 'Selected City';
|
||||
});
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class ConditionDialog extends StatelessWidget {
|
||||
const ConditionDialog({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
|
||||
contentPadding: EdgeInsets.zero,
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
_buildDialogOption(context, 'When all conditions are met'),
|
||||
_buildDialogOption(context, 'When any condition is met'),
|
||||
const Divider(color: ColorsManager.greyColor),
|
||||
_buildDialogOption(context, 'Cancel', isCancel: true),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildDialogOption(BuildContext context, String text, {bool isCancel = false}) {
|
||||
return ListTile(
|
||||
title: Center(
|
||||
child: BodyMedium(
|
||||
text: text,
|
||||
fontSize: 15,
|
||||
fontWeight: isCancel ? FontWeight.normal : FontWeight.w400,
|
||||
fontColor: isCancel ? Colors.grey : null,
|
||||
),
|
||||
),
|
||||
onTap: () => Navigator.of(context).pop(),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,221 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/restart_status_dialog.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
import 'package:syncrow_app/generated/assets.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class HumidityDialog extends StatefulWidget {
|
||||
final String label1;
|
||||
final String label2;
|
||||
final String label3;
|
||||
final String title;
|
||||
final Function()? cancelTab;
|
||||
final Function(String labelSelected)? confirmTab;
|
||||
|
||||
final String? initialSelectedLabel;
|
||||
|
||||
HumidityDialog({
|
||||
required this.label1,
|
||||
required this.label2,
|
||||
required this.label3,
|
||||
required this.title,
|
||||
required this.cancelTab,
|
||||
required this.confirmTab,
|
||||
this.initialSelectedLabel,
|
||||
});
|
||||
|
||||
@override
|
||||
_HumidityDialogState createState() => _HumidityDialogState();
|
||||
}
|
||||
|
||||
class _HumidityDialogState extends State<HumidityDialog> {
|
||||
late String _selectedOption;
|
||||
String _selectedCity = 'Current City';
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
_selectedOption = widget.initialSelectedLabel ?? '';
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
contentPadding: EdgeInsets.zero,
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
BodyLarge(
|
||||
text: widget.title,
|
||||
fontWeight: FontWeight.w700,
|
||||
fontColor: ColorsManager.primaryColor,
|
||||
fontSize: 16,
|
||||
),
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(left: 15, right: 15),
|
||||
child: Divider(
|
||||
color: ColorsManager.textGray,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 15, right: 15),
|
||||
child: Column(
|
||||
children: [
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.dryIcon,
|
||||
label: widget.label1,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.comfortableIcon,
|
||||
label: widget.label2,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.moistIcon,
|
||||
label: widget.label3,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
Container(
|
||||
height: 35,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {},
|
||||
child: Text(
|
||||
_selectedCity,
|
||||
style: TextStyle(
|
||||
color: ColorsManager.grayColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: ColorsManager.grayBox.withOpacity(0.6),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(
|
||||
right: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 0.5,
|
||||
),
|
||||
top: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 1.0,
|
||||
),
|
||||
)),
|
||||
child: SizedBox(
|
||||
child: InkWell(
|
||||
onTap: widget.cancelTab,
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(15),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Cancel',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.textGray,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(
|
||||
left: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 0.5,
|
||||
),
|
||||
top: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 1.0,
|
||||
),
|
||||
)),
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
widget.confirmTab!.call(_selectedCity);
|
||||
},
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(15),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Confirm',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.primaryColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
)),
|
||||
))
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildCheckboxOption(
|
||||
{required String label, required String icon, Function(String)? onTap}) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 10, top: 10),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(icon),
|
||||
SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
BodyMedium(
|
||||
text: label,
|
||||
style:
|
||||
const TextStyle(fontSize: 15, fontWeight: FontWeight.w400),
|
||||
),
|
||||
],
|
||||
),
|
||||
CircularCheckbox(
|
||||
value: _selectedOption == label,
|
||||
onChanged: (bool? value) {
|
||||
if (value == true) {
|
||||
setState(() {
|
||||
_selectedOption = label;
|
||||
});
|
||||
if (onTap != null) {
|
||||
onTap(label);
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,120 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/features/scene/view/settings/Temperature_dialog.dart';
|
||||
import 'package:syncrow_app/features/scene/view/settings/condition_dialog.dart';
|
||||
import 'package:syncrow_app/features/scene/view/settings/humidity_dialog.dart';
|
||||
import 'package:syncrow_app/features/scene/view/settings/weather_bottom_sheet.dart';
|
||||
import 'package:syncrow_app/features/scene/view/settings/weather_dialog.dart';
|
||||
import 'package:syncrow_app/features/scene/view/settings/wind_speed_dialog.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class ValidityPage extends StatelessWidget {
|
||||
const ValidityPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultScaffold(
|
||||
title: 'Validity',
|
||||
padding: EdgeInsets.zero,
|
||||
leading: IconButton(
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
icon: const Icon(Icons.arrow_back_ios),
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
DefaultContainer(
|
||||
child: ListTile(
|
||||
title: const BodyMedium(
|
||||
text: 'When any condition is met',
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
trailing: const Icon(Icons.arrow_forward_ios,
|
||||
size: 15, color: ColorsManager.textGray),
|
||||
onTap: () => _showConditionDialog(context),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
InkWell(
|
||||
onTap: () => showModalBottomSheet(
|
||||
context: context,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(top: Radius.circular(20.0)),
|
||||
),
|
||||
builder: (BuildContext context) => WeatherBottomSheet(
|
||||
showTemperatureDialog: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) => TemperatureDialog(
|
||||
confirmTab: (label, toggleIndex, selectedCity) {
|
||||
print(label);
|
||||
print(toggleIndex);
|
||||
print(selectedCity);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
showHumidityDialog: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) => HumidityDialog(
|
||||
initialSelectedLabel: 'Dry',
|
||||
cancelTab: () => Navigator.of(context).pop(),
|
||||
confirmTab: (v) {},
|
||||
title: 'Humidity',
|
||||
label1: 'Dry',
|
||||
label2: 'Comfortable',
|
||||
label3: 'Moist',
|
||||
),
|
||||
);
|
||||
},
|
||||
showWeatherDialog: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) => WeatherDialog(
|
||||
initialSelectedLabel: 'Sunny',
|
||||
cancelTab: () {},
|
||||
confirmTab: (selectedOption) {},
|
||||
title: 'Weather',
|
||||
label1: 'Sunny',
|
||||
label2: 'Cloudy',
|
||||
label3: 'Rainy',
|
||||
label4: 'Snowy',
|
||||
label5: 'Hazy',
|
||||
),
|
||||
);
|
||||
},
|
||||
showWindSpeedDialog: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) => WindSpeedDialog(
|
||||
confirmTab: (selectedTemperature, selectedToggleIndex,
|
||||
selectedCity) {},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
child: const DefaultContainer(
|
||||
child: Center(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(5.0),
|
||||
child: BodyLarge(text: '+ Add'),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _showConditionDialog(BuildContext context) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) => const ConditionDialog(),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class WeatherBottomSheet extends StatelessWidget {
|
||||
final VoidCallback showTemperatureDialog;
|
||||
final VoidCallback showHumidityDialog;
|
||||
final VoidCallback showWeatherDialog;
|
||||
final VoidCallback showWindSpeedDialog;
|
||||
|
||||
const WeatherBottomSheet({
|
||||
Key? key,
|
||||
required this.showTemperatureDialog,
|
||||
required this.showHumidityDialog,
|
||||
required this.showWeatherDialog,
|
||||
required this.showWindSpeedDialog,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Center(
|
||||
child: Text(
|
||||
"When Weather Changes",
|
||||
style: TextStyle(
|
||||
fontSize: 16.0,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Colors.blue),
|
||||
),
|
||||
),
|
||||
const Divider(color: ColorsManager.greyColor),
|
||||
_buildWeatherOption(context, 'Temperature', showTemperatureDialog),
|
||||
_buildWeatherOption(context, 'Humidity', showHumidityDialog),
|
||||
_buildWeatherOption(context, 'Weather', showWeatherDialog),
|
||||
_buildWeatherOption(
|
||||
context, 'Wind Speed', showWindSpeedDialog),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildWeatherOption(
|
||||
BuildContext context, String title, VoidCallback onTap) {
|
||||
return ListTile(
|
||||
title: BodyMedium(text: title, fontSize: 15, fontWeight: FontWeight.w400),
|
||||
trailing: const Icon(Icons.chevron_right, color: ColorsManager.textGray),
|
||||
onTap: onTap,
|
||||
);
|
||||
}
|
||||
}
|
@ -1,241 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/restart_status_dialog.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
import 'package:syncrow_app/generated/assets.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class WeatherDialog extends StatefulWidget {
|
||||
final String label1;
|
||||
final String label2;
|
||||
final String label3;
|
||||
final String label4;
|
||||
final String label5;
|
||||
|
||||
final String title;
|
||||
final Function()? cancelTab;
|
||||
final Function(String label)? confirmTab;
|
||||
|
||||
final String? initialSelectedLabel;
|
||||
|
||||
WeatherDialog({
|
||||
required this.label1,
|
||||
required this.label2,
|
||||
required this.label3,
|
||||
required this.label4,
|
||||
required this.label5,
|
||||
required this.title,
|
||||
required this.cancelTab,
|
||||
required this.confirmTab,
|
||||
this.initialSelectedLabel,
|
||||
});
|
||||
|
||||
@override
|
||||
_WeatherDialogState createState() => _WeatherDialogState();
|
||||
}
|
||||
|
||||
class _WeatherDialogState extends State<WeatherDialog> {
|
||||
late String _selectedOption;
|
||||
String _selectedCity = 'Current City';
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
_selectedOption = widget.initialSelectedLabel ?? '';
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: Colors.white,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
BodyLarge(
|
||||
text: widget.title,
|
||||
fontWeight: FontWeight.w700,
|
||||
fontColor: ColorsManager.primaryColor,
|
||||
fontSize: 16,
|
||||
),
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(left: 15, right: 15),
|
||||
child: Divider(
|
||||
color: ColorsManager.textGray,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 15, right: 15),
|
||||
child: Column(
|
||||
children: [
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.sunnyIcon,
|
||||
label: widget.label1,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.cloudyIcon,
|
||||
label: widget.label2,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.rainyIcon,
|
||||
label: widget.label3,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.snowyIcon,
|
||||
label: widget.label4,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
_buildCheckboxOption(
|
||||
icon: Assets.hazyIcon,
|
||||
label: widget.label5,
|
||||
onTap: (v) {
|
||||
_selectedOption = v;
|
||||
},
|
||||
),
|
||||
Container(
|
||||
height: 35,
|
||||
child: ElevatedButton(
|
||||
onPressed: () {},
|
||||
child: Text(
|
||||
_selectedCity,
|
||||
style: TextStyle(
|
||||
color: ColorsManager.grayColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: ColorsManager.grayBox.withOpacity(0.6),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(
|
||||
right: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 0.5,
|
||||
),
|
||||
top: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 1.0,
|
||||
),
|
||||
)),
|
||||
child: SizedBox(
|
||||
child: InkWell(
|
||||
onTap: widget.cancelTab,
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(15),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Cancel',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.textGray,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(
|
||||
left: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 0.5,
|
||||
),
|
||||
top: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 1.0,
|
||||
),
|
||||
)),
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
widget.confirmTab!.call(_selectedOption);
|
||||
},
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(15),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Confirm',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.primaryColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
)),
|
||||
))
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildCheckboxOption(
|
||||
{required String label, required String icon, Function(String)? onTap}) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 10, top: 10),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(icon),
|
||||
SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
BodyMedium(
|
||||
text: label,
|
||||
style:
|
||||
const TextStyle(fontSize: 15, fontWeight: FontWeight.w400),
|
||||
),
|
||||
],
|
||||
),
|
||||
CircularCheckbox(
|
||||
value: _selectedOption == label,
|
||||
onChanged: (bool? value) {
|
||||
if (value == true) {
|
||||
setState(() {
|
||||
_selectedOption = label;
|
||||
});
|
||||
if (onTap != null) {
|
||||
onTap(label);
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,160 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class WindSpeedDialog extends StatefulWidget {
|
||||
final Function(double selectedTemperature, int selectedToggleIndex,
|
||||
String selectedCity)? confirmTab;
|
||||
|
||||
const WindSpeedDialog({
|
||||
Key? key,
|
||||
this.confirmTab,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
_WindSpeedDialogState createState() => _WindSpeedDialogState();
|
||||
}
|
||||
|
||||
class _WindSpeedDialogState extends State<WindSpeedDialog> {
|
||||
double _currentSpeed = 40;
|
||||
String _selectedCity = 'Current City';
|
||||
int selectedToggleIndex = 1;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
backgroundColor: Colors.white,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
'Wind Speed',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: ColorsManager.primaryColor.withOpacity(0.5)),
|
||||
),
|
||||
const Divider(color: ColorsManager.greyColor),
|
||||
ToggleButtons(
|
||||
isSelected: [
|
||||
selectedToggleIndex == 0,
|
||||
selectedToggleIndex == 1,
|
||||
selectedToggleIndex == 2
|
||||
],
|
||||
onPressed: (index) {
|
||||
setState(() {
|
||||
selectedToggleIndex = index;
|
||||
});
|
||||
},
|
||||
borderRadius: BorderRadius.circular(30),
|
||||
selectedColor: Colors.white,
|
||||
color: ColorsManager.blackColor,
|
||||
fillColor: ColorsManager.primaryColorWithOpacity,
|
||||
borderColor: ColorsManager.greyColor,
|
||||
constraints: BoxConstraints.tight(const Size(70, 30)),
|
||||
children: [
|
||||
_buildToggleOption('<', selectedToggleIndex == 0),
|
||||
_buildToggleOption('=', selectedToggleIndex == 1),
|
||||
_buildToggleOption('>', selectedToggleIndex == 2),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
'${_currentSpeed.toStringAsFixed(0)} m/s',
|
||||
style: TextStyle(
|
||||
fontSize: 40,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: ColorsManager.secondaryColor.withOpacity(0.5)),
|
||||
),
|
||||
Slider(
|
||||
activeColor: ColorsManager.secondaryColor.withOpacity(0.5),
|
||||
inactiveColor: ColorsManager.grayBox,
|
||||
thumbColor: ColorsManager.primaryColor,
|
||||
value: _currentSpeed,
|
||||
min: 0,
|
||||
max: 62,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
_currentSpeed = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: _selectCity,
|
||||
child: Text(
|
||||
_selectedCity,
|
||||
style: const TextStyle(
|
||||
color: ColorsManager.grayColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: ColorsManager.grayBox.withOpacity(0.6),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Row(
|
||||
children: [
|
||||
_buildActionButton(context, 'Cancel', ColorsManager.textGray,
|
||||
() => Navigator.of(context).pop()),
|
||||
_buildActionButton(context, 'Confirm', ColorsManager.primaryColor,
|
||||
() {
|
||||
widget.confirmTab!
|
||||
.call(_currentSpeed, selectedToggleIndex, _selectedCity);
|
||||
}),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildToggleOption(String label, bool isSelected) {
|
||||
return SizedBox(
|
||||
width: 70,
|
||||
height: 30,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
color: isSelected
|
||||
? ColorsManager.secondaryColor.withOpacity(0.2)
|
||||
: ColorsManager.textGray,
|
||||
child: Text(label),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildActionButton(
|
||||
BuildContext context, String text, Color color, VoidCallback onTap) {
|
||||
return Expanded(
|
||||
child: InkWell(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(15),
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
top: const BorderSide(color: ColorsManager.textGray),
|
||||
left: text == 'Confirm'
|
||||
? const BorderSide(color: ColorsManager.textGray, width: 0.5)
|
||||
: BorderSide.none,
|
||||
),
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
color: color, fontSize: 14, fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _selectCity() {
|
||||
// Placeholder for the city selection function
|
||||
setState(() {
|
||||
_selectedCity = 'Selected City';
|
||||
});
|
||||
}
|
||||
}
|
111
lib/features/scene/widgets/alert_dialogs/icons_dialog.dart
Normal file
@ -0,0 +1,111 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class IconsDialog extends StatelessWidget {
|
||||
final String title;
|
||||
final Widget widgetList;
|
||||
final Function()? cancelTab;
|
||||
final Function()? confirmTab;
|
||||
|
||||
const IconsDialog({
|
||||
super.key,
|
||||
required this.widgetList,
|
||||
required this.title,
|
||||
required this.cancelTab,
|
||||
required this.confirmTab,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
contentPadding: EdgeInsets.zero,
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
BodyLarge(
|
||||
text: title,
|
||||
fontWeight: FontWeight.w700,
|
||||
fontColor: ColorsManager.primaryColor,
|
||||
fontSize: 16,
|
||||
),
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(left: 15, right: 15),
|
||||
child: Divider(
|
||||
color: ColorsManager.textGray,
|
||||
),
|
||||
),
|
||||
widgetList,
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(
|
||||
right: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 0.5,
|
||||
),
|
||||
top: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 1.0,
|
||||
),
|
||||
)),
|
||||
child: SizedBox(
|
||||
child: InkWell(
|
||||
onTap: cancelTab,
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(15),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Cancel',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.textGray,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(
|
||||
left: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 0.5,
|
||||
),
|
||||
top: BorderSide(
|
||||
color: ColorsManager.textGray,
|
||||
width: 1.0,
|
||||
),
|
||||
)),
|
||||
child: InkWell(
|
||||
onTap: confirmTab!,
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(15),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Confirm',
|
||||
style: TextStyle(
|
||||
color: ColorsManager.primaryColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
),
|
||||
)),
|
||||
))
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
||||
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
||||
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart';
|
||||
@ -37,8 +38,8 @@ class SceneItem extends StatelessWidget {
|
||||
onTap: () {
|
||||
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent());
|
||||
if (disablePlayButton == false) {
|
||||
BlocProvider.of<CreateSceneBloc>(context).add(
|
||||
FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false));
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
.add(FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false));
|
||||
|
||||
/// the state to set the scene type must be after the fetch
|
||||
BlocProvider.of<CreateSceneBloc>(context)
|
||||
@ -72,19 +73,22 @@ class SceneItem extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Image.asset(
|
||||
height: 32,
|
||||
width: 32,
|
||||
Assets.assetsIconsLogo,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
if (!disablePlayButton)
|
||||
Image.memory(
|
||||
height: 32,
|
||||
width: 32,
|
||||
scene.iconInBytes,
|
||||
fit: BoxFit.fill,
|
||||
errorBuilder: (context, error, stackTrace) =>
|
||||
Image.asset(height: 32, width: 32, fit: BoxFit.fill, Assets.assetsIconsLogo),
|
||||
),
|
||||
if (disablePlayButton)
|
||||
SvgPicture.asset(height: 32, width: 32, fit: BoxFit.fill, Assets.automationIcon),
|
||||
disablePlayButton == false
|
||||
? IconButton(
|
||||
padding: EdgeInsets.zero,
|
||||
onPressed: () {
|
||||
context
|
||||
.read<SceneBloc>()
|
||||
.add(SceneTrigger(scene.id, scene.name));
|
||||
context.read<SceneBloc>().add(SceneTrigger(scene.id, scene.name));
|
||||
},
|
||||
icon: isLoading
|
||||
? const Center(
|
||||
@ -106,15 +110,11 @@ class SceneItem extends StatelessWidget {
|
||||
activeColor: ColorsManager.primaryColor,
|
||||
value: scene.status == 'enable' ? true : false,
|
||||
onChanged: (value) {
|
||||
context.read<SceneBloc>().add(
|
||||
UpdateAutomationStatus(
|
||||
automationStatusUpdate:
|
||||
AutomationStatusUpdate(
|
||||
isEnable: value,
|
||||
unitUuid: HomeCubit.getInstance()
|
||||
.selectedSpace!
|
||||
.id!),
|
||||
automationId: scene.id));
|
||||
context.read<SceneBloc>().add(UpdateAutomationStatus(
|
||||
automationStatusUpdate: AutomationStatusUpdate(
|
||||
isEnable: value,
|
||||
unitUuid: HomeCubit.getInstance().selectedSpace!.id!),
|
||||
automationId: scene.id));
|
||||
},
|
||||
),
|
||||
],
|
||||
|
@ -3,8 +3,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsFontsAftikaRegular
|
||||
/// assets/fonts/AftikaRegular.ttf
|
||||
static const String assetsFontsAftikaRegular =
|
||||
"assets/fonts/AftikaRegular.ttf";
|
||||
static const String assetsFontsAftikaRegular = "assets/fonts/AftikaRegular.ttf";
|
||||
|
||||
/// Assets for assetsIcons3GangSwitch
|
||||
/// assets/icons/3GangSwitch.svg
|
||||
@ -20,98 +19,82 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsAutomatedClock
|
||||
/// assets/icons/automated_clock.svg
|
||||
static const String assetsIconsAutomatedClock =
|
||||
"assets/icons/automated_clock.svg";
|
||||
static const String assetsIconsAutomatedClock = "assets/icons/automated_clock.svg";
|
||||
static const String acSwitchIcon = "assets/icons/ac_switch_ic.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstChargeddmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstChargeddmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstChargeddmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstChargeddmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstChargeddmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstDefaultdmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstDefaultdmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstDefaultdmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOfflowOffpmOffstDefaultdmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOfflowOffpmOffstDefaultdmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOffpmOnstChargeddmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOfflowOffpmOnstChargeddmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOfflowOffpmOnstChargeddmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOfflowOffpmOnstChargeddmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOfflowOffpmOnstChargeddmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOnpmOffstDefaultdmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOfflowOnpmOffstDefaultdmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOfflowOnpmOffstDefaultdmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOfflowOnpmOffstDefaultdmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOfflowOnpmOffstDefaultdmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOfflowOnpmOnstDefaultdmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOfflowOnpmOnstDefaultdmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOfflowOnpmOnstDefaultdmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOfflowOnpmOnstDefaultdmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOfflowOnpmOnstDefaultdmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOnlowOffpmOffstChargeddmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOnlowOffpmOffstChargeddmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOnlowOffpmOffstChargeddmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOnlowOffpmOffstChargeddmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOnlowOffpmOffstChargeddmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOnlowOnpmOffstlowBatterydmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOnlowOnpmOffstlowBatterydmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOnlowOnpmOffstlowBatterydmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOnlowOnpmOffstlowBatterydmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOnlowOnpmOffstlowBatterydmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOffchargOnlowOnpmOnstlowpmdmOff
|
||||
/// assets/icons/battery/dmOff/perOffchargOnlowOnpmOnstlowpmdmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOffchargOnlowOnpmOnstlowpmdmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOffchargOnlowOnpmOnstlowpmdmOff =
|
||||
"assets/icons/battery/dmOff/perOffchargOnlowOnpmOnstlowpmdmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstChargeddmOff
|
||||
/// assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstChargeddmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstChargeddmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstChargeddmOff =
|
||||
"assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstChargeddmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstDefaultdmOff
|
||||
/// assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstDefaultdmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstDefaultdmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOnchargOfflowOffpmOffstDefaultdmOff =
|
||||
"assets/icons/battery/dmOff/perOnchargOfflowOffpmOffstDefaultdmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOffpmOnstChargeddmOff
|
||||
/// assets/icons/battery/dmOff/perOnchargOfflowOffpmOnstChargeddmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOnchargOfflowOffpmOnstChargeddmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOnchargOfflowOffpmOnstChargeddmOff =
|
||||
"assets/icons/battery/dmOff/perOnchargOfflowOffpmOnstChargeddmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOnpmOffstDefaultdmOff
|
||||
/// assets/icons/battery/dmOff/perOnchargOfflowOnpmOffstDefaultdmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOnchargOfflowOnpmOffstDefaultdmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOnchargOfflowOnpmOffstDefaultdmOff =
|
||||
"assets/icons/battery/dmOff/perOnchargOfflowOnpmOffstDefaultdmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOfflowOnpmOnstDefaultdmOff
|
||||
/// assets/icons/battery/dmOff/perOnchargOfflowOnpmOnstDefaultdmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOnchargOfflowOnpmOnstDefaultdmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOnchargOfflowOnpmOnstDefaultdmOff =
|
||||
"assets/icons/battery/dmOff/perOnchargOfflowOnpmOnstDefaultdmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOnlowOffpmOffstChargeddmOff
|
||||
/// assets/icons/battery/dmOff/perOnchargOnlowOffpmOffstChargeddmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOnchargOnlowOffpmOffstChargeddmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOnchargOnlowOffpmOffstChargeddmOff =
|
||||
"assets/icons/battery/dmOff/perOnchargOnlowOffpmOffstChargeddmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOnlowOnpmOffstlowBatterydmOff
|
||||
/// assets/icons/battery/dmOff/perOnchargOnlowOnpmOffstlowBatterydmOff.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOffPerOnchargOnlowOnpmOffstlowBatterydmOff =
|
||||
static const String assetsIconsBatteryDmOffPerOnchargOnlowOnpmOffstlowBatterydmOff =
|
||||
"assets/icons/battery/dmOff/perOnchargOnlowOnpmOffstlowBatterydmOff.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOffPerOnchargOnlowOnpmOnstlowpmdmOff
|
||||
@ -121,44 +104,37 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstChargeddmOn
|
||||
/// assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstChargeddmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstChargeddmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstChargeddmOn =
|
||||
"assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstChargeddmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstDefaultdmOn
|
||||
/// assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstDefaultdmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstDefaultdmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOffchargOfflowOffpmOffstDefaultdmOn =
|
||||
"assets/icons/battery/dmOn/perOffchargOfflowOffpmOffstDefaultdmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOffpmOnstChargeddmOn
|
||||
/// assets/icons/battery/dmOn/perOffchargOfflowOffpmOnstChargeddmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOffchargOfflowOffpmOnstChargeddmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOffchargOfflowOffpmOnstChargeddmOn =
|
||||
"assets/icons/battery/dmOn/perOffchargOfflowOffpmOnstChargeddmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOnpmOffstDefaultdmOn
|
||||
/// assets/icons/battery/dmOn/perOffchargOfflowOnpmOffstDefaultdmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOffchargOfflowOnpmOffstDefaultdmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOffchargOfflowOnpmOffstDefaultdmOn =
|
||||
"assets/icons/battery/dmOn/perOffchargOfflowOnpmOffstDefaultdmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOfflowOnpmOnstDefaultdmOn
|
||||
/// assets/icons/battery/dmOn/perOffchargOfflowOnpmOnstDefaultdmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOffchargOfflowOnpmOnstDefaultdmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOffchargOfflowOnpmOnstDefaultdmOn =
|
||||
"assets/icons/battery/dmOn/perOffchargOfflowOnpmOnstDefaultdmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOnlowOffpmOffstChargeddmOn
|
||||
/// assets/icons/battery/dmOn/perOffchargOnlowOffpmOffstChargeddmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOffchargOnlowOffpmOffstChargeddmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOffchargOnlowOffpmOffstChargeddmOn =
|
||||
"assets/icons/battery/dmOn/perOffchargOnlowOffpmOffstChargeddmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOnlowOnpmOffstlowBatterydmOn
|
||||
/// assets/icons/battery/dmOn/perOffchargOnlowOnpmOffstlowBatterydmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOffchargOnlowOnpmOffstlowBatterydmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOffchargOnlowOnpmOffstlowBatterydmOn =
|
||||
"assets/icons/battery/dmOn/perOffchargOnlowOnpmOffstlowBatterydmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOffchargOnlowOnpmOnstlowpmdmOn
|
||||
@ -168,44 +144,37 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstChargeddmOn
|
||||
/// assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstChargeddmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstChargeddmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstChargeddmOn =
|
||||
"assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstChargeddmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstDefaultdmOn
|
||||
/// assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstDefaultdmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstDefaultdmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOnchargOfflowOffpmOffstDefaultdmOn =
|
||||
"assets/icons/battery/dmOn/perOnchargOfflowOffpmOffstDefaultdmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOffpmOnstChargeddmOn
|
||||
/// assets/icons/battery/dmOn/perOnchargOfflowOffpmOnstChargeddmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOnchargOfflowOffpmOnstChargeddmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOnchargOfflowOffpmOnstChargeddmOn =
|
||||
"assets/icons/battery/dmOn/perOnchargOfflowOffpmOnstChargeddmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOnpmOffstDefaultdmOn
|
||||
/// assets/icons/battery/dmOn/perOnchargOfflowOnpmOffstDefaultdmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOnchargOfflowOnpmOffstDefaultdmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOnchargOfflowOnpmOffstDefaultdmOn =
|
||||
"assets/icons/battery/dmOn/perOnchargOfflowOnpmOffstDefaultdmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOfflowOnpmOnstDefaultdmOn
|
||||
/// assets/icons/battery/dmOn/perOnchargOfflowOnpmOnstDefaultdmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOnchargOfflowOnpmOnstDefaultdmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOnchargOfflowOnpmOnstDefaultdmOn =
|
||||
"assets/icons/battery/dmOn/perOnchargOfflowOnpmOnstDefaultdmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOnlowOffpmOffstChargeddmOn
|
||||
/// assets/icons/battery/dmOn/perOnchargOnlowOffpmOffstChargeddmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOnchargOnlowOffpmOffstChargeddmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOnchargOnlowOffpmOffstChargeddmOn =
|
||||
"assets/icons/battery/dmOn/perOnchargOnlowOffpmOffstChargeddmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOnlowOnpmOffstlowBatterydmOn
|
||||
/// assets/icons/battery/dmOn/perOnchargOnlowOnpmOffstlowBatterydmOn.svg
|
||||
static const String
|
||||
assetsIconsBatteryDmOnPerOnchargOnlowOnpmOffstlowBatterydmOn =
|
||||
static const String assetsIconsBatteryDmOnPerOnchargOnlowOnpmOffstlowBatterydmOn =
|
||||
"assets/icons/battery/dmOn/perOnchargOnlowOnpmOffstlowBatterydmOn.svg";
|
||||
|
||||
/// Assets for assetsIconsBatteryDmOnPerOnchargOnlowOnpmOnstlowpmdmOn
|
||||
@ -249,8 +218,7 @@ class Assets {
|
||||
static const String assetsIconsCurtainsIconVerticalBlade =
|
||||
"assets/icons/curtainsIcon/left_vertical_blade.svg";
|
||||
|
||||
static const String rightVerticalBlade =
|
||||
"assets/icons/curtainsIcon/right_vertical_blade.svg";
|
||||
static const String rightVerticalBlade = "assets/icons/curtainsIcon/right_vertical_blade.svg";
|
||||
|
||||
/// Assets for assetsIconsDashboard
|
||||
/// assets/icons/dashboard.svg
|
||||
@ -260,8 +228,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsDashboardFill
|
||||
/// assets/icons/dashboard-fill.svg
|
||||
static const String assetsIconsDashboardFill =
|
||||
"assets/icons/dashboard-fill.svg";
|
||||
static const String assetsIconsDashboardFill = "assets/icons/dashboard-fill.svg";
|
||||
|
||||
/// Assets for assetsIconsDevices
|
||||
/// assets/icons/Devices.svg
|
||||
@ -277,8 +244,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsDoorLockLinkage
|
||||
/// assets/icons/DoorLockLinkage.svg
|
||||
static const String assetsIconsDoorLockLinkage =
|
||||
"assets/icons/DoorLockLinkage.svg";
|
||||
static const String assetsIconsDoorLockLinkage = "assets/icons/DoorLockLinkage.svg";
|
||||
|
||||
/// Assets for assetsIconsDoorLockLock
|
||||
/// assets/icons/DoorLockLock.svg
|
||||
@ -286,18 +252,15 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsDoorLockMembers
|
||||
/// assets/icons/DoorLockMembers.svg
|
||||
static const String assetsIconsDoorLockMembers =
|
||||
"assets/icons/DoorLockMembers.svg";
|
||||
static const String assetsIconsDoorLockMembers = "assets/icons/DoorLockMembers.svg";
|
||||
|
||||
/// Assets for assetsIconsDoorLockPassword
|
||||
/// assets/icons/DoorLockPassword.svg
|
||||
static const String assetsIconsDoorLockPassword =
|
||||
"assets/icons/DoorLockPassword.svg";
|
||||
static const String assetsIconsDoorLockPassword = "assets/icons/DoorLockPassword.svg";
|
||||
|
||||
/// Assets for assetsIconsDoorLockRecords
|
||||
/// assets/icons/DoorLockRecords.svg
|
||||
static const String assetsIconsDoorLockRecords =
|
||||
"assets/icons/DoorLockRecords.svg";
|
||||
static const String assetsIconsDoorLockRecords = "assets/icons/DoorLockRecords.svg";
|
||||
|
||||
/// Assets for assetsIconsDoorlockAssetsBatteryIndicator
|
||||
/// assets/icons/doorlock-assets/BatteryIndicator.svg
|
||||
@ -318,8 +281,7 @@ class Assets {
|
||||
/// assets/icons/doorlock-assets/lockIcon.svg
|
||||
static const String assetsIconsDoorlockAssetsLockIcon =
|
||||
"assets/icons/doorlock-assets/lockIcon.svg";
|
||||
static const String doorUnlockIcon =
|
||||
"assets/icons/doorlock-assets/door_un_look_ic.svg";
|
||||
static const String doorUnlockIcon = "assets/icons/doorlock-assets/door_un_look_ic.svg";
|
||||
|
||||
/// Assets for assetsIconsDoorlockAssetsMembersManagement
|
||||
/// assets/icons/doorlock-assets/members-management.svg
|
||||
@ -407,13 +369,11 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsLightSwitchOff
|
||||
/// assets/icons/lightSwitchOff.svg
|
||||
static const String assetsIconsLightSwitchOff =
|
||||
"assets/icons/lightSwitchOff.svg";
|
||||
static const String assetsIconsLightSwitchOff = "assets/icons/lightSwitchOff.svg";
|
||||
|
||||
/// Assets for assetsIconsLightSwitchOn
|
||||
/// assets/icons/lightSwitchOn.svg
|
||||
static const String assetsIconsLightSwitchOn =
|
||||
"assets/icons/lightSwitchOn.svg";
|
||||
static const String assetsIconsLightSwitchOn = "assets/icons/lightSwitchOn.svg";
|
||||
|
||||
/// Assets for assetsIconsLinkageIconsDoorLockAlarm
|
||||
/// assets/icons/linkageIcons/doorLockAlarm.svg
|
||||
@ -422,8 +382,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsLinkTimeLimitedPasswordIcon
|
||||
/// assets/icons/timeLimitedPasswordIcon.svg
|
||||
static const String timeLimitedPasswordIcon =
|
||||
"assets/icons/timeLimitedPasswordIcon.svg";
|
||||
static const String timeLimitedPasswordIcon = "assets/icons/timeLimitedPasswordIcon.svg";
|
||||
|
||||
/// Assets for assetsIconsoneTimePassword
|
||||
/// assets/icons/oneTimePassword.svg
|
||||
@ -431,8 +390,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsTimeLimitedPassword
|
||||
/// assets/icons/timeLimitedPassword.svg
|
||||
static const String timeLimitedPassword =
|
||||
"assets/icons/timeLimitedPassword.svg";
|
||||
static const String timeLimitedPassword = "assets/icons/timeLimitedPassword.svg";
|
||||
|
||||
/// Assets for assetsIconsNoValidPasswords
|
||||
/// assets/icons/noValidPasswords.svg
|
||||
@ -601,13 +559,11 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsPresenceSensorAssetsParameterSettings
|
||||
/// assets/icons/presence-sensor-assets/space_type_icon.svg
|
||||
static const String spaceTypeIcon =
|
||||
"assets/icons/presence-sensor-assets/space_type_icon.svg";
|
||||
static const String spaceTypeIcon = "assets/icons/presence-sensor-assets/space_type_icon.svg";
|
||||
|
||||
/// Assets for assetsIconsPresenceSensorAssetsParameterSettings
|
||||
/// assets/icons/presence-sensor-assets/space_type_icon.svg
|
||||
static const String sensitivityIcon =
|
||||
"assets/icons/presence-sensor-assets/Sensitivity.svg";
|
||||
static const String sensitivityIcon = "assets/icons/presence-sensor-assets/Sensitivity.svg";
|
||||
|
||||
/// Assets for assetsIconsPresenceSensorAssetsParameterSettings
|
||||
/// assets/icons/presence-sensor-assets/maximum_distance.svg
|
||||
@ -640,8 +596,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsRoutinesFill
|
||||
/// assets/icons/Routines-fill.svg
|
||||
static const String assetsIconsRoutinesFill =
|
||||
"assets/icons/Routines-fill.svg";
|
||||
static const String assetsIconsRoutinesFill = "assets/icons/Routines-fill.svg";
|
||||
|
||||
/// Assets for assetsIconsScan
|
||||
/// assets/icons/Scan.svg
|
||||
@ -673,8 +628,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsIconsSustainability
|
||||
/// assets/icons/sustainability.svg
|
||||
static const String assetsIconsSustainability =
|
||||
"assets/icons/sustainability.svg";
|
||||
static const String assetsIconsSustainability = "assets/icons/sustainability.svg";
|
||||
|
||||
/// Assets for assetsIconsUnlockingMethodsIconsFace
|
||||
/// assets/icons/unlockingMethodsIcons/face.svg
|
||||
@ -770,8 +724,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsImagesHorizintalBlade
|
||||
/// assets/images/HorizintalBlade.png
|
||||
static const String assetsImagesHorizintalBlade =
|
||||
"assets/images/HorizintalBlade.png";
|
||||
static const String assetsImagesHorizintalBlade = "assets/images/HorizintalBlade.png";
|
||||
|
||||
/// Assets for assetsImagesLogo
|
||||
/// assets/images/Logo.svg
|
||||
@ -779,8 +732,7 @@ class Assets {
|
||||
|
||||
/// Assets for assetsImagesLogoHorizontal
|
||||
/// assets/images/logo_horizontal.png
|
||||
static const String assetsImagesLogoHorizontal =
|
||||
"assets/images/logo_horizontal.png";
|
||||
static const String assetsImagesLogoHorizontal = "assets/images/logo_horizontal.png";
|
||||
|
||||
/// Assets for assetsImagesPause
|
||||
/// assets/images/Pause.png
|
||||
@ -810,8 +762,7 @@ class Assets {
|
||||
/// assets/images/Window.png
|
||||
static const String assetsImagesWindow = "assets/images/window_img.svg";
|
||||
|
||||
static const String assetsSensitivityFunction =
|
||||
"assets/icons/functions_icons/sensitivity.svg";
|
||||
static const String assetsSensitivityFunction = "assets/icons/functions_icons/sensitivity.svg";
|
||||
|
||||
//assets/icons/functions_icons/sesitivity_operation_icon.svg
|
||||
static const String assetsSensitivityOperationIcon =
|
||||
@ -819,73 +770,59 @@ class Assets {
|
||||
|
||||
//assets/icons/functions_icons/ac_power.svg
|
||||
|
||||
static const String assetsAcPower =
|
||||
"assets/icons/functions_icons/ac_power.svg";
|
||||
static const String assetsAcPower = "assets/icons/functions_icons/ac_power.svg";
|
||||
|
||||
//assets/icons/functions_icons/ac_power_off.svg
|
||||
|
||||
static const String assetsAcPowerOFF =
|
||||
"assets/icons/functions_icons/ac_power_off.svg";
|
||||
static const String assetsAcPowerOFF = "assets/icons/functions_icons/ac_power_off.svg";
|
||||
|
||||
//assets/icons/functions_icons/child_lock.svg
|
||||
|
||||
static const String assetsChildLock =
|
||||
"assets/icons/functions_icons/child_lock.svg";
|
||||
static const String assetsChildLock = "assets/icons/functions_icons/child_lock.svg";
|
||||
|
||||
//assets/icons/functions_icons/cooling.svg
|
||||
|
||||
static const String assetsFreezing =
|
||||
"assets/icons/functions_icons/freezing.svg";
|
||||
static const String assetsFreezing = "assets/icons/functions_icons/freezing.svg";
|
||||
|
||||
//assets/icons/functions_icons/fan_speed.svg
|
||||
|
||||
static const String assetsFanSpeed =
|
||||
"assets/icons/functions_icons/fan_speed.svg";
|
||||
static const String assetsFanSpeed = "assets/icons/functions_icons/fan_speed.svg";
|
||||
|
||||
//assets/icons/functions_icons/ac_cooling.svg
|
||||
|
||||
static const String assetsAcCooling =
|
||||
"assets/icons/functions_icons/ac_cooling.svg";
|
||||
static const String assetsAcCooling = "assets/icons/functions_icons/ac_cooling.svg";
|
||||
|
||||
//assets/icons/functions_icons/ac_heating.svg
|
||||
|
||||
static const String assetsAcHeating =
|
||||
"assets/icons/functions_icons/ac_heating.svg";
|
||||
static const String assetsAcHeating = "assets/icons/functions_icons/ac_heating.svg";
|
||||
|
||||
//assets/icons/functions_icons/celsius_degrees.svg
|
||||
|
||||
static const String assetsCelsiusDegrees =
|
||||
"assets/icons/functions_icons/celsius_degrees.svg";
|
||||
static const String assetsCelsiusDegrees = "assets/icons/functions_icons/celsius_degrees.svg";
|
||||
|
||||
//assets/icons/functions_icons/tempreture.svg
|
||||
|
||||
static const String assetsTempreture =
|
||||
"assets/icons/functions_icons/tempreture.svg";
|
||||
static const String assetsTempreture = "assets/icons/functions_icons/tempreture.svg";
|
||||
|
||||
//assets/icons/functions_icons/ac_fan_low.svg
|
||||
|
||||
static const String assetsAcFanLow =
|
||||
"assets/icons/functions_icons/ac_fan_low.svg";
|
||||
static const String assetsAcFanLow = "assets/icons/functions_icons/ac_fan_low.svg";
|
||||
|
||||
//assets/icons/functions_icons/ac_fan_middle.svg
|
||||
|
||||
static const String assetsAcFanMiddle =
|
||||
"assets/icons/functions_icons/ac_fan_middle.svg";
|
||||
static const String assetsAcFanMiddle = "assets/icons/functions_icons/ac_fan_middle.svg";
|
||||
|
||||
//assets/icons/functions_icons/ac_fan_high.svg
|
||||
|
||||
static const String assetsAcFanHigh =
|
||||
"assets/icons/functions_icons/ac_fan_high.svg";
|
||||
static const String assetsAcFanHigh = "assets/icons/functions_icons/ac_fan_high.svg";
|
||||
|
||||
//assets/icons/functions_icons/ac_fan_auto.svg
|
||||
|
||||
static const String assetsAcFanAuto =
|
||||
"assets/icons/functions_icons/ac_fan_auto.svg";
|
||||
static const String assetsAcFanAuto = "assets/icons/functions_icons/ac_fan_auto.svg";
|
||||
|
||||
//assets/icons/functions_icons/scene_child_lock.svg
|
||||
|
||||
static const String assetsSceneChildLock =
|
||||
"assets/icons/functions_icons/scene_child_lock.svg";
|
||||
static const String assetsSceneChildLock = "assets/icons/functions_icons/scene_child_lock.svg";
|
||||
|
||||
//assets/icons/functions_icons/scene_child_unlock.svg
|
||||
|
||||
@ -894,18 +831,15 @@ class Assets {
|
||||
|
||||
//assets/icons/functions_icons/scene_refresh.svg
|
||||
|
||||
static const String assetsSceneRefresh =
|
||||
"assets/icons/functions_icons/scene_refresh.svg";
|
||||
static const String assetsSceneRefresh = "assets/icons/functions_icons/scene_refresh.svg";
|
||||
|
||||
//assets/icons/functions_icons/light_countdown.svg
|
||||
|
||||
static const String assetsLightCountdown =
|
||||
"assets/icons/functions_icons/light_countdown.svg";
|
||||
static const String assetsLightCountdown = "assets/icons/functions_icons/light_countdown.svg";
|
||||
|
||||
//assets/icons/functions_icons/far_detection.svg
|
||||
|
||||
static const String assetsFarDetection =
|
||||
"assets/icons/functions_icons/far_detection.svg";
|
||||
static const String assetsFarDetection = "assets/icons/functions_icons/far_detection.svg";
|
||||
|
||||
//assets/icons/functions_icons/far_detection_function.svg
|
||||
|
||||
@ -914,13 +848,11 @@ class Assets {
|
||||
|
||||
//assets/icons/functions_icons/indicator.svg
|
||||
|
||||
static const String assetsIndicator =
|
||||
"assets/icons/functions_icons/indicator.svg";
|
||||
static const String assetsIndicator = "assets/icons/functions_icons/indicator.svg";
|
||||
|
||||
//assets/icons/functions_icons/motion_detection.svg
|
||||
|
||||
static const String assetsMotionDetection =
|
||||
"assets/icons/functions_icons/motion_detection.svg";
|
||||
static const String assetsMotionDetection = "assets/icons/functions_icons/motion_detection.svg";
|
||||
|
||||
//assets/icons/functions_icons/motionless_detection.svg
|
||||
|
||||
@ -929,18 +861,15 @@ class Assets {
|
||||
|
||||
//assets/icons/functions_icons/nobody_time.svg
|
||||
|
||||
static const String assetsNobodyTime =
|
||||
"assets/icons/functions_icons/nobody_time.svg";
|
||||
static const String assetsNobodyTime = "assets/icons/functions_icons/nobody_time.svg";
|
||||
|
||||
//assets/icons/functions_icons/factory_reset.svg
|
||||
|
||||
static const String assetsFactoryReset =
|
||||
"assets/icons/functions_icons/factory_reset.svg";
|
||||
static const String assetsFactoryReset = "assets/icons/functions_icons/factory_reset.svg";
|
||||
|
||||
//assets/icons/functions_icons/master_state.svg
|
||||
|
||||
static const String assetsMasterState =
|
||||
"assets/icons/functions_icons/master_state.svg";
|
||||
static const String assetsMasterState = "assets/icons/functions_icons/master_state.svg";
|
||||
|
||||
//assets/icons/functions_icons/switch_alarm_sound.svg
|
||||
|
||||
@ -949,8 +878,7 @@ class Assets {
|
||||
|
||||
//assets/icons/functions_icons/reset_off.svg
|
||||
|
||||
static const String assetsResetOff =
|
||||
"assets/icons/functions_icons/reset_off.svg";
|
||||
static const String assetsResetOff = "assets/icons/functions_icons/reset_off.svg";
|
||||
|
||||
//assets/icons/functions_icons/automation_functions/card_unlock.svg
|
||||
|
||||
@ -1024,8 +952,7 @@ class Assets {
|
||||
|
||||
//assets/icons/functions_icons/automation_functions/motion.svg
|
||||
|
||||
static const String assetsMotion =
|
||||
"assets/icons/functions_icons/automation_functions/motion.svg";
|
||||
static const String assetsMotion = "assets/icons/functions_icons/automation_functions/motion.svg";
|
||||
|
||||
//assets/icons/functions_icons/automation_functions/current_temp.svg
|
||||
|
||||
@ -1047,33 +974,27 @@ class Assets {
|
||||
static const String waterHeaterOn = "assets/icons/water_heater_on.svg";
|
||||
static const String waterHeaterOff = "assets/icons/water_heater_off.svg";
|
||||
|
||||
static const String scheduleCelenderIcon =
|
||||
"assets/icons/schedule_celender_icon.svg";
|
||||
static const String scheduleCirculateIcon =
|
||||
"assets/icons/schedule_circulate_icon.svg";
|
||||
static const String scheduleInchingIcon =
|
||||
"assets/icons/schedule_Inching_icon.svg";
|
||||
static const String scheduleCelenderIcon = "assets/icons/schedule_celender_icon.svg";
|
||||
static const String scheduleCirculateIcon = "assets/icons/schedule_circulate_icon.svg";
|
||||
static const String scheduleInchingIcon = "assets/icons/schedule_Inching_icon.svg";
|
||||
static const String scheduleTimeIcon = "assets/icons/schedule_time_icon.svg";
|
||||
static const String waterHeaterIcon = "assets/icons/water_heater_icon.svg";
|
||||
|
||||
static const String doorOpen = "assets/icons/opened_door.svg";
|
||||
static const String doorClose = "assets/icons/closed_door.svg";
|
||||
static const String doorNotificationSetting =
|
||||
"assets/icons/door_notification_setting_icon.svg";
|
||||
static const String doorNotificationSetting = "assets/icons/door_notification_setting_icon.svg";
|
||||
static const String doorRecordsIcon = "assets/icons/door_records_icon.svg";
|
||||
static const String doorSensorIcon = "assets/icons/door_sensor_icon.svg";
|
||||
static const String closedGarageIcon = "assets/icons/closed_garage_door.svg";
|
||||
static const String openGarageIcon = "assets/icons/open_garage_door.svg";
|
||||
static const String garageCountdown = "assets/icons/garage_countdown.svg";
|
||||
static const String garagePreferencesIcon =
|
||||
"assets/icons/garage_preferences_icon.svg";
|
||||
static const String garagePreferencesIcon = "assets/icons/garage_preferences_icon.svg";
|
||||
static const String garageSchedule = "assets/icons/garage_schedule.svg";
|
||||
|
||||
static const String garageIcon = "assets/icons/garageIcon.svg";
|
||||
|
||||
static const String normalWaterLeak = "assets/icons/normal_water_leak.svg";
|
||||
static const String detectedWaterLeak =
|
||||
"assets/icons/detected_water_leak.svg";
|
||||
static const String detectedWaterLeak = "assets/icons/detected_water_leak.svg";
|
||||
|
||||
static const String waterLeakIcon = "assets/icons/waterleak_icon.svg";
|
||||
static const String leakDetectedIcon = "assets/icons/leak_detected.svg";
|
||||
@ -1086,18 +1007,10 @@ class Assets {
|
||||
static const String voltMeterIcon = "assets/icons/volt_meter_icon.svg";
|
||||
static const String powerActiveIcon = "assets/icons/power_active_icon.svg";
|
||||
static const String searchIcon = "assets/icons/search_icon.svg";
|
||||
static const String voltageIcon = "assets/icons/voltage_icon.svg";
|
||||
static const String speedoMeter = "assets/icons/speedo_meter.svg";
|
||||
static const String powerClampIcon = "assets/icons/power_clamp.svg";
|
||||
static const String automationIcon = "assets/icons/automation_ic.svg";
|
||||
|
||||
|
||||
static const String comfortableIcon = "assets/icons/comfortable_icon.svg";
|
||||
static const String moistIcon = "assets/icons/moist_icon.svg";
|
||||
static const String dryIcon = "assets/icons/dry_icon.svg";
|
||||
|
||||
|
||||
|
||||
static const String hazyIcon = "assets/icons/hazy_icon.svg";
|
||||
static const String snowyIcon = "assets/icons/snowy_icon.svg";
|
||||
static const String rainyIcon = "assets/icons/rainy_icon.svg";
|
||||
static const String cloudyIcon = "assets/icons/cloudy_icon.svg";
|
||||
static const String sunnyIcon = "assets/icons/sunny_icon.svg";
|
||||
//leakNormalIcon
|
||||
//powerClampIcon
|
||||
}
|
||||
|
@ -105,8 +105,8 @@ abstract class ApiEndpoints {
|
||||
static const String deviceByUuid = '/device/{deviceUuid}';
|
||||
static const String deviceFunctions = '/device/{deviceUuid}/functions';
|
||||
static const String gatewayApi = '/device/gateway/{gatewayUuid}/devices';
|
||||
static const String deviceFunctionsStatus =
|
||||
'/device/{deviceUuid}/functions/status';
|
||||
static const String deviceFunctionsStatus = '/device/{deviceUuid}/functions/status';
|
||||
static const String powerClamp = '/device/{powerClampUuid}/power-clamp/status';
|
||||
|
||||
///Device Permission Module
|
||||
//POST
|
||||
@ -128,6 +128,7 @@ abstract class ApiEndpoints {
|
||||
static const String getUnitScenes = '/scene/tap-to-run/{unitUuid}';
|
||||
|
||||
static const String getScene = '/scene/tap-to-run/details/{sceneId}';
|
||||
static const String getIconScene = '/scene/icon';
|
||||
|
||||
static const String getUnitAutomation = '/automation/{unitUuid}';
|
||||
|
||||
|
@ -80,6 +80,18 @@ class DevicesAPI {
|
||||
return response;
|
||||
}
|
||||
|
||||
static Future<Map<String, dynamic>> getPowerClampStatus(
|
||||
String deviceId) async {
|
||||
final response = await _httpService.get(
|
||||
path: ApiEndpoints.powerClamp.replaceAll('{powerClampUuid}', deviceId),
|
||||
showServerMessage: false,
|
||||
expectedResponseModel: (json) {
|
||||
return json;
|
||||
},
|
||||
);
|
||||
return response;
|
||||
}
|
||||
|
||||
static Future<Map<String, dynamic>> renamePass(
|
||||
{required String name,
|
||||
required String doorLockUuid,
|
||||
@ -371,6 +383,7 @@ class DevicesAPI {
|
||||
.replaceAll('{startTime}', startTime)
|
||||
.replaceAll('{endTime}', endTime),
|
||||
expectedResponseModel: (json) {
|
||||
log('json=====$json');
|
||||
return DeviceReport.fromJson(json);
|
||||
},
|
||||
);
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:syncrow_app/features/scene/model/create_automation_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/icon_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/scene_details_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/scenes_model.dart';
|
||||
import 'package:syncrow_app/features/scene/model/update_automation.dart';
|
||||
@ -10,8 +11,7 @@ class SceneApi {
|
||||
static final HTTPService _httpService = HTTPService();
|
||||
|
||||
//create scene
|
||||
static Future<Map<String, dynamic>> createScene(
|
||||
CreateSceneModel createSceneModel) async {
|
||||
static Future<Map<String, dynamic>> createScene(CreateSceneModel createSceneModel) async {
|
||||
try {
|
||||
final response = await _httpService.post(
|
||||
path: ApiEndpoints.createScene,
|
||||
@ -47,10 +47,11 @@ class SceneApi {
|
||||
|
||||
//get scene by unit id
|
||||
|
||||
static Future<List<ScenesModel>> getScenesByUnitId(String unitId) async {
|
||||
static Future<List<ScenesModel>> getScenesByUnitId(String unitId, {showInDevice = false}) async {
|
||||
try {
|
||||
final response = await _httpService.get(
|
||||
path: ApiEndpoints.getUnitScenes.replaceAll('{unitUuid}', unitId),
|
||||
queryParameters: {'showInHomePage': showInDevice},
|
||||
showServerMessage: false,
|
||||
expectedResponseModel: (json) {
|
||||
List<ScenesModel> scenes = [];
|
||||
@ -101,12 +102,10 @@ class SceneApi {
|
||||
}
|
||||
|
||||
//automation details
|
||||
static Future<SceneDetailsModel> getAutomationDetails(
|
||||
String automationId) async {
|
||||
static Future<SceneDetailsModel> getAutomationDetails(String automationId) async {
|
||||
try {
|
||||
final response = await _httpService.get(
|
||||
path: ApiEndpoints.getAutomationDetails
|
||||
.replaceAll('{automationId}', automationId),
|
||||
path: ApiEndpoints.getAutomationDetails.replaceAll('{automationId}', automationId),
|
||||
showServerMessage: false,
|
||||
expectedResponseModel: (json) => SceneDetailsModel.fromJson(json),
|
||||
);
|
||||
@ -117,12 +116,11 @@ class SceneApi {
|
||||
}
|
||||
|
||||
//updateAutomationStatus
|
||||
static Future<bool> updateAutomationStatus(String automationId,
|
||||
AutomationStatusUpdate createAutomationEnable) async {
|
||||
static Future<bool> updateAutomationStatus(
|
||||
String automationId, AutomationStatusUpdate createAutomationEnable) async {
|
||||
try {
|
||||
final response = await _httpService.put(
|
||||
path: ApiEndpoints.updateAutomationStatus
|
||||
.replaceAll('{automationId}', automationId),
|
||||
path: ApiEndpoints.updateAutomationStatus.replaceAll('{automationId}', automationId),
|
||||
body: createAutomationEnable.toMap(),
|
||||
expectedResponseModel: (json) => json['success'],
|
||||
);
|
||||
@ -132,8 +130,6 @@ class SceneApi {
|
||||
}
|
||||
}
|
||||
|
||||
//getScene
|
||||
|
||||
static Future<SceneDetailsModel> getSceneDetails(String sceneId) async {
|
||||
try {
|
||||
final response = await _httpService.get(
|
||||
@ -147,13 +143,27 @@ class SceneApi {
|
||||
}
|
||||
}
|
||||
|
||||
static Future<List<IconModel>> getIcon() async {
|
||||
final response = await _httpService.get(
|
||||
path: ApiEndpoints.getIconScene,
|
||||
showServerMessage: false,
|
||||
expectedResponseModel: (json) {
|
||||
List<IconModel> iconsList = [];
|
||||
json.forEach((element) {
|
||||
iconsList.add(IconModel.fromJson(element));
|
||||
});
|
||||
return iconsList;
|
||||
},
|
||||
);
|
||||
return response;
|
||||
}
|
||||
|
||||
//update Scene
|
||||
static updateScene(CreateSceneModel createSceneModel, String sceneId) async {
|
||||
try {
|
||||
final response = await _httpService.put(
|
||||
path: ApiEndpoints.updateScene.replaceAll('{sceneId}', sceneId),
|
||||
body: createSceneModel
|
||||
.toJson(sceneId.isNotEmpty == true ? sceneId : null),
|
||||
body: createSceneModel.toJson(sceneId.isNotEmpty == true ? sceneId : null),
|
||||
expectedResponseModel: (json) {
|
||||
return json;
|
||||
},
|
||||
@ -165,14 +175,11 @@ class SceneApi {
|
||||
}
|
||||
|
||||
//update automation
|
||||
static updateAutomation(
|
||||
CreateAutomationModel createAutomationModel, String automationId) async {
|
||||
static updateAutomation(CreateAutomationModel createAutomationModel, String automationId) async {
|
||||
try {
|
||||
final response = await _httpService.put(
|
||||
path: ApiEndpoints.updateAutomation
|
||||
.replaceAll('{automationId}', automationId),
|
||||
body: createAutomationModel
|
||||
.toJson(automationId.isNotEmpty == true ? automationId : null),
|
||||
path: ApiEndpoints.updateAutomation.replaceAll('{automationId}', automationId),
|
||||
body: createAutomationModel.toJson(automationId.isNotEmpty == true ? automationId : null),
|
||||
expectedResponseModel: (json) {
|
||||
return json;
|
||||
},
|
||||
@ -185,8 +192,7 @@ class SceneApi {
|
||||
|
||||
//delete Scene
|
||||
|
||||
static Future<bool> deleteScene(
|
||||
{required String unitUuid, required String sceneId}) async {
|
||||
static Future<bool> deleteScene({required String unitUuid, required String sceneId}) async {
|
||||
try {
|
||||
final response = await _httpService.delete(
|
||||
path: ApiEndpoints.deleteScene
|
||||
|
@ -29,4 +29,7 @@ abstract class ColorsManager {
|
||||
static const Color graysColor = Color(0xffEBEBEB);
|
||||
static const Color textGray = Color(0xffD5D5D5);
|
||||
static const Color switchButton = Color(0xff023DFE);
|
||||
static const Color grayBox = Color(0xffF5F5F5);
|
||||
static const Color chart = Color(0xff023DFE);
|
||||
}
|
||||
//background: #F5F5F5;023DFE
|
||||
|
@ -55,7 +55,7 @@ enum DeviceType {
|
||||
ThreeTouch,
|
||||
GarageDoor,
|
||||
WaterLeak,
|
||||
|
||||
PC,
|
||||
Other,
|
||||
}
|
||||
|
||||
@ -87,6 +87,7 @@ Map<String, DeviceType> devicesTypesMap = {
|
||||
"3GT": DeviceType.ThreeTouch,
|
||||
"GD": DeviceType.GarageDoor,
|
||||
"WL": DeviceType.WaterLeak,
|
||||
"PC": DeviceType.PC,
|
||||
};
|
||||
Map<DeviceType, List<FunctionModel>> devicesFunctionsMap = {
|
||||
DeviceType.AC: [
|
||||
@ -471,6 +472,43 @@ Map<DeviceType, List<FunctionModel>> devicesFunctionsMap = {
|
||||
})),
|
||||
],
|
||||
DeviceType.WaterLeak: [],
|
||||
DeviceType.PC: [
|
||||
FunctionModel(
|
||||
code: 'switch_1',
|
||||
type: functionTypesMap['Boolean'],
|
||||
values: ValueModel.fromJson({})),
|
||||
FunctionModel(
|
||||
code: 'countdown_1',
|
||||
type: functionTypesMap['Integer'],
|
||||
values: ValueModel.fromJson(
|
||||
{"unit": "s", "min": 0, "max": 86400, "scale": 0, "step": 1})),
|
||||
FunctionModel(
|
||||
code: 'tr_timecon',
|
||||
type: functionTypesMap['Integer'],
|
||||
values: ValueModel.fromJson(
|
||||
{"unit": "s", "min": 0, "max": 120, "scale": 0, "step": 1})),
|
||||
FunctionModel(
|
||||
code: 'countdown_alarm',
|
||||
type: functionTypesMap['Integer'],
|
||||
values: ValueModel.fromJson(
|
||||
{"unit": "s", "min": 0, "max": 86400, "scale": 0, "step": 1})),
|
||||
FunctionModel(
|
||||
code: 'door_control_1',
|
||||
type: functionTypesMap['Enum'],
|
||||
values: ValueModel.fromJson({
|
||||
"range": ['open', 'open']
|
||||
})),
|
||||
FunctionModel(
|
||||
code: 'voice_control_1',
|
||||
type: functionTypesMap['Boolean'],
|
||||
values: ValueModel.fromJson({})),
|
||||
FunctionModel(
|
||||
code: 'door_state_1',
|
||||
type: functionTypesMap['Enum'],
|
||||
values: ValueModel.fromJson({
|
||||
"range": ["unclosed_time", "close_time_alarm", "none"]
|
||||
})),
|
||||
],
|
||||
};
|
||||
|
||||
enum TempModes { hot, cold, wind }
|
||||
|
@ -317,10 +317,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: fl_chart
|
||||
sha256: "00b74ae680df6b1135bdbea00a7d1fc072a9180b7c3f3702e4b19a9943f5ed7d"
|
||||
sha256: "94307bef3a324a0d329d3ab77b2f0c6e5ed739185ffc029ed28c0f9b019ea7ef"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.66.2"
|
||||
version: "0.69.0"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
|
@ -5,7 +5,7 @@ description: This is the mobile application project, developed with Flutter for
|
||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||
publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||
|
||||
version: 1.0.5+31
|
||||
version: 1.0.5+33
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.6 <4.0.0"
|
||||
@ -18,7 +18,6 @@ dependencies:
|
||||
firebase_analytics: ^10.8.7
|
||||
firebase_core: ^2.25.5
|
||||
firebase_crashlytics: ^3.4.16
|
||||
fl_chart: ^0.66.2
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_animated_dialog: ^2.0.1
|
||||
@ -45,8 +44,10 @@ dependencies:
|
||||
time_picker_spinner: ^1.0.0
|
||||
image_picker: ^1.1.2
|
||||
device_info_plus: ^10.1.0
|
||||
fl_chart: ^0.69.0
|
||||
firebase_database: ^10.5.7
|
||||
|
||||
|
||||
dev_dependencies:
|
||||
flutter_lints: ^3.0.1
|
||||
flutter_test:
|
||||
|