Compare commits
100 Commits
dev_v3.13.
...
dev_v3.13.
| Author | SHA1 | Date |
|---|---|---|
|
|
8e3f20794d | 1 year ago |
|
|
c1dae542c9 | 1 year ago |
|
|
220c954a4a | 1 year ago |
|
|
303e9114a3 | 1 year ago |
|
|
fff45cd3a8 | 1 year ago |
|
|
1ee86d0813 | 1 year ago |
|
|
0c3ef15895 | 1 year ago |
|
|
f7599a47e7 | 1 year ago |
|
|
a0528da4cd | 1 year ago |
|
|
cb68731679 | 1 year ago |
|
|
f56a1627db | 1 year ago |
|
|
260edfa303 | 1 year ago |
|
|
5fc939bf1e | 1 year ago |
|
|
f621f8c8d1 | 1 year ago |
|
|
f8a66a58f8 | 1 year ago |
|
|
57415bd670 | 1 year ago |
|
|
390455e5a2 | 1 year ago |
|
|
ec96fecf2f | 1 year ago |
|
|
bdcda02b26 | 1 year ago |
|
|
68eab7639c | 1 year ago |
|
|
cb7a444d83 | 1 year ago |
|
|
c1212c2c6a | 1 year ago |
|
|
4564b42018 | 1 year ago |
|
|
d921b1d081 | 1 year ago |
|
|
b308079255 | 1 year ago |
|
|
7a821a4604 | 1 year ago |
|
|
a2dd8f2e35 | 1 year ago |
|
|
4cde49cb51 | 1 year ago |
|
|
bbf18baade | 1 year ago |
|
|
2e9f6bcb51 | 1 year ago |
|
|
8d23ea6fda | 1 year ago |
|
|
9074bf2e65 | 1 year ago |
|
|
b46eb6214e | 1 year ago |
|
|
4b40d5d5a0 | 1 year ago |
|
|
5dbd97aa46 | 1 year ago |
|
|
556ff02e64 | 2 years ago |
|
|
e3b75b18c8 | 2 years ago |
|
|
cb8eb316ec | 2 years ago |
|
|
159135bb77 | 2 years ago |
|
|
88cd6f811a | 2 years ago |
|
|
ca965a6d06 | 2 years ago |
|
|
e6fcb1fddf | 2 years ago |
|
|
951a5a4932 | 2 years ago |
|
|
ae4c287af2 | 2 years ago |
|
|
8ffcebc44e | 2 years ago |
|
|
9590d268a0 | 2 years ago |
|
|
a1600dbfce | 2 years ago |
|
|
0dc32e061f | 2 years ago |
|
|
d865bd9c3b | 2 years ago |
|
|
7842f95d7b | 2 years ago |
|
|
e876eaaa33 | 2 years ago |
|
|
d4c741e1ec | 2 years ago |
|
|
21fda7987a | 2 years ago |
|
|
e5198f093a | 2 years ago |
|
|
e2efc3749c | 2 years ago |
|
|
91b9e792c6 | 2 years ago |
|
|
c2785c5f68 | 2 years ago |
|
|
7ed401fb1c | 2 years ago |
|
|
0706d9f5f9 | 2 years ago |
|
|
889828d4d4 | 2 years ago |
|
|
8b74c9df61 | 2 years ago |
|
|
e66e42edda | 2 years ago |
|
|
b93d373c6f | 2 years ago |
|
|
2c746bf783 | 2 years ago |
|
|
81ddb81b8e | 2 years ago |
|
|
3bf1e3fceb | 2 years ago |
|
|
08965c72c8 | 2 years ago |
|
|
b445d1d59e | 2 years ago |
|
|
1080a59106 | 2 years ago |
|
|
2c5be020e9 | 2 years ago |
|
|
7d33ace5c9 | 2 years ago |
|
|
f74a3301da | 2 years ago |
|
|
744e3978d3 | 2 years ago |
|
|
a24582a578 | 2 years ago |
|
|
04413aa7d6 | 2 years ago |
|
|
6cf86e2e84 | 2 years ago |
|
|
06192292d0 | 2 years ago |
|
|
2a37777b9a | 2 years ago |
|
|
c2f38f1b7f | 2 years ago |
|
|
2ab0d0b682 | 2 years ago |
|
|
0221cb1250 | 2 years ago |
|
|
d98f2c31a2 | 2 years ago |
|
|
7cafe3aaa9 | 2 years ago |
|
|
11b83d1276 | 2 years ago |
|
|
c77ffb1730 | 2 years ago |
|
|
780f645cbe | 2 years ago |
|
|
a31c677919 | 2 years ago |
|
|
95a4d8dd14 | 2 years ago |
|
|
880611f7bb | 2 years ago |
|
|
e9accb00ef | 2 years ago |
|
|
62bc29d450 | 2 years ago |
|
|
bd3dca6719 | 2 years ago |
|
|
59335ac04d | 2 years ago |
|
|
8509c3d94d | 2 years ago |
|
|
c4de4c1bd9 | 2 years ago |
|
|
b677be9e3c | 2 years ago |
|
|
f52aed49fd | 2 years ago |
|
|
c6787ff966 | 2 years ago |
|
|
615f3bfa8e | 2 years ago |
|
|
cd460ee31b | 2 years ago |
@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIICajCCAVICAQAwJTEjMCEGCSqGSIb3DQEJARYUSGFyb29uNjEzOEBnbWFpbC5j
|
||||
b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4E8y9zluekbsXX6+i
|
||||
HLa0GrZE+r8rJsmcNyhiONDkpCTQuuidRb4PH+DWPpxwtndKpgzPemCXavaAPY8I
|
||||
vSf5/aLTzClLvuX4OqNsb9Y8v8jlt7uYud6hPYK+VKZmIyynqeHldur0+RQScVY7
|
||||
Z4MbgxWYAXd0K49o1Vj8KcYP1G37XIaUwOf+Ib3az4abnrsou7w9PSHnKREPU1A8
|
||||
syBR56/Zcm3I9e+4nLyk2kjhkp6zR8KKW3s0teqHkW+V2nqd6eU+ZwOOmP3FVuwl
|
||||
X+kfVabTc42Nb7toDaIvxEI+LlrNCUTCptE5uvY+vId0bwjcL88Ti9zshPETgLd8
|
||||
F7mHAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAMTsBtXA79BL7aJoe87iHwCaR
|
||||
lyOoeG5vUVJhQxhkb7pXD6TT00H3DEn43MCD+Nu9KNq3ZAARTsbnoB1MzYQ+Qs0w
|
||||
uIx3K+sKKqzo3tKY78cjpKYW68qSY8QHPH8z0PJ/a18Mz1VGjhV9sanRc57fkf8Y
|
||||
SfzG+jKB+y9AeC4R5PAVkv/EScZKVyb8+hFNZRMBOfnME7QRWm51MlnzfgavB/Sr
|
||||
SSb9KrKzA65UKM9fv0JhNftiFVwsMDA42RuwSE7rVqzoejb47sFNnEBprt4Jel+5
|
||||
FJt/C//NKspMlW2cdRbPek7adaBuZCvEO+b0TDnvMQXnJTO5K0LCzGb5MRuGUg==
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
@ -0,0 +1,8 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIH6MIGfAgEAMD0xIzAhBgkqhkiG9w0BCQEWFEhhcm9vbjYxMzhAZ21haWwuY29t
|
||||
MQkwBwYDVQQDDAAxCzAJBgNVBAYTAkFFMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
|
||||
QgAEiHGgNfm6LyD0k41YUNxGibQT5t2T9+QTVb6v5YrfCYslJIurcpeia8pzl/HJ
|
||||
p1f4qxCR04cEYE3tcunyzkJd26AAMAwGCCqGSM49BAMCBQADSAAwRQIhAJWZqbmD
|
||||
e9jyqPHW578V6xsf5Axgf64GBBFMpZ8+ZukDAiAYu0BbgeiU4RwCrezA71iH95yZ
|
||||
ge9MoPuNHejpDKGeQQ==
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
@ -0,0 +1,8 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf2758
|
||||
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
{\*\expandedcolortbl;;}
|
||||
\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\fs24 \cf0 HMG@54321}
|
||||
@ -0,0 +1,74 @@
|
||||
MIIQaQYJKoZIhvcNAQcCoIIQWjCCEFYCAQExCzAJBgUrDgMCGgUAMHgGCSqGSIb3DQEHAaBrBGl7
|
||||
InRlYW1JZCI6IjNBMzU5RTg2WkYiLCJkb21haW4iOiJ1YXQuaG1nd2Vic2VydmljZXMuY29tIiwi
|
||||
ZGF0ZUNyZWF0ZWQiOiIyMDI1LTA0LTA5LDA4OjUzOjAzIiwidmVyc2lvbiI6MX2ggg0_MIIENDCC
|
||||
AxygAwIBAgIIPVn4N-rR2J8wDQYJKoZIhvcNAQELBQAwczEtMCsGA1UEAwwkQXBwbGUgaVBob25l
|
||||
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
||||
eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwHhcNMjQxMjE2MTkyMTAxWhcNMjkx
|
||||
MjExMTgxMzU5WjBZMTUwMwYDVQQDDCxBcHBsZSBpUGhvbmUgT1MgUHJvdmlzaW9uaW5nIFByb2Zp
|
||||
bGUgU2lnbmluZzETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3
|
||||
DQEBAQUAA4IBDwAwggEKAoIBAQDQkzGr-FMe360eL2T3yU3Xlr5fSz15ZFxD7inDQNL6LxygtrwR
|
||||
c-_wIrDf3vn5zlXj9UIBtSNlQRI793xGfYkTRZVE7JaVYmaXkAMA2eCuxdmxnCAtluCF7W9r01LT
|
||||
gzzUASMl6eXG1BHYeaoIwt0VWPXvipNLDUvuDbaHk3UREFXLDHgH2zdwRjuX-sTreCng9Ox442Ha
|
||||
QFeAB7uInKXHSW3IJtOVH00hoo1oc4Me5llahZZVVLCVLiXcdw1hh4GNiaQDezwAdyyJalnTZETZ
|
||||
dKVbirFSYV9uBDDU8-IQNAyVjEvhe9YrhYPyJzmNcAgj4hSI_5P0LW1MJuKLN4YtAgMBAAGjgeUw
|
||||
geIwDAYDVR0TAQH_BAIwADAfBgNVHSMEGDAWgBRv8ZUYYlzgyPHF7WwYyeDTZFKYIDBABggrBgEF
|
||||
BQcBAQQ0MDIwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3NwMDMtYWlwY2Ew
|
||||
NzAvBgNVHR8EKDAmMCSgIqAghh5odHRwOi8vY3JsLmFwcGxlLmNvbS9haXBjYS5jcmwwHQYDVR0O
|
||||
BBYEFLy1xem9_MvQntyUsB74IZRc_wkuMA4GA1UdDwEB_wQEAwIHgDAPBgkqhkiG92NkBjoEAgUA
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQAyNMLpd6pf4MbKovN3WeeKZ7jxUfP7sPaXv7ERo-GhPLsjkukS
|
||||
k6JxHbzxmnFvpDxvNpK24EeCopPj57iPu98lRGICz8289_uNiglweGXCGU0ly3JiIeSpaPkQmi56
|
||||
Dyi-pgMG0VVhH698-JTUcQ7i0yVUi86t1WgHW70te8diRXm5qYdM-Bg7gK4QS3HYeCvmCq-a59lN
|
||||
zOpbt6OXVWvsDaB4x8Cwz8vcEEwwkhNxlNav4OzJ6cmbziUy7hENIRcki_GVLiJiRkV_4NvXFlTB
|
||||
uT7T2oq5Zfa0tCN_eF3ZcnZkY6cIVcfZt5TbI7_zk6fUBERDDcriVrIrlCikPXKHMIIERDCCAyyg
|
||||
AwIBAgIIXGPK5Eo3U8kwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkFw
|
||||
cGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQD
|
||||
Ew1BcHBsZSBSb290IENBMB4XDTE3MDUxMDIxMjczMFoXDTMwMTIzMTAwMDAwMFowczEtMCsGA1UE
|
||||
AwwkQXBwbGUgaVBob25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZp
|
||||
Y2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJRWoBDz6DBIbH_L_cXvAege4XMHNjJi7ePXokzZM-
|
||||
TzlHunW-88DS8Vmiqx_-CoY82S2aB_IOa7kpkRpfIgqL8XJYBa5MS0TFeaeAPLCI4IwMJ4RdGeWH
|
||||
GTbL48V2t7D0QXJR9AVcg0uibaZRuPEm33terWUMxrKYUYy7fRtMwU7ICMfS7WQLtN0bjU9AfRuP
|
||||
SJaSW_PQmH7ZvKQZDplhu0FdAcxbd3p9JNDc01P_w9zFlCy2Wk2OGCM5vdnGUj7R8vQliqEqh_3Y
|
||||
DEYpUf_tF2yJJWuHv4ppFJ93n8MVt2iziEW9hOYGAkFkD60qKLgVyeCsp4q6cgQ0sniM-LKFAgMB
|
||||
AAGjgewwgekwDwYDVR0TAQH_BAUwAwEB_zAfBgNVHSMEGDAWgBQr0GlHlHYJ_vRrjS5ApvdHTX8I
|
||||
XjBEBggrBgEFBQcBAQQ4MDYwNAYIKwYBBQUHMAGGKGh0dHA6Ly9vY3NwLmFwcGxlLmNvbS9vY3Nw
|
||||
MDMtYXBwbGVyb290Y2EwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9v
|
||||
dC5jcmwwHQYDVR0OBBYEFG_xlRhiXODI8cXtbBjJ4NNkUpggMA4GA1UdDwEB_wQEAwIBBjAQBgoq
|
||||
hkiG92NkBgISBAIFADANBgkqhkiG9w0BAQsFAAOCAQEAOs-smI2-kiAhCa2V87FcIfo2LVcgRHRz
|
||||
ZJIIs5as922X-ls0OCfPEkbTPBHwB8mZkLHR6BEJpeOla2xjCD-eJfrVmZxM5uXOjrJNaOyLq6Oi
|
||||
T4oRFT7cFCscxkS2b2fFW0-VKS2HXD_cgx53T-3aVKct5xOBwWPEVAsbSwpqKCII1DeSfH9nKF-v
|
||||
PT-3rFkdODRkWu4zShlCRCnEyhhr4cFTLS30TcIV9jMyGHjxJm-KTeuUTKPo_w-zA4tl2usu2GVQ
|
||||
n9yfit8xqIRU3FJSQdKyEx0xRkeIXz7uw_KMIwSV66yKPoJsBp8u44tDmmJbNA30mc8s7rpyhhkj
|
||||
pfyOtTCCBLswggOjoAMCAQICAQIwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCVVMxEzARBgNV
|
||||
BAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYw
|
||||
FAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTA2MDQyNTIxNDAzNloXDTM1MDIwOTIxNDAzNlowYjEL
|
||||
MAkGA1UEBhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRpZmlj
|
||||
YXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAQ8AMIIBCgKCAQEA5JGpCR-R2x5HUOsF7V55hC3rNqJXTFXsixmJ3vlLbPUHqyIwAugYPvhQ
|
||||
CdN_QaiY-dHKZpwkaxHQo7vkGyrDH5WeegykR4tb1BY3M8vED03OFGnRyRly9V0O1X9fm_IlA7pV
|
||||
j01dDfFkNSMVSxVZHbOU9_acns9QusFYUGePCLQg98usLCBvcLY_ATCMt0PPD5098ytJKBrI_s61
|
||||
uQ7ZXhzWyz21Oq30Dw4AkguxIRYudNU8DdtiFqujcZJHU1XBry9Bs_j743DN5qNMRX4fTGtQlkGJ
|
||||
xHRiCxCDQYczioGxMFjsWgQyjGizjx3eZXP_Z15lvEnYdp8zFGWhd5TJLQIDAQABo4IBejCCAXYw
|
||||
DgYDVR0PAQH_BAQDAgEGMA8GA1UdEwEB_wQFMAMBAf8wHQYDVR0OBBYEFCvQaUeUdgn-9GuNLkCm
|
||||
90dNfwheMB8GA1UdIwQYMBaAFCvQaUeUdgn-9GuNLkCm90dNfwheMIIBEQYDVR0gBIIBCDCCAQQw
|
||||
ggEABgkqhkiG92NkBQEwgfIwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9hcHBs
|
||||
ZWNhLzCBwwYIKwYBBQUHAgIwgbYagbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFu
|
||||
eSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
|
||||
ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2Vy
|
||||
dGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14
|
||||
t-2Mm9zzd5vydtJ3ME_BH4WDhRuZPUc38qmbQI4s1LGQEti-9HOb7tJkD8t5TzTYoj75eP9ryAfs
|
||||
fTmDi1Mg0zjEsb-aTwpr_yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UX
|
||||
F6jcfiI1yiXV2Q_Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy_5
|
||||
U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU-12TZ_wYdV2aeZuTJC-9jVcZ5-oVK3G72TQiQSKscPHbZN
|
||||
nF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAoUwggKBAgEBMH8wczEtMCsGA1UEAwwkQXBwbGUgaVBo
|
||||
b25lIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhv
|
||||
cml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMCCD1Z-Dfq0difMAkGBSsOAwIa
|
||||
BQCggdwwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjUwNDA5MDg1
|
||||
MzAzWjAjBgkqhkiG9w0BCQQxFgQUAFaGI1aIk0pvFl6XU5VvRpeio9QwKQYJKoZIhvcNAQk0MRww
|
||||
GjAJBgUrDgMCGgUAoQ0GCSqGSIb3DQEBAQUAMFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcw
|
||||
DgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMA0G
|
||||
CSqGSIb3DQEBAQUABIIBAHdhBvowTL1e7Q-KFo3GAoa_c3I5iQH79ks6sZ9U4zu3xhpjrReRlA5d
|
||||
ORAcMvUnUT0sjDj2ISsLKzUnDXNlcPE8fqfkMI_7LYlWvnNalVtrJmL6CUheBuTKMQ_Z_lZLLI4o
|
||||
J46YUzCU9M4vpcgO6EpOQTNrqLx2sOs-V_my1p-Hig7UqdHNviX4gL4xjg7yUXNoevZ9ixPLXI4C
|
||||
aPmg5q2NCECPxS7g36hJ_gHtRC6awR8qvK3-mSZPPfMzh0sHih76h2RWcv13UHSNygn3SF0MLhsS
|
||||
5m9tf6r1sJOCAr2_ri-65d2GN1vhGXfoXQ0KFy9N2Cao3IsRs5unBb6pk5c
|
||||
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
package com.cloud.diplomaticquarterapp.whatsapp;
|
||||
|
||||
import static java.sql.DriverManager.println;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.Signature;
|
||||
import android.util.Base64;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class AppSignatureRetriever {
|
||||
|
||||
private static final String HASH_TYPE = "SHA-256";
|
||||
public static final int NUM_HASHED_BYTES = 9;
|
||||
public static final int NUM_BASE64_CHAR = 11;
|
||||
|
||||
|
||||
public void logSignatures(Context context) {
|
||||
Collection<String> appSignatures = getAppSignatures(context);
|
||||
appSignatures.forEach(signature -> println("Signature: " + signature));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the app signatures for the current package.
|
||||
*
|
||||
* @return signatures for current app
|
||||
*/
|
||||
public Collection<String> getAppSignatures(Context context) {
|
||||
try {
|
||||
// Get all package signatures for the current package
|
||||
String packageName = context.getPackageName();
|
||||
println("Package name: " + packageName);
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
Signature[] signatures = packageManager.getPackageInfo(packageName,
|
||||
PackageManager.GET_SIGNATURES).signatures;
|
||||
|
||||
// For each signature create a compatible hash
|
||||
Collection<String> appCodes = Arrays.stream(signatures)
|
||||
.map(signature -> hash(packageName, signature.toCharsString()))
|
||||
.collect(Collectors.toList());
|
||||
return appCodes;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
println("Unable to find package to obtain hash.");
|
||||
throw new RuntimeException("Unable to find package to obtain hash.", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private String hash(String packageName, String signature) {
|
||||
String appInfo = packageName + " " + signature;
|
||||
try {
|
||||
MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);
|
||||
messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
|
||||
byte[] hashSignature = messageDigest.digest();
|
||||
|
||||
// truncated into NUM_HASHED_BYTES
|
||||
hashSignature = Arrays.copyOfRange(hashSignature, 0, NUM_HASHED_BYTES);
|
||||
// encode into Base64
|
||||
String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);
|
||||
base64Hash = base64Hash.substring(0, NUM_BASE64_CHAR);
|
||||
|
||||
println(String.format("pkg: %s -- hash: %s", packageName, base64Hash));
|
||||
return base64Hash;
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new RuntimeException("Unable to generate hash for application", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.cloud.diplomaticquarterapp.whatsapp
|
||||
import android.app.PendingIntent
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import com.cloud.diplomaticquarterapp.whatsapp.WhatsApp
|
||||
import com.cloud.diplomaticquarterapp.whatsapp.WhatsAppOtpPlatformBridge
|
||||
import io.flutter.embedding.android.FlutterFragmentActivity
|
||||
|
||||
class WhatsAppCodeActivity : FlutterFragmentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
WhatsApp.handleOTP(intent){code ->
|
||||
WhatsAppOtpPlatformBridge.result?.success(code);
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package com.cloud.diplomaticquarterapp.whatsapp
|
||||
|
||||
import com.ejada.hmg.MainActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodCall
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class WhatsAppOtpPlatformBridge(
|
||||
private var flutterEngine: FlutterEngine,
|
||||
private var mainActivity: MainActivity
|
||||
) {
|
||||
|
||||
|
||||
private lateinit var channel: MethodChannel
|
||||
|
||||
companion object {
|
||||
private const val CHANNEL = "whats_app_otp"
|
||||
var result: MethodChannel.Result? = null
|
||||
}
|
||||
|
||||
fun invoke() {
|
||||
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
|
||||
channel.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result ->
|
||||
when (call.method) {
|
||||
"isWhatsAppInstalled" -> {
|
||||
val isAppInstalled =
|
||||
WhatsApp.isWhatsAppInstalled(WeakReference(mainActivity))
|
||||
result.success(isAppInstalled)
|
||||
}
|
||||
|
||||
"performHandShake" -> {
|
||||
WhatsApp.performHandShake(WeakReference(mainActivity))
|
||||
}
|
||||
|
||||
|
||||
"startListening" -> {
|
||||
WhatsAppOtpPlatformBridge.result = result
|
||||
}
|
||||
|
||||
else -> {
|
||||
result.notImplemented()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="com.cloud.diplomaticquarterapp.whatsapp.WhatsAppCodeActivity">
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@ -1,23 +1,23 @@
|
||||
<resources>
|
||||
<string name="app_name">HMG Patient App</string>
|
||||
<string name="app_name">HMG Patient App</string>
|
||||
|
||||
<string name="geofence_unknown_error">
|
||||
<string name="geofence_unknown_error">
|
||||
Unknown error: the Geofence service is not available now.
|
||||
</string>
|
||||
<string name="geofence_not_available">
|
||||
<string name="geofence_not_available">
|
||||
Geofence service is not available now. Go to Settings>Location>Mode and choose High accuracy.
|
||||
</string>
|
||||
<string name="geofence_too_many_geofences">
|
||||
<string name="geofence_too_many_geofences">
|
||||
Your app has registered too many geofences.
|
||||
</string>
|
||||
<string name="geofence_too_many_pending_intents">
|
||||
<string name="geofence_too_many_pending_intents">
|
||||
You have provided too many PendingIntents to the addGeofences() call.
|
||||
</string>
|
||||
<string name="GEOFENCE_INSUFFICIENT_LOCATION_PERMISSION">
|
||||
<string name="GEOFENCE_INSUFFICIENT_LOCATION_PERMISSION">
|
||||
App do not have permission to access location service.
|
||||
</string>
|
||||
<string name="GEOFENCE_REQUEST_TOO_FREQUENT">
|
||||
<string name="GEOFENCE_REQUEST_TOO_FREQUENT">
|
||||
Geofence requests happened too frequently.
|
||||
</string>
|
||||
<string name="mapbox_access_token" translatable="false">sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg</string>
|
||||
<string name="mapbox_access_token" translatable="false">sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg</string>
|
||||
</resources>
|
||||
|
||||
|
Before Width: | Height: | Size: 520 B |
|
Before Width: | Height: | Size: 428 B |
@ -0,0 +1,9 @@
|
||||
<svg id="route" xmlns="http://www.w3.org/2000/svg" width="27.521" height="27.521" viewBox="0 0 27.521 27.521">
|
||||
<path id="Path_5246" data-name="Path 5246" d="M365.087,11.9a.806.806,0,0,0,1.457,0l2.916-6.138a4.034,4.034,0,1,0-7.288,0Zm.728-8.678a.806.806,0,1,1-.806.806A.806.806,0,0,1,365.815,3.225Z" transform="translate(-342.332)" fill="#28323a"/>
|
||||
<ellipse id="Ellipse_225" data-name="Ellipse 225" cx="1.5" cy="1" rx="1.5" ry="1" transform="translate(14 21.522)" fill="#28323a"/>
|
||||
<path id="Path_5247" data-name="Path 5247" d="M175.628,205.644a2.016,2.016,0,0,1,0-4.031h8.315L183.177,200h-7.549a3.628,3.628,0,0,0,0,7.257h4.537a3.235,3.235,0,0,1,0-1.613Z" transform="translate(-162.754 -189.249)" fill="#28323a"/>
|
||||
<circle id="Ellipse_226" data-name="Ellipse 226" cx="1.5" cy="1.5" r="1.5" transform="translate(19 15.522)" fill="#28323a"/>
|
||||
<path id="Path_5248" data-name="Path 5248" d="M350.39,305h-.183a3.236,3.236,0,0,1,0,1.613h.183a2.069,2.069,0,0,1,0,4.139H345.1a3.236,3.236,0,0,1,0,1.613h5.289a3.682,3.682,0,0,0,0-7.364Z" transform="translate(-326.551 -288.605)" fill="#28323a"/>
|
||||
<path id="Path_5249" data-name="Path 5249" d="M167.02,412l.706,1.613h2.621a3.235,3.235,0,0,1,0-1.613Z" transform="translate(-158.042 -389.854)" fill="#28323a"/>
|
||||
<path id="Path_5250" data-name="Path 5250" d="M5.311,322.415a.806.806,0,0,0-1.477,0l-3.763,8.6a.806.806,0,0,0,1.139,1.023l3.363-1.922,3.363,1.922a.806.806,0,0,0,1.139-1.023Z" transform="translate(0 -304.627)" fill="#28323a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,3 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M27.2568 32L25.1631 30.6091C27.9468 26.2666 29.4463 21.2154 29.4998 15.9999C29.4463 10.7844 27.9468 5.73315 25.1631 1.39067L27.2568 0C30.304 4.75302 31.9441 10.2814 31.9998 15.9875L32 16.0001L31.9998 16.0128C31.9441 21.7186 30.304 27.247 27.2568 32ZM25.0625 16.0165L25.0627 15.9999L25.0625 15.983C25.0051 11.5525 23.6995 7.27342 21.2869 3.60788L19.2097 5.02439C21.3494 8.27467 22.5085 12.0694 22.5625 15.9999C22.5085 19.9301 21.3494 23.7248 19.2097 26.9751L21.2869 28.3916C23.6995 24.7263 25.0051 20.447 25.0625 16.0165ZM16.7007 22.9666C17.719 20.7477 18.2334 18.3302 18.188 15.9748C18.1284 12.8761 17.1565 9.86638 15.3779 7.27168L13.3276 8.72795C14.822 10.9081 15.6384 13.4313 15.6885 16.0247C15.7163 17.4783 15.4875 18.9644 15.0205 20.3943L1.56543 9.86414L0.925293 11.3547C0.887451 11.4427 0 13.5424 0 16.4452C0 19.4569 1.69165 22.1483 1.76367 22.2614L3.86157 20.8772C3.8479 20.8558 2.5 18.6766 2.5 16.4452C2.5 15.5068 2.61401 14.6693 2.75073 14.0018L16.0413 24.4033L16.7007 22.9666Z" fill="#2E303A"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1124.14 1256.39">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #231f20;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-1" d="M699.62,1113.02h0c-20.06,44.48-33.32,92.75-38.4,143.37l424.51-90.24c20.06-44.47,33.31-92.75,38.4-143.37l-424.51,90.24Z"/>
|
||||
<path class="cls-1" d="M1085.73,895.8c20.06-44.47,33.32-92.75,38.4-143.37l-330.68,70.33v-135.2l292.27-62.11c20.06-44.47,33.32-92.75,38.4-143.37l-330.68,70.27V66.13c-50.67,28.45-95.67,66.32-132.25,110.99v403.35l-132.25,28.11V0c-50.67,28.44-95.67,66.32-132.25,110.99v525.69l-295.91,62.88c-20.06,44.47-33.33,92.75-38.42,143.37l334.33-71.05v170.26l-358.3,76.14c-20.06,44.47-33.32,92.75-38.4,143.37l375.04-79.7c30.53-6.35,56.77-24.4,73.83-49.24l68.78-101.97v-.02c7.14-10.55,11.3-23.27,11.3-36.97v-149.98l132.25-28.11v270.4l424.53-90.28Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 923 B |
@ -0,0 +1,5 @@
|
||||
<svg id="Download" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
class="color000000 svgShape"
|
||||
d="M1344 1344q0-26-19-45t-45-19-45 19-19 45 19 45 45 19 45-19 19-45zm256 0q0-26-19-45t-45-19-45 19-19 45 19 45 45 19 45-19 19-45zm128-224v320q0 40-28 68t-68 28H160q-40 0-68-28t-28-68v-320q0-40 28-68t68-28h465l135 136q58 56 136 56t136-56l136-136h464q40 0 68 28t28 68zm-325-569q17 41-14 70l-448 448q-18 19-45 19t-45-19L403 621q-31-29-14-70 17-39 59-39h256V64q0-26 19-45t45-19h256q26 0 45 19t19 45v448h256q42 0 59 39z" fill="#ffffff"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 585 B |
@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Capa_1" version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Generator: Adobe Illustrator 29.2.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 116) -->
|
||||
<defs>
|
||||
<style>
|
||||
.st0 {
|
||||
fill: #d12127;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="st0"
|
||||
d="M8.5,119.5c2.3,0,4.4-.9,6-2.5s2.5-3.8,2.5-6V25.6c0-4.7,3.8-8.5,8.5-8.5h85.3c4.7,0,8.5-3.8,8.5-8.5s-3.8-8.5-8.5-8.5H25.6C11.5,0,0,11.5,0,25.6v85.3c0,2.3.9,4.4,2.5,6,1.6,1.6,3.8,2.5,6,2.5Z" />
|
||||
<path class="st0"
|
||||
d="M486.4,0h-85.3c-4.7,0-8.5,3.8-8.5,8.5s3.8,8.5,8.5,8.5h85.3c4.7,0,8.5,3.8,8.5,8.5v85.3c0,4.7,3.8,8.5,8.5,8.5s8.5-3.8,8.5-8.5V25.6c0-14.1-11.5-25.6-25.6-25.6Z" />
|
||||
<path class="st0"
|
||||
d="M503.5,392.5c-2.3,0-4.4.9-6,2.5-1.6,1.6-2.5,3.8-2.5,6v85.3c0,4.7-3.8,8.5-8.5,8.5h-85.3c-4.7,0-8.5,3.8-8.5,8.5s3.8,8.5,8.5,8.5h85.3c14.1,0,25.6-11.5,25.6-25.6v-85.3c0-2.3-.9-4.4-2.5-6-1.6-1.6-3.8-2.5-6-2.5Z" />
|
||||
<path class="st0"
|
||||
d="M110.9,494.9H25.6c-4.7,0-8.5-3.8-8.5-8.5v-85.3c0-4.7-3.8-8.5-8.5-8.5s-8.5,3.8-8.5,8.5v85.3c0,14.1,11.5,25.6,25.6,25.6h85.3c4.7,0,8.5-3.8,8.5-8.5s-3.8-8.5-8.5-8.5Z" />
|
||||
<path
|
||||
d="M503.5,162.1h-86.4c-.5-16.5-4-32.7-10.1-48-17.5-35.6-69.2-88.5-139.6-88.5h-22.7c-70.5,0-122.1,52.9-139.6,88.5-6.1,15.3-9.6,31.6-10.1,48H8.5c-4.7,0-8.5,3.8-8.5,8.5s3.8,8.5,8.5,8.5h85.5c-.2,6.3-.2,12.4-.2,18.4-1.6-.5-3.1-.9-4.8-1.1-8.2-1-16.4,1.8-22.1,7.7-6.7,8.6-9.1,19.8-6.5,30.4,2.2,11.5,5.4,22.7,9.6,33.6l1.4,4.2c1,2.9,1.9,6,2.7,9.1,1.9,8.6,5.2,16.7,9.9,24.1,3.7,5.7,9.8,9.4,16.6,10.1.4,0,.8,0,1.3,0s.8,0,1.2-.1c.6,7.8.9,14.8.9,19.9,0,29.2,27.5,64.9,43.7,81.4,9.4,9.1,19.2,17.7,29.5,25.7,9.8,7.7,19.2,15.8,28.2,24.5,10.1,11.2,24.1,18,39.1,19.3h22.7c15-1.2,29-8.1,39.1-19.3,9-8.6,18.4-16.8,28.2-24.5,10.3-8.1,20.2-16.6,29.6-25.8,16.2-16.5,43.7-52.2,43.7-81.3s.4-12.1.9-19.9c.4,0,.8.1,1.2.1s.9,0,1.3,0c6.8-.7,12.8-4.4,16.6-10.1,4.7-7.4,8-15.5,9.9-24.1.9-3.1,1.7-6.2,2.7-9.1l1.5-4.2c4.1-10.9,7.4-22.1,9.6-33.6,2.6-10.6.3-21.8-6.5-30.4-5.7-5.9-13.9-8.7-22.1-7.7-1.6.2-3.2.6-4.7,1.1,0-5.9,0-12.1-.2-18.4h85.5c4.7,0,8.5-3.8,8.5-8.5s-3.8-8.5-8.5-8.5ZM98.1,295.6c-3.4-5.8-5.9-12.1-7.3-18.7-1-3.5-1.9-6.9-3.1-10.1l-1.5-4.2c-3.8-10-6.8-20.3-8.9-30.9-1.5-5.2-.9-10.7,1.7-15.4,2.1-2.2,5.1-3.2,8.1-2.9,2.7.4,5.2,1.6,7.1,3.4.6,15.3,1.5,26.3,1.7,27.7,0,.4,3.4,28.1,5.8,54.1-1.6-.5-2.9-1.6-3.7-3ZM111.6,210.9c-.1-.2-.3-.3-.4-.5-.3-9.8-.3-20.6,0-31.3h16.8v27.8l-16.4,4.1s0-.1,0-.1ZM136.5,375.3c-8.5-11.7-13.8-25.4-15.3-39.7,0-7.9-.8-19.7-1.9-32.3,0-.5,0-1-.1-1.5-1.8-20.5-4.3-42.5-5.6-52.9l22.8,27.4v99.1ZM117.8,227.1l19.2-4.8,60.4,7.5,5.8,34.7h-54.2l-31.2-37.4ZM145.1,206.1v-26.9h28.8l16.2,32.5-45-5.6ZM193,179.2h42.5l-28.3,28.5-14.2-28.5ZM153.6,291.9l48.2,42.1-18.3,24.4h-29.9v-66.5ZM165.3,409.9c-1.8-1.7-3.6-3.4-5.3-5-2-2.1-4.2-4.4-6.4-7v-22.5h29.9l16.2,21.6-34.4,12.9ZM217.8,455.1c-9.4-9.1-19.3-17.7-29.6-25.8-2.7-2.2-5.5-4.5-8.2-6.7l29.5-11,31.8,57.2c-9-2.1-17.2-6.9-23.5-13.7ZM247.5,444.9l-19.6-35.3h19.6v35.3ZM247.5,392.5h-29.9l-19.2-25.6,19.2-25.6h29.9v51.2ZM247.5,324.3h-30.9l-48.8-42.7h43.3l36.3,14.5v28.1h0ZM247.5,277.7l-26.5-10.6-7-42.1,33.5-33.7v86.4h0ZM112.1,162.1c.4-13.9,3.2-27.6,8.3-40.5,15-30.5,62.1-79,124.3-79h22.7c62.2,0,109.3,48.4,124.3,79,5,12.9,7.8,26.6,8.3,40.5H112.1ZM366.9,179.2v26.9l-45,5.6,16.2-32.5h28.8ZM264.5,324.3v-28.1l36.3-14.5h43.3l-48.8,42.7h-30.9ZM313.6,366.9l-19.2,25.6h-29.9v-51.2h29.9l19.2,25.6ZM264.5,277.7v-86.4l33.5,33.7-7,42.1-26.5,10.6ZM276.5,179.2h42.5l-14.2,28.5-28.3-28.5ZM264.5,444.9v-35.3h19.6l-19.6,35.3ZM323.8,429.4h0c-10.3,8.1-20.2,16.7-29.6,25.8-6.3,6.8-14.5,11.6-23.5,13.7l31.8-57.2,29.5,11c-2.7,2.2-5.5,4.5-8.2,6.7ZM358.4,398c-2.2,2.5-4.4,4.9-6.4,6.9-1.6,1.7-3.4,3.4-5.3,5l-34.4-12.9,16.2-21.6h29.9v22.5ZM358.4,358.4h-29.9l-18.3-24.4,48.2-42.1v66.5h0ZM362.9,264.5h-54.2l5.8-34.7,60.4-7.5,19.2,4.8-31.2,37.4ZM392.8,301.7c0,.5-.1,1-.1,1.5-1.1,12.6-1.9,24.4-1.9,32.3-1.5,14.4-6.8,28.1-15.3,39.7v-99.1l22.8-27.4c-1.3,10.6-3.8,32.5-5.6,52.9ZM400.8,210.5c-.1.2-.3.3-.4.5,0,0,0,.1,0,.1l-16.4-4.1v-27.8h16.8c.3,10.7.3,21.4,0,31.3ZM424.8,213.4h0c3-.4,6,.7,8.1,2.8,2.6,4.7,3.2,10.3,1.7,15.5-2.1,10.5-5,20.8-8.9,30.8l-1.5,4.2c-1.1,3.3-2.1,6.7-3,10.1-1.4,6.6-3.8,12.9-7.3,18.7-.8,1.4-2.2,2.5-3.8,3,2.4-26.1,5.8-53.8,5.9-54.4.1-1.3,1.1-12.2,1.6-27.4,2-1.8,4.4-3,7.1-3.4Z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,3 @@
|
||||
<svg width="22" height="29" viewBox="0 0 22 29" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M15.5498 11.4402C17.4647 9.69433 20.0542 7.33316 20.2903 1.69231H22V0H0V1.69231H1.70974C1.94576 7.33316 4.53533 9.69433 6.45023 11.4402C7.73475 12.6113 8.46154 13.3281 8.46154 14.441C8.46154 15.5539 7.73475 16.2707 6.45023 17.4419C4.53533 19.1877 1.94576 21.5489 1.70974 27.1897H0V28.8821H22V27.1897H20.2903C20.0542 21.5489 17.4647 19.1877 15.5498 17.4419C14.2653 16.2707 13.5385 15.5539 13.5385 14.441C13.5385 13.3281 14.2653 12.6113 15.5498 11.4402ZM10.1538 20.7837C9.8925 20.8376 9.63431 20.9161 9.38232 21.0203L4.19952 23.165C5.0459 21.0129 6.40911 19.7695 7.5904 18.6925C8.9087 17.4906 10.1538 16.3553 10.1538 14.441V20.7837ZM14.4096 18.6925C15.5909 19.7695 16.954 21.0129 17.8005 23.1649L12.6177 21.0203C12.3657 20.916 12.1075 20.8376 11.8462 20.7836V14.441C11.8462 16.3553 13.0913 17.4906 14.4096 18.6925ZM4.16979 5.64103C3.76065 4.57493 3.47809 3.2877 3.40413 1.69231H18.5958C18.5219 3.2877 18.2394 4.57493 17.8302 5.64103H4.16979Z" fill="#2E303A"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@ -1,23 +1,11 @@
|
||||
<svg height="31" viewBox="0 0 31 31" width="31" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="route" transform="translate(0 0)">
|
||||
<path d="M365.505,13.407a.908.908,0,0,0,1.641,0l3.284-6.914a4.544,4.544,0,1,0-8.209,0Zm.82-9.774a.908.908,0,1,1-.908.908A.908.908,0,0,1,366.326,3.633Z" data-name="Path 5246"
|
||||
fill="#da4a54"
|
||||
id="Path_5246" transform="translate(-339.874)" />
|
||||
<circle cx="1.5" cy="1.5" data-name="Ellipse 225" fill="#2e303a" id="Ellipse_225"
|
||||
r="1.5" transform="translate(16 24)" />
|
||||
<path d="M176.087,206.357a2.27,2.27,0,0,1,0-4.541h9.366L184.59,200h-8.5a4.087,4.087,0,0,0,0,8.174h5.11a3.644,3.644,0,0,1,0-1.816Z" data-name="Path 5247"
|
||||
fill="#2e303a"
|
||||
id="Path_5247" transform="translate(-161.586 -187.891)" />
|
||||
<circle cx="2" cy="2" data-name="Ellipse 226" fill="#2e303a" id="Ellipse_226"
|
||||
r="2" transform="translate(21 17)" />
|
||||
<path d="M351.059,305h-.206a3.644,3.644,0,0,1,0,1.816h.206a2.331,2.331,0,0,1,0,4.662H345.1a3.645,3.645,0,0,1,0,1.816h5.958a4.147,4.147,0,0,0,0-8.295Z" data-name="Path 5248"
|
||||
fill="#2e303a"
|
||||
id="Path_5248" transform="translate(-324.206 -286.533)" />
|
||||
<path d="M167.02,412l.795,1.816h2.952a3.644,3.644,0,0,1,0-1.816Z" data-name="Path 5249"
|
||||
fill="#2e303a"
|
||||
id="Path_5249" transform="translate(-156.907 -387.055)" />
|
||||
<path d="M5.982,322.476a.908.908,0,0,0-1.664,0L.08,332.164a.908.908,0,0,0,1.283,1.153l3.788-2.164,3.788,2.164a.908.908,0,0,0,1.283-1.153Z" data-name="Path 5250"
|
||||
fill="#2e303a"
|
||||
id="Path_5250" transform="translate(0 -302.44)" />
|
||||
</g>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="31" height="31" viewBox="0 0 31 31">
|
||||
<g id="route" transform="translate(0 0)">
|
||||
<path id="Path_5246" data-name="Path 5246" d="M365.505,13.407a.908.908,0,0,0,1.641,0l3.284-6.914a4.544,4.544,0,1,0-8.209,0Zm.82-9.774a.908.908,0,1,1-.908.908A.908.908,0,0,1,366.326,3.633Z" transform="translate(-339.874)" fill="#da4a54"/>
|
||||
<circle id="Ellipse_225" data-name="Ellipse 225" cx="1.5" cy="1.5" r="1.5" transform="translate(16 24)" fill="#2e303a"/>
|
||||
<path id="Path_5247" data-name="Path 5247" d="M176.087,206.357a2.27,2.27,0,0,1,0-4.541h9.366L184.59,200h-8.5a4.087,4.087,0,0,0,0,8.174h5.11a3.644,3.644,0,0,1,0-1.816Z" transform="translate(-161.586 -187.891)" fill="#2e303a"/>
|
||||
<circle id="Ellipse_226" data-name="Ellipse 226" cx="2" cy="2" r="2" transform="translate(21 17)" fill="#2e303a"/>
|
||||
<path id="Path_5248" data-name="Path 5248" d="M351.059,305h-.206a3.644,3.644,0,0,1,0,1.816h.206a2.331,2.331,0,0,1,0,4.662H345.1a3.645,3.645,0,0,1,0,1.816h5.958a4.147,4.147,0,0,0,0-8.295Z" transform="translate(-324.206 -286.533)" fill="#2e303a"/>
|
||||
<path id="Path_5249" data-name="Path 5249" d="M167.02,412l.795,1.816h2.952a3.644,3.644,0,0,1,0-1.816Z" transform="translate(-156.907 -387.055)" fill="#2e303a"/>
|
||||
<path id="Path_5250" data-name="Path 5250" d="M5.982,322.476a.908.908,0,0,0-1.664,0L.08,332.164a.908.908,0,0,0,1.283,1.153l3.788-2.164,3.788,2.164a.908.908,0,0,0,1.283-1.153Z" transform="translate(0 -302.44)" fill="#2e303a"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,3 @@
|
||||
<svg width="23" height="29" viewBox="0 0 23 29" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M19.2821 9.01172C18.9238 9.01172 18.5814 9.08629 18.2671 9.22183C17.9481 7.9542 16.8772 7.01953 15.6088 7.01953C14.9039 7.01953 14.2599 7.3082 13.7722 7.78227C13.2844 7.3082 12.6405 7.01953 11.9356 7.01953C11.6137 7.01953 11.3046 7.0797 11.0173 7.1902V3.96484C11.0173 2.31711 9.78138 0.976562 8.2623 0.976562C6.74323 0.976562 5.50736 2.31711 5.50736 3.96484V12.7547C5.06406 12.2739 4.70028 11.8793 4.70028 11.8793C3.68187 10.7746 2.03312 10.7115 0.9489 11.7334C-0.14065 12.7546 -0.316355 14.5345 0.548882 15.7856C0.558678 15.7998 0.568841 15.8136 0.57937 15.8272L4.66385 21.1185C5.1074 21.6931 5.74741 22.0491 6.31205 22.3632C6.72296 22.5918 7.34399 22.9373 7.34399 23.1565V26.0117C7.34399 27.6595 8.57986 29 10.0989 29H17.4455C18.9645 29 20.2004 27.6595 20.2004 26.0117V23.9531C20.2004 23.5591 20.5492 23.0843 20.9185 22.5818C21.4428 21.8683 22.037 21.0596 22.037 19.9688V12C22.037 10.3523 20.8012 9.01172 19.2821 9.01172ZM19.4823 21.3401C18.958 22.0536 18.3638 22.8623 18.3638 23.9531V26.0117C18.3638 26.561 17.9518 27.0078 17.4455 27.0078H10.0989C9.59258 27.0078 9.18062 26.561 9.18062 26.0117V23.1564C9.18062 21.72 8.00707 21.0672 7.1501 20.5904C6.72064 20.3515 6.2766 20.1046 6.072 19.8395L2.006 14.572C1.73131 14.1561 1.79259 13.5755 2.15165 13.2389C2.51304 12.8982 3.06213 12.9197 3.4016 13.2879C3.4016 13.2879 5.62662 15.7015 5.77685 15.8641C6.35294 16.4878 7.34393 16.0456 7.34393 15.1591V3.96484C7.34393 3.4156 7.75588 2.96875 8.26224 2.96875C8.7686 2.96875 9.18056 3.4156 9.18056 3.96484V12C9.18056 12.5501 9.59172 12.9961 10.0989 12.9961C10.606 12.9961 11.0172 12.5501 11.0172 12V10.0078C11.0172 9.45857 11.4291 9.01172 11.9355 9.01172C12.4419 9.01172 12.8538 9.45857 12.8538 10.0078V12C12.8538 12.5501 13.265 12.9961 13.7721 12.9961C14.2793 12.9961 14.6905 12.5501 14.6905 12V10.0078C14.6905 9.45857 15.1024 9.01172 15.6088 9.01172C16.1151 9.01172 16.5271 9.45857 16.5271 10.0078V12C16.5271 12.5501 16.9382 12.9961 17.4454 12.9961C17.9526 12.9961 18.3637 12.5501 18.3637 12C18.3637 11.4508 18.7757 11.0039 19.282 11.0039C19.7884 11.0039 20.2003 11.4508 20.2003 12V19.9688H20.2004C20.2004 20.3628 19.8516 20.8375 19.4823 21.3401Z" fill="#2E303A"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="31" height="31" viewBox="0 0 31 31">
|
||||
<g id="Group_8325" data-name="Group 8325" transform="translate(-75 -236)">
|
||||
<circle id="Ellipse_223" data-name="Ellipse 223" cx="15.5" cy="15.5" r="15.5" transform="translate(75 236)" fill="#359846"/>
|
||||
<path id="hour-glass" d="M8.73,10.811a1.46,1.46,0,0,0,0-2.122L8.647,8.61C7.085,7.119,5.878,5.968,5.515,3.556A1.413,1.413,0,0,1,6.992,2h7.091A1.413,1.413,0,0,1,15.56,3.556C15.2,5.968,13.99,7.119,12.429,8.61l-.083.079a1.46,1.46,0,0,0,0,2.122l.083.079c1.562,1.491,2.768,2.642,3.132,5.054A1.413,1.413,0,0,1,14.083,17.5H6.992a1.413,1.413,0,0,1-1.477-1.556c.364-2.412,1.57-3.563,3.132-5.054Zm.529,1.316-.006,0c-1.19,1.064-2.076,1.856-2.191,3.816a.363.363,0,0,0,.13.3.382.382,0,0,0,.247.09h6.194a.382.382,0,0,0,.282-.122.361.361,0,0,0,.1-.268c-.115-1.959-1-2.752-2.191-3.816-.315-.281-.651-.582-1-.928a.4.4,0,0,0-.569,0c-.347.344-.681.643-.993.923Z" transform="translate(80.35 241.75)" fill="#fff" fill-rule="evenodd"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1021 B |
@ -0,0 +1,8 @@
|
||||
<svg data-name="Group 8404" height="26" id="Group_8404" viewBox="0 0 26 26"
|
||||
width="26" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect data-name="Rectangle 17531" fill="#69a6e2" height="26" id="Rectangle_17531" rx="4"
|
||||
width="26" />
|
||||
<path d="M2.914,17.807s.731-.005,1.246-.005l3.9.019c.466,0,.854-.488.876-1.193l0-3.213c0-.685.311-1.221.793-1.252l1.2-.009c.483.029.814.572.814,1.253l0,3.231c.021.7.346,1.165.814,1.165l5.254.014.01-3.971c0-.683-.333-1.214-.82-1.245l-2.11-.01c-.467,0-.834-.486-.854-1.191l-.008-1.074c.023-.7.392-1.189.86-1.189l2.122.006c.482-.031.8-.592.8-1.274l.005-4.957a2.126,2.126,0,0,1-.693.69,2.164,2.164,0,0,1-.933.312l-3.569,0c-.465,0-.854.5-.876,1.2V8.295c-.022.7-.387,1.2-.854,1.2l-1.08-.008c-.468,0-.842-.482-.864-1.183l0-3.218c-.021-.705-.392-1.178-.859-1.178l-5.179,0V7.87c0,.684.324,1.231.808,1.263l2.122-.009c.48.031.82.595.82,1.275l-.007.916c0,.683-.328,1.23-.81,1.261l-2.126-.005c-.484.034-.808.572-.808,1.256Z" data-name="Path 5276"
|
||||
fill="#fff"
|
||||
id="Path_5276" transform="translate(2.327 2.327)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,8 @@
|
||||
<svg data-name="Group 8404" height="26" id="Group_8404" viewBox="0 0 26 26"
|
||||
width="26" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect data-name="Rectangle 17531" fill="#cc2229" height="26" id="Rectangle_17531" rx="4"
|
||||
width="26" />
|
||||
<path d="M2.914,17.807s.731-.005,1.246-.005l3.9.019c.466,0,.854-.488.876-1.193l0-3.213c0-.685.311-1.221.793-1.252l1.2-.009c.483.029.814.572.814,1.253l0,3.231c.021.7.346,1.165.814,1.165l5.254.014.01-3.971c0-.683-.333-1.214-.82-1.245l-2.11-.01c-.467,0-.834-.486-.854-1.191l-.008-1.074c.023-.7.392-1.189.86-1.189l2.122.006c.482-.031.8-.592.8-1.274l.005-4.957a2.126,2.126,0,0,1-.693.69,2.164,2.164,0,0,1-.933.312l-3.569,0c-.465,0-.854.5-.876,1.2V8.295c-.022.7-.387,1.2-.854,1.2l-1.08-.008c-.468,0-.842-.482-.864-1.183l0-3.218c-.021-.705-.392-1.178-.859-1.178l-5.179,0V7.87c0,.684.324,1.231.808,1.263l2.122-.009c.48.031.82.595.82,1.275l-.007.916c0,.683-.328,1.23-.81,1.261l-2.126-.005c-.484.034-.808.572-.808,1.256Z" data-name="Path 5276"
|
||||
fill="#fff"
|
||||
id="Path_5276" transform="translate(2.327 2.327)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
@ -1 +0,0 @@
|
||||
<svg id="Icon" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg"><circle cx="30" cy="30" fill="#e3ebf0" r="29"/><path d="m19.41 19.41c-2.32 2.3-3.89 5.37-4.3 8.79-.13 1.02-.96 1.8-1.99 1.8h-6.03c-1.16 0-2.1-.99-2-2.15.52-6.03 3.19-11.47 7.24-15.52l1.67-.33 5 4z" fill="#54afa4"/><path d="m30 5 1 2v6l-1 2c-4.13 0-7.88 1.68-10.59 4.41l-7.08-7.08c4.53-4.53 10.78-7.33 17.67-7.33z" fill="#68cec5"/><path d="m47.67 12.33.322 1.671-4.992 4.999-2.4.41h-.01c-2.71-2.73-6.45-4.41-10.59-4.41v-10c6.89 0 13.14 2.8 17.67 7.33z" fill="#f9d84b"/><path d="m54.91 27.85c.1 1.16-.84 2.15-2 2.15h-6.03c-1.03 0-1.86-.78-1.99-1.8-.41-3.41-1.97-6.48-4.29-8.79l7.07-7.08c4.05 4.05 6.72 9.49 7.24 15.52z" fill="#f9536b"/><path d="m44.851 16.308c-2.578 3.935-7.307 10.699-12.38 15.772-1.42 1.42-3.831 1.242-4.99-.543-.846-1.284-.585-2.985.501-4.071 5.073-5.052 11.795-9.75 15.71-12.317.762-.511 1.66.397 1.159 1.159z" fill="#4d5c7a"/><g fill="#262626"><path d="m52.907 31c.842 0 1.652-.356 2.223-.979.563-.613.846-1.437.774-2.26-.52-6.072-3.192-11.804-7.527-16.139-4.916-4.916-11.442-7.623-18.377-7.623-13.385 0-24.764 10.437-25.904 23.76-.071.824.212 1.648.774 2.262.571.622 1.381.979 2.223.979h6.031c1.514 0 2.793-1.152 2.977-2.68.843-7.023 6.818-12.32 13.899-12.32 2.708 0 5.28.763 7.52 2.206-3.316 2.42-7.096 5.418-10.244 8.554-1.446 1.445-1.711 3.686-.633 5.321.705 1.088 1.837 1.788 3.105 1.922.149.016.299.023.447.023 1.115 0 2.183-.439 2.982-1.239 3.162-3.161 6.182-6.966 8.615-10.302 1.131 1.762 1.858 3.753 2.107 5.835.182 1.527 1.461 2.68 2.976 2.68h6.031zm-23.907-24.951v7.998c-3.642.227-6.984 1.666-9.583 3.957l-5.631-5.631c4.07-3.741 9.413-6.078 15.213-6.324zm-14.886 22.034c-.063.532-.48.918-.99.918h-6.031c-.283 0-.557-.12-.749-.33-.188-.205-.279-.468-.256-.739.466-5.437 2.784-10.349 6.287-14.142l5.637 5.637c-2.083 2.357-3.498 5.333-3.898 8.656zm16.886-14.041v-8.018c5.694.233 11.038 2.45 15.239 6.323l-1.715 1.715c-.465-.098-.958-.032-1.38.251-1.065.698-2.409 1.603-3.9 2.656-2.437-1.744-5.254-2.746-8.243-2.928zm.764 17.332c-.479.478-1.13.709-1.807.641-.675-.071-1.256-.434-1.641-1.026-.562-.854-.405-2.036.372-2.812 4.791-4.772 11.129-9.254 14.887-11.751-2.5 3.767-7.006 10.143-11.812 14.948zm14.123-3.29c-.317-2.644-1.303-5.16-2.852-7.329 1.05-1.489 1.953-2.831 2.651-3.896.279-.425.344-.916.249-1.379l1.704-1.704c3.593 3.905 5.822 8.885 6.273 14.157.023.271-.067.532-.256.737-.192.21-.466.33-.749.33h-6.031c-.51 0-.927-.385-.989-.917z"/><path d="m30 0c-6.367 0-12.448 1.969-17.587 5.693-.447.324-.547.949-.223 1.396s.948.548 1.396.223c4.795-3.476 10.471-5.312 16.413-5.312 15.439 0 28 12.561 28 28s-12.561 28-28 28-27.999-12.561-27.999-28c0-7.737 3.086-14.938 8.689-20.276.4-.381.416-1.014.034-1.413-.381-.402-1.015-.415-1.413-.034-6.003 5.718-9.31 13.433-9.31 21.723 0 16.542 13.458 30 30 30s30-13.458 30-30-13.458-30-30-30z"/><path d="m33 50c.553 0 1-.447 1-1v-10c0-.464-.319-.866-.771-.974-.45-.106-.917.111-1.124.526l-2.105 4.211-2.105-4.211c-.207-.415-.677-.632-1.124-.526-.451.107-.771.51-.771.974v10c0 .553.447 1 1 1s1-.447 1-1v-5.764l1.105 2.211c.34.678 1.449.678 1.789 0l1.105-2.211v5.764c0 .553.447 1 1 1z"/><path d="m44 40c.553 0 1-.447 1-1s-.447-1-1-1h-6c-.553 0-1 .447-1 1s.447 1 1 1h2v8h-2c-.553 0-1 .447-1 1s.447 1 1 1h6c.553 0 1-.447 1-1s-.447-1-1-1h-2v-8z"/><path d="m23 41.5c0-1.93-1.57-3.5-3.5-3.5h-3.5c-.553 0-1 .447-1 1v10c0 .553.447 1 1 1h3.5c1.93 0 3.5-1.57 3.5-3.5 0-.98-.407-1.864-1.058-2.5.651-.636 1.058-1.52 1.058-2.5zm-2 5c0 .827-.673 1.5-1.5 1.5h-2.5v-3h2.5c.827 0 1.5.673 1.5 1.5zm-4-3.5v-3h2.5c.827 0 1.5.673 1.5 1.5s-.673 1.5-1.5 1.5z"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 9.9 KiB |
@ -1 +0,0 @@
|
||||
<svg id="Layer_3" enable-background="new 0 0 64 64" height="512" viewBox="0 0 64 64" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m62 22.04c0 2.92-.42 5.82-1.24 8.59-.82 2.78-2.04 5.43-3.63 7.89-4.02 6.22-9.57 11.29-16.12 14.74l-9.01 4.74-9.01-4.74c-6.55-3.45-12.1-8.52-16.12-14.74-.73-1.14-1.39-2.31-1.96-3.52h11.16l.93-1 6 13 5-18 4 6h9.55c.7 1.19 1.97 2 3.45 2 2.21 0 4-1.79 4-4s-1.79-4-4-4c-1.48 0-2.75.81-3.45 2h-7.55l-7-12-5 17-5-10-3.07 5h-10.57c-.05-.12-.08-.25-.12-.37-.82-2.77-1.24-5.67-1.24-8.59 0-2.66.62-5.28 1.81-7.65 1.29-2.57 3.24-4.67 5.59-6.12 2.36-1.46 5.1-2.27 7.98-2.27 3.18 0 6.2 1 8.7 2.74 2.49 1.75 4.46 4.25 5.55 7.25l.37 1.01.37-1.01c1.09-3 3.06-5.5 5.55-7.25 2.5-1.74 5.52-2.74 8.7-2.74 2.88 0 5.62.81 7.98 2.27 2.35 1.45 4.3 3.55 5.59 6.12 1.19 2.37 1.81 4.99 1.81 7.65z" fill="#ea3647"/><path d="m54.6 8.27c-2.36-1.46-5.1-2.27-7.98-2.27-3.18 0-6.2 1-8.7 2.74-2.49 1.75-4.46 4.25-5.55 7.25l-.37 1.01-.37-1.01c-1.09-3-3.06-5.5-5.55-7.25-2.5-1.74-5.52-2.74-8.7-2.74-.041 0-.081.004-.122.004-1.452 3.72-2.258 7.762-2.258 11.996 0 3.177.452 6.249 1.29 9.156l.71-1.156 5 10 5-17 7 12h7.55c.7-1.19 1.97-2 3.45-2 2.21 0 4 1.79 4 4s-1.79 4-4 4c-1.48 0-2.75-.81-3.45-2h-9.55l-4-6-3.404 12.255c5.315 5.347 12.449 8.885 20.397 9.603 4.822-3.246 8.962-7.425 12.137-12.338 1.59-2.46 2.81-5.11 3.63-7.89.82-2.77 1.24-5.67 1.24-8.59 0-2.66-.62-5.28-1.81-7.65-1.29-2.57-3.24-4.67-5.59-6.12z" fill="#fd505b"/><path d="m44.941 11.534c.574-2.063 6.032-2.742 10.097 1.296s3.39 9.503 1.284 10.087-4.416-2.006-6.887-4.505c-2.47-2.5-5.068-4.815-4.494-6.878z" fill="#ff9aa5"/><path d="m55.126 7.419c-2.558-1.582-5.499-2.419-8.506-2.419-3.321 0-6.527 1.01-9.275 2.922-2.323 1.633-4.15 3.811-5.345 6.354-1.195-2.545-3.022-4.723-5.349-6.356-2.744-1.91-5.95-2.92-9.271-2.92-3.007 0-5.948.837-8.505 2.419-2.544 1.569-4.604 3.825-5.959 6.522-1.254 2.497-1.916 5.298-1.916 8.099 0 3.018.431 6.003 1.292 8.906l.029.097c.034.116.07.234.118.347.157.37.52.61.921.61h10.57c.348 0 .67-.181.853-.477l2.128-3.467 4.195 8.391c.185.368.565.592.983.549.409-.036.755-.319.87-.714l4.346-14.774 5.831 9.996c.179.308.509.496.864.496h7.55c.354 0 .683-.188.862-.493.555-.944 1.523-1.507 2.588-1.507 1.654 0 3 1.346 3 3s-1.346 3-3 3c-1.065 0-2.033-.563-2.588-1.507-.18-.305-.508-.493-.862-.493h-9.015l-3.703-5.555c-.217-.325-.601-.499-.99-.433-.386.062-.7.343-.806.72l-4.271 15.374-4.857-10.525c-.14-.303-.421-.516-.751-.568-.321-.054-.663.062-.89.307l-.632.68h-10.725c-.343 0-.661.175-.845.465-.184.289-.206.651-.06.962.563 1.196 1.244 2.419 2.024 3.636 4.098 6.341 9.801 11.557 16.494 15.082l9.01 4.74c.147.077.307.115.467.115s.32-.038.466-.115l9.01-4.74c6.693-3.525 12.396-8.741 16.494-15.082 1.644-2.543 2.905-5.285 3.749-8.148.85-2.872 1.281-5.857 1.281-8.875 0-2.801-.662-5.602-1.916-8.099-1.355-2.697-3.415-4.953-5.958-6.522zm4.675 22.929c-.79 2.68-1.972 5.247-3.511 7.629-3.911 6.054-9.356 11.032-15.746 14.398l-8.544 4.495-8.544-4.495c-6.39-3.366-11.835-8.345-15.744-14.396-.423-.66-.816-1.322-1.173-1.979h9.531c.236 0 .464-.084.644-.234l5.378 11.653c.176.38.556.608.989.578.418-.034.771-.325.883-.729l4.415-15.896 2.789 4.184c.186.277.498.444.832.444h9.017c.947 1.263 2.397 2 3.983 2 2.757 0 5-2.243 5-5s-2.243-5-5-5c-1.586 0-3.036.737-3.983 2h-6.442l-6.71-11.504c-.201-.345-.582-.54-.985-.489-.396.049-.726.328-.838.711l-4.283 14.562-3.863-7.727c-.162-.325-.488-.536-.851-.552-.364-.031-.706.166-.896.476l-2.779 4.523h-9.271c-.73-2.58-1.099-5.256-1.099-7.96 0-2.491.589-4.981 1.703-7.202 1.188-2.365 2.994-4.343 5.224-5.718 2.241-1.387 4.818-2.12 7.453-2.12 2.911 0 5.722.886 8.125 2.559 2.394 1.682 4.187 4.023 5.187 6.775l.37 1.01c.143.394.518.656.938.656s.795-.262.938-.656l.371-1.012c.999-2.75 2.792-5.092 5.182-6.771 2.407-1.675 5.218-2.561 8.129-2.561 2.635 0 5.212.733 7.454 2.12 2.229 1.375 4.035 3.353 5.223 5.718 1.114 2.221 1.703 4.711 1.703 7.202 0 2.825-.403 5.619-1.199 8.308z"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.8 KiB |
@ -0,0 +1,10 @@
|
||||
<svg height="11" viewBox="0 0 8.442 11" width="8.442" xmlns="http://www.w3.org/2000/svg">
|
||||
<g data-name="Group 8411" id="Group_8411" transform="translate(-3.75 -1.25)">
|
||||
<path d="M3.75,5.515A4.281,4.281,0,0,1,7.971,1.25a4.281,4.281,0,0,1,4.221,4.265c0,2.386-1.969,4-3.623,5.036l-.006,0-.006,0a1.175,1.175,0,0,1-1.173,0l-.007,0-.007,0C5.724,9.51,3.75,7.91,3.75,5.515Zm2.43-.044A1.791,1.791,0,1,1,7.971,7.262,1.791,1.791,0,0,1,6.18,5.471Z" data-name="Path 5277"
|
||||
fill="#2d343d"
|
||||
fill-rule="evenodd" id="Path_5277" />
|
||||
<path d="M6.021,19.214A.512.512,0,0,0,5,19.262a1.032,1.032,0,0,0,.436.8,2.707,2.707,0,0,0,.813.409,7.651,7.651,0,0,0,2.332.326,7.651,7.651,0,0,0,2.332-.326,2.708,2.708,0,0,0,.813-.409,1.032,1.032,0,0,0,.436-.8.512.512,0,0,0-1.021-.047.408.408,0,0,1-.048.044,1.727,1.727,0,0,1-.5.242,6.648,6.648,0,0,1-2.009.273A6.648,6.648,0,0,1,6.573,19.5a1.727,1.727,0,0,1-.5-.242A.407.407,0,0,1,6.021,19.214Z" data-name="Path 5278"
|
||||
fill="#2d343d"
|
||||
id="Path_5278" transform="translate(-0.61 -8.547)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
@ -1,68 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512" height="512">
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#D77F4A;" d="M448.268,193.522c0-6.286-2.632-11.957-6.855-15.972c-2.615-2.486-3.009-6.596-0.766-9.422 			c2.985-3.76,4.768-8.516,4.768-13.69c0-7.532-3.779-14.18-9.545-18.154c-2.55-1.758-3.507-5.012-2.611-7.976 			c0.61-2.017,0.939-4.156,0.939-6.372c0-12.171-9.867-22.038-22.038-22.038c-0.271,0-0.071-6.017-0.74-9.253 			c-1.918-9.281-9.745-16.43-19.169-17.43c-1.211-0.128-2.405-0.159-3.575-0.098c-4.869,0.254-8.772-3.822-8.748-8.698 			c0-0.048,0-0.096,0-0.144c0-15.711-12.736-28.447-28.447-28.447c-0.174,0-5.572-18.923-21.496-16.566 			c-2.241,0.332-4.449,0.35-6.501,0.998c-4.71,1.488-9.938,0.436-13.691-2.776c-3.767-3.224-8.658-5.172-14.005-5.172 			c-4.18,0-8.08,1.19-11.383,3.249c-3.962,2.47-8.786,3.357-13.275,2.075c-1.881-0.537-3.868-0.825-5.922-0.825 			c-2.476,0-4.854,0.418-7.068,1.187c-4.807,1.67-10.112,0.693-14.313-2.179c-3.457-2.363-7.638-3.745-12.142-3.745 			c-4.802,0-9.235,1.571-12.817,4.225c-4.543,3.367-10.438,4.225-15.632,1.989c-2.968-1.278-6.239-1.986-9.676-1.986 			c-8.8,0-16.516,4.636-20.841,11.599c-2.887,4.648-7.74,7.748-13.208,7.944c-0.279,0.01-0.558,0.024-0.839,0.042 			c-14.402,0.942-26.008,12.822-26.575,27.244c-0.019,0.481-0.026,0.959-0.021,1.434c0.049,4.851-4.092,8.753-8.939,8.542 			c-1.105-0.048-2.231-0.015-3.372,0.105c-9.425,0.994-17.256,8.14-19.18,17.42c-0.672,3.24-0.472,9.263-0.743,9.263 			c-12.171,0-22.038,9.867-22.038,22.038c0,2.216,0.328,4.355,0.938,6.372c0.897,2.965-0.061,6.219-2.611,7.976 			c-5.765,3.974-9.545,10.622-9.545,18.154c0,5.174,1.783,9.93,4.768,13.69c2.243,2.826,1.849,6.936-0.766,9.422 			c-4.222,4.014-6.855,9.685-6.855,15.972c0,8.699,5.041,16.216,12.36,19.798c3.401,1.664,4.745,5.766,3.32,9.274 			c-1.279,3.149-1.851,6.66-1.517,10.338c0.922,10.154,8.945,18.467,19.054,19.791c2.827,0.37,5.555,0.183,8.114-0.439 			c-0.017,0.35-0.027,0.702-0.027,1.057c0,12.171,9.867,22.038,22.038,22.038c5.29,0,10.144-1.866,13.943-4.973 			c3.148,8.325,11.189,14.246,20.616,14.246c12.171,0,176.557,0,188.729,0c9.427,0,17.468-5.921,20.616-14.246 			c3.798,3.107,8.652,4.973,13.942,4.973c12.171,0,22.038-9.867,22.038-22.038c0-0.354-0.01-0.706-0.027-1.057 			c2.57,0.625,5.311,0.811,8.15,0.434c10.11-1.341,18.119-9.671,19.022-19.829c0.325-3.661-0.246-7.155-1.519-10.29 			c-1.425-3.51-0.084-7.614,3.318-9.279C443.227,209.738,448.268,202.22,448.268,193.522z"/>
|
||||
<path style="fill:#FFD15B;" d="M411.446,372.3c-64.616,2.692-95.255-14.6-95.255-14.6l-60.121-11.895l0.003-0.428l-1.084,0.214 			l-1.084-0.214l0.003,0.428l-60.121,11.895c0,0-30.64,17.293-95.255,14.6L68.204,499.925h186.784H442.13L411.446,372.3z"/>
|
||||
<path style="fill:#FFCEBF;" d="M291.728,291.481L291.728,291.481l-73.48,0v0c0,24.283-8.675,47.767-24.462,66.218l1.927,2.216 			c4.985,5.734,11.021,10.48,17.819,13.873c25.887,12.92,56.359,13.044,82.306,0.439c7.961-3.867,14.902-9.554,20.352-16.528v0 			C300.403,339.248,291.728,315.764,291.728,291.481z"/>
|
||||
<path style="fill:#D77F4A;" d="M137.497,142.363c3.02,23.928,10.565,42.042,10.565,42.042l215.877,0 			c0,0,9.996-14.52,19.282-37.554"/>
|
||||
<ellipse style="fill:#FFCEBF;" cx="256" cy="197.248" rx="108.427" ry="135.37"/>
|
||||
<path style="fill:#FFBBAA;" d="M313.264,82.287c19.269,24.435,31.163,57.962,31.163,94.961c0,74.763-48.545,135.37-108.427,135.37 			c-21.024,0-40.646-7.478-57.264-20.409c19.667,24.94,47.017,40.409,77.264,40.409c59.883,0,108.427-60.607,108.427-135.37 			C364.427,148.733,343.981,106.187,313.264,82.287z"/>
|
||||
<path style="fill:#D77F4A;" d="M256,56.149c-56.413,0-107.939,58.157-107.939,128.256l0,0c0,0,31.222-60.851,53.686-44.804 			c21.226,15.161,38.065,15.919,54.252,15.919c16.187,0,33.026-0.758,54.252-15.919c22.465-16.046,53.686,44.804,53.686,44.804l0,0 			C364.427,114.305,312.413,56.149,256,56.149z"/>
|
||||
<path style="fill:#FFE177;" d="M169.835,248.2l-27.1-10.507l-27.1-10.507c0,0-81.573,129.986-99.523,176.281 			s-7.257,79.017,26.618,92.151c33.874,13.134,63.831-3.827,81.781-50.122S169.835,248.2,169.835,248.2z"/>
|
||||
<path style="fill:#FFCEBF;" d="M124.683,230.694l-1.69-33.678c-0.815-16.248,5.815-31.983,18.013-42.748l46.186-40.76 			c2.712-2.394,6.358-3.438,9.926-2.843l0,0c5.794,0.966,10.04,5.979,10.04,11.852v4.179c0,3.777-1.262,7.446-3.585,10.424 			l-21.125,29.884c-11.073,15.664-17.019,34.376-17.019,53.559v25.929L124.683,230.694z"/>
|
||||
<path style="fill:#FFE177;" d="M342.165,248.2l27.1-10.507l27.1-10.507c0,0,81.573,129.986,99.523,176.281 			s7.257,79.017-26.618,92.151c-33.874,13.134-63.831-3.827-81.781-50.122C369.539,399.201,342.165,248.2,342.165,248.2z"/>
|
||||
<path style="fill:#FFD15B;" d="M495.887,403.467c-17.95-46.295-99.523-176.281-99.523-176.281l-24.167,9.37 			c18.974,30.625,78.653,128.128,93.69,166.911c17.95,46.295,7.257,79.017-26.617,92.151c-2.073,0.804-4.131,1.491-6.173,2.07 			c11.214,3.55,23.415,2.877,36.173-2.07C503.144,482.484,513.837,449.762,495.887,403.467z"/>
|
||||
<path style="fill:#FFCEBF;" d="M387.317,230.694l1.69-33.678c0.815-16.248-5.815-31.983-18.013-42.748l-46.186-40.76 			c-2.712-2.394-6.358-3.438-9.926-2.843l0,0c-5.794,0.966-10.04,5.979-10.04,11.852v4.179c0,3.777,1.262,7.446,3.585,10.424 			l21.125,29.884c11.073,15.664,17.019,34.376,17.019,53.559v25.929L387.317,230.694z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M415.086,252.718c10.11-1.341,18.119-9.671,19.022-19.829c0.325-3.661-0.246-7.155-1.519-10.29 			c-1.425-3.51-0.084-7.614,3.318-9.279c7.319-3.582,12.36-11.1,12.36-19.798c0-6.286-2.632-11.957-6.855-15.972 			c-2.615-2.486-3.009-6.596-0.766-9.422c2.985-3.76,4.768-8.516,4.768-13.69c0-7.532-3.779-14.18-9.545-18.154 			c-2.55-1.758-3.507-5.012-2.611-7.976c0.61-2.017,0.939-4.156,0.939-6.372c0-12.171-9.867-22.038-22.038-22.038 			c-0.271,0-0.071-6.017-0.74-9.253c-1.918-9.281-9.745-16.43-19.169-17.43c-1.211-0.128-2.405-0.159-3.575-0.098 			c-4.869,0.254-8.772-3.822-8.748-8.698c0-0.048,0-0.096,0-0.144c0-15.711-12.736-28.447-28.447-28.447 			c-0.174,0-5.572-18.923-21.496-16.566c-2.241,0.332-4.449,0.35-6.501,0.998c-4.71,1.488-9.938,0.436-13.691-2.776 			c-3.767-3.224-8.658-5.172-14.005-5.172c-4.18,0-8.08,1.19-11.383,3.249c-3.962,2.47-8.786,3.357-13.275,2.075 			c-1.881-0.537-3.868-0.825-5.922-0.825c-2.476,0-4.854,0.418-7.068,1.187c-4.807,1.67-10.112,0.693-14.313-2.179 			c-3.457-2.363-7.638-3.745-12.142-3.745c-4.802,0-9.235,1.571-12.817,4.225c-4.543,3.367-10.438,4.225-15.632,1.989 			c-2.968-1.278-6.239-1.986-9.676-1.986c-8.8,0-16.516,4.636-20.841,11.599c-2.887,4.648-7.74,7.748-13.208,7.944 			c-0.279,0.01-0.558,0.024-0.839,0.042c-14.402,0.942-26.008,12.822-26.575,27.244c-0.019,0.481-0.026,0.959-0.021,1.434 			c0.049,4.851-4.092,8.753-8.939,8.542c-1.105-0.048-2.231-0.015-3.372,0.105c-9.425,0.994-17.256,8.14-19.18,17.42 			c-0.672,3.24-0.472,9.263-0.743,9.263c-12.171,0-22.038,9.867-22.038,22.038c0,2.216,0.328,4.355,0.938,6.372 			c0.897,2.965-0.061,6.219-2.611,7.976c-5.765,3.974-9.545,10.622-9.545,18.154c0,5.174,1.783,9.93,4.768,13.69 			c2.243,2.826,1.849,6.936-0.766,9.422c-4.222,4.014-6.855,9.685-6.855,15.972c0,8.699,5.041,16.216,12.36,19.798 			c3.401,1.664,4.745,5.766,3.32,9.274c-1.279,3.149-1.851,6.66-1.517,10.338c0.922,10.154,8.945,18.467,19.054,19.791"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M201.748,139.601c21.226,15.161,38.065,15.919,54.252,15.919c16.187,0,33.026-0.758,54.252-15.919"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="35.204" y1="223.363" x2="35.204" y2="227.85"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="35.204" y1="261.166" x2="35.204" y2="256.678"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="53.103" y1="242.264" x2="48.615" y2="242.264"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="17.306" y1="242.264" x2="21.794" y2="242.264"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M363.942,370.537c-32.235-4.08-47.751-12.838-47.751-12.838"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="374.066" y1="499.925" x2="442.13" y2="499.925"/>
|
||||
|
||||
<polyline style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" points=" 			68.204,499.925 254.988,499.925 340.066,499.925 		"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M193.786,357.699c0,0-15.865,8.954-48.838,12.973"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M212.237,325.956c-4.145,11.522-10.365,22.293-18.45,31.743l1.927,2.216c4.985,5.734,11.021,10.48,17.819,13.873 			c25.887,12.92,56.359,13.044,82.306,0.439c7.961-3.867,14.902-9.554,20.352-16.528v0c-8.202-9.586-14.484-20.53-18.627-32.239"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M345.91,272.934c-19.485,36.009-52.483,59.683-89.91,59.683c-37.853,0-71.176-24.217-90.571-60.919"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M61.79,316.421c-19.28,33.219-38.119,67.552-45.678,87.046c-17.95,46.295-7.257,79.017,26.618,92.151 			c33.874,13.134,63.831-3.827,81.781-50.122S169.835,248.2,169.835,248.2l-27.1-10.507l-27.1-10.507 			c0,0-16.714,26.634-36.675,60.083"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M32.38,16.905l7.925,23.552c1.414,4.203,6.751,5.46,9.892,2.329l8.161-8.135c3.103-3.093,8.368-1.911,9.851,2.212l8.999,25.015"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="473.796" y1="233.363" x2="473.796" y2="237.85"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="473.796" y1="271.166" x2="473.796" y2="266.678"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="455.897" y1="252.264" x2="460.385" y2="252.264"/>
|
||||
|
||||
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="491.694" y1="252.264" x2="487.206" y2="252.264"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M483.621,16.905l-7.925,23.552c-1.414,4.203-6.751,5.46-9.892,2.329l-8.161-8.135c-3.103-3.093-8.368-1.911-9.851,2.212 			l-8.999,25.015"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M124.683,230.694l-1.69-33.678c-0.815-16.248,5.815-31.983,18.013-42.748l46.186-40.76c2.712-2.394,6.358-3.438,9.926-2.843l0,0 			c5.794,0.966,10.04,5.979,10.04,11.852v4.179c0,3.777-1.262,7.446-3.585,10.424l-21.125,29.884 			c-11.073,15.664-17.019,34.376-17.019,53.559v25.929L124.683,230.694z"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M450.21,316.421c19.28,33.219,38.119,67.552,45.678,87.046c17.95,46.295,7.257,79.017-26.618,92.151 			c-33.874,13.134-63.831-3.827-81.781-50.122c-17.95-46.295-45.324-197.296-45.324-197.296l27.1-10.507l27.1-10.507 			c0,0,16.714,26.634,36.675,60.083"/>
|
||||
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d=" 			M387.317,230.694l1.69-33.678c0.815-16.248-5.815-31.983-18.013-42.748l-46.186-40.76c-2.712-2.394-6.358-3.438-9.926-2.843l0,0 			c-5.794,0.966-10.04,5.979-10.04,11.852v4.179c0,3.777,1.262,7.446,3.585,10.424l21.125,29.884 			c11.073,15.664,17.019,34.376,17.019,53.559v25.929L387.317,230.694z"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 13 KiB |
@ -1,62 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg696"
|
||||
xml:space="preserve"
|
||||
width="682.66669"
|
||||
height="682.66669"
|
||||
viewBox="0 0 682.66669 682.66669"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs700"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath710"><path
|
||||
d="M 0,512 H 512 V 0 H 0 Z"
|
||||
id="path708" /></clipPath></defs><g
|
||||
id="g702"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,682.66667)"><g
|
||||
id="g704"><g
|
||||
id="g706"
|
||||
clip-path="url(#clipPath710)"><g
|
||||
id="g712"
|
||||
transform="translate(9.0435,355.2871)"><path
|
||||
d="m 0,0 c 0.338,7.053 1.429,13.958 3.178,20.649 0.142,0.541 0.287,1.08 0.437,1.618 3.918,14.057 10.739,27.135 19.571,38.611 21.46,27.886 54.8,46.31 87.238,46.31 37.457,0 69.076,-22.555 83.697,-35.027 4.971,-4.241 12.285,-4.164 17.183,0.161 14.161,12.505 44.933,34.866 83.904,34.866 52.616,0 107.611,-48.482 110.423,-107.188 0.878,-18.368 -1.675,-34.297 -6.411,-48.745 -3.814,-11.637 -9.041,-22.316 -15.057,-32.515 -19.996,-33.905 -115.745,-106.958 -157.552,-142.348 -13.836,-11.712 -34.105,-11.709 -47.936,0.009 C 136.981,-188.276 41.584,-115.437 21.468,-81.26 12.443,-65.927 5.214,-49.612 1.863,-30.601 0.196,-21.138 -0.527,-11.02 0,0"
|
||||
style="fill:#ff7d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path714" /></g><g
|
||||
id="g716"
|
||||
transform="translate(262.0469,153.4565)"><path
|
||||
d="m 0,0 c -9.998,-8.147 -19.031,-15.546 -26.392,-21.777 -13.837,-11.713 -34.105,-11.709 -47.937,0.009 -41.693,35.323 -137.09,108.162 -157.206,142.338 -9.025,15.333 -16.255,31.649 -19.605,50.66 -0.343,1.947 -0.647,3.922 -0.907,5.927"
|
||||
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path718" /></g><g
|
||||
id="g720"
|
||||
transform="translate(34.6689,419.2329)"><path
|
||||
d="m 0,0 c 21.497,26.161 53.565,43.242 84.798,43.242 37.458,0 69.076,-22.555 83.697,-35.027 4.971,-4.241 12.286,-4.164 17.184,0.161 14.161,12.505 44.932,34.866 83.903,34.866 52.616,0 107.611,-48.482 110.424,-107.188 0.878,-18.367 -1.676,-34.297 -6.411,-48.745 -1.877,-5.726 -4.096,-11.221 -6.583,-16.54"
|
||||
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path722" /></g><g
|
||||
id="g724"
|
||||
transform="translate(12.3311,376.3408)"><path
|
||||
d="M 0,0 V 0"
|
||||
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path726" /></g><g
|
||||
id="g728"
|
||||
transform="translate(502,169.7637)"><path
|
||||
d="m 0,0 c 0,-66.406 -53.399,-120.239 -119.271,-120.239 -65.872,0 -119.271,53.833 -119.271,120.239 0,66.406 53.399,120.239 119.271,120.239 C -53.399,120.239 0,66.406 0,0"
|
||||
style="fill:#faf7f5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path730" /></g><g
|
||||
id="g732"
|
||||
transform="translate(502,169.7637)"><path
|
||||
d="m 0,0 c 0,-66.406 -53.399,-120.239 -119.271,-120.239 -65.872,0 -119.271,53.833 -119.271,120.239 0,66.406 53.399,120.239 119.271,120.239 C -53.399,120.239 0,66.406 0,0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path734" /></g><g
|
||||
id="g736"
|
||||
transform="translate(430.6279,194.124)"><path
|
||||
d="m 0,0 h -23.744 v 23.952 c 0,6.765 -5.44,12.248 -12.15,12.248 h -24.01 c -6.71,0 -12.15,-5.483 -12.15,-12.248 V 0 h -23.744 c -6.71,0 -12.149,-5.483 -12.149,-12.248 v -24.225 c 0,-6.764 5.439,-12.247 12.149,-12.247 h 23.744 v -23.953 c 0,-6.764 5.44,-12.247 12.15,-12.247 h 24.01 c 6.71,0 12.15,5.483 12.15,12.247 V -48.72 H 0 c 6.71,0 12.149,5.483 12.149,12.247 v 24.225 C 12.149,-5.483 6.71,0 0,0"
|
||||
style="fill:#ff9eb1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path738" /></g><g
|
||||
id="g740"
|
||||
transform="translate(430.6279,194.124)"><path
|
||||
d="m 0,0 h -23.744 v 23.952 c 0,6.765 -5.44,12.248 -12.15,12.248 h -24.01 c -6.71,0 -12.15,-5.483 -12.15,-12.248 V 0 h -23.744 c -6.71,0 -12.149,-5.483 -12.149,-12.248 v -24.225 c 0,-6.764 5.439,-12.247 12.149,-12.247 h 23.744 v -23.953 c 0,-6.764 5.44,-12.247 12.15,-12.247 h 24.01 c 6.71,0 12.15,5.483 12.15,12.247 V -48.72 H 0 c 6.71,0 12.149,5.483 12.149,12.247 v 24.225 C 12.149,-5.483 6.71,0 0,0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path742" /></g></g></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@ -1,26 +1,523 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/TermsConditionsViewModel.dart';
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_html/flutter_html.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class UserAgreementPage extends StatefulWidget {
|
||||
@override
|
||||
State<UserAgreementPage> createState() => _UserAgreementPageState();
|
||||
}
|
||||
|
||||
class _UserAgreementPageState extends State<UserAgreementPage> {
|
||||
late ProjectViewModel projectViewModel;
|
||||
|
||||
bool acceptTerms = false;
|
||||
|
||||
class UserAgreementPage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
projectViewModel = Provider.of(context);
|
||||
return BaseView<TermsConditionsViewModel>(
|
||||
onModelReady: (model) => model.getUserTermsAndConditions(),
|
||||
builder: (_, model, w) => AppScaffold(
|
||||
isShowAppBar: true,
|
||||
showNewAppBarTitle: true,
|
||||
showNewAppBar: true,
|
||||
isShowDecPage: false,
|
||||
appBarTitle: TranslationBase.of(context).userAgreement,
|
||||
body: SingleChildScrollView(
|
||||
child: Html(
|
||||
data: model.userAgreementContent,
|
||||
isShowAppBar: true,
|
||||
showNewAppBarTitle: true,
|
||||
showNewAppBar: true,
|
||||
isShowDecPage: false,
|
||||
appBarTitle: TranslationBase.of(context).termsConditions,
|
||||
body: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions1,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions2,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions3,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions4,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions5,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading2,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions6,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading3,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions7,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions8,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions9,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions10,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions11,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions12,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions12a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions12b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions12c,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions13,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions14,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions14a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions14b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading4,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions15,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions16,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions16a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions16b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions17,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions18,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions19,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions19a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions19b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading5,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions20,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions21,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading6,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions21,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions22,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions23,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions24,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading7,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions25,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions25a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions25b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions25c,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions26,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions27,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions28,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions29,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions30,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions31,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions32,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading8,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions33,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions33a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions33b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions34,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions34a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions34b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions34c,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions34d,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions34e,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions35,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions35a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions35b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions35c,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions35d,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions35e,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions36,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions37,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions38,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions39,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions39a,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions39b,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions39c,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions39d,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading9,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions40,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions41,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading10,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions42,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions43,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading11,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions44,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsHeading12,
|
||||
style: TextStyle(
|
||||
fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(12.0),
|
||||
Text(
|
||||
TranslationBase.of(context).termsConditions45,
|
||||
style: TextStyle(fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
mHeight(24.0),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Checkbox(
|
||||
value: acceptTerms,
|
||||
onChanged: (v) {
|
||||
setState(() => acceptTerms = v!);
|
||||
}),
|
||||
Expanded(
|
||||
child: Text(
|
||||
TranslationBase.of(context).termsConditionsRead,
|
||||
style: TextStyle(
|
||||
fontSize: 16, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
mHeight(75.0),
|
||||
],
|
||||
),
|
||||
)),
|
||||
),
|
||||
),
|
||||
bottomSheet: Container(
|
||||
color: CustomColors.white,
|
||||
padding: EdgeInsets.fromLTRB(12.0, 1.0, 12.0, 25.0),
|
||||
child: DefaultButton(
|
||||
TranslationBase.of(context).acceptLbl.toUpperCase(),
|
||||
acceptTerms
|
||||
? () {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
: null,
|
||||
color: CustomColors.green,
|
||||
disabledColor: CustomColors.grey2,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,380 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class SearchResultsByRegion extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
bool isLiveCareAppointment;
|
||||
bool isObGyneAppointment;
|
||||
bool isDoctorNameSearch;
|
||||
OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
bool isDoctorSearchResult;
|
||||
|
||||
SearchResultsByRegion(
|
||||
{required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
this.isObGyneAppointment = false,
|
||||
this.isDoctorNameSearch = false,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: TranslationBase.of(context).bookAppo,
|
||||
isShowDecPage: false,
|
||||
isShowAppBar: true,
|
||||
showNewAppBarTitle: true,
|
||||
showNewAppBar: true,
|
||||
backgroundColor: CustomColors.appBackgroudGrey2Color,
|
||||
body: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.isNotEmpty ==
|
||||
true
|
||||
? ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
physics: BouncingScrollPhysics(),
|
||||
separatorBuilder: (context, index) {
|
||||
return Material(
|
||||
color: Color(0xFFf5f5f5),
|
||||
child: SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
String key = patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.keys
|
||||
.toList()[index] ??
|
||||
'';
|
||||
|
||||
return AppExpandableNotifier(
|
||||
paddingValue: 10,
|
||||
applyBackgroundToOnlyHeader: true,
|
||||
completeHeaderColor: CustomColors.appBackgroudGrey2Color,
|
||||
headerWidget: RegionTitle(
|
||||
title: key,
|
||||
hmcCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
hmgCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
),
|
||||
showDropDownIconWithCustomHeader: true,
|
||||
isTitleSingleLine: false,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
widgetColor: Color(0xFFF8F8F8),
|
||||
bodyWidget: Column(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: AppExpandableNotifier(
|
||||
paddingValue: 8,
|
||||
applyBackgroundColor: false,
|
||||
applyBackgroundToOnlyHeader: true,
|
||||
completeHeaderColor: Colors.white,
|
||||
headerRadius: BorderRadius.circular(16),
|
||||
headerWidget: HospitalTitle(
|
||||
iconUrl: 'assets/images/svg/HMG.svg',
|
||||
title: TranslationBase.of(context).hmgHospital,
|
||||
isHMC: false,
|
||||
itemCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
),
|
||||
showDropDownIconWithCustomHeader: true,
|
||||
bodyWidget: HospitalBodyWidget(
|
||||
patientDoctorAppointmentListHospital:
|
||||
patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[key]?.hmgDoctorList,
|
||||
isLiveCareAppointment: isLiveCareAppointment,
|
||||
isObGyneAppointment: isObGyneAppointment,
|
||||
isDoctorNameSearch: isDoctorNameSearch,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
bottom: 8.0, left: 8, right: 8),
|
||||
child: AppExpandableNotifier(
|
||||
paddingValue: 8,
|
||||
applyBackgroundColor: false,
|
||||
applyBackgroundToOnlyHeader: true,
|
||||
completeHeaderColor: Colors.white,
|
||||
headerRadius: BorderRadius.circular(16),
|
||||
headerWidget: HospitalTitle(
|
||||
iconUrl: 'assets/images/svg/HMC.svg',
|
||||
title: TranslationBase.of(context).hmcHospital,
|
||||
isHMC: true,
|
||||
itemCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
),
|
||||
showDropDownIconWithCustomHeader: true,
|
||||
bodyWidget: HospitalBodyWidget(
|
||||
patientDoctorAppointmentListHospital:
|
||||
patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[key]?.hmcDoctorList,
|
||||
isLiveCareAppointment: isLiveCareAppointment,
|
||||
isObGyneAppointment: isObGyneAppointment,
|
||||
isDoctorNameSearch: isDoctorNameSearch,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
));
|
||||
// return AppExpandableNotifier(
|
||||
// title: (patientDoctorAppointmentListHospital[index].distanceInKMs != "0")
|
||||
// ? patientDoctorAppointmentListHospital[index].filterName! + " - " + patientDoctorAppointmentListHospital[index].distanceInKMs! + " " + TranslationBase.of(context).km
|
||||
// : patientDoctorAppointmentListHospital[index].filterName,
|
||||
// projectTitleTop: patientDoctorAppointmentListHospital[index].projectTopName,
|
||||
// projectTitleBottom: (patientDoctorAppointmentListHospital[index].distanceInKMs != "0")
|
||||
// ? patientDoctorAppointmentListHospital[index].projectBottomName.toString() +
|
||||
// " - " +
|
||||
// patientDoctorAppointmentListHospital[index].distanceInKMs! +
|
||||
// " " +
|
||||
// TranslationBase.of(context).km
|
||||
// : patientDoctorAppointmentListHospital[index].projectBottomName.toString(),
|
||||
// isTitleSingleLine: false,
|
||||
// isDoctorSearchResult: isDoctorSearchResult,
|
||||
// isExpand: patientDoctorAppointmentListHospital.length == 1 ? true : false,
|
||||
// bodyWidget: ListView.separated(
|
||||
// shrinkWrap: true,
|
||||
// physics: NeverScrollableScrollPhysics(),
|
||||
// padding: EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
|
||||
// itemBuilder: (context, _index) {
|
||||
// final doctor = patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList![_index];
|
||||
// return DoctorView(
|
||||
// doctor: doctor,
|
||||
// isLiveCareAppointment: isLiveCareAppointment,
|
||||
// isObGyneAppointment: isObGyneAppointment,
|
||||
// isDoctorNameSearch: isDoctorNameSearch,
|
||||
// obGyneProcedureListResponse: obGyneProcedureListResponse,
|
||||
// isShowDate: false,
|
||||
// onTap: () {
|
||||
// context.read<ProjectViewModel>().analytics.appointment.book_appointment_select_doctor(appointment_type: 'regular', doctor: doctor);
|
||||
// });
|
||||
// },
|
||||
// separatorBuilder: (context, index) => SizedBox(height: 14),
|
||||
// itemCount: patientDoctorAppointmentListHospital[index].patientDoctorAppointmentList!.length),
|
||||
// );
|
||||
},
|
||||
itemCount: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.length ??
|
||||
0,
|
||||
)
|
||||
: getNoDataWidget(context),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalBodyWidget extends StatelessWidget {
|
||||
final List<PatientDoctorAppointmentList>?
|
||||
patientDoctorAppointmentListHospital;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
|
||||
const HospitalBodyWidget({
|
||||
super.key,
|
||||
this.patientDoctorAppointmentListHospital,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: patientDoctorAppointmentListHospital?.length ?? 0,
|
||||
separatorBuilder: (context, index) {
|
||||
return Container(
|
||||
height: 12,
|
||||
margin: EdgeInsets.only(left: 21, right: 21),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
return AppExpandableNotifier(
|
||||
applyBackgroundColor: false,
|
||||
widgetColor: CustomColors.appBackgroudGrey2Color,
|
||||
title: (patientDoctorAppointmentListHospital?[index].distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index].filterName! +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase.of(context).km
|
||||
: patientDoctorAppointmentListHospital![index].filterName,
|
||||
projectTitleTop:
|
||||
patientDoctorAppointmentListHospital![index].projectTopName,
|
||||
projectTitleBottom: (patientDoctorAppointmentListHospital![index]
|
||||
.distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString() +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase.of(context).km
|
||||
: patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString(),
|
||||
isTitleSingleLine: false,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
isExpand:
|
||||
patientDoctorAppointmentListHospital?.length == 1 ? true : false,
|
||||
bodyWidget: ListView.separated(
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
padding:
|
||||
EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
|
||||
itemBuilder: (context, _index) {
|
||||
// print("the index of patientDoctorAppointmentList is ${_index}");
|
||||
// print("the index of parent is ${index}");
|
||||
final doctor = patientDoctorAppointmentListHospital![index]
|
||||
.patientDoctorAppointmentList![_index];
|
||||
// print('the doctor is ${doctor.toJson()}');
|
||||
return DoctorView(
|
||||
doctor: doctor,
|
||||
isLiveCareAppointment: isLiveCareAppointment,
|
||||
isObGyneAppointment: isObGyneAppointment,
|
||||
isDoctorNameSearch: isDoctorNameSearch,
|
||||
obGyneProcedureListResponse: obGyneProcedureListResponse,
|
||||
isShowDate: false,
|
||||
onTap: () {
|
||||
context
|
||||
.read<ProjectViewModel>()
|
||||
.analytics
|
||||
.appointment
|
||||
.book_appointment_select_doctor(
|
||||
appointment_type: 'regular', doctor: doctor);
|
||||
});
|
||||
},
|
||||
separatorBuilder: (context, index) => SizedBox(height: 14),
|
||||
itemCount: patientDoctorAppointmentListHospital?[index].patientDoctorAppointmentList?.length ?? 0),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RegionTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
|
||||
const RegionTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.hmcCount,
|
||||
required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"${TranslationBase.of(context).HospitalString(num.parse(hmgCount)).replaceAll("@", hmgCount)} ,",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).MedicalCenterString(num.parse(hmcCount)).replaceAll("@", hmcCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFF40ACC9),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String iconUrl;
|
||||
final bool isHMC;
|
||||
final String itemCount;
|
||||
|
||||
const HospitalTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.iconUrl,
|
||||
required this.isHMC,
|
||||
required this.itemCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(iconUrl),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color: isHMC ? Color(0xFF40ACC9) : Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 6,
|
||||
),
|
||||
Text(
|
||||
isHMC
|
||||
? "${TranslationBase.of(context).MedicalCenterString(num.parse(itemCount)).replaceAll("@", itemCount)}"
|
||||
: "${TranslationBase.of(context).HospitalString(num.parse(itemCount)).replaceAll("@", itemCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 12, color: Colors.black, fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,261 @@
|
||||
import 'package:diplomaticquarterapp/config/config.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/SearchInfoModel.dart';
|
||||
import 'package:diplomaticquarterapp/models/Clinics/ClinicListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/DentalComplaints.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/components/LaserClinic.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/components/LiveCareBookAppointment.dart';
|
||||
import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart';
|
||||
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
|
||||
import 'package:diplomaticquarterapp/services/appointment_services/doctor_response_mapper.dart';
|
||||
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../../config/shared_pref_kay.dart';
|
||||
import '../../../models/Appointments/DoctorListResponse.dart';
|
||||
import '../../../services/authentication/auth_provider.dart';
|
||||
import '../../../theme/colors.dart';
|
||||
import '../../../uitl/gif_loader_dialog_utils.dart';
|
||||
|
||||
class ResultByClinic extends StatefulWidget {
|
||||
HospitalsModel? selectedValue;
|
||||
Function(RegionList, int?) onClinicSelected;
|
||||
|
||||
ResultByClinic({super.key, this.selectedValue, required this.onClinicSelected});
|
||||
|
||||
@override
|
||||
State<ResultByClinic> createState() => _ResultByClinicState();
|
||||
}
|
||||
|
||||
class _ResultByClinicState extends State<ResultByClinic> {
|
||||
List<ListClinicCentralized>? clinicIds = List.empty();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => getClinicWrtHospital(widget.selectedValue));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: clinicIds?.isNotEmpty == true
|
||||
? ListView.builder(
|
||||
itemBuilder: (_, index) => InkWell(
|
||||
onTap: () {
|
||||
getDoctorsList(
|
||||
context,
|
||||
"${clinicIds?[index].clinicID.toString() ?? ''}-${clinicIds?[index].isLiveCareClinicAndOnline!.toString()}-${clinicIds?[index].liveCareClinicID.toString()}-${clinicIds?[index].liveCareServiceID.toString()}",
|
||||
clinicIds?[index].clinicDescription!,
|
||||
widget.selectedValue,
|
||||
clinicIds?[index]);
|
||||
},
|
||||
child: Material(
|
||||
color: CustomColors.white,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
clinicIds?[index].clinicDescription ?? '',
|
||||
style: TextStyle(fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: CustomColors.black,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)),
|
||||
),
|
||||
),
|
||||
itemCount: clinicIds?.length ?? 0,
|
||||
)
|
||||
: getNoDataWidget(context)),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
getDoctorsList(BuildContext context, String? dropdownValue, String? dropdownTitle, HospitalsModel? selectedHospital, ListClinicCentralized? selectedClinic) {
|
||||
SearchInfo searchInfo = new SearchInfo();
|
||||
if (dropdownValue != null) if (dropdownValue!.split("-")[0] == "17") {
|
||||
searchInfo.ProjectID = int.parse(selectedHospital?.mainProjectID.toString() ?? "");
|
||||
searchInfo.ClinicID = int.parse(dropdownValue!.split("-")[0]);
|
||||
searchInfo.hospital = selectedHospital;
|
||||
searchInfo.clinic = selectedClinic;
|
||||
searchInfo.date = DateTime.now();
|
||||
|
||||
if (context.read<ProjectViewModel>().isLogin) {
|
||||
if (context.read<ProjectViewModel>().user.age! > 12) {
|
||||
navigateToDentalComplaints(context, searchInfo);
|
||||
} else {
|
||||
callDoctorsSearchAPI(17);
|
||||
}
|
||||
} else {
|
||||
navigateToDentalComplaints(context, searchInfo);
|
||||
}
|
||||
} else if (dropdownValue!.split("-")[0] == "253") {
|
||||
navigateToLaserClinic(context);
|
||||
// callDoctorsSearchAPI();
|
||||
} else if (dropdownValue!.split("-")[1] == "true"
|
||||
// && authProvider.isLogin &&
|
||||
// authUser.patientType == 1
|
||||
) {
|
||||
Navigator.push(
|
||||
context,
|
||||
FadePage(
|
||||
page: LiveCareBookAppointment(clinicName: dropdownTitle, liveCareClinicID: dropdownValue!.split("-")[2], liveCareServiceID: dropdownValue!.split("-")[3]),
|
||||
),
|
||||
).then((value) {
|
||||
print("navigation return ");
|
||||
if (value == "false") return;
|
||||
|
||||
// setState(() {
|
||||
// });
|
||||
if (value == "livecare") {
|
||||
Navigator.push(context, FadePage(page: LiveCareHome()));
|
||||
}
|
||||
if (value == "schedule") {
|
||||
callDoctorsSearchAPI(int.parse(dropdownValue!.split("-")[0]));
|
||||
}
|
||||
});
|
||||
setState(() {});
|
||||
} else {
|
||||
callDoctorsSearchAPI(int.parse(dropdownValue!.split("-")[0]));
|
||||
}
|
||||
}
|
||||
|
||||
Future navigateToLaserClinic(BuildContext context) async {
|
||||
Navigator.push(
|
||||
context,
|
||||
FadePage(
|
||||
page: LaserClinic(selectedHospital: widget.selectedValue!),
|
||||
),
|
||||
).then((value) {});
|
||||
}
|
||||
|
||||
Future navigateToDentalComplaints(BuildContext context, SearchInfo searchInfo) async {
|
||||
Navigator.push(
|
||||
context,
|
||||
FadePage(
|
||||
page: DentalComplaints(
|
||||
searchInfo: searchInfo,
|
||||
isFromHospitalSearchPage: true,
|
||||
),
|
||||
),
|
||||
).then((value) {
|
||||
if (value is RegionList) {
|
||||
widget.onClinicSelected(value,null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
callDoctorsSearchAPI(int clinicID) {
|
||||
var isArabic = context.read<ProjectViewModel>().isArabic;
|
||||
int languageID = isArabic ? 1 : 2;
|
||||
GifLoaderDialogUtils.showMyDialog(context);
|
||||
List<DoctorList> doctorsList = [];
|
||||
List<String> arr = [];
|
||||
List<String> arrDistance = [];
|
||||
List<String> result;
|
||||
int numAll;
|
||||
List<PatientDoctorAppointmentList> _patientDoctorAppointmentListHospital = [];
|
||||
|
||||
DoctorsListService service = new DoctorsListService();
|
||||
service
|
||||
.getDoctorsList(clinicID, widget.selectedValue?.mainProjectID.toString() != "" ? int.parse(widget.selectedValue?.mainProjectID.toString() ?? "-1") : 0, false, languageID, null)
|
||||
.then((res) async {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
if (res['MessageStatus'] == 1) {
|
||||
RegionList regionHospitalList = RegionList();
|
||||
|
||||
if (res['DoctorList'].length != 0) {
|
||||
res['DoctorList'].forEach((v) {
|
||||
doctorsList.add(new DoctorList.fromJson(
|
||||
v,
|
||||
));
|
||||
});
|
||||
|
||||
regionHospitalList = await DoctorMapper.getMappedDoctor(doctorsList, isArabic: isArabic);
|
||||
var lat = await sharedPref.getDouble(USER_LAT);
|
||||
|
||||
var lng = await sharedPref.getDouble(USER_LONG);
|
||||
var isLocationEnabled = (lat != null && lat != 0.0) && (lng != null && lng != 0.0);
|
||||
regionHospitalList = await DoctorMapper.sortList(isLocationEnabled, regionHospitalList);
|
||||
widget.onClinicSelected(regionHospitalList, clinicID);
|
||||
setState(() {});
|
||||
} else {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
AppToast.showErrorToast(message: res['ErrorSearchMsg']);
|
||||
}
|
||||
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
// navigateToSearchResults(context, doctorsList, _patientDoctorAppointmentListHospital);
|
||||
} else {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
|
||||
}
|
||||
}).catchError((err) {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
print(err);
|
||||
AppToast.showErrorToast(message: err, localContext: context);
|
||||
});
|
||||
}
|
||||
|
||||
void getClinicWrtHospital(HospitalsModel? newValue) async {
|
||||
AppGlobal.context = context;
|
||||
GifLoaderDialogUtils.showMyDialog(context);
|
||||
ClinicListService service = new ClinicListService();
|
||||
List<HospitalsModel> projectsListLocal = [];
|
||||
clinicIds = List.empty();
|
||||
List<ListClinicCentralized> clinicId = [];
|
||||
try {
|
||||
Map res = await service.getClinicByHospital(projectID: newValue?.mainProjectID.toString() ?? "");
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
if (res['MessageStatus'] == 1) {
|
||||
List list = res['ListClinic'];
|
||||
|
||||
if (list.isEmpty) {
|
||||
AppToast.showErrorToast(
|
||||
message: TranslationBase.of(context).NoClinicFound,
|
||||
);
|
||||
}
|
||||
res['ListClinic'].forEach((v) {
|
||||
clinicId.add(ListClinicCentralized.fromJson(v));
|
||||
});
|
||||
clinicIds = clinicId;
|
||||
setState(() {});
|
||||
} else {
|
||||
AppToast.showErrorToast(
|
||||
message: TranslationBase.of(context).NoClinicFound,
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
print("the error is $e");
|
||||
AppToast.showErrorToast(
|
||||
message: TranslationBase.of(context).NoClinicFound,
|
||||
);
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,130 @@
|
||||
import 'package:auto_size_text/auto_size_text.dart';
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ResultByDoctor extends StatefulWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
List<DoctorList>? patientDoctorAppointmentListHospital;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final bool showNearestAppointment;
|
||||
final bool nearestAppointmentDoctors;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
final Function(bool)? refreshDoctorList;
|
||||
|
||||
ResultByDoctor({
|
||||
required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.showNearestAppointment = false,
|
||||
this.nearestAppointmentDoctors = false,
|
||||
this.obGyneProcedureListResponse,
|
||||
this.refreshDoctorList
|
||||
});
|
||||
|
||||
@override
|
||||
State<ResultByDoctor> createState() => _ResultByDoctorState();
|
||||
}
|
||||
|
||||
class _ResultByDoctorState extends State<ResultByDoctor> {
|
||||
|
||||
bool nearestAppo = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
nearestAppo = widget.nearestAppointmentDoctors;
|
||||
super.initState();
|
||||
}
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
|
||||
Visibility(
|
||||
visible: widget.showNearestAppointment,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(left: 6, right: 6,),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Checkbox(
|
||||
activeColor: CustomColors.accentColor,
|
||||
value: nearestAppo,
|
||||
onChanged: (bool? value) {
|
||||
setState(() {
|
||||
nearestAppo = value ?? false;
|
||||
});
|
||||
widget.refreshDoctorList?.call(nearestAppo);
|
||||
},
|
||||
),
|
||||
AutoSizeText(
|
||||
TranslationBase.of(context).nearestAppo.trim(),
|
||||
maxLines: 1,
|
||||
minFontSize: 10,
|
||||
style: TextStyle(
|
||||
fontSize: SizeConfig.textMultiplier! * 1.4,
|
||||
fontWeight: FontWeight.w600,
|
||||
letterSpacing: -0.39,
|
||||
height: 0.8,
|
||||
),
|
||||
),
|
||||
// Text(TranslationBase.of(context).nearestAppo, style: TextStyle(fontSize: 14.0, letterSpacing: -0.56)),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
widget.patientDoctorAppointmentListHospital?.isNotEmpty == true
|
||||
? Expanded(
|
||||
child: ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
physics: BouncingScrollPhysics(),
|
||||
separatorBuilder: (context, index) {
|
||||
return Material(
|
||||
color: Color(0xFFf5f5f5),
|
||||
child: SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
final doctor = widget.patientDoctorAppointmentListHospital![index];
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12.0),
|
||||
child: DoctorView(
|
||||
doctor: doctor,
|
||||
isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
isObGyneAppointment: widget.isObGyneAppointment,
|
||||
isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
obGyneProcedureListResponse: widget.obGyneProcedureListResponse,
|
||||
isShowDate: false,
|
||||
onTap: () {
|
||||
context.read<ProjectViewModel>().analytics.appointment.book_appointment_select_doctor(appointment_type: 'regular', doctor: doctor);
|
||||
}),
|
||||
);
|
||||
},
|
||||
itemCount: widget.patientDoctorAppointmentListHospital?.length ?? 0,
|
||||
),
|
||||
)
|
||||
: getNoDataWidget(context),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,173 @@
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
typedef OnFacilitySelected = Function(bool);
|
||||
|
||||
class ResultByFacility extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
String selectedRegion = '';
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
OnFacilitySelected onFacilitySelected;
|
||||
|
||||
ResultByFacility(
|
||||
{required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
required this.onFacilitySelected,
|
||||
required this.selectedRegion});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Visibility(
|
||||
visible: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]?.hmgSize !=
|
||||
0,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
if (patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]?.hmgSize ==
|
||||
0) return;
|
||||
onFacilitySelected(false);
|
||||
},
|
||||
child: HospitalTitle(
|
||||
iconUrl: 'assets/images/svg/HMG.svg',
|
||||
title: TranslationBase.of(context).hmgHospital,
|
||||
isHMC: false,
|
||||
itemCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[selectedRegion]?.hmgSize ?? 0}",
|
||||
nearest: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]?.hmgDistance),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 16,),
|
||||
Visibility(
|
||||
visible: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]?.hmcSize !=
|
||||
0,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
if (patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]?.hmcSize ==
|
||||
0) return;
|
||||
onFacilitySelected(true);
|
||||
},
|
||||
child: HospitalTitle(
|
||||
iconUrl: 'assets/images/svg/HMC.svg',
|
||||
title: TranslationBase.of(context).hmcHospital,
|
||||
isHMC: true,
|
||||
itemCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[selectedRegion]?.hmcSize ?? 0}",
|
||||
nearest: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]?.hmcDistance),
|
||||
),
|
||||
)
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String iconUrl;
|
||||
final bool isHMC;
|
||||
final num? nearest;
|
||||
final String itemCount;
|
||||
|
||||
const HospitalTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.iconUrl,
|
||||
required this.isHMC,
|
||||
required this.itemCount,this.nearest});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
color: Colors.white,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(iconUrl),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color:
|
||||
isHMC ? Color(0xFF40ACC9) : Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 6,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
isHMC
|
||||
? "${TranslationBase.of(context).MedicalCenterString(num.parse(itemCount)).replaceAll("@", itemCount)}"
|
||||
: "${TranslationBase.of(context).HospitalString(num.parse(itemCount)).replaceAll("@", itemCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
Visibility(
|
||||
visible: nearest != double.infinity &&
|
||||
nearest != "0" &&
|
||||
nearest != 0,
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
SvgPicture.asset(
|
||||
'assets/images/svg/location.svg',
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).nearest}: $nearest ${TranslationBase.of(context).kilometerUnit}",
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: CustomColors.black,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,248 @@
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
typedef OnHospitalSelected = Function(String, int);
|
||||
|
||||
class ResultByHospital extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
List<PatientDoctorAppointmentList>? paitientDoctorAppointmentList;
|
||||
bool isHMCSelected;
|
||||
|
||||
bool isLiveCareAppointment;
|
||||
bool isObGyneAppointment;
|
||||
bool isDoctorNameSearch;
|
||||
OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
bool isDoctorSearchResult;
|
||||
OnHospitalSelected onHospitalSelected;
|
||||
|
||||
ResultByHospital(
|
||||
{required this.doctorsList,
|
||||
required this.paitientDoctorAppointmentList,
|
||||
required this.isHMCSelected,
|
||||
this.isObGyneAppointment = false,
|
||||
this.isDoctorNameSearch = false,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
required this.onHospitalSelected});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: HospitalBodyWidget(
|
||||
patientDoctorAppointmentListHospital: paitientDoctorAppointmentList,
|
||||
isLiveCareAppointment: isLiveCareAppointment,
|
||||
isObGyneAppointment: isObGyneAppointment,
|
||||
isDoctorNameSearch: isDoctorNameSearch,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
onHospitalSelected: onHospitalSelected,
|
||||
isHMC: isHMCSelected),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalBodyWidget extends StatelessWidget {
|
||||
final List<PatientDoctorAppointmentList>?
|
||||
patientDoctorAppointmentListHospital;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
final OnHospitalSelected onHospitalSelected;
|
||||
final bool isHMC;
|
||||
|
||||
const HospitalBodyWidget(
|
||||
{super.key,
|
||||
this.patientDoctorAppointmentListHospital,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
required this.onHospitalSelected,
|
||||
required this.isHMC});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
shrinkWrap: true,
|
||||
physics: BouncingScrollPhysics(),
|
||||
itemCount: patientDoctorAppointmentListHospital?.length ?? 0,
|
||||
separatorBuilder: (context, index) {
|
||||
return Container(
|
||||
height: 12,
|
||||
margin: EdgeInsets.only(left: 21, right: 21),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
onHospitalSelected(
|
||||
patientDoctorAppointmentListHospital![index].filterName ?? '',
|
||||
index);
|
||||
},
|
||||
child: Material(
|
||||
color: CustomColors.white,
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(6.0),
|
||||
child: SvgPicture.asset(
|
||||
isHMC
|
||||
? 'assets/images/svg/HMC.svg'
|
||||
: 'assets/images/svg/HMG.svg',
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Directionality(
|
||||
textDirection: (context
|
||||
.read<ProjectViewModel>()
|
||||
.isArabic ==
|
||||
true)
|
||||
? TextDirection.rtl
|
||||
: TextDirection.ltr,
|
||||
child: Text(
|
||||
patientDoctorAppointmentListHospital![index]
|
||||
.filterName ??
|
||||
'',
|
||||
style: TextStyle(
|
||||
fontSize: 22,
|
||||
color: isHMC
|
||||
? Color(0xFF40ACC9)
|
||||
: Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w700),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Visibility(
|
||||
visible:
|
||||
(patientDoctorAppointmentListHospital?[index]
|
||||
.distanceInKMs !=
|
||||
"0"),
|
||||
child: Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
'assets/images/svg/location.svg',
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
// "${TranslationBase.of(context).nearest}: ${patientDoctorAppointmentListHospital?[index].distanceInKMs} ${TranslationBase.of(context).kilometerUnit}",
|
||||
"${patientDoctorAppointmentListHospital?[index].distanceInKMs} ${TranslationBase.of(context).kilometerUnit}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: CustomColors.black,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)),
|
||||
),
|
||||
);
|
||||
// return AppExpandableNotifier(
|
||||
// applyBackgroundColor: false,
|
||||
// widgetColor: CustomColors.appBackgroudGrey2Color,
|
||||
// title: (patientDoctorAppointmentListHospital?[index].distanceInKMs !=
|
||||
// "0")
|
||||
// ? patientDoctorAppointmentListHospital![index].filterName! +
|
||||
// " - " +
|
||||
// patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
// " " +
|
||||
// TranslationBase.of(context).km
|
||||
// : patientDoctorAppointmentListHospital![index].filterName,
|
||||
// projectTitleTop:
|
||||
// patientDoctorAppointmentListHospital![index].projectTopName,
|
||||
// projectTitleBottom: (patientDoctorAppointmentListHospital![index]
|
||||
// .distanceInKMs !=
|
||||
// "0")
|
||||
// ? patientDoctorAppointmentListHospital![index]
|
||||
// .projectBottomName
|
||||
// .toString() +
|
||||
// " - " +
|
||||
// patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
// " " +
|
||||
// TranslationBase.of(context).km
|
||||
// : patientDoctorAppointmentListHospital![index]
|
||||
// .projectBottomName
|
||||
// .toString(),
|
||||
// isTitleSingleLine: false,
|
||||
// isDoctorSearchResult: isDoctorSearchResult,
|
||||
// isDisabled: true,
|
||||
// isExpand:
|
||||
// patientDoctorAppointmentListHospital?.length == 1 ? true : false,
|
||||
// // bodyWidget: ListView.separated(
|
||||
// // shrinkWrap: true,
|
||||
// // physics: NeverScrollableScrollPhysics(),
|
||||
// // padding:
|
||||
// // EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
|
||||
// // itemBuilder: (context, _index) {
|
||||
// // // print("the index of patientDoctorAppointmentList is ${_index}");
|
||||
// // // print("the index of parent is ${index}");
|
||||
// // final doctor = patientDoctorAppointmentListHospital![index]
|
||||
// // .patientDoctorAppointmentList![_index];
|
||||
// // // print('the doctor is ${doctor.toJson()}');
|
||||
// // return DoctorView(
|
||||
// // doctor: doctor,
|
||||
// // isLiveCareAppointment: isLiveCareAppointment,
|
||||
// // isObGyneAppointment: isObGyneAppointment,
|
||||
// // isDoctorNameSearch: isDoctorNameSearch,
|
||||
// // obGyneProcedureListResponse: obGyneProcedureListResponse,
|
||||
// // isShowDate: false,
|
||||
// // onTap: () {
|
||||
// // context
|
||||
// // .read<ProjectViewModel>()
|
||||
// // .analytics
|
||||
// // .appointment
|
||||
// // .book_appointment_select_doctor(
|
||||
// // appointment_type: 'regular', doctor: doctor);
|
||||
// // });
|
||||
// // },
|
||||
// // separatorBuilder: (context, index) => SizedBox(height: 14),
|
||||
// // itemCount: patientDoctorAppointmentListHospital?[index].patientDoctorAppointmentList?.length ?? 0),
|
||||
// );
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,170 @@
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
typedef OnRegionSelected = Function(String);
|
||||
class ResultByRegion extends StatelessWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
OnRegionSelected onRegionSelected;
|
||||
ResultByRegion(
|
||||
{required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
required this.onRegionSelected
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.isNotEmpty ==
|
||||
true
|
||||
? ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
physics: BouncingScrollPhysics(),
|
||||
separatorBuilder: (context, index) {
|
||||
return Material(
|
||||
color: Color(0xFFf5f5f5),
|
||||
child: SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
String key = patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.keys
|
||||
.toList()[index] ??
|
||||
'';
|
||||
|
||||
return InkWell(
|
||||
onTap: (){
|
||||
onRegionSelected(key);
|
||||
},
|
||||
child: RegionTitle(
|
||||
title: key,
|
||||
hmcCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
hmgCount:
|
||||
"${patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
),
|
||||
);
|
||||
|
||||
},
|
||||
itemCount: patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.length ??
|
||||
0,
|
||||
)
|
||||
: getNoDataWidget(context),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class RegionTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
|
||||
const RegionTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.hmcCount,
|
||||
required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
color: CustomColors.white,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Visibility(
|
||||
visible: hmgCount != "0",
|
||||
child: Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
'assets/images/svg/HMG.svg',
|
||||
width: 10,
|
||||
height: 10,
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).HospitalString(num.parse(hmgCount)).replaceAll("@", hmgCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Visibility(
|
||||
visible: hmcCount != "0" && hmgCount != "0",
|
||||
child: Text(", ")),
|
||||
Visibility(
|
||||
visible: hmcCount != "0",
|
||||
child: Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
'assets/images/svg/HMC.svg',
|
||||
width: 10,
|
||||
height: 10,
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).MedicalCenterString(num.parse(hmcCount)).replaceAll("@", hmcCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFF40ACC9),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: CustomColors.black,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,725 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByDoctors.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByFacility.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByHospital.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByRegion.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class SearchResultWithTab extends StatefulWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
bool isLiveCareAppointment;
|
||||
bool isObGyneAppointment;
|
||||
bool isDoctorNameSearch;
|
||||
OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
bool isDoctorSearchResult;
|
||||
|
||||
bool isForHospital;
|
||||
|
||||
SearchResultWithTab({required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
this.isObGyneAppointment = false,
|
||||
this.isDoctorNameSearch = false,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
this.isForHospital = false,
|
||||
});
|
||||
|
||||
@override
|
||||
State<SearchResultWithTab> createState() => _SearchResultWithTabState();
|
||||
}
|
||||
|
||||
class _SearchResultWithTabState extends State<SearchResultWithTab> {
|
||||
int _currentIndex = 0;
|
||||
late PageController _controller;
|
||||
String selectedRegion = "";
|
||||
bool isHMCSelected = false;
|
||||
int selectedHospitalIndex = -1;
|
||||
ScrollController scrollController = ScrollController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controller = new PageController();
|
||||
}
|
||||
|
||||
changePageViewIndex(pageIndex) {
|
||||
_controller.jumpToPage(pageIndex);
|
||||
// scrollController.jumpTo(pageIndex);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
appBarTitle: TranslationBase.of(context).bookAppo,
|
||||
isShowDecPage: false,
|
||||
isShowAppBar: true,
|
||||
showNewAppBarTitle: true,
|
||||
showNewAppBar: true,
|
||||
backgroundColor: CustomColors.appBackgroudGrey2Color,
|
||||
body: widget.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?.isNotEmpty ==
|
||||
true
|
||||
? SizedBox(
|
||||
height: SizeConfig.realScreenHeight! * .9,
|
||||
width: SizeConfig.realScreenWidth,
|
||||
child: Column(children: <Widget>[
|
||||
Container(
|
||||
width: double.infinity,
|
||||
padding: EdgeInsets.only(left: 20, right: 20, top: 12),
|
||||
child: SizedBox(
|
||||
height: 100,
|
||||
child: ListView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: scrollController,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 4,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectRegion,
|
||||
status: _currentIndex == 0
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: _currentIndex > 0
|
||||
? TranslationBase.of(context).completed
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 0
|
||||
? CustomColors.orange
|
||||
: CustomColors.green,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedHospitalIndex = -1;
|
||||
selectedRegion = "";
|
||||
_currentIndex = 0;
|
||||
changePageViewIndex(0);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 4,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectFacitlity,
|
||||
status: _currentIndex == 1
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: _currentIndex > 1
|
||||
? TranslationBase.of(context).completed
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 1
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 1
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedHospitalIndex = -1;
|
||||
_currentIndex = 1;
|
||||
changePageViewIndex(1);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 4,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectBranch,
|
||||
status: _currentIndex == 2
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: _currentIndex > 1
|
||||
? TranslationBase.of(context).completed
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 2
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 2
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedHospitalIndex = -1;
|
||||
_currentIndex = 2;
|
||||
changePageViewIndex(2);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
(widget.isForHospital)
|
||||
? SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 4,
|
||||
child: showProgress(
|
||||
title:
|
||||
TranslationBase.of(context).selectClinic,
|
||||
status: _currentIndex == 3
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 3
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 4
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
isNeedBorder: false,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_currentIndex = 3;
|
||||
changePageViewIndex(3);
|
||||
});
|
||||
},
|
||||
),
|
||||
)
|
||||
: SizedBox.shrink(),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 4,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectDoctor,
|
||||
status: _currentIndex ==
|
||||
((widget.isForHospital) ? 4 : 3)
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex ==
|
||||
((widget.isForHospital) ? 4 : 3)
|
||||
? CustomColors.orange
|
||||
: _currentIndex ==
|
||||
((widget.isForHospital) ? 5 : 4)
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
isNeedBorder: false,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_currentIndex =
|
||||
((widget.isForHospital) ? 4 : 3);
|
||||
changePageViewIndex(_currentIndex);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(10.0, 18, 0, 24),
|
||||
child: Row(
|
||||
children: [
|
||||
(_currentIndex != 0)
|
||||
? InkWell(
|
||||
onTap: () {
|
||||
handleBackClick();
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0, 0, 04, 0),
|
||||
child: Icon(
|
||||
Icons.arrow_back,
|
||||
color: Theme.of(context).primaryColor,
|
||||
),
|
||||
),
|
||||
)
|
||||
: mWidth(24),
|
||||
Text(
|
||||
getTitle(),
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
// mHeight(24),
|
||||
Expanded(
|
||||
child: PageView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
controller: _controller,
|
||||
onPageChanged: (index) {
|
||||
setState(() {
|
||||
_currentIndex = index;
|
||||
});
|
||||
},
|
||||
scrollDirection: Axis.horizontal,
|
||||
children: <Widget>[
|
||||
ResultByRegion(
|
||||
doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital:
|
||||
widget.patientDoctorAppointmentListHospital,
|
||||
onRegionSelected: (key) {
|
||||
setState(() {
|
||||
selectedRegion = key;
|
||||
_currentIndex = 1;
|
||||
changePageViewIndex(1);
|
||||
});
|
||||
}),
|
||||
(selectedRegion != "")
|
||||
? ResultByFacility(
|
||||
doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital:
|
||||
widget.patientDoctorAppointmentListHospital,
|
||||
selectedRegion: selectedRegion,
|
||||
onFacilitySelected: (isHMCSelected) {
|
||||
setState(() {
|
||||
this.isHMCSelected = isHMCSelected;
|
||||
_currentIndex = 2;
|
||||
changePageViewIndex(2);
|
||||
});
|
||||
},
|
||||
) : SizedBox.shrink(),
|
||||
(selectedRegion != '') ?
|
||||
ResultByHospital(doctorsList: widget.doctorsList,
|
||||
paitientDoctorAppointmentList: (isHMCSelected) ?
|
||||
widget.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap![selectedRegion]!
|
||||
.hmcDoctorList ??
|
||||
[]
|
||||
: widget
|
||||
.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]
|
||||
?.hmgDoctorList ??
|
||||
[],
|
||||
isHMCSelected: isHMCSelected,
|
||||
isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
onHospitalSelected: (hospital, index) {
|
||||
setState(() {
|
||||
selectedHospitalIndex = index;
|
||||
_currentIndex = 3;
|
||||
changePageViewIndex(3);
|
||||
});
|
||||
})
|
||||
: SizedBox.shrink(),
|
||||
(selectedRegion != '' && selectedHospitalIndex != -1)
|
||||
? ResultByDoctor(
|
||||
doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital: (!isHMCSelected)
|
||||
? widget
|
||||
.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap![selectedRegion]!
|
||||
.hmgDoctorList![selectedHospitalIndex]
|
||||
.patientDoctorAppointmentList ??
|
||||
[]
|
||||
: widget
|
||||
.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]
|
||||
?.hmcDoctorList?[
|
||||
selectedHospitalIndex]
|
||||
.patientDoctorAppointmentList ??
|
||||
[],
|
||||
isLiveCareAppointment:
|
||||
widget.isLiveCareAppointment,
|
||||
isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
isObGyneAppointment: widget.isObGyneAppointment,
|
||||
isDoctorNameSearch: widget.isDoctorNameSearch)
|
||||
: SizedBox.shrink(),
|
||||
],
|
||||
),
|
||||
),
|
||||
]),
|
||||
)
|
||||
: getNoDataWidget(context),);
|
||||
}
|
||||
|
||||
String getTitle() {
|
||||
switch (_currentIndex) {
|
||||
case 0:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectRegion;
|
||||
case 1:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectFacitlity;
|
||||
case 2:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectBranch;
|
||||
case 3:
|
||||
return TranslationBase
|
||||
.of(context)
|
||||
.selectDoctor;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void handleBackClick() {
|
||||
switch (_currentIndex) {
|
||||
case 1:
|
||||
selectedHospitalIndex = -1;
|
||||
selectedRegion = "";
|
||||
_currentIndex = 0;
|
||||
changePageViewIndex(0);
|
||||
break;
|
||||
case 2:
|
||||
selectedHospitalIndex = -1;
|
||||
_currentIndex = 1;
|
||||
changePageViewIndex(1);
|
||||
break;
|
||||
case 3:
|
||||
selectedHospitalIndex = -1;
|
||||
_currentIndex = 2;
|
||||
changePageViewIndex(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Widget showProgress(
|
||||
{String? title,
|
||||
String? status,
|
||||
Color? color,
|
||||
bool isNeedBorder = true,
|
||||
Function()? onTap}) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
if (status == TranslationBase
|
||||
.of(context)
|
||||
.completed) {
|
||||
onTap?.call();
|
||||
}
|
||||
},
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Container(
|
||||
width: 26,
|
||||
height: 26,
|
||||
decoration: containerRadius(color!, 200),
|
||||
child: Icon(
|
||||
Icons.done,
|
||||
color: Colors.white,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
if (isNeedBorder)
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: mDivider(Colors.grey),
|
||||
)),
|
||||
],
|
||||
),
|
||||
mHeight(8),
|
||||
Text(
|
||||
title!,
|
||||
style: TextStyle(
|
||||
fontSize: 11,
|
||||
fontWeight: FontWeight.w600,
|
||||
letterSpacing: -0.44,
|
||||
),
|
||||
),
|
||||
mHeight(2),
|
||||
Container(
|
||||
padding: EdgeInsets.all(5),
|
||||
decoration: containerRadius(color!.withOpacity(0.2), 4),
|
||||
child: Text(
|
||||
status!,
|
||||
style: TextStyle(
|
||||
fontSize: 8,
|
||||
fontWeight: FontWeight.w600,
|
||||
letterSpacing: -0.32,
|
||||
color: color,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalBodyWidget extends StatelessWidget {
|
||||
final List<PatientDoctorAppointmentList>?
|
||||
patientDoctorAppointmentListHospital;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
|
||||
const HospitalBodyWidget({
|
||||
super.key,
|
||||
this.patientDoctorAppointmentListHospital,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: patientDoctorAppointmentListHospital?.length ?? 0,
|
||||
separatorBuilder: (context, index) {
|
||||
return Container(
|
||||
height: 12,
|
||||
margin: EdgeInsets.only(left: 21, right: 21),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
return AppExpandableNotifier(
|
||||
applyBackgroundColor: false,
|
||||
widgetColor: CustomColors.appBackgroudGrey2Color,
|
||||
title: (patientDoctorAppointmentListHospital?[index].distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index].filterName! +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase
|
||||
.of(context)
|
||||
.km
|
||||
: patientDoctorAppointmentListHospital![index].filterName,
|
||||
projectTitleTop:
|
||||
patientDoctorAppointmentListHospital![index].projectTopName,
|
||||
projectTitleBottom: (patientDoctorAppointmentListHospital![index]
|
||||
.distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString() +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase
|
||||
.of(context)
|
||||
.km
|
||||
: patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString(),
|
||||
isTitleSingleLine: false,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
isExpand:
|
||||
patientDoctorAppointmentListHospital?.length == 1 ? true : false,
|
||||
bodyWidget: ListView.separated(
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
padding:
|
||||
EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
|
||||
itemBuilder: (context, _index) {
|
||||
// print("the index of patientDoctorAppointmentList is ${_index}");
|
||||
// print("the index of parent is ${index}");
|
||||
final doctor = patientDoctorAppointmentListHospital![index]
|
||||
.patientDoctorAppointmentList![_index];
|
||||
// print('the doctor is ${doctor.toJson()}');
|
||||
return DoctorView(
|
||||
doctor: doctor,
|
||||
isLiveCareAppointment: isLiveCareAppointment,
|
||||
isObGyneAppointment: isObGyneAppointment,
|
||||
isDoctorNameSearch: isDoctorNameSearch,
|
||||
obGyneProcedureListResponse: obGyneProcedureListResponse,
|
||||
isShowDate: false,
|
||||
onTap: () {
|
||||
context
|
||||
.read<ProjectViewModel>()
|
||||
.analytics
|
||||
.appointment
|
||||
.book_appointment_select_doctor(
|
||||
appointment_type: 'regular', doctor: doctor);
|
||||
});
|
||||
},
|
||||
separatorBuilder: (context, index) => SizedBox(height: 14),
|
||||
itemCount: patientDoctorAppointmentListHospital?[index]
|
||||
.patientDoctorAppointmentList?.length ?? 0),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RegionTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
|
||||
const RegionTitle({super.key,
|
||||
required this.title,
|
||||
required this.hmcCount,
|
||||
required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"${TranslationBase.of(context).HospitalString(num.parse(hmgCount)).replaceAll("@", hmgCount)} ,",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).MedicalCenterString(num.parse(hmcCount)).replaceAll("@", hmcCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFF40ACC9),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String iconUrl;
|
||||
final bool isHMC;
|
||||
final String itemCount;
|
||||
|
||||
const HospitalTitle({super.key,
|
||||
required this.title,
|
||||
required this.iconUrl,
|
||||
required this.isHMC,
|
||||
required this.itemCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(iconUrl),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color: isHMC ? Color(0xFF40ACC9) : Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 6,
|
||||
),
|
||||
Text(
|
||||
isHMC
|
||||
? "${TranslationBase.of(context).MedicalCenterString(num.parse(itemCount)).replaceAll("@", itemCount)}"
|
||||
: "${TranslationBase.of(context).HospitalString(num.parse(itemCount)).replaceAll("@", itemCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 12, color: Colors.black, fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///todo the current content of the application
|
||||
/// return AppExpandableNotifier(
|
||||
// paddingValue: 10,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: CustomColors.appBackgroudGrey2Color,
|
||||
// headerWidget: RegionTitle(
|
||||
// title: key,
|
||||
// hmcCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
// hmgCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// isTitleSingleLine: false,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// widgetColor: Color(0xFFF8F8F8),
|
||||
// bodyWidget: Column(
|
||||
// children: [
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.all(8.0),
|
||||
// child: AppExpandableNotifier(
|
||||
// paddingValue: 8,
|
||||
// applyBackgroundColor: false,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: Colors.white,
|
||||
// headerRadius: BorderRadius.circular(16),
|
||||
// headerWidget: HospitalTitle(
|
||||
// iconUrl: 'assets/images/svg/HMG.svg',
|
||||
// title: TranslationBase.of(context).hmgHospital,
|
||||
// isHMC: false,
|
||||
// itemCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// bodyWidget: HospitalBodyWidget(
|
||||
// patientDoctorAppointmentListHospital:
|
||||
// widget.patientDoctorAppointmentListHospital
|
||||
// .registeredDoctorMap?[key]?.hmgDoctorList,
|
||||
// isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
// isObGyneAppointment: widget.isObGyneAppointment,
|
||||
// isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(
|
||||
// bottom: 8.0, left: 8, right: 8),
|
||||
// child: AppExpandableNotifier(
|
||||
// paddingValue: 8,
|
||||
// applyBackgroundColor: false,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: Colors.white,
|
||||
// headerRadius: BorderRadius.circular(16),
|
||||
// headerWidget: HospitalTitle(
|
||||
// iconUrl: 'assets/images/svg/HMC.svg',
|
||||
// title: TranslationBase.of(context).hmcHospital,
|
||||
// isHMC: true,
|
||||
// itemCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// bodyWidget: HospitalBodyWidget(
|
||||
// patientDoctorAppointmentListHospital:
|
||||
// widget.patientDoctorAppointmentListHospital
|
||||
// .registeredDoctorMap?[key]?.hmcDoctorList,
|
||||
// isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
// isObGyneAppointment: widget.isObGyneAppointment,
|
||||
// isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ));
|
||||
@ -0,0 +1,853 @@
|
||||
import 'package:diplomaticquarterapp/config/size_config.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/models/Appointments/OBGyneProcedureListResponse.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByClinic.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByDoctors.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByFacility.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByHospital.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/search_result/ResultByRegion.dart';
|
||||
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
|
||||
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
|
||||
import 'package:diplomaticquarterapp/services/appointment_services/doctor_response_mapper.dart';
|
||||
import 'package:diplomaticquarterapp/theme/colors.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../../../config/shared_pref_kay.dart';
|
||||
import '../../../core/service/client/base_app_client.dart';
|
||||
|
||||
class SearchResultWithTabForHospital extends StatefulWidget {
|
||||
List<DoctorList> doctorsList = [];
|
||||
RegionList patientDoctorAppointmentListHospital;
|
||||
bool isLiveCareAppointment;
|
||||
bool isObGyneAppointment;
|
||||
bool isDoctorNameSearch;
|
||||
OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
bool isDoctorSearchResult;
|
||||
|
||||
bool isForHospital;
|
||||
|
||||
SearchResultWithTabForHospital({
|
||||
required this.doctorsList,
|
||||
required this.patientDoctorAppointmentListHospital,
|
||||
this.isObGyneAppointment = false,
|
||||
this.isDoctorNameSearch = false,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
this.isForHospital = true,
|
||||
});
|
||||
|
||||
@override
|
||||
State<SearchResultWithTabForHospital> createState() =>
|
||||
_SearchResultWithTabForHospitalState();
|
||||
}
|
||||
|
||||
class _SearchResultWithTabForHospitalState
|
||||
extends State<SearchResultWithTabForHospital> {
|
||||
int _currentIndex = 0;
|
||||
late PageController _controller;
|
||||
String selectedRegion = "";
|
||||
HospitalsModel? selectedHospital;
|
||||
bool isHMCSelected = false;
|
||||
int selectedHospitalIndex = -1;
|
||||
ScrollController scrollController = ScrollController();
|
||||
RegionList? doctorList;
|
||||
bool nearestAppointment= false;
|
||||
int clinicId = -1;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controller = new PageController();
|
||||
}
|
||||
|
||||
changePageViewIndex(pageIndex) {
|
||||
_controller.jumpToPage(pageIndex);
|
||||
// if (scrollController.hasClients) {
|
||||
// print("it has clients");
|
||||
// scrollController.animateTo(pageIndex.toDouble(),curve: Curves.easeOut,
|
||||
// duration: const Duration(milliseconds: 300),);}
|
||||
}
|
||||
|
||||
void handleBackClick() {
|
||||
switch (_currentIndex) {
|
||||
case 1:
|
||||
selectedHospitalIndex = -1;
|
||||
selectedRegion = "";
|
||||
doctorList = null;
|
||||
_currentIndex = 0;
|
||||
changePageViewIndex(0);
|
||||
break;
|
||||
case 2:
|
||||
selectedHospitalIndex = -1;
|
||||
doctorList = null;
|
||||
_currentIndex = 1;
|
||||
changePageViewIndex(1);
|
||||
break;
|
||||
case 3:
|
||||
selectedHospitalIndex = -1;
|
||||
doctorList = null;
|
||||
_currentIndex = 2;
|
||||
changePageViewIndex(2);
|
||||
break;
|
||||
case 4:
|
||||
_currentIndex = 3;
|
||||
doctorList = null;
|
||||
changePageViewIndex(3);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
child: widget.patientDoctorAppointmentListHospital.registeredDoctorMap
|
||||
?.isNotEmpty ==
|
||||
true
|
||||
? SizedBox(
|
||||
height: SizeConfig.realScreenHeight! * .9,
|
||||
width: SizeConfig.realScreenWidth,
|
||||
child: Column(children: <Widget>[
|
||||
Container(
|
||||
width: double.infinity,
|
||||
padding: EdgeInsets.only(left: 20, right: 20, top: 12),
|
||||
child: SizedBox(
|
||||
height: 100,
|
||||
child: ListView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
controller: scrollController,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 5.2,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectRegion,
|
||||
status: _currentIndex == 0
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: _currentIndex > 0
|
||||
? TranslationBase.of(context).completed
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 0
|
||||
? CustomColors.orange
|
||||
: CustomColors.green,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedHospitalIndex = -1;
|
||||
selectedRegion = "";
|
||||
doctorList = null;
|
||||
_currentIndex = 0;
|
||||
changePageViewIndex(0);
|
||||
nearestAppointment = false;
|
||||
clinicId = -1;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 5.2,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectFacitlity,
|
||||
status: _currentIndex == 1
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: _currentIndex > 1
|
||||
? TranslationBase.of(context).completed
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 1
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 1
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedHospitalIndex = -1;
|
||||
doctorList = null;
|
||||
_currentIndex = 1;
|
||||
changePageViewIndex(1);
|
||||
nearestAppointment = false;
|
||||
clinicId = -1;
|
||||
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 5.2,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectBranch,
|
||||
status: _currentIndex == 2
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: _currentIndex > 1
|
||||
? TranslationBase.of(context).completed
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 2
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 2
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
selectedHospitalIndex = -1;
|
||||
doctorList = null;
|
||||
_currentIndex = 2;
|
||||
changePageViewIndex(2);
|
||||
nearestAppointment = false;
|
||||
clinicId = -1;
|
||||
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 5.2,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectClinic,
|
||||
status: _currentIndex == 3
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: _currentIndex > 3
|
||||
? TranslationBase.of(context).completed
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex == 3
|
||||
? CustomColors.orange
|
||||
: _currentIndex > 3
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
doctorList = null;
|
||||
changePageViewIndex(3);
|
||||
_currentIndex = 3;
|
||||
nearestAppointment= false;
|
||||
clinicId = -1;
|
||||
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width / 5.2,
|
||||
child: showProgress(
|
||||
title: TranslationBase.of(context).selectDoctor,
|
||||
status: _currentIndex ==
|
||||
((widget.isForHospital) ? 4 : 3)
|
||||
? TranslationBase.of(context).inPrgress
|
||||
: TranslationBase.of(context).locked,
|
||||
color: _currentIndex ==
|
||||
((widget.isForHospital) ? 4 : 3)
|
||||
? CustomColors.orange
|
||||
: _currentIndex ==
|
||||
((widget.isForHospital) ? 5 : 4)
|
||||
? CustomColors.green
|
||||
: CustomColors.grey2,
|
||||
isNeedBorder: false,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_currentIndex =
|
||||
((widget.isForHospital) ? 4 : 3);
|
||||
changePageViewIndex(_currentIndex);
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsetsDirectional.fromSTEB(10.0, 18, 0, 24),
|
||||
child: Row(
|
||||
children: [
|
||||
(_currentIndex != 0)
|
||||
? InkWell(
|
||||
onTap: () {
|
||||
handleBackClick();
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsetsDirectional.fromSTEB(
|
||||
0, 0, 04, 0),
|
||||
child: Icon(
|
||||
Icons.arrow_back,
|
||||
color: Theme.of(context).primaryColor,
|
||||
),
|
||||
),
|
||||
)
|
||||
: mWidth(24),
|
||||
Text(
|
||||
getTitle(),
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
// mHeight(24),
|
||||
Expanded(
|
||||
child: PageView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
controller: _controller,
|
||||
onPageChanged: (index) {
|
||||
setState(() {
|
||||
_currentIndex = index;
|
||||
});
|
||||
},
|
||||
scrollDirection: Axis.horizontal,
|
||||
children: <Widget>[
|
||||
ResultByRegion(
|
||||
doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital:
|
||||
widget.patientDoctorAppointmentListHospital,
|
||||
onRegionSelected: (key) {
|
||||
setState(() {
|
||||
selectedRegion = key;
|
||||
_currentIndex = 1;
|
||||
changePageViewIndex(1);
|
||||
});
|
||||
}),
|
||||
(selectedRegion != "")
|
||||
? ResultByFacility(
|
||||
doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital:
|
||||
widget.patientDoctorAppointmentListHospital,
|
||||
selectedRegion: selectedRegion,
|
||||
onFacilitySelected: (isHMCSelected) {
|
||||
setState(() {
|
||||
this.isHMCSelected = isHMCSelected;
|
||||
_currentIndex = 2;
|
||||
changePageViewIndex(2);
|
||||
});
|
||||
},
|
||||
)
|
||||
: SizedBox.shrink(),
|
||||
(selectedRegion != '')
|
||||
? ResultByHospital(
|
||||
doctorsList: widget.doctorsList,
|
||||
paitientDoctorAppointmentList: (isHMCSelected)
|
||||
? widget
|
||||
.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap![selectedRegion]!
|
||||
.hmcDoctorList ??
|
||||
[]
|
||||
: widget
|
||||
.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap?[selectedRegion]
|
||||
?.hmgDoctorList ??
|
||||
[],
|
||||
isHMCSelected: isHMCSelected,
|
||||
isLiveCareAppointment:
|
||||
widget.isLiveCareAppointment,
|
||||
isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
onHospitalSelected: (hospitalName, index) {
|
||||
setState(() {
|
||||
selectedHospitalIndex = index;
|
||||
selectedHospital = (!isHMCSelected)
|
||||
? widget
|
||||
.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap![selectedRegion]!
|
||||
.hmgDoctorList![selectedHospitalIndex]
|
||||
.hospitalList
|
||||
.first
|
||||
: widget
|
||||
.patientDoctorAppointmentListHospital
|
||||
.registeredDoctorMap![selectedRegion]!
|
||||
.hmcDoctorList![selectedHospitalIndex]
|
||||
.hospitalList
|
||||
.first;
|
||||
_currentIndex = 3;
|
||||
changePageViewIndex(3);
|
||||
});
|
||||
})
|
||||
: SizedBox.shrink(),
|
||||
(selectedHospital != null &&
|
||||
selectedRegion != '' &&
|
||||
selectedHospitalIndex != -1)
|
||||
? ResultByClinic(
|
||||
onClinicSelected: (doctorList, clinicId) {
|
||||
setState(() {
|
||||
this.nearestAppointment = false;
|
||||
this.doctorList = doctorList;
|
||||
_currentIndex = 4;
|
||||
changePageViewIndex(4);
|
||||
if(clinicId != null)
|
||||
this.clinicId = clinicId;
|
||||
});
|
||||
},
|
||||
selectedValue: selectedHospital)
|
||||
: SizedBox.shrink(),
|
||||
(selectedRegion != '' &&
|
||||
selectedHospitalIndex != -1 &&
|
||||
doctorList != null)
|
||||
? ResultByDoctor(
|
||||
doctorsList: widget.doctorsList,
|
||||
patientDoctorAppointmentListHospital:
|
||||
(!isHMCSelected)
|
||||
? doctorList!
|
||||
.registeredDoctorMap![
|
||||
selectedRegion]!
|
||||
.hmgDoctorList!
|
||||
.first
|
||||
.patientDoctorAppointmentList ??
|
||||
[]
|
||||
: doctorList!
|
||||
.registeredDoctorMap?[
|
||||
selectedRegion]
|
||||
?.hmcDoctorList!
|
||||
.first
|
||||
.patientDoctorAppointmentList ??
|
||||
[],
|
||||
isLiveCareAppointment:
|
||||
widget.isLiveCareAppointment,
|
||||
isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
isObGyneAppointment: widget.isObGyneAppointment,
|
||||
isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
showNearestAppointment: clinicId != -1 ,
|
||||
nearestAppointmentDoctors: nearestAppointment,
|
||||
refreshDoctorList: (isNearestAppointmentChecked){
|
||||
setState(() {
|
||||
// changePageViewIndex(3);
|
||||
// _currentIndex = 3;
|
||||
nearestAppointment= false;
|
||||
});
|
||||
callDoctorsSearchAPI(clinicId, isNearestAppointmentChecked);
|
||||
},
|
||||
|
||||
)
|
||||
: SizedBox.shrink(),
|
||||
],
|
||||
),
|
||||
),
|
||||
]),
|
||||
)
|
||||
: getNoDataWidget(context),
|
||||
);
|
||||
}
|
||||
|
||||
callDoctorsSearchAPI(int clinicID, bool nearestAppointment) {
|
||||
var isArabic = context.read<ProjectViewModel>().isArabic;
|
||||
int languageID = isArabic ? 1 : 2;
|
||||
GifLoaderDialogUtils.showMyDialog(context);
|
||||
List<DoctorList> doctorsList = [];
|
||||
List<String> arr = [];
|
||||
List<String> arrDistance = [];
|
||||
List<String> result;
|
||||
int numAll;
|
||||
List<PatientDoctorAppointmentList> _patientDoctorAppointmentListHospital = [];
|
||||
|
||||
DoctorsListService service = new DoctorsListService();
|
||||
service
|
||||
.getDoctorsList(clinicID, selectedHospital?.mainProjectID.toString() != "" ? int.parse(selectedHospital?.mainProjectID.toString() ?? "-1") : 0, nearestAppointment, languageID, null)
|
||||
.then((res) async {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
if (res['MessageStatus'] == 1) {
|
||||
RegionList regionHospitalList = RegionList();
|
||||
|
||||
if (res['DoctorList'].length != 0) {
|
||||
res['DoctorList'].forEach((v) {
|
||||
doctorsList.add(new DoctorList.fromJson(
|
||||
v,
|
||||
));
|
||||
});
|
||||
|
||||
regionHospitalList = await DoctorMapper.getMappedDoctor(doctorsList, isArabic: isArabic);
|
||||
var lat = await sharedPref.getDouble(USER_LAT);
|
||||
|
||||
var lng = await sharedPref.getDouble(USER_LONG);
|
||||
var isLocationEnabled = (lat != null && lat != 0.0) && (lng != null && lng != 0.0);
|
||||
regionHospitalList = await DoctorMapper.sortList(isLocationEnabled, regionHospitalList);
|
||||
|
||||
setState(() {
|
||||
this.doctorList = regionHospitalList;
|
||||
_currentIndex = 4;
|
||||
changePageViewIndex(4);
|
||||
this.nearestAppointment = nearestAppointment;
|
||||
});
|
||||
} else {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
AppToast.showErrorToast(message: res['ErrorSearchMsg']);
|
||||
}
|
||||
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
// navigateToSearchResults(context, doctorsList, _patientDoctorAppointmentListHospital);
|
||||
} else {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
|
||||
}
|
||||
}).catchError((err) {
|
||||
GifLoaderDialogUtils.hideDialog(context);
|
||||
print(err);
|
||||
AppToast.showErrorToast(message: err, localContext: context);
|
||||
});
|
||||
}
|
||||
String getTitle() {
|
||||
switch (_currentIndex) {
|
||||
case 0:
|
||||
return TranslationBase.of(context).selectRegion;
|
||||
case 1:
|
||||
return TranslationBase.of(context).selectFacitlity;
|
||||
case 2:
|
||||
return TranslationBase.of(context).selectBranch;
|
||||
case 3:
|
||||
return TranslationBase.of(context).selectClinic;
|
||||
case 4:
|
||||
return TranslationBase.of(context).selectDoctor;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
Widget showProgress(
|
||||
{String? title,
|
||||
String? status,
|
||||
Color? color,
|
||||
bool isNeedBorder = true,
|
||||
Function()? onTap}) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
if (status == TranslationBase.of(context).completed) {
|
||||
onTap?.call();
|
||||
}
|
||||
},
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Container(
|
||||
width: 26,
|
||||
height: 26,
|
||||
decoration: containerRadius(color!, 200),
|
||||
child: Icon(
|
||||
Icons.done,
|
||||
color: Colors.white,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
if (isNeedBorder)
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: mDivider(Colors.grey),
|
||||
)),
|
||||
],
|
||||
),
|
||||
mHeight(8),
|
||||
Text(
|
||||
title!,
|
||||
style: TextStyle(
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.w500,
|
||||
letterSpacing: -0.44,
|
||||
),
|
||||
),
|
||||
mHeight(2),
|
||||
Container(
|
||||
padding: EdgeInsets.all(5),
|
||||
decoration: containerRadius(color!.withOpacity(0.2), 4),
|
||||
child: Text(
|
||||
status!,
|
||||
style: TextStyle(
|
||||
fontSize: 8,
|
||||
fontWeight: FontWeight.w600,
|
||||
letterSpacing: -0.32,
|
||||
color: color,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalBodyWidget extends StatelessWidget {
|
||||
final List<PatientDoctorAppointmentList>?
|
||||
patientDoctorAppointmentListHospital;
|
||||
final bool isLiveCareAppointment;
|
||||
final bool isObGyneAppointment;
|
||||
final bool isDoctorNameSearch;
|
||||
final bool isDoctorSearchResult;
|
||||
final OBGyneProcedureListResponse? obGyneProcedureListResponse;
|
||||
|
||||
const HospitalBodyWidget({
|
||||
super.key,
|
||||
this.patientDoctorAppointmentListHospital,
|
||||
required this.isLiveCareAppointment,
|
||||
required this.isObGyneAppointment,
|
||||
required this.isDoctorNameSearch,
|
||||
required this.isDoctorSearchResult,
|
||||
this.obGyneProcedureListResponse,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.separated(
|
||||
addAutomaticKeepAlives: true,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: patientDoctorAppointmentListHospital?.length ?? 0,
|
||||
separatorBuilder: (context, index) {
|
||||
return Container(
|
||||
height: 12,
|
||||
margin: EdgeInsets.only(left: 21, right: 21),
|
||||
);
|
||||
},
|
||||
itemBuilder: (context, index) {
|
||||
return AppExpandableNotifier(
|
||||
applyBackgroundColor: false,
|
||||
widgetColor: CustomColors.appBackgroudGrey2Color,
|
||||
title: (patientDoctorAppointmentListHospital?[index].distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index].filterName! +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase.of(context).km
|
||||
: patientDoctorAppointmentListHospital![index].filterName,
|
||||
projectTitleTop:
|
||||
patientDoctorAppointmentListHospital![index].projectTopName,
|
||||
projectTitleBottom: (patientDoctorAppointmentListHospital![index]
|
||||
.distanceInKMs !=
|
||||
"0")
|
||||
? patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString() +
|
||||
" - " +
|
||||
patientDoctorAppointmentListHospital![index].distanceInKMs! +
|
||||
" " +
|
||||
TranslationBase.of(context).km
|
||||
: patientDoctorAppointmentListHospital![index]
|
||||
.projectBottomName
|
||||
.toString(),
|
||||
isTitleSingleLine: false,
|
||||
isDoctorSearchResult: isDoctorSearchResult,
|
||||
isExpand:
|
||||
patientDoctorAppointmentListHospital?.length == 1 ? true : false,
|
||||
bodyWidget: ListView.separated(
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
padding:
|
||||
EdgeInsets.only(bottom: 10, top: 10, left: 21, right: 21),
|
||||
itemBuilder: (context, _index) {
|
||||
// print("the index of patientDoctorAppointmentList is ${_index}");
|
||||
// print("the index of parent is ${index}");
|
||||
final doctor = patientDoctorAppointmentListHospital![index]
|
||||
.patientDoctorAppointmentList![_index];
|
||||
// print('the doctor is ${doctor.toJson()}');
|
||||
return DoctorView(
|
||||
doctor: doctor,
|
||||
isLiveCareAppointment: isLiveCareAppointment,
|
||||
isObGyneAppointment: isObGyneAppointment,
|
||||
isDoctorNameSearch: isDoctorNameSearch,
|
||||
obGyneProcedureListResponse: obGyneProcedureListResponse,
|
||||
isShowDate: false,
|
||||
onTap: () {
|
||||
context
|
||||
.read<ProjectViewModel>()
|
||||
.analytics
|
||||
.appointment
|
||||
.book_appointment_select_doctor(
|
||||
appointment_type: 'regular', doctor: doctor);
|
||||
});
|
||||
},
|
||||
separatorBuilder: (context, index) => SizedBox(height: 14),
|
||||
itemCount: patientDoctorAppointmentListHospital?[index]
|
||||
.patientDoctorAppointmentList
|
||||
?.length ??
|
||||
0),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RegionTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String hmcCount;
|
||||
final String hmgCount;
|
||||
|
||||
const RegionTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.hmcCount,
|
||||
required this.hmgCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 22, color: Colors.black, fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"${TranslationBase.of(context).HospitalString(num.parse(hmgCount)).replaceAll("@", hmgCount)} ,",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
"${TranslationBase.of(context).MedicalCenterString(num.parse(hmcCount)).replaceAll("@", hmcCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Color(0xFF40ACC9),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HospitalTitle extends StatelessWidget {
|
||||
final String title;
|
||||
final String iconUrl;
|
||||
final bool isHMC;
|
||||
final String itemCount;
|
||||
|
||||
const HospitalTitle(
|
||||
{super.key,
|
||||
required this.title,
|
||||
required this.iconUrl,
|
||||
required this.isHMC,
|
||||
required this.itemCount});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(iconUrl),
|
||||
SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
color: isHMC ? Color(0xFF40ACC9) : Color(0xFFD02127),
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 6,
|
||||
),
|
||||
Text(
|
||||
isHMC
|
||||
? "${TranslationBase.of(context).MedicalCenterString(num.parse(itemCount)).replaceAll("@", itemCount)}"
|
||||
: "${TranslationBase.of(context).HospitalString(num.parse(itemCount)).replaceAll("@", itemCount)}",
|
||||
style: TextStyle(
|
||||
fontSize: 12, color: Colors.black, fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
///todo the current content of the application
|
||||
/// return AppExpandableNotifier(
|
||||
// paddingValue: 10,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: CustomColors.appBackgroudGrey2Color,
|
||||
// headerWidget: RegionTitle(
|
||||
// title: key,
|
||||
// hmcCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
// hmgCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// isTitleSingleLine: false,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// widgetColor: Color(0xFFF8F8F8),
|
||||
// bodyWidget: Column(
|
||||
// children: [
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.all(8.0),
|
||||
// child: AppExpandableNotifier(
|
||||
// paddingValue: 8,
|
||||
// applyBackgroundColor: false,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: Colors.white,
|
||||
// headerRadius: BorderRadius.circular(16),
|
||||
// headerWidget: HospitalTitle(
|
||||
// iconUrl: 'assets/images/svg/HMG.svg',
|
||||
// title: TranslationBase.of(context).hmgHospital,
|
||||
// isHMC: false,
|
||||
// itemCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmgSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// bodyWidget: HospitalBodyWidget(
|
||||
// patientDoctorAppointmentListHospital:
|
||||
// widget.patientDoctorAppointmentListHospital
|
||||
// .registeredDoctorMap?[key]?.hmgDoctorList,
|
||||
// isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
// isObGyneAppointment: widget.isObGyneAppointment,
|
||||
// isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.only(
|
||||
// bottom: 8.0, left: 8, right: 8),
|
||||
// child: AppExpandableNotifier(
|
||||
// paddingValue: 8,
|
||||
// applyBackgroundColor: false,
|
||||
// applyBackgroundToOnlyHeader: true,
|
||||
// completeHeaderColor: Colors.white,
|
||||
// headerRadius: BorderRadius.circular(16),
|
||||
// headerWidget: HospitalTitle(
|
||||
// iconUrl: 'assets/images/svg/HMC.svg',
|
||||
// title: TranslationBase.of(context).hmcHospital,
|
||||
// isHMC: true,
|
||||
// itemCount:
|
||||
// "${widget.patientDoctorAppointmentListHospital.registeredDoctorMap?[key]?.hmcSize ?? 0}",
|
||||
// ),
|
||||
// showDropDownIconWithCustomHeader: true,
|
||||
// bodyWidget: HospitalBodyWidget(
|
||||
// patientDoctorAppointmentListHospital:
|
||||
// widget.patientDoctorAppointmentListHospital
|
||||
// .registeredDoctorMap?[key]?.hmcDoctorList,
|
||||
// isLiveCareAppointment: widget.isLiveCareAppointment,
|
||||
// isObGyneAppointment: widget.isObGyneAppointment,
|
||||
// isDoctorNameSearch: widget.isDoctorNameSearch,
|
||||
// isDoctorSearchResult: widget.isDoctorSearchResult,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ));
|
||||