|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 202 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 220 KiB After Width: | Height: | Size: 221 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 183 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 228 KiB |
@ -0,0 +1,6 @@
|
||||
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="56" height="56" rx="28" fill="white"/>
|
||||
<rect width="56" height="56" rx="28" fill="white"/>
|
||||
<rect x="0.5" y="0.5" width="55" height="55" rx="27.5" stroke="#2E3039" stroke-opacity="0.13" stroke-dasharray="2 2"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28 18.25C28.4142 18.25 28.75 18.5858 28.75 19V26.25H36C36.4142 26.25 36.75 26.5858 36.75 27C36.75 27.4142 36.4142 27.75 36 27.75H28.75V35C28.75 35.4142 28.4142 35.75 28 35.75C27.5858 35.75 27.25 35.4142 27.25 35V27.75H20C19.5858 27.75 19.25 27.4142 19.25 27C19.25 26.5858 19.5858 26.25 20 26.25H27.25V19C27.25 18.5858 27.5858 18.25 28 18.25Z" fill="#161616" stroke="#2E3039" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 835 B |
@ -0,0 +1,6 @@
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
|
||||
<path d="M18.9994 9.25C16.0999 9.25 13.7494 11.6005 13.7494 14.5C13.7494 17.3995 16.0999 19.75 18.9994 19.75C21.8989 19.75 24.2494 17.3995 24.2494 14.5C24.2494 11.6005 21.8989 9.25 18.9994 9.25Z" fill="#8F9AA3"/>
|
||||
<path d="M22.4393 22.3825L22.4269 22.3899C22.3982 22.4063 22.3715 22.4164 22.3391 22.4232L22.3222 22.4264C21.5275 22.5747 20.3099 23.081 19.8772 24.4469C19.436 25.84 20.178 26.9751 20.7397 27.5414L20.9312 27.7346C21.045 27.8493 21.1019 27.9066 21.1231 27.9808C21.1442 28.055 21.1262 28.1337 21.09 28.2912L21.0601 28.4219C20.9887 28.7329 20.9096 29.2541 20.9862 29.8241C21.0509 30.3047 21.0832 30.545 20.9935 30.6475C20.9039 30.75 20.7005 30.75 20.2937 30.75L14.5901 30.75C12.7718 30.75 11.366 29.8556 10.1945 28.7396C9.51551 28.0927 9.17705 27.3646 9.26185 26.5888C9.3416 25.8592 9.78025 25.2637 10.2419 24.8118C10.9801 24.0893 12.0577 23.4813 12.7705 23.0792C12.9331 22.9875 13.0768 22.9064 13.1931 22.8372C14.4979 22.0602 15.93 21.5691 17.3945 21.3625C18.4583 21.2125 19.5401 21.2125 20.6039 21.3625C21.0835 21.4302 21.8204 21.628 22.365 21.7855C22.4184 21.801 22.4451 21.8087 22.4641 21.8172C22.6658 21.9073 22.7022 22.1856 22.5303 22.3244C22.5142 22.3375 22.4892 22.3525 22.4393 22.3825Z" fill="#8F9AA3"/>
|
||||
<path d="M27.3627 22.245C27.12 21.7533 26.67 21.25 25.9982 21.25C25.3273 21.25 24.8762 21.7522 24.6315 22.2431L23.9345 23.6487L23.9282 23.6547C23.9233 23.6592 23.9176 23.6639 23.9113 23.6687C23.9049 23.6734 23.8987 23.6775 23.893 23.681L23.8859 23.6851L22.6351 23.8946C22.0941 23.9855 21.5068 24.2757 21.3091 24.8998C21.1123 25.5211 21.4213 26.0967 21.8065 26.4851L22.7841 27.4708C22.7875 27.4778 22.792 27.4888 22.7959 27.5027C22.8003 27.5181 22.8024 27.5314 22.8031 27.5401L22.524 28.7572C22.397 29.3106 22.3883 30.0742 22.9815 30.5106C23.5783 30.9496 24.3047 30.7069 24.7916 30.4156L25.9668 29.7142C26.0142 29.6859 26.0283 29.702 26.0294 29.7135L27.2061 30.4159C27.6913 30.7048 28.4194 30.9516 29.0171 30.5123C29.6116 30.0753 29.5995 29.3093 29.4735 28.7579L29.1942 27.5401C29.1949 27.5314 29.197 27.5181 29.2014 27.5027C29.2053 27.4888 29.2098 27.4778 29.2132 27.4708L30.1889 26.487L30.1899 26.486C30.5775 26.0974 30.8877 25.521 30.6893 24.8985C30.4905 24.275 29.9028 23.9855 29.3626 23.8947L28.1075 23.6844L28.0992 23.6798C28.0935 23.6763 28.0874 23.6722 28.0811 23.6676C28.0789 23.6659 28.0766 23.6642 28.0745 23.6625C28.0709 23.6596 28.0675 23.6567 28.0645 23.654L28.0587 23.6484L27.3632 22.2459L27.3627 22.245Z" fill="#8F9AA3"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@ -0,0 +1,9 @@
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="40" height="40" rx="10" fill="#2E3039"/>
|
||||
<path d="M16 20C15.4477 20 15 20.4477 15 21C15 21.5523 15.4477 22 16 22H16.009C16.5613 22 17.009 21.5523 17.009 21C17.009 20.4477 16.5613 20 16.009 20H16Z" fill="white"/>
|
||||
<path d="M19.9955 20C19.4432 20 18.9955 20.4477 18.9955 21C18.9955 21.5523 19.4432 22 19.9955 22H20.0045C20.5568 22 21.0045 21.5523 21.0045 21C21.0045 20.4477 20.5568 20 20.0045 20H19.9955Z" fill="white"/>
|
||||
<path d="M23.991 20C23.4387 20 22.991 20.4477 22.991 21C22.991 21.5523 23.4387 22 23.991 22H24C24.5523 22 25 21.5523 25 21C25 20.4477 24.5523 20 24 20H23.991Z" fill="white"/>
|
||||
<path d="M16 24C15.4477 24 15 24.4477 15 25C15 25.5523 15.4477 26 16 26H16.009C16.5613 26 17.009 25.5523 17.009 25C17.009 24.4477 16.5613 24 16.009 24H16Z" fill="white"/>
|
||||
<path d="M19.9955 24C19.4432 24 18.9955 24.4477 18.9955 25C18.9955 25.5523 19.4432 26 19.9955 26H20.0045C20.5568 26 21.0045 25.5523 21.0045 25C21.0045 24.4477 20.5568 24 20.0045 24H19.9955Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.75 10C14.75 9.58579 14.4142 9.25 14 9.25C13.5858 9.25 13.25 9.58579 13.25 10V10.6348C12.4452 10.8629 11.7665 11.2336 11.2015 11.8444C10.4236 12.6853 10.0778 13.7479 9.91225 15.0795C9.74998 16.3843 9.74999 18.0565 9.75 20.19V20.81C9.74999 22.9435 9.74998 24.6157 9.91225 25.9205C10.0778 27.2521 10.4236 28.3147 11.2015 29.1556C11.9871 30.0049 12.9928 30.3901 14.2513 30.573C15.4693 30.75 17.0255 30.75 18.9892 30.75H21.0108C22.9745 30.75 24.5307 30.75 25.7487 30.573C27.0072 30.3901 28.0129 30.0049 28.7985 29.1556C29.5764 28.3147 29.9222 27.2521 30.0878 25.9205C30.25 24.6157 30.25 22.9435 30.25 20.8099V20.1901C30.25 18.0565 30.25 16.3843 30.0878 15.0795C29.9222 13.7479 29.5764 12.6853 28.7985 11.8444C28.2335 11.2336 27.5548 10.8629 26.75 10.6348V10C26.75 9.58579 26.4142 9.25 26 9.25C25.5858 9.25 25.25 9.58579 25.25 10V10.3659C24.1139 10.25 22.716 10.25 21.0108 10.25L18.9892 10.25C17.284 10.25 15.8861 10.25 14.75 10.3659V10ZM13.2786 12.2058C13.3681 12.52 13.6572 12.75 14 12.75C14.4142 12.75 14.75 12.4142 14.75 12V11.8746C15.811 11.7516 17.1824 11.75 19.05 11.75L20.95 11.75C22.8176 11.75 24.189 11.7516 25.25 11.8746V12C25.25 12.4142 25.5858 12.75 26 12.75C26.3428 12.75 26.6319 12.52 26.7214 12.2058C27.1287 12.3679 27.438 12.5826 27.6973 12.8629C28.1704 13.3744 28.4505 14.0759 28.5982 15.2564C28.5661 15.2522 28.5333 15.25 28.5 15.25L11.5 15.25C11.4667 15.25 11.4339 15.2522 11.4018 15.2564C11.5495 14.0759 11.8296 13.3744 12.3027 12.8629C12.562 12.5826 12.8713 12.3679 13.2786 12.2058ZM11.2901 16.7202C11.2506 17.6832 11.25 18.8363 11.25 20.2432V20.7568C11.25 22.9551 11.2514 24.5339 11.4008 25.7354C11.5482 26.9208 11.8285 27.6244 12.3027 28.1371C12.7692 28.6414 13.3973 28.9331 14.467 29.0886C15.5648 29.2481 17.0119 29.25 19.05 29.25H20.95C22.9881 29.25 24.4352 29.2481 25.533 29.0886C26.6027 28.9331 27.2308 28.6414 27.6973 28.1371C28.1715 27.6244 28.4518 26.9208 28.5992 25.7354C28.7486 24.5339 28.75 22.9551 28.75 20.7568V20.2432C28.75 18.8363 28.7494 17.6832 28.7099 16.7202C28.6433 16.7396 28.5728 16.75 28.5 16.75L11.5 16.75C11.4272 16.75 11.3567 16.7396 11.2901 16.7202Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@ -1,11 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="30.996" height="28.414" viewBox="0 0 30.996 28.414">
|
||||
<g id="image-gallery" transform="translate(-0.001 -2)">
|
||||
<g id="Group_8635" data-name="Group 8635" transform="translate(0.001 5.875)">
|
||||
<g id="Group_8634" data-name="Group 8634" transform="translate(0 5.078)">
|
||||
<path id="Path_5018" data-name="Path 5018" d="M8.072,22.581A4.836,4.836,0,0,1,3.5,19.286l-.045-.149a4.711,4.711,0,0,1-.223-1.4V8.932L.1,19.391a2.933,2.933,0,0,0,2.056,3.558L22.123,28.3a2.962,2.962,0,0,0,.744.1,2.88,2.88,0,0,0,2.791-2.112l1.164-3.7Z" transform="translate(-0.001 -8.932)" fill="#2bb8a6"/>
|
||||
</g>
|
||||
<path id="Path_5019" data-name="Path 5019" d="M9.583,10.166A2.583,2.583,0,1,0,7,7.583,2.586,2.586,0,0,0,9.583,10.166Z" transform="translate(2.04 -5)" fill="#2bb8a6"/>
|
||||
</g>
|
||||
<path id="Path_5020" data-name="Path 5020" d="M26.6,2H7.229A3.233,3.233,0,0,0,4,5.229V19.436a3.233,3.233,0,0,0,3.229,3.229H26.6a3.233,3.233,0,0,0,3.229-3.229V5.229A3.233,3.233,0,0,0,26.6,2ZM7.229,4.583H26.6a.646.646,0,0,1,.646.646V14.4l-4.08-4.761a2.313,2.313,0,0,0-1.732-.794,2.258,2.258,0,0,0-1.726.815l-4.8,5.758-1.563-1.559a2.267,2.267,0,0,0-3.2,0L6.583,17.42V5.229a.646.646,0,0,1,.646-.646Z" transform="translate(1.166)" fill="#2bb8a6"/>
|
||||
</g>
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
|
||||
<path d="M21.2444 13.5C20.5571 13.5 20 14.0596 20 14.75C20 15.4404 20.5571 16 21.2444 16C21.9268 16 22.5 15.4401 22.5 14.75C22.5 14.0599 21.9268 13.5 21.2444 13.5Z" fill="#8F9AA3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.0732 9H17.9268C16.1034 8.99997 14.6336 8.99995 13.4777 9.15537C12.2775 9.31672 11.267 9.66191 10.4645 10.4645C9.66191 11.267 9.31672 12.2775 9.15537 13.4777C8.99995 14.6336 8.99997 16.1034 9 17.9268V18.0732C8.99997 19.8966 8.99995 21.3664 9.15537 22.5223C9.31672 23.7225 9.66191 24.733 10.4645 25.5355C11.1805 26.2516 12.062 26.6035 13.0961 26.7857C13.2742 27.8673 13.6274 28.7857 14.3689 29.5272C15.1752 30.3335 16.1906 30.6805 17.3977 30.8428C18.5606 30.9992 20.0394 30.9991 21.8748 30.9991H22.0212C23.8567 30.9991 25.3355 30.9992 26.4984 30.8428C27.7055 30.6805 28.7209 30.3335 29.5272 29.5272C30.3335 28.7209 30.6805 27.7055 30.8428 26.4984C30.9992 25.3355 30.9991 23.8567 30.9991 22.0212V21.8748C30.9991 20.0394 30.9992 18.5606 30.8428 17.3977C30.6805 16.1906 30.3335 15.1752 29.5272 14.3689C28.7857 13.6274 27.8673 13.2742 26.7857 13.0961C26.6035 12.062 26.2516 11.1805 25.5355 10.4645C24.733 9.66191 23.7225 9.31672 22.5223 9.15537C21.3664 8.99995 19.8966 8.99997 18.0732 9ZM26.9723 15.1769C27 15.9862 27 16.9005 27 17.9268V18.0732C27 19.8966 27.0001 21.3664 26.8446 22.5223C26.6833 23.7225 26.3381 24.733 25.5355 25.5355C24.733 26.3381 23.7225 26.6833 22.5223 26.8446C21.3664 27.0001 19.8966 27 18.0732 27H17.9268C16.9005 27 15.9862 27 15.1769 26.9723C15.3177 27.5048 15.5173 27.8471 15.7831 28.1129C16.1559 28.4857 16.6789 28.7282 17.6642 28.8606C18.6783 28.997 20.0221 28.9991 21.948 28.9991C23.874 28.9991 25.2178 28.997 26.2319 28.8606C27.2172 28.7282 27.7402 28.4857 28.1129 28.1129C28.4857 27.7402 28.7282 27.2172 28.8606 26.2319C28.997 25.2178 28.9991 23.874 28.9991 21.948C28.9991 20.0221 28.997 18.6783 28.8606 17.6642C28.7282 16.6789 28.4857 16.1559 28.1129 15.7831C27.8471 15.5173 27.5048 15.3177 26.9723 15.1769ZM11.8787 11.8787C12.2477 11.5097 12.7658 11.2691 13.7442 11.1375C14.7513 11.0021 16.0861 11 18 11C19.9139 11 21.2487 11.0021 22.2558 11.1375C23.2342 11.2691 23.7523 11.5097 24.1213 11.8787C24.4903 12.2477 24.7309 12.7658 24.8625 13.7442C24.9979 14.7513 25 16.0861 25 18C25 19.9139 24.9979 21.2487 24.8625 22.2558C24.7309 23.2342 24.4903 23.7523 24.1213 24.1213C23.9227 24.3199 23.6809 24.4813 23.3474 24.6086C22.5834 22.9592 21.3002 21.5131 19.6363 20.4162C17.4301 18.9618 14.6803 18.2023 11.8763 18.2523C11.5839 18.2518 11.2916 18.2596 11 18.2755L11 18C11 16.0861 11.0021 14.7513 11.1375 13.7442C11.2691 12.7658 11.5097 12.2477 11.8787 11.8787Z" fill="#8F9AA3"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.7 KiB |
@ -0,0 +1,5 @@
|
||||
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.875 8.75C11.875 8.05965 12.4346 7.5 13.125 7.5L21.875 7.5C22.5654 7.5 23.125 8.05965 23.125 8.75C23.125 9.44036 22.5654 10 21.875 10L13.125 10C12.4346 10 11.875 9.44036 11.875 8.75Z" fill="#2E3039"/>
|
||||
<path d="M13.125 12.5C12.4346 12.5 11.875 13.0596 11.875 13.75C11.875 14.4404 12.4346 15 13.125 15H17.5C18.1904 15 18.75 14.4404 18.75 13.75C18.75 13.0596 18.1904 12.5 17.5 12.5H13.125Z" fill="#2E3039"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.0703 1.70757C22.9908 1.56243 21.6268 1.56246 19.9726 1.5625L14.9137 1.5625C13.2596 1.56246 11.8955 1.56243 10.8159 1.70757C9.6825 1.85996 8.6815 2.19219 7.88001 2.99369C7.07851 3.79518 6.74627 4.79619 6.59389 5.92962C6.44874 7.00921 6.44878 8.37325 6.44882 10.0274L6.44882 19.1364C6.44882 19.4899 6.44882 19.6667 6.33899 19.7765C6.22915 19.8864 6.05237 19.8864 5.69881 19.8864L5.1043 19.8864C4.5742 19.8862 4.03689 19.886 3.59055 19.9603C3.05657 20.0492 2.49845 20.266 2.06822 20.803C1.66663 21.3043 1.54538 21.8484 1.56439 22.3879C1.57941 22.814 1.6877 23.2915 1.78692 23.7289C2.03287 24.816 2.48165 26.0118 3.20368 26.8876C3.95427 27.798 5.02349 28.4375 6.40497 28.4375L23.5434 28.4375C25.2852 28.4375 26.5975 27.7012 27.4152 26.4548C28.1809 25.2875 28.4375 23.7913 28.4375 22.3296V10.0275C28.4375 8.37327 28.4375 7.00921 28.2924 5.92962C28.14 4.79619 27.8078 3.79518 27.0063 2.99369C26.2048 2.19219 25.2038 1.85996 24.0703 1.70757ZM9.64221 19.8864C9.28866 19.8864 9.11188 19.8864 9.00205 19.7766C8.89221 19.6668 8.89221 19.49 8.89221 19.1364L8.89221 10.1137C8.89221 8.35157 8.89481 7.15287 9.01549 6.25522C9.13145 5.39271 9.33591 4.99322 9.6078 4.72133C9.87969 4.44944 10.2792 4.24498 11.1417 4.12902C12.0393 4.00833 13.238 4.00574 15.0002 4.00574L19.8865 4.00574C21.6487 4.00574 22.8474 4.00833 23.745 4.12902C24.6075 4.24498 25.007 4.44944 25.2789 4.72133C25.5508 4.99322 25.7552 5.39271 25.8712 6.25522C25.9919 7.15287 25.9945 8.35157 25.9945 10.1137V22.3296C25.9945 23.5665 25.7669 24.5135 25.3725 25.1147C25.03 25.6368 24.506 25.9944 23.5436 25.9944C23.0042 25.9944 22.5905 25.7739 22.2274 25.3334C21.8357 24.8583 21.5233 24.1393 21.325 23.2628C21.1929 22.6787 21.0635 22.1067 20.9328 21.7044C20.8046 21.3095 20.5948 20.7891 20.1326 20.4205C19.6995 20.0749 19.209 19.9703 18.8049 19.9269C18.428 19.8863 17.9679 19.8864 17.479 19.8864L9.64221 19.8864Z" fill="#2E3039"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
@ -1,3 +1,4 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.835 8.71465C29 10.2375 29 12.157 29 14.6057L29 17.393V17.3931C29 19.8418 29 21.7612 28.835 23.284C28.6667 24.8381 28.3169 26.0973 27.5358 27.1724C27.0629 27.8232 26.4905 28.3956 25.8397 28.8685C24.7646 29.6496 23.5054 29.9993 21.9514 30.1677C20.4285 30.3327 18.5091 30.3327 16.0604 30.3327H16.0603H15.9397C13.491 30.3327 11.5715 30.3327 10.0486 30.1677C8.49458 29.9993 7.23541 29.6496 6.16031 28.8685C5.50945 28.3956 4.93708 27.8232 4.4642 27.1724C3.6831 26.0973 3.33334 24.8381 3.16497 23.284C2.99998 21.7612 2.99999 19.8418 3 17.3931V17.393L3 14.6056V14.6056C2.99999 12.1569 2.99998 10.2375 3.16497 8.71465C3.33334 7.1606 3.6831 5.90143 4.4642 4.82633C4.93708 4.17547 5.50945 3.6031 6.16032 3.13022C7.23541 2.34911 8.49459 1.99936 10.0486 1.83099C11.5715 1.666 13.4909 1.666 15.9395 1.66602H15.9396H16.0604H16.0605C18.5091 1.66601 20.4285 1.666 21.9514 1.83099C23.5054 1.99936 24.7646 2.34911 25.8397 3.13022C26.4905 3.6031 27.0629 4.17547 27.5358 4.82633C28.3169 5.90143 28.6667 7.1606 28.835 8.71465ZM16 5.66602C16.7364 5.66602 17.3333 6.26297 17.3333 6.99935V9.24299C17.6276 9.59842 17.8786 9.66602 18 9.66602C18.1485 9.66602 18.4909 9.56487 18.8693 8.95942C19.2595 8.33494 20.0821 8.14507 20.7066 8.53531C21.3311 8.92555 21.521 9.74814 21.1307 10.3726C20.4782 11.4167 19.4088 12.3327 18 12.3327C17.7685 12.3327 17.5462 12.3079 17.3333 12.262L17.3333 13.0409C17.8948 13.4337 18.584 13.666 19.3333 13.666C20.2769 13.666 21.1252 13.2976 21.7432 12.7042C22.2744 12.1942 23.1185 12.2114 23.6285 12.7426C24.1385 13.2738 24.1213 14.1178 23.5901 14.6278C22.49 15.6841 20.9852 16.3327 19.3333 16.3327C18.6338 16.3327 17.9606 16.2163 17.3333 16.002V18.0531C18.0392 17.9934 18.7108 17.8873 19.335 17.7423C21.0296 17.3485 23 18.5587 23 20.5393C23 21.5265 22.4537 22.5524 21.4063 22.9419C20.935 23.1172 20.4345 23.269 19.911 23.3954C19.3839 23.5228 18.9627 23.8554 18.7618 24.3012L18.6199 24.6159C18.1546 25.6483 17.1409 26.3327 16 26.3327C14.8591 26.3327 13.8454 25.6483 13.3801 24.6159L13.2382 24.3012C13.0373 23.8554 12.6161 23.5228 12.089 23.3954C11.5655 23.269 11.065 23.1172 10.5937 22.9419C9.54632 22.5524 9 21.5265 9 20.5393C9 18.5587 10.9704 17.3485 12.665 17.7423C13.2892 17.8873 13.9608 17.9934 14.6667 18.0531V16.002C14.0394 16.2164 13.3662 16.3327 12.6667 16.3327C11.0148 16.3327 9.51001 15.6841 8.4099 14.6278C7.87872 14.1178 7.86154 13.2738 8.37154 12.7426C8.88155 12.2114 9.72559 12.1942 10.2568 12.7042C10.8748 13.2976 11.7231 13.666 12.6667 13.666C13.416 13.666 14.1052 13.4337 14.6667 13.0409V12.262C14.4538 12.3079 14.2315 12.3327 14 12.3327C12.5912 12.3327 11.5218 11.4167 10.8693 10.3726C10.4791 9.74814 10.6689 8.92555 11.2934 8.53531C11.9179 8.14507 12.7405 8.33494 13.1307 8.95942C13.5091 9.56487 13.8515 9.66602 14 9.66602C14.1214 9.66602 14.3724 9.59842 14.6667 9.24299L14.6667 6.99935C14.6667 6.26297 15.2636 5.66602 16 5.66602Z" fill="#2E3039"/>
|
||||
<svg width="26" height="29" viewBox="0 0 26 29" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13 4C13.5523 4 14 4.44772 14 5V7.35861C14.3647 7.84353 14.7315 7.99997 15.0001 7.99997C15.3062 7.99997 15.7395 7.79698 16.1521 7.13669C16.4448 6.66833 17.0617 6.52593 17.5301 6.81861C17.9984 7.11129 18.1408 7.72823 17.8482 8.19659C17.2299 9.18588 16.2514 9.99997 15.0001 9.99997C14.644 9.99997 14.3099 9.93402 14 9.81685V11.2101C14.6402 11.7041 15.4494 12 16.3333 12C17.3655 12 18.2958 11.5965 18.9741 10.9453C19.3725 10.5628 20.0055 10.5757 20.388 10.9741C20.7705 11.3725 20.7576 12.0055 20.3592 12.388C19.3194 13.3864 17.8967 14 16.3333 14C15.5039 14 14.7141 13.8273 14 13.516V16.4116C14.8282 16.3596 15.6132 16.244 16.335 16.0762C18.0296 15.6825 20 16.8927 20 18.8733C20 19.8605 19.4537 20.8864 18.4063 21.2759C17.935 21.4511 17.4345 21.603 16.911 21.7294C16.3839 21.8567 15.9627 22.1893 15.7618 22.6351L15.6199 22.9499C15.1546 23.9822 14.1409 24.6667 13 24.6667C11.8591 24.6667 10.8454 23.9822 10.3801 22.9499L10.2382 22.6351C10.0373 22.1893 9.61608 21.8567 9.08902 21.7294C8.56548 21.603 8.06504 21.4511 7.59375 21.2759C6.54632 20.8864 6 19.8605 6 18.8733C6 16.8927 7.97038 15.6825 9.66501 16.0762C10.3868 16.244 11.1718 16.3596 12 16.4116V13.516C11.2859 13.8273 10.4961 14 9.66667 14C8.1033 14 6.6806 13.3864 5.64076 12.388C5.24237 12.0055 5.22949 11.3725 5.61199 10.9741C5.99449 10.5757 6.62753 10.5628 7.02591 10.9453C7.70416 11.5965 8.63452 12 9.66667 12C10.5506 12 11.3598 11.7041 12 11.2101V9.81695C11.6901 9.93406 11.3562 9.99997 11.0001 9.99997C9.74886 9.99997 8.77033 9.18588 8.1521 8.19659C7.85942 7.72823 8.00183 7.11129 8.47018 6.81861C8.93854 6.52593 9.55548 6.66833 9.84816 7.13669C10.2608 7.79698 10.6941 7.99997 11.0001 7.99997C11.2687 7.99997 11.6354 7.84361 12 7.35897V5C12 4.44772 12.4477 4 13 4Z" fill="#2E3039"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M26 15.727V12.9397C26 10.491 26 8.57148 25.835 7.04863C25.6667 5.49458 25.3169 4.23541 24.5358 3.16031C24.0629 2.50945 23.4905 1.93708 22.8397 1.4642C21.7646 0.683098 20.5054 0.333341 18.9514 0.16497C17.4285 -1.87904e-05 15.5091 -1.04558e-05 13.0604 1.75524e-07H12.9396C10.491 -1.06751e-05 8.57146 -1.91778e-05 7.04863 0.16497C5.49459 0.33334 4.23541 0.683097 3.16032 1.4642C2.50945 1.93708 1.93708 2.50945 1.4642 3.16031C0.683099 4.23541 0.333342 5.49458 0.164971 7.04863C-1.6585e-05 8.57145 -9.22962e-06 10.4909 1.48706e-07 12.9395V15.727C-9.56553e-06 18.1757 -1.7181e-05 20.0952 0.164971 21.618C0.333341 23.1721 0.683098 24.4313 1.4642 25.5064C1.93708 26.1572 2.50945 26.7296 3.16031 27.2025C4.23541 27.9836 5.49458 28.3333 7.04863 28.5017C8.57148 28.6667 10.491 28.6667 12.9397 28.6667H13.0603C15.509 28.6667 17.4285 28.6667 18.9514 28.5017C20.5054 28.3333 21.7646 27.9836 22.8397 27.2025C23.4905 26.7296 24.0629 26.1572 24.5358 25.5064C25.3169 24.4313 25.6667 23.1721 25.835 21.618C26 20.0952 26 18.1757 26 15.727ZM23.8467 21.4026C23.6967 22.7865 23.4099 23.6534 22.9178 24.3308C22.5682 24.8119 22.1452 25.2349 21.6641 25.5844C20.9868 26.0765 20.1198 26.3634 18.7359 26.5133C17.3333 26.6653 15.5221 26.6667 13 26.6667C10.4779 26.6667 8.66666 26.6653 7.26406 26.5133C5.88018 26.3634 5.01322 26.0765 4.33588 25.5844C3.85481 25.2349 3.43176 24.8119 3.08224 24.3308C2.59012 23.6534 2.30327 22.7865 2.15334 21.4026C2.00137 20 2 18.1888 2 15.6667V13C2 10.4779 2.00137 8.66665 2.15334 7.26406C2.30327 5.88017 2.59012 5.01322 3.08224 4.33588C3.43176 3.85481 3.85481 3.43175 4.33589 3.08224C5.01322 2.59012 5.88018 2.30327 7.26406 2.15333C8.66666 2.00137 10.4779 2 13 2C15.5221 2 17.3333 2.00137 18.7359 2.15334C20.1198 2.30327 20.9868 2.59012 21.6641 3.08224C22.1452 3.43175 22.5682 3.85481 22.9178 4.33588C23.4099 5.01322 23.6967 5.88018 23.8467 7.26406C23.9986 8.66665 24 10.4779 24 13V15.6667C24 18.1888 23.9986 20 23.8467 21.4026Z" fill="#2E3039"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.8 KiB |
@ -0,0 +1,5 @@
|
||||
<svg width="79" height="79" viewBox="0 0 79 79" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.2188 6.58398C22.2188 5.22053 21.1135 4.11523 19.7501 4.11523C18.3866 4.11523 17.2813 5.22053 17.2813 6.58398V8.6735C14.6323 9.4243 12.3981 10.6446 10.5385 12.655C7.97788 15.4232 6.83967 18.9209 6.29457 23.304C5.76043 27.599 5.76046 33.1032 5.7605 40.1262V42.1668C5.76046 49.1898 5.76043 54.694 6.29457 58.9889C6.83967 63.3721 7.97788 66.8697 10.5385 69.638C13.1244 72.4336 16.4346 73.7013 20.5772 74.3034C24.5866 74.8862 29.7092 74.8861 36.173 74.8861H36.373C37.7365 74.8861 38.8418 73.7808 38.8418 72.4173C38.8418 71.0539 37.7365 69.9486 36.373 69.9486C29.6642 69.9486 24.9007 69.9425 21.2874 69.4173C17.7661 68.9055 15.6987 67.9453 14.1631 66.2852C12.6022 64.5977 11.6796 62.2818 11.1943 58.3796C10.7025 54.4248 10.698 49.2277 10.698 41.9916V40.3013C10.698 35.7179 10.6998 31.9525 10.8261 28.8027L68.1739 28.8027C68.2766 31.3663 68.2977 34.3477 68.3013 37.8574V42.7923C68.3013 44.1558 69.4066 45.2611 70.7701 45.2611C72.1335 45.2611 73.2388 44.1558 73.2388 42.7923V37.8522C73.2322 31.5322 73.1767 26.5141 72.6033 22.541C72.0218 18.5124 70.8717 15.2605 68.4617 12.655C66.602 10.6446 64.3678 9.4243 61.7188 8.6735V6.58398C61.7188 5.22053 60.6135 4.11523 59.2501 4.11523C57.8866 4.11523 56.7813 5.22053 56.7813 6.58398V7.78839C53.0418 7.40681 48.4402 7.40685 42.8272 7.4069L36.173 7.4069C30.56 7.40685 25.9584 7.40681 22.2188 7.78839V6.58398ZM67.7999 23.8652C67.7735 23.6553 67.7457 23.449 67.7164 23.2463C67.2109 19.7436 66.3072 17.5971 64.837 16.0078C63.9834 15.0849 62.9654 14.3784 61.6247 13.8449C61.3302 14.8789 60.3786 15.6361 59.2501 15.6361C57.8866 15.6361 56.7813 14.5308 56.7813 13.1673V12.7545C53.2889 12.3495 48.7748 12.3444 42.6272 12.3444L36.373 12.3444C30.2254 12.3444 25.7113 12.3495 22.2188 12.7545V13.1673C22.2188 14.5308 21.1135 15.6361 19.7501 15.6361C18.6216 15.6361 17.67 14.8789 17.3755 13.8449C16.0348 14.3784 15.0168 15.0849 14.1631 16.0078C12.6086 17.6883 11.6872 19.9921 11.2003 23.8652L67.7999 23.8652Z" fill="#ED1C2B"/>
|
||||
<path d="M52.7912 47.655C53.7415 48.6327 53.7193 50.1956 52.7416 51.1459C52.2097 51.6629 51.3634 52.3286 50.5578 52.9614L50.3703 53.1086C49.5615 53.7436 48.6965 54.4226 47.8781 55.1161L47.8546 55.1361L69.1251 55.1361C70.4885 55.1361 71.5938 56.2414 71.5938 57.6048C71.5938 58.9683 70.4885 60.0736 69.1251 60.0736L47.8546 60.0736L47.8781 60.0935C48.6965 60.787 49.5615 61.4661 50.3703 62.1011L50.5578 62.2483C51.3634 62.881 52.2097 63.5467 52.7416 64.0637C53.7193 65.014 53.7415 66.577 52.7912 67.5547C51.8409 68.5324 50.2779 68.5546 49.3002 67.6043C48.9998 67.3123 48.4014 66.833 47.5079 66.1312L47.3107 65.9764C46.5137 65.3508 45.5785 64.6167 44.6861 63.8605C43.7297 63.0501 42.7363 62.143 41.964 61.2362C41.577 60.7818 41.1953 60.2696 40.9004 59.7187C40.616 59.1872 40.323 58.455 40.323 57.6048C40.323 56.7546 40.616 56.0224 40.9004 55.491C41.1953 54.94 41.577 54.4278 41.964 53.9734C42.7363 53.0666 43.7297 52.1595 44.6861 51.3491C45.5786 50.5929 46.5136 49.859 47.3107 49.2333L47.5079 49.0784C48.4014 48.3767 48.9998 47.8973 49.3002 47.6054C50.2779 46.655 51.8409 46.6773 52.7912 47.655Z" fill="#ED1C2B"/>
|
||||
<path d="M52.7912 47.6543C53.7415 48.632 53.7193 50.195 52.7416 51.1453C52.2097 51.6623 51.3634 52.328 50.5578 52.9607L50.3703 53.1079C49.5615 53.7429 48.6965 54.422 47.8781 55.1155L47.8546 55.1354L69.1251 55.1354C70.4885 55.1354 71.5938 56.2407 71.5938 57.6042C71.5938 58.9676 70.4885 60.0729 69.1251 60.0729L47.8546 60.0729L47.8781 60.0929C48.6965 60.7864 49.5615 61.4654 50.3703 62.1004L50.5578 62.2476C51.3634 62.8804 52.2097 63.546 52.7416 64.063C53.7193 65.0134 53.7415 66.5763 52.7912 67.554C51.8409 68.5317 50.2779 68.5539 49.3002 67.6036C48.9998 67.3117 48.4014 66.8323 47.5079 66.1306L47.3107 65.9757C46.5137 65.3501 45.5785 64.616 44.6861 63.8599C43.7297 63.0494 42.7363 62.1423 41.964 61.2356C41.577 60.7812 41.1953 60.269 40.9004 59.718C40.616 59.1866 40.323 58.4544 40.323 57.6042C40.323 56.754 40.616 56.0217 40.9004 55.4903C41.1953 54.9393 41.577 54.4272 41.964 53.9728C42.7363 53.066 43.7297 52.1589 44.6861 51.3485C45.5786 50.5923 46.5136 49.8583 47.3107 49.2326L47.5079 49.0778C48.4014 48.376 48.9998 47.8967 49.3002 47.6047C50.2779 46.6544 51.8409 46.6766 52.7912 47.6543Z" fill="#2E3039"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
@ -1,7 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="31.908" height="29.134" viewBox="0 0 31.908 29.134">
|
||||
<g id="Group_8579" data-name="Group 8579" transform="translate(0 -100)">
|
||||
<path id="Path_4556" data-name="Path 4556" d="M88.972,88.108h-4.4l-2.539-2.775H72.324v4.162H68.162v4.162H64V107.53a2.783,2.783,0,0,0,2.775,2.775h22.2a2.783,2.783,0,0,0,2.775-2.775V90.882A2.783,2.783,0,0,0,88.972,88.108Zm-11.1,18.035a6.937,6.937,0,1,1,6.937-6.937A6.939,6.939,0,0,1,77.873,106.143Z" transform="translate(-59.838 18.829)" fill="#2bb8a6"/>
|
||||
<path id="Path_4557" data-name="Path 4557" d="M4.162,32.432H6.937V28.27H11.1V25.495H6.937V21.333H4.162v4.162H0V28.27H4.162Z" transform="translate(0 78.667)" fill="#2bb8a6"/>
|
||||
<path id="Path_4558" data-name="Path 4558" d="M213.505,230.4a4.435,4.435,0,0,0-4.439,4.439h0a4.439,4.439,0,1,0,4.439-4.439Z" transform="translate(-195.47 -116.804)" fill="#2bb8a6"/>
|
||||
</g>
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="40" height="40" rx="10" fill="#EFEFF0"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9686 9.25H20.0314H20.0314C20.6355 9.24999 21.1356 9.24998 21.5485 9.28515C21.9812 9.32201 22.3723 9.40069 22.7494 9.58742C23.4214 9.92009 23.8461 10.4488 24.1443 10.979C24.3755 11.39 24.555 11.8518 24.7071 12.2432C24.743 12.3355 24.7774 12.424 24.8105 12.5069L24.9569 12.8728C25.0299 13.0554 25.0664 13.1466 25.1425 13.1982C25.2185 13.2498 25.317 13.2499 25.5141 13.2502C26.3986 13.2516 27.0637 13.2617 27.5921 13.3345C28.2753 13.4287 28.7694 13.6309 29.2829 14.0249C29.5429 14.2244 29.7756 14.4572 29.9751 14.7171C30.4019 15.2734 30.5828 15.922 30.6678 16.6762C30.75 17.4057 30.75 18.3204 30.75 19.4548V24.0549C30.75 25.4225 30.75 26.5248 30.6335 27.3918C30.5125 28.2919 30.2536 29.0497 29.6517 29.6517C29.0497 30.2536 28.2919 30.5125 27.3918 30.6335C26.5248 30.75 25.4225 30.75 24.0549 30.75L15.9451 30.75C14.5775 30.75 13.4752 30.75 12.6083 30.6335C11.7081 30.5125 10.9503 30.2536 10.3484 29.6517C9.74644 29.0497 9.48754 28.2919 9.36653 27.3918C9.24997 26.5248 9.24998 25.4225 9.25 24.0549V24.0549L9.25 19.4548V19.4548C9.24999 18.3204 9.24998 17.4057 9.33222 16.6762C9.41725 15.922 9.59808 15.2734 10.0249 14.7171C10.2244 14.4572 10.4572 14.2244 10.7171 14.0249C11.2306 13.6309 11.7247 13.4287 12.4079 13.3345C12.9363 13.2617 13.6014 13.2516 14.4859 13.2502C14.683 13.2499 14.7815 13.2498 14.8575 13.1982C14.9336 13.1466 14.9701 13.0554 15.0431 12.8728L15.1895 12.5069C15.2226 12.424 15.257 12.3355 15.2929 12.2432C15.445 11.8518 15.6245 11.39 15.8557 10.979C16.1539 10.4488 16.5787 9.92009 17.2506 9.58742C17.6278 9.40069 18.0188 9.32201 18.4515 9.28515C18.8644 9.24998 19.3645 9.24999 19.9686 9.25H19.9686ZM16 22C16 19.7909 17.7909 18 20 18C22.2091 18 24 19.7909 24 22C24 24.2091 22.2091 26 20 26C17.7909 26 16 24.2091 16 22ZM19.9955 13C19.4457 13 19 13.4477 19 14C19 14.5502 19.4567 15 20.0045 15C20.5543 15 21 14.5523 21 14C21 13.4498 20.5433 13 19.9955 13Z" fill="#8F9AA3"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 910 B After Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,103 @@
|
||||
import 'dart:io';
|
||||
import 'package:flutter_image_compress/flutter_image_compress.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
class ImageCompressionHelper {
|
||||
/// Compress and resize image to max 200x200 and ensure file size < 1MB
|
||||
/// Returns the compressed image file
|
||||
static Future<File?> compressAndResizeImage(File imageFile) async {
|
||||
try {
|
||||
// Check if file exists
|
||||
if (!await imageFile.exists()) {
|
||||
print('Image file does not exist');
|
||||
return null;
|
||||
}
|
||||
|
||||
print('Original file size: ${await imageFile.length() / 1024} KB');
|
||||
|
||||
// Get temporary directory
|
||||
final tempDir = await getTemporaryDirectory();
|
||||
final targetPath = path.join(
|
||||
tempDir.path,
|
||||
'compressed_${DateTime.now().millisecondsSinceEpoch}.jpg',
|
||||
);
|
||||
|
||||
// Start with quality 85
|
||||
int quality = 85;
|
||||
const int maxFileSizeBytes = 1048576; // 1MB
|
||||
|
||||
// Compress the image
|
||||
var result = await FlutterImageCompress.compressWithFile(
|
||||
imageFile.absolute.path,
|
||||
quality: quality,
|
||||
format: CompressFormat.jpeg,
|
||||
);
|
||||
|
||||
if (result == null || result.isEmpty) {
|
||||
print('Compression returned null or empty');
|
||||
return null;
|
||||
}
|
||||
|
||||
// Write to file
|
||||
File resultFile = File(targetPath);
|
||||
await resultFile.writeAsBytes(result);
|
||||
|
||||
int fileSize = await resultFile.length();
|
||||
print('First compression: ${fileSize / 1024} KB, quality: $quality');
|
||||
|
||||
// If file size is still > 1MB, reduce quality progressively
|
||||
int attempts = 0;
|
||||
while (fileSize > maxFileSizeBytes && quality > 10 && attempts < 10) {
|
||||
quality -= 10;
|
||||
attempts++;
|
||||
|
||||
result = await FlutterImageCompress.compressWithFile(
|
||||
imageFile.absolute.path,
|
||||
quality: quality,
|
||||
format: CompressFormat.jpeg,
|
||||
);
|
||||
|
||||
if (result == null || result.isEmpty) {
|
||||
print('Compression returned null on attempt $attempts');
|
||||
break;
|
||||
}
|
||||
|
||||
await resultFile.writeAsBytes(result);
|
||||
fileSize = await resultFile.length();
|
||||
print('Compression attempt $attempts: ${fileSize / 1024} KB, quality: $quality');
|
||||
}
|
||||
|
||||
// Final validation
|
||||
if (await resultFile.exists()) {
|
||||
final finalSize = await resultFile.length();
|
||||
print('Final compressed image size: ${finalSize / 1024} KB');
|
||||
|
||||
if (finalSize > maxFileSizeBytes) {
|
||||
print('Warning: Final file size (${finalSize / 1024} KB) exceeds 1MB limit');
|
||||
}
|
||||
|
||||
return resultFile;
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch (e, stackTrace) {
|
||||
print('Error compressing image: $e');
|
||||
print('Stack trace: $stackTrace');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Get file size in KB
|
||||
static Future<double> getFileSizeInKB(File file) async {
|
||||
int bytes = await file.length();
|
||||
return bytes / 1024;
|
||||
}
|
||||
|
||||
/// Get file size in MB
|
||||
static Future<double> getFileSizeInMB(File file) async {
|
||||
int bytes = await file.length();
|
||||
return bytes / (1024 * 1024);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,71 @@
|
||||
class LiveCareClinicScheduleResponse {
|
||||
int? iD;
|
||||
int? serviceID;
|
||||
int? dayOfWeek;
|
||||
String? dayOfWeekStr;
|
||||
bool? isActive;
|
||||
String? createdOn;
|
||||
String? createdBy;
|
||||
bool? projectOutSA;
|
||||
String? dayOfWeekStrN;
|
||||
List<ShiftTimings>? shiftTimings;
|
||||
|
||||
LiveCareClinicScheduleResponse({this.iD, this.serviceID, this.dayOfWeek, this.dayOfWeekStr, this.isActive, this.createdOn, this.createdBy, this.projectOutSA, this.dayOfWeekStrN, this.shiftTimings});
|
||||
|
||||
LiveCareClinicScheduleResponse.fromJson(Map<String, dynamic> json) {
|
||||
iD = json['ID'];
|
||||
serviceID = json['ServiceID'];
|
||||
dayOfWeek = json['DayOfWeek'];
|
||||
dayOfWeekStr = json['DayOfWeekStr'];
|
||||
isActive = json['IsActive'];
|
||||
createdOn = json['CreatedOn'];
|
||||
createdBy = json['CreatedBy'];
|
||||
projectOutSA = json['ProjectOutSA'];
|
||||
dayOfWeekStrN = json['DayOfWeekStrN'];
|
||||
if (json['ShiftTimings'] != null) {
|
||||
shiftTimings = <ShiftTimings>[];
|
||||
json['ShiftTimings'].forEach((v) {
|
||||
shiftTimings!.add(new ShiftTimings.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['ID'] = this.iD;
|
||||
data['ServiceID'] = this.serviceID;
|
||||
data['DayOfWeek'] = this.dayOfWeek;
|
||||
data['DayOfWeekStr'] = this.dayOfWeekStr;
|
||||
data['IsActive'] = this.isActive;
|
||||
data['CreatedOn'] = this.createdOn;
|
||||
data['CreatedBy'] = this.createdBy;
|
||||
data['ProjectOutSA'] = this.projectOutSA;
|
||||
data['DayOfWeekStrN'] = this.dayOfWeekStrN;
|
||||
if (this.shiftTimings != null) {
|
||||
data['ShiftTimings'] = this.shiftTimings!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class ShiftTimings {
|
||||
String? endTime;
|
||||
int? shiftID;
|
||||
String? startTime;
|
||||
|
||||
ShiftTimings({this.endTime, this.shiftID, this.startTime});
|
||||
|
||||
ShiftTimings.fromJson(Map<String, dynamic> json) {
|
||||
endTime = json['EndTime'];
|
||||
shiftID = json['ShiftID'];
|
||||
startTime = json['StartTime'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['EndTime'] = this.endTime;
|
||||
data['ShiftID'] = this.shiftID;
|
||||
data['StartTime'] = this.startTime;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -1,160 +1,169 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class PatientVaccineResponseModel {
|
||||
String? setupID;
|
||||
int? projectID;
|
||||
int? patientID;
|
||||
String? setupId;
|
||||
int? projectId;
|
||||
int? patientId;
|
||||
int? invoiceNo;
|
||||
String? procedureID;
|
||||
String? procedureId;
|
||||
String? vaccineName;
|
||||
Null? vaccineNameN;
|
||||
dynamic vaccineNameN;
|
||||
String? invoiceDate;
|
||||
int? doctorID;
|
||||
int? clinicID;
|
||||
int? doctorId;
|
||||
int? clinicId;
|
||||
String? firstName;
|
||||
String? middleName;
|
||||
String? lastName;
|
||||
Null? firstNameN;
|
||||
Null? middleNameN;
|
||||
Null? lastNameN;
|
||||
dynamic firstNameN;
|
||||
dynamic middleNameN;
|
||||
dynamic lastNameN;
|
||||
String? dateofBirth;
|
||||
int? actualDoctorRate;
|
||||
String? age;
|
||||
String? clinicName;
|
||||
Null? decimalDoctorRate;
|
||||
Null? doctorImageURL;
|
||||
double? decimalDoctorRate;
|
||||
dynamic doctorImageUrl;
|
||||
String? doctorName;
|
||||
int? doctorRate;
|
||||
int? doctorStarsRate;
|
||||
double? doctorStarsRate;
|
||||
String? doctorTitle;
|
||||
int? gender;
|
||||
Null? genderDescription;
|
||||
Null? invoiceNoVP;
|
||||
dynamic genderDescription;
|
||||
dynamic invoiceNoVp;
|
||||
bool? isActiveDoctorProfile;
|
||||
bool? isDoctorAllowVedioCall;
|
||||
bool? isExecludeDoctor;
|
||||
int? noOfPatientsRate;
|
||||
String? patientName;
|
||||
String? projectName;
|
||||
String? qR;
|
||||
String? qr;
|
||||
List<dynamic>? speciality;
|
||||
String? vaccinationDate;
|
||||
|
||||
PatientVaccineResponseModel(
|
||||
{this.setupID,
|
||||
this.projectID,
|
||||
this.patientID,
|
||||
this.invoiceNo,
|
||||
this.procedureID,
|
||||
this.vaccineName,
|
||||
this.vaccineNameN,
|
||||
this.invoiceDate,
|
||||
this.doctorID,
|
||||
this.clinicID,
|
||||
this.firstName,
|
||||
this.middleName,
|
||||
this.lastName,
|
||||
this.firstNameN,
|
||||
this.middleNameN,
|
||||
this.lastNameN,
|
||||
this.dateofBirth,
|
||||
this.actualDoctorRate,
|
||||
this.age,
|
||||
this.clinicName,
|
||||
this.decimalDoctorRate,
|
||||
this.doctorImageURL,
|
||||
this.doctorName,
|
||||
this.doctorRate,
|
||||
this.doctorStarsRate,
|
||||
this.doctorTitle,
|
||||
this.gender,
|
||||
this.genderDescription,
|
||||
this.invoiceNoVP,
|
||||
this.isActiveDoctorProfile,
|
||||
this.isDoctorAllowVedioCall,
|
||||
this.isExecludeDoctor,
|
||||
this.noOfPatientsRate,
|
||||
this.patientName,
|
||||
this.projectName,
|
||||
this.qR,
|
||||
this.vaccinationDate});
|
||||
PatientVaccineResponseModel({
|
||||
this.setupId,
|
||||
this.projectId,
|
||||
this.patientId,
|
||||
this.invoiceNo,
|
||||
this.procedureId,
|
||||
this.vaccineName,
|
||||
this.vaccineNameN,
|
||||
this.invoiceDate,
|
||||
this.doctorId,
|
||||
this.clinicId,
|
||||
this.firstName,
|
||||
this.middleName,
|
||||
this.lastName,
|
||||
this.firstNameN,
|
||||
this.middleNameN,
|
||||
this.lastNameN,
|
||||
this.dateofBirth,
|
||||
this.actualDoctorRate,
|
||||
this.age,
|
||||
this.clinicName,
|
||||
this.decimalDoctorRate,
|
||||
this.doctorImageUrl,
|
||||
this.doctorName,
|
||||
this.doctorRate,
|
||||
this.doctorStarsRate,
|
||||
this.doctorTitle,
|
||||
this.gender,
|
||||
this.genderDescription,
|
||||
this.invoiceNoVp,
|
||||
this.isActiveDoctorProfile,
|
||||
this.isDoctorAllowVedioCall,
|
||||
this.isExecludeDoctor,
|
||||
this.noOfPatientsRate,
|
||||
this.patientName,
|
||||
this.projectName,
|
||||
this.qr,
|
||||
this.speciality,
|
||||
this.vaccinationDate,
|
||||
});
|
||||
|
||||
factory PatientVaccineResponseModel.fromRawJson(String str) => PatientVaccineResponseModel.fromJson(json.decode(str));
|
||||
|
||||
String toRawJson() => json.encode(toJson());
|
||||
|
||||
PatientVaccineResponseModel.fromJson(Map<String, dynamic> json) {
|
||||
setupID = json['SetupID'];
|
||||
projectID = json['ProjectID'];
|
||||
patientID = json['PatientID'];
|
||||
invoiceNo = json['InvoiceNo'];
|
||||
procedureID = json['ProcedureID'];
|
||||
vaccineName = json['VaccineName'];
|
||||
vaccineNameN = json['VaccineNameN'];
|
||||
invoiceDate = json['InvoiceDate'];
|
||||
doctorID = json['DoctorID'];
|
||||
clinicID = json['ClinicID'];
|
||||
firstName = json['FirstName'];
|
||||
middleName = json['MiddleName'];
|
||||
lastName = json['LastName'];
|
||||
firstNameN = json['FirstNameN'];
|
||||
middleNameN = json['MiddleNameN'];
|
||||
lastNameN = json['LastNameN'];
|
||||
dateofBirth = json['DateofBirth'];
|
||||
actualDoctorRate = json['ActualDoctorRate'];
|
||||
age = json['Age'];
|
||||
clinicName = json['ClinicName'];
|
||||
decimalDoctorRate = json['DecimalDoctorRate'];
|
||||
doctorImageURL = json['DoctorImageURL'];
|
||||
doctorName = json['DoctorName'];
|
||||
doctorRate = json['DoctorRate'];
|
||||
doctorStarsRate = json['DoctorStarsRate'];
|
||||
doctorTitle = json['DoctorTitle'];
|
||||
gender = json['Gender'];
|
||||
genderDescription = json['GenderDescription'];
|
||||
invoiceNoVP = json['InvoiceNo_VP'];
|
||||
isActiveDoctorProfile = json['IsActiveDoctorProfile'];
|
||||
isDoctorAllowVedioCall = json['IsDoctorAllowVedioCall'];
|
||||
isExecludeDoctor = json['IsExecludeDoctor'];
|
||||
noOfPatientsRate = json['NoOfPatientsRate'];
|
||||
patientName = json['PatientName'];
|
||||
projectName = json['ProjectName'];
|
||||
qR = json['QR'];
|
||||
vaccinationDate = json['VaccinationDate'];
|
||||
}
|
||||
factory PatientVaccineResponseModel.fromJson(Map<String, dynamic> json) => PatientVaccineResponseModel(
|
||||
setupId: json["SetupID"],
|
||||
projectId: json["ProjectID"],
|
||||
patientId: json["PatientID"],
|
||||
invoiceNo: json["InvoiceNo"],
|
||||
procedureId: json["ProcedureID"],
|
||||
vaccineName: json["VaccineName"],
|
||||
vaccineNameN: json["VaccineNameN"],
|
||||
invoiceDate: json["InvoiceDate"],
|
||||
doctorId: json["DoctorID"],
|
||||
clinicId: json["ClinicID"],
|
||||
firstName: json["FirstName"],
|
||||
middleName: json["MiddleName"],
|
||||
lastName: json["LastName"],
|
||||
firstNameN: json["FirstNameN"],
|
||||
middleNameN: json["MiddleNameN"],
|
||||
lastNameN: json["LastNameN"],
|
||||
dateofBirth: json["DateofBirth"],
|
||||
actualDoctorRate: json["ActualDoctorRate"],
|
||||
age: json["Age"],
|
||||
clinicName: json["ClinicName"],
|
||||
decimalDoctorRate: json["DecimalDoctorRate"]?.toDouble(),
|
||||
doctorImageUrl: json["DoctorImageURL"],
|
||||
doctorName: json["DoctorName"],
|
||||
doctorRate: json["DoctorRate"],
|
||||
doctorStarsRate: json["DoctorStarsRate"]?.toDouble(),
|
||||
doctorTitle: json["DoctorTitle"],
|
||||
gender: json["Gender"],
|
||||
genderDescription: json["GenderDescription"],
|
||||
invoiceNoVp: json["InvoiceNo_VP"],
|
||||
isActiveDoctorProfile: json["IsActiveDoctorProfile"],
|
||||
isDoctorAllowVedioCall: json["IsDoctorAllowVedioCall"],
|
||||
isExecludeDoctor: json["IsExecludeDoctor"],
|
||||
noOfPatientsRate: json["NoOfPatientsRate"],
|
||||
patientName: json["PatientName"],
|
||||
projectName: json["ProjectName"],
|
||||
qr: json["QR"],
|
||||
speciality: json["Speciality"] == null ? [] : List<dynamic>.from(json["Speciality"]!.map((x) => x)),
|
||||
vaccinationDate: json["VaccinationDate"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['SetupID'] = this.setupID;
|
||||
data['ProjectID'] = this.projectID;
|
||||
data['PatientID'] = this.patientID;
|
||||
data['InvoiceNo'] = this.invoiceNo;
|
||||
data['ProcedureID'] = this.procedureID;
|
||||
data['VaccineName'] = this.vaccineName;
|
||||
data['VaccineNameN'] = this.vaccineNameN;
|
||||
data['InvoiceDate'] = this.invoiceDate;
|
||||
data['DoctorID'] = this.doctorID;
|
||||
data['ClinicID'] = this.clinicID;
|
||||
data['FirstName'] = this.firstName;
|
||||
data['MiddleName'] = this.middleName;
|
||||
data['LastName'] = this.lastName;
|
||||
data['FirstNameN'] = this.firstNameN;
|
||||
data['MiddleNameN'] = this.middleNameN;
|
||||
data['LastNameN'] = this.lastNameN;
|
||||
data['DateofBirth'] = this.dateofBirth;
|
||||
data['ActualDoctorRate'] = this.actualDoctorRate;
|
||||
data['Age'] = this.age;
|
||||
data['ClinicName'] = this.clinicName;
|
||||
data['DecimalDoctorRate'] = this.decimalDoctorRate;
|
||||
data['DoctorImageURL'] = this.doctorImageURL;
|
||||
data['DoctorName'] = this.doctorName;
|
||||
data['DoctorRate'] = this.doctorRate;
|
||||
data['DoctorStarsRate'] = this.doctorStarsRate;
|
||||
data['DoctorTitle'] = this.doctorTitle;
|
||||
data['Gender'] = this.gender;
|
||||
data['GenderDescription'] = this.genderDescription;
|
||||
data['InvoiceNo_VP'] = this.invoiceNoVP;
|
||||
data['IsActiveDoctorProfile'] = this.isActiveDoctorProfile;
|
||||
data['IsDoctorAllowVedioCall'] = this.isDoctorAllowVedioCall;
|
||||
data['IsExecludeDoctor'] = this.isExecludeDoctor;
|
||||
data['NoOfPatientsRate'] = this.noOfPatientsRate;
|
||||
data['PatientName'] = this.patientName;
|
||||
data['ProjectName'] = this.projectName;
|
||||
data['QR'] = this.qR;
|
||||
data['VaccinationDate'] = this.vaccinationDate;
|
||||
return data;
|
||||
}
|
||||
Map<String, dynamic> toJson() => {
|
||||
"SetupID": setupId,
|
||||
"ProjectID": projectId,
|
||||
"PatientID": patientId,
|
||||
"InvoiceNo": invoiceNo,
|
||||
"ProcedureID": procedureId,
|
||||
"VaccineName": vaccineName,
|
||||
"VaccineNameN": vaccineNameN,
|
||||
"InvoiceDate": invoiceDate,
|
||||
"DoctorID": doctorId,
|
||||
"ClinicID": clinicId,
|
||||
"FirstName": firstName,
|
||||
"MiddleName": middleName,
|
||||
"LastName": lastName,
|
||||
"FirstNameN": firstNameN,
|
||||
"MiddleNameN": middleNameN,
|
||||
"LastNameN": lastNameN,
|
||||
"DateofBirth": dateofBirth,
|
||||
"ActualDoctorRate": actualDoctorRate,
|
||||
"Age": age,
|
||||
"ClinicName": clinicName,
|
||||
"DecimalDoctorRate": decimalDoctorRate,
|
||||
"DoctorImageURL": doctorImageUrl,
|
||||
"DoctorName": doctorName,
|
||||
"DoctorRate": doctorRate,
|
||||
"DoctorStarsRate": doctorStarsRate,
|
||||
"DoctorTitle": doctorTitle,
|
||||
"Gender": gender,
|
||||
"GenderDescription": genderDescription,
|
||||
"InvoiceNo_VP": invoiceNoVp,
|
||||
"IsActiveDoctorProfile": isActiveDoctorProfile,
|
||||
"IsDoctorAllowVedioCall": isDoctorAllowVedioCall,
|
||||
"IsExecludeDoctor": isExecludeDoctor,
|
||||
"NoOfPatientsRate": noOfPatientsRate,
|
||||
"PatientName": patientName,
|
||||
"ProjectName": projectName,
|
||||
"QR": qr,
|
||||
"Speciality": speciality == null ? [] : List<dynamic>.from(speciality!.map((x) => x)),
|
||||
"VaccinationDate": vaccinationDate,
|
||||
};
|
||||
}
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
class AppointmentRatedResponseModel {
|
||||
int? appointmentNo;
|
||||
int? clinicID;
|
||||
int? doctorID;
|
||||
bool? isAllowedToRate;
|
||||
bool? isAppointmentRated;
|
||||
int? projectID;
|
||||
|
||||
AppointmentRatedResponseModel({this.appointmentNo, this.clinicID, this.doctorID, this.isAllowedToRate, this.isAppointmentRated, this.projectID});
|
||||
|
||||
AppointmentRatedResponseModel.fromJson(Map<String, dynamic> json) {
|
||||
appointmentNo = json['AppointmentNo'];
|
||||
clinicID = json['ClinicID'];
|
||||
doctorID = json['DoctorID'];
|
||||
isAllowedToRate = json['IsAllowedToRate'];
|
||||
isAppointmentRated = json['IsAppointmentRated'];
|
||||
projectID = json['ProjectID'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['AppointmentNo'] = this.appointmentNo;
|
||||
data['ClinicID'] = this.clinicID;
|
||||
data['DoctorID'] = this.doctorID;
|
||||
data['IsAllowedToRate'] = this.isAllowedToRate;
|
||||
data['IsAppointmentRated'] = this.isAppointmentRated;
|
||||
data['ProjectID'] = this.projectID;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -1,88 +1,93 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class GetInvoicesListResponseModel {
|
||||
String? setupId;
|
||||
int? projectID;
|
||||
int? patientID;
|
||||
int? projectId;
|
||||
int? patientId;
|
||||
int? appointmentNo;
|
||||
String? appointmentDate;
|
||||
String? appointmentDateN;
|
||||
int? clinicID;
|
||||
int? doctorID;
|
||||
dynamic appointmentDateN;
|
||||
int? clinicId;
|
||||
int? doctorId;
|
||||
int? invoiceNo;
|
||||
int? status;
|
||||
String? arrivedOn;
|
||||
String? doctorName;
|
||||
String? doctorNameN;
|
||||
String? clinicName;
|
||||
num? decimalDoctorRate;
|
||||
String? doctorImageURL;
|
||||
num? doctorRate;
|
||||
num? patientNumber;
|
||||
double? decimalDoctorRate;
|
||||
String? doctorImageUrl;
|
||||
int? doctorRate;
|
||||
int? patientNumber;
|
||||
String? projectName;
|
||||
|
||||
GetInvoicesListResponseModel(
|
||||
{this.setupId,
|
||||
this.projectID,
|
||||
this.patientID,
|
||||
this.appointmentNo,
|
||||
this.appointmentDate,
|
||||
this.appointmentDateN,
|
||||
this.clinicID,
|
||||
this.doctorID,
|
||||
this.invoiceNo,
|
||||
this.status,
|
||||
this.arrivedOn,
|
||||
this.doctorName,
|
||||
this.doctorNameN,
|
||||
this.clinicName,
|
||||
this.decimalDoctorRate,
|
||||
this.doctorImageURL,
|
||||
this.doctorRate,
|
||||
this.patientNumber,
|
||||
this.projectName});
|
||||
GetInvoicesListResponseModel({
|
||||
this.setupId,
|
||||
this.projectId,
|
||||
this.patientId,
|
||||
this.appointmentNo,
|
||||
this.appointmentDate,
|
||||
this.appointmentDateN,
|
||||
this.clinicId,
|
||||
this.doctorId,
|
||||
this.invoiceNo,
|
||||
this.status,
|
||||
this.arrivedOn,
|
||||
this.doctorName,
|
||||
this.doctorNameN,
|
||||
this.clinicName,
|
||||
this.decimalDoctorRate,
|
||||
this.doctorImageUrl,
|
||||
this.doctorRate,
|
||||
this.patientNumber,
|
||||
this.projectName,
|
||||
});
|
||||
|
||||
factory GetInvoicesListResponseModel.fromRawJson(String str) => GetInvoicesListResponseModel.fromJson(json.decode(str));
|
||||
|
||||
String toRawJson() => json.encode(toJson());
|
||||
|
||||
GetInvoicesListResponseModel.fromJson(Map<String, dynamic> json) {
|
||||
setupId = json['SetupId'];
|
||||
projectID = json['ProjectID'];
|
||||
patientID = json['PatientID'];
|
||||
appointmentNo = json['AppointmentNo'];
|
||||
appointmentDate = json['AppointmentDate'];
|
||||
appointmentDateN = json['AppointmentDateN'];
|
||||
clinicID = json['ClinicID'];
|
||||
doctorID = json['DoctorID'];
|
||||
invoiceNo = json['InvoiceNo'];
|
||||
status = json['Status'];
|
||||
arrivedOn = json['ArrivedOn'];
|
||||
doctorName = json['DoctorName'];
|
||||
doctorNameN = json['DoctorNameN'];
|
||||
clinicName = json['ClinicName'];
|
||||
decimalDoctorRate = json['DecimalDoctorRate'];
|
||||
doctorImageURL = json['DoctorImageURL'];
|
||||
doctorRate = json['DoctorRate'];
|
||||
patientNumber = json['PatientNumber'];
|
||||
projectName = json['ProjectName'];
|
||||
}
|
||||
factory GetInvoicesListResponseModel.fromJson(Map<String, dynamic> json) => GetInvoicesListResponseModel(
|
||||
setupId: json["SetupId"],
|
||||
projectId: json["ProjectID"],
|
||||
patientId: json["PatientID"],
|
||||
appointmentNo: json["AppointmentNo"],
|
||||
appointmentDate: json["AppointmentDate"],
|
||||
appointmentDateN: json["AppointmentDateN"],
|
||||
clinicId: json["ClinicID"],
|
||||
doctorId: json["DoctorID"],
|
||||
invoiceNo: json["InvoiceNo"],
|
||||
status: json["Status"],
|
||||
arrivedOn: json["ArrivedOn"],
|
||||
doctorName: json["DoctorName"],
|
||||
doctorNameN: json["DoctorNameN"],
|
||||
clinicName: json["ClinicName"],
|
||||
decimalDoctorRate: json["DecimalDoctorRate"]?.toDouble(),
|
||||
doctorImageUrl: json["DoctorImageURL"],
|
||||
doctorRate: json["DoctorRate"],
|
||||
patientNumber: json["PatientNumber"],
|
||||
projectName: json["ProjectName"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['SetupId'] = this.setupId;
|
||||
data['ProjectID'] = this.projectID;
|
||||
data['PatientID'] = this.patientID;
|
||||
data['AppointmentNo'] = this.appointmentNo;
|
||||
data['AppointmentDate'] = this.appointmentDate;
|
||||
data['AppointmentDateN'] = this.appointmentDateN;
|
||||
data['ClinicID'] = this.clinicID;
|
||||
data['DoctorID'] = this.doctorID;
|
||||
data['InvoiceNo'] = this.invoiceNo;
|
||||
data['Status'] = this.status;
|
||||
data['ArrivedOn'] = this.arrivedOn;
|
||||
data['DoctorName'] = this.doctorName;
|
||||
data['DoctorNameN'] = this.doctorNameN;
|
||||
data['ClinicName'] = this.clinicName;
|
||||
data['DecimalDoctorRate'] = this.decimalDoctorRate;
|
||||
data['DoctorImageURL'] = this.doctorImageURL;
|
||||
data['DoctorRate'] = this.doctorRate;
|
||||
data['PatientNumber'] = this.patientNumber;
|
||||
data['ProjectName'] = this.projectName;
|
||||
return data;
|
||||
}
|
||||
Map<String, dynamic> toJson() => {
|
||||
"SetupId": setupId,
|
||||
"ProjectID": projectId,
|
||||
"PatientID": patientId,
|
||||
"AppointmentNo": appointmentNo,
|
||||
"AppointmentDate": appointmentDate,
|
||||
"AppointmentDateN": appointmentDateN,
|
||||
"ClinicID": clinicId,
|
||||
"DoctorID": doctorId,
|
||||
"InvoiceNo": invoiceNo,
|
||||
"Status": status,
|
||||
"ArrivedOn": arrivedOn,
|
||||
"DoctorName": doctorName,
|
||||
"DoctorNameN": doctorNameN,
|
||||
"ClinicName": clinicName,
|
||||
"DecimalDoctorRate": decimalDoctorRate,
|
||||
"DoctorImageURL": doctorImageUrl,
|
||||
"DoctorRate": doctorRate,
|
||||
"PatientNumber": patientNumber,
|
||||
"ProjectName": projectName,
|
||||
};
|
||||
}
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class RadiologyAiAnalysisResponse {
|
||||
String? summary;
|
||||
|
||||
RadiologyAiAnalysisResponse({
|
||||
this.summary,
|
||||
});
|
||||
|
||||
factory RadiologyAiAnalysisResponse.fromRawJson(String str) => RadiologyAiAnalysisResponse.fromJson(json.decode(str));
|
||||
|
||||
String toRawJson() => json.encode(toJson());
|
||||
|
||||
factory RadiologyAiAnalysisResponse.fromJson(Map<String, dynamic> json) => RadiologyAiAnalysisResponse(
|
||||
summary: json["summary"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"summary": summary,
|
||||
};
|
||||
}
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:ui';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
class RemoteFileLoader extends AssetLoader {
|
||||
@override
|
||||
Future<Map<String, dynamic>?> load(String path, Locale locale) async {
|
||||
final directory = await getApplicationDocumentsDirectory();
|
||||
|
||||
// easy_localization uses toLanguageTag() which gives 'en-US' or 'ar-SA'
|
||||
final fileName = "${locale.toLanguageTag()}.json";
|
||||
final file = File("${directory.path}/$fileName");
|
||||
|
||||
if (await file.exists()) {
|
||||
final String jsonString = await file.readAsString();
|
||||
return jsonDecode(jsonString);
|
||||
} else {
|
||||
// If the download failed or hasn't happened yet, load from local assets
|
||||
// path is the 'path' property from the EasyLocalization widget
|
||||
final localData = await rootBundle.loadString('$path/$fileName');
|
||||
return jsonDecode(localData);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
import 'dart:io';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/api_consts.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
class TranslationService {
|
||||
// Replace with your actual hosting URL
|
||||
static final String baseUrl = ApiConsts.googleCloudStorageENTranslationFileBaseURL;
|
||||
|
||||
static Future<void> downloadTranslations() async {
|
||||
final directory = await getApplicationDocumentsDirectory();
|
||||
|
||||
// Ensure these match your locale codes exactly (en-US, ar-SA)
|
||||
List<String> files = ["en-US.json", "ar-SA.json"];
|
||||
|
||||
for (String fileName in files) {
|
||||
try {
|
||||
final String timestamp = DateTime.now().millisecondsSinceEpoch.toString();
|
||||
String url = "$baseUrl/$fileName?v=$timestamp";
|
||||
debugPrint(url);
|
||||
// final response = await http.get(Uri.parse("$baseUrl/$fileName"));
|
||||
final response = await http.get(Uri.parse(url));
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final file = File("${directory.path}/$fileName");
|
||||
await file.writeAsBytes(response.bodyBytes);
|
||||
} else {
|
||||
print("Failed to download $fileName: Status ${response.statusCode}");
|
||||
}
|
||||
} catch (e) {
|
||||
print("Network error while downloading $fileName: $e");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,181 @@
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_export.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
|
||||
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||
import 'package:hmg_patient_app_new/presentation/appointments/widgets/doctor_row_appointment_rating.dart';
|
||||
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class AppointmentRatingWidget extends StatefulWidget {
|
||||
const AppointmentRatingWidget({super.key, required this.patientAppointmentHistoryResponseModel});
|
||||
|
||||
final PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel;
|
||||
|
||||
@override
|
||||
State<AppointmentRatingWidget> createState() => _AppointmentRatingWidgetState();
|
||||
}
|
||||
|
||||
class _AppointmentRatingWidgetState extends State<AppointmentRatingWidget> {
|
||||
late MyAppointmentsViewModel myAppointmentsViewModel;
|
||||
late BookAppointmentsViewModel bookAppointmentsViewModel;
|
||||
|
||||
int rating = 0;
|
||||
String notes = "";
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
myAppointmentsViewModel = Provider.of<MyAppointmentsViewModel>(context, listen: false);
|
||||
bookAppointmentsViewModel = Provider.of<BookAppointmentsViewModel>(context, listen: false);
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height * 0.6,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
// Scrollable main content
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 0.0, left: 0, right: 0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
// Doctor row
|
||||
Container(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 24.r,
|
||||
hasShadow: false,
|
||||
),
|
||||
child: BuildDoctorRowAppointmentRating(
|
||||
patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
|
||||
)),
|
||||
|
||||
SizedBox(height: 16),
|
||||
|
||||
// Rating box
|
||||
Container(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 24.r,
|
||||
hasShadow: false,
|
||||
),
|
||||
width: double.infinity,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
LocaleKeys.rateTheDoctor.tr(context: context).toText16(isBold: true),
|
||||
SizedBox(height: 12),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
...List.generate(
|
||||
5,
|
||||
(index) => AnimatedSwitcher(
|
||||
duration: Duration(milliseconds: 1000),
|
||||
switchInCurve: Curves.elasticOut,
|
||||
switchOutCurve: Curves.elasticIn,
|
||||
transitionBuilder: (Widget child, Animation<double> animation) {
|
||||
return ScaleTransition(child: child, scale: animation);
|
||||
},
|
||||
child: Container(
|
||||
key: ValueKey<int>(rating),
|
||||
child: IconButton(
|
||||
iconSize: 45.0,
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
rating = index + 1;
|
||||
});
|
||||
},
|
||||
color: rating >= (index + 1) ? Color.fromRGBO(255, 186, 0, 1.0) : Colors.grey[400],
|
||||
icon: Icon(rating >= (index + 1) ? Icons.star : Icons.star)),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
SizedBox(height: 12),
|
||||
|
||||
// Note text field
|
||||
Container(
|
||||
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: 24.r,
|
||||
hasShadow: false,
|
||||
),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(16.0),
|
||||
child: TextField(
|
||||
maxLines: 4,
|
||||
decoration: InputDecoration.collapsed(
|
||||
hintText: LocaleKeys.notes.tr(context: context),
|
||||
hintStyle: TextStyle(fontSize: 16.f, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 23 / 16)),
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
notes = value;
|
||||
});
|
||||
},
|
||||
))),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
// Bottom action buttons pinned to bottom
|
||||
SafeArea(
|
||||
top: false,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: CustomButton(
|
||||
text: LocaleKeys.later.tr(context: context),
|
||||
backgroundColor: Color(0xffFEE9EA),
|
||||
borderColor: Color(0xffFEE9EA),
|
||||
textColor: Color(0xffED1C2B),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: CustomButton(
|
||||
text: LocaleKeys.submit.tr(context: context),
|
||||
isDisabled: rating == 0,
|
||||
onPressed: rating == 0 ? null : () async {
|
||||
// Set up clinic rating and show clinic rating view
|
||||
// appointmentRatingViewModel!.setTitle(LocaleKeys.rateDoctor.tr(context: context),);
|
||||
// appointmentRatingViewModel!.setSubTitle(LocaleKeys.howWasYourLastVisitWithDoctor.tr(context: context),);
|
||||
// appointmentRatingViewModel!.setClinicOrDoctor(true);
|
||||
|
||||
LoaderBottomSheet.showLoader();
|
||||
await myAppointmentsViewModel.submitDoctorRating(docRate: rating, docNote: notes, patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel);
|
||||
// await appointmentRatingViewModel!.submitClinicRating(clinicRate: rating, clinicNote: note);
|
||||
LoaderBottomSheet.hideLoader();
|
||||
Navigator.pop(context);
|
||||
setState(() {});
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,67 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
|
||||
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/appointment_details_resp_model.dart';
|
||||
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
|
||||
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
|
||||
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
class BuildDoctorRowAppointmentRating extends StatelessWidget {
|
||||
final PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel;
|
||||
|
||||
BuildDoctorRowAppointmentRating({super.key, required this.patientAppointmentHistoryResponseModel});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.all(16),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Image.network(
|
||||
patientAppointmentHistoryResponseModel.doctorImageURL!,
|
||||
width: 63.h,
|
||||
height: 63.h,
|
||||
fit: BoxFit.cover,
|
||||
).circle(100),
|
||||
SizedBox(width: 16.h),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
patientAppointmentHistoryResponseModel.doctorNameObj!.toString().toText16(isBold: true, maxlines: 1),
|
||||
SizedBox(height: 8.h),
|
||||
Wrap(
|
||||
direction: Axis.horizontal,
|
||||
spacing: 3.h,
|
||||
runSpacing: 4.h,
|
||||
children: [
|
||||
AppCustomChipWidget(
|
||||
labelText: patientAppointmentHistoryResponseModel.projectName.toString(),
|
||||
),
|
||||
AppCustomChipWidget(
|
||||
labelText: patientAppointmentHistoryResponseModel.clinicName.toString(),
|
||||
),
|
||||
Directionality(
|
||||
textDirection: ui.TextDirection.ltr,
|
||||
child: AppCustomChipWidget(
|
||||
labelPadding: EdgeInsetsDirectional.only(start: -8.w, end: 6.w),
|
||||
icon: AppAssets.ic_date_filter,
|
||||
labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(patientAppointmentHistoryResponseModel.appointmentDate), false),
|
||||
isEnglishOnly: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||