Merge branch 'development_v2.5' into 'zik_new_design_flutter_v2.5'

# Conflicts:
#   lib/pages/BookAppointment/QRCode.dart
#   lib/pages/login/register-info.dart
#   lib/pages/medical/balance/confirm_payment_page.dart
merge-update-with-lab-changes
Zohaib Iqbal 4 years ago
commit 364ff3344a

@ -67,6 +67,8 @@ android {
}
release {
signingConfig signingConfigs.config
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
staging {

@ -0,0 +1,22 @@
{
"provider": "apple_pay",
"data": {
"merchantIdentifier": "merchant.com.hmgwebservices",
"displayName": "Sulaiman Al Habib",
"merchantCapabilities": [
"3DS",
"debit",
"credit"
],
"supportedNetworks": [
"amex",
"visa",
"discover",
"masterCard"
],
"countryCode": "SA",
"currencyCode": "SAR",
"requiredBillingContactFields": null,
"requiredShippingContactFields": null
}
}

@ -0,0 +1,22 @@
{
"provider": "apple_pay",
"data": {
"merchantIdentifier": "merchant.com.hmgwebservices",
"displayName": "Sulaiman Al Habib",
"merchantCapabilities": [
"3DS",
"debit",
"credit"
],
"supportedNetworks": [
"amex",
"visa",
"discover",
"masterCard"
],
"countryCode": "SA",
"currencyCode": "SAR",
"requiredBillingContactFields": null,
"requiredShippingContactFields": null
}
}

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.68" height="24.095" viewBox="0 0 25.68 24.095">
<path id="family_3_" data-name="family (3)" d="M11.891,15.229v1.238a3.754,3.754,0,0,1-3.75,3.75H3.3a.428.428,0,0,1-.429-.429V17.523A2.726,2.726,0,0,1,5.6,14.8h5.868A.428.428,0,0,1,11.891,15.229Zm-3.75,5.845c-3.2,0-4.352.01-4.827,0a.428.428,0,0,0-.442.428v.794a3.712,3.712,0,1,0,7.423-.03V21.2a.428.428,0,0,0-.571-.4A4.582,4.582,0,0,1,8.142,21.074ZM14.069,35.79a4.831,4.831,0,0,1-2.429.007.214.214,0,0,0-.22.341,1.852,1.852,0,0,0,2.871-.009A.214.214,0,0,0,14.069,35.79Zm1.878-.323h-.088a.423.423,0,0,0-.4.295,2.723,2.723,0,0,1-4.948.562,2.838,2.838,0,0,1-.259-.56.429.429,0,0,0-.4-.3H9.733a2.571,2.571,0,0,0-2.571,2.571v.429a.429.429,0,0,0,.429.429h10.5a.429.429,0,0,0,.429-.429v-.429A2.571,2.571,0,0,0,15.947,35.466ZM2.877,33.893H.429A.429.429,0,0,0,0,34.321v4.145a.429.429,0,0,0,.429.429H2.877a.429.429,0,0,0,.429-.429V34.321A.429.429,0,0,0,2.877,33.893Zm7.153-6.685a.428.428,0,0,0-.226-.779l-.125,0a.354.354,0,0,0-.332.229,2.906,2.906,0,0,1-2.671,1.929A2.945,2.945,0,0,1,3.955,26.6a.259.259,0,0,0-.243-.175A3.711,3.711,0,0,0,0,30.138v2.469a.429.429,0,0,0,.429.429H2.877a.429.429,0,0,0,.429-.429v-.179a.438.438,0,0,1,.4-.442.429.429,0,0,1,.457.427v6.053a.429.429,0,0,0,.429.429H5.877a.428.428,0,0,0,.428-.436c0-.111,0-.243,0-.421a3.434,3.434,0,0,1,2.49-3.3.429.429,0,0,0,.221-.677,4.83,4.83,0,0,1,1.014-6.855Zm11.939-.781a.348.348,0,0,0-.33.241,2.754,2.754,0,0,1-2.551,1.9,2.874,2.874,0,0,1-2.581-1.926.346.346,0,0,0-.322-.217c-.1,0-.195,0-.3,0a.429.429,0,0,0-.232.779,4.829,4.829,0,0,1,1.01,6.853.429.429,0,0,0,.221.678,3.434,3.434,0,0,1,2.49,3.3c0,.178,0,.31,0,.421a.428.428,0,0,0,.428.436h1.286a.429.429,0,0,0,.429-.429V32.413a.429.429,0,0,1,.457-.427.438.438,0,0,1,.4.442v.179a.429.429,0,0,0,.429.429h2.448a.429.429,0,0,0,.429-.429V30.138A3.711,3.711,0,0,0,21.969,26.427Zm.406,7.894v4.145a.429.429,0,0,0,.429.429h2.448a.429.429,0,0,0,.429-.429V34.321a.429.429,0,0,0-.429-.429H22.8A.429.429,0,0,0,22.375,34.321Zm-3.2-19.5a5.342,5.342,0,0,0-5.389,5.336v5.314a.429.429,0,0,0,.585.4,4.556,4.556,0,0,1,.707-.207.43.43,0,0,0,.258-.679,4.627,4.627,0,0,1-.9-2.744V20.589a1.286,1.286,0,0,1,1.3-1.286,15.689,15.689,0,0,0,5.184-.809,2.018,2.018,0,0,1,2.66,1.91v1.868a4.586,4.586,0,0,1-.9,2.722.428.428,0,0,0,.248.676,4.527,4.527,0,0,1,.92.3.429.429,0,0,0,.609-.389V20.228a5.38,5.38,0,0,0-5.283-5.4ZM12.84,27.164A3.964,3.964,0,1,0,16.8,31.128a3.969,3.969,0,0,0-3.964-3.964Zm5.141-.433a.214.214,0,0,0-.2.356,1.723,1.723,0,0,0,2.713-.077.214.214,0,0,0-.226-.341A4.6,4.6,0,0,1,17.982,26.731Zm3.207-7.424a16.524,16.524,0,0,1-5.467.853.428.428,0,0,0-.433.429v1.654a3.716,3.716,0,1,0,7.431.031V20.4A1.159,1.159,0,0,0,21.189,19.307Zm-15.764,7.4a.214.214,0,0,0-.213.352,1.927,1.927,0,0,0,2.969-.066.214.214,0,0,0-.227-.343A4.576,4.576,0,0,1,5.425,26.708Z" transform="translate(0 -14.8)" fill="#989898"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 259 KiB

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="21.035" height="25.699" viewBox="0 0 21.035 25.699">
<g id="file_4_" data-name="file (4)" transform="translate(0 0)">
<path id="Path_4376" data-name="Path 4376" d="M199.117,108.4h.751v18.461a2.228,2.228,0,0,0,2.225,2.225h13.668v.684a1.42,1.42,0,0,1-1.42,1.42H199.12a1.42,1.42,0,0,1-1.42-1.42V109.82A1.418,1.418,0,0,1,199.117,108.4Z" transform="translate(-197.7 -105.491)" fill="#989898"/>
<path id="Path_4377" data-name="Path 4377" d="M95.931,22.79H88.32a1.42,1.42,0,0,1-1.42-1.42V1.42A1.42,1.42,0,0,1,88.32,0H98.462V.47a1.378,1.378,0,0,0-.008.15V4.509a2,2,0,0,0,2,2h3.889c.04,0,.083,0,.123-.005h.494V21.371a1.42,1.42,0,0,1-1.42,1.42H95.931Zm-.287-4.825h4.962a.671.671,0,0,0,0-1.342H95.641a.671.671,0,1,0,0,1.342Zm-4.965-3.424h9.927a.671.671,0,0,0,0-1.342H90.679a.671.671,0,0,0,0,1.342Zm9.927-4.978H90.679a.671.671,0,0,0,0,1.342h9.927a.671.671,0,0,0,0-1.342Z" transform="translate(-83.924 0)" fill="#989898"/>
<path id="Path_4378" data-name="Path 4378" d="M92.626,6.481h-3.9A1.191,1.191,0,0,1,87.546,5.3V1.4a.6.6,0,0,1,.6-.6.582.582,0,0,1,.419.177L93.05,5.462A.6.6,0,0,1,92.626,6.481Z" transform="translate(-72.209 -0.779)" fill="#989898"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,3 @@
<svg id="weekly-calendar-page-symbol" xmlns="http://www.w3.org/2000/svg" width="25.034" height="25.034" viewBox="0 0 25.034 25.034">
<path id="Path_4379" data-name="Path 4379" d="M22.53,0H2.5A2.511,2.511,0,0,0,0,2.5V22.53a2.512,2.512,0,0,0,2.5,2.5H22.53a2.512,2.512,0,0,0,2.5-2.5V2.5A2.511,2.511,0,0,0,22.53,0ZM6.756,22.031H2.921V18.62H6.756v3.411Zm0-4.555H2.921v-3.41H6.756v3.41ZM6.467,3.794A1.063,1.063,0,1,1,7.529,2.731,1.062,1.062,0,0,1,6.467,3.794Zm5.406,18.237H8.039V18.62h3.834Zm0-4.555H8.039v-3.41h3.834Zm0-4.552H8.039V9.514h3.834ZM11.455,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,11.455,2.731Zm5.54,14.745H13.159v-3.41H17v3.41Zm0-4.552H13.159V9.514H17v3.41ZM17.5,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,17.5,2.731Zm4.609,14.745H18.278v-3.41h3.835Zm0-4.552H18.278V9.514h3.835Z" fill="#989898"/>
</svg>

After

Width:  |  Height:  |  Size: 838 B

@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" width="39.338" height="34.687" viewBox="0 0 39.338 34.687">
<g id="ambulance_5_" data-name="ambulance (5)" transform="translate(0 -28.362)">
<g id="Group_8189" data-name="Group 8189" transform="translate(0 34.785)">
<g id="Group_8188" data-name="Group 8188">
<path id="Path_4980" data-name="Path 4980" d="M38.918,121.812l-3.485-3.107-5.29-7.305a1.252,1.252,0,0,0-1.008-.5H26.365l-1.008-3.275a1.26,1.26,0,0,0-1.217-.924H20.991a1.221,1.221,0,0,0-1.218,1.008l-.63,3.191H1.469A1.237,1.237,0,0,0,.21,112.156L0,129.915a1.237,1.237,0,0,0,1.259,1.259H4.534a4.969,4.969,0,0,0,9.656,0h8.942a4.969,4.969,0,0,0,9.656,0h5.29a1.237,1.237,0,0,0,1.259-1.259v-7.179A1.2,1.2,0,0,0,38.918,121.812ZM9.362,132.433A2.435,2.435,0,1,1,11.8,130,2.437,2.437,0,0,1,9.362,132.433Zm18.556,0A2.435,2.435,0,1,1,30.354,130,2.437,2.437,0,0,1,27.919,132.433ZM23.93,118.285v-4.87h4.534l3.569,4.87Z" transform="translate(0 -106.698)" fill="#2e303a"/>
</g>
</g>
<g id="Group_8191" data-name="Group 8191" transform="translate(21.327 28.362)">
<g id="Group_8190" data-name="Group 8190" transform="translate(0 0)">
<rect id="Rectangle_17462" data-name="Rectangle 17462" width="2.519" height="5.248" fill="#da4a54"/>
</g>
</g>
<g id="Group_8193" data-name="Group 8193" transform="translate(25.455 30.177)">
<g id="Group_8192" data-name="Group 8192" transform="translate(0 0)">
<rect id="Rectangle_17463" data-name="Rectangle 17463" width="5.416" height="2.519" transform="translate(0 3.829) rotate(-45)" fill="#da4a54"/>
</g>
</g>
<g id="Group_8195" data-name="Group 8195" transform="translate(14.112 30.196)">
<g id="Group_8194" data-name="Group 8194" transform="translate(0 0)">
<rect id="Rectangle_17464" data-name="Rectangle 17464" width="2.519" height="5.416" transform="translate(0 1.781) rotate(-45)" fill="#da4a54"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="33.632" height="30.862" viewBox="0 0 33.632 30.862">
<g id="a" transform="translate(0 -21.085)">
<g id="Group_10604" data-name="Group 10604" transform="translate(0 21.085)">
<g id="Group_10603" data-name="Group 10603" transform="translate(0 0)">
<path id="Path_13515" data-name="Path 13515" d="M33.07,32.61,17.656,21.4a1.279,1.279,0,0,0-1.681,0L.561,32.61A1.415,1.415,0,0,0,1.4,35.132H4.2V50.546a1.324,1.324,0,0,0,1.4,1.4h22.42a1.324,1.324,0,0,0,1.4-1.4V35.132h2.8A1.415,1.415,0,0,0,33.07,32.61ZM16.816,49.145a8.407,8.407,0,1,1,8.407-8.407A8.432,8.432,0,0,1,16.816,49.145Z" transform="translate(0 -21.085)" fill="#2e303a"/>
</g>
</g>
<g id="Group_10606" data-name="Group 10606" transform="translate(10.51 34.432)">
<g id="Group_10605" data-name="Group 10605">
<path id="Path_13516" data-name="Path 13516" d="M168.425,228.489v-4.2h-4.2v4.2h-4.2v4.2h4.2v4.2h4.2v-4.2h4.2v-4.2Z" transform="translate(-160.018 -224.285)" fill="#da4a54"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="36.033" height="32.32" viewBox="0 0 36.033 32.32">
<g id="Group_6982" data-name="Group 6982" transform="translate(0 0)">
<g id="Group_6964" data-name="Group 6964">
<path id="Subtraction_64" data-name="Subtraction 64" d="M807.5,957.28h-3.132a3.925,3.925,0,0,1-1.545-.314,4.019,4.019,0,0,1-2.121-2.119,3.9,3.9,0,0,1-.314-1.54V941.469a3.908,3.908,0,0,1,.314-1.543,4.014,4.014,0,0,1,2.118-2.116,3.916,3.916,0,0,1,1.54-.312h14.682a3.915,3.915,0,0,1,1.543.314,4.01,4.01,0,0,1,2.116,2.118,3.92,3.92,0,0,1,.313,1.54v2.919a3.274,3.274,0,0,0,0,6.127V953.3a3.93,3.93,0,0,1-.309,1.545,4,4,0,0,1-2.113,2.12,3.91,3.91,0,0,1-1.542.314h-3.432a10.325,10.325,0,0,0,1.118-1.11,1.034,1.034,0,0,0,.228-.817,15.093,15.093,0,0,0,2.129-4.006,14.583,14.583,0,0,0,.579-2.111,10.557,10.557,0,0,0,.2-1.981,7,7,0,0,0-.313-2.292,2.991,2.991,0,0,0-.9-1.348,4.283,4.283,0,0,0-1.436-.751c-.565-.19-1.219-.34-1.91-.5h0l0-.007a1.068,1.068,0,0,0-.956-.607,1.084,1.084,0,1,0,0,2.169,1.043,1.043,0,0,0,.638-.239l.025.009h.007l.017,0c.691.159,1.236.284,1.689.431a2.958,2.958,0,0,1,1.076.549,1.844,1.844,0,0,1,.558.947,6.338,6.338,0,0,1,.16,1.631,9.146,9.146,0,0,1-.186,1.755,13.223,13.223,0,0,1-.529,1.887,14.692,14.692,0,0,1-.825,1.874,12.98,12.98,0,0,1-1.077,1.715,1.035,1.035,0,0,0-.714.346,7.34,7.34,0,0,1-1.544,1.378,3.552,3.552,0,0,1-4.162.006,7.291,7.291,0,0,1-1.543-1.371,1.035,1.035,0,0,0-.713-.346,13.038,13.038,0,0,1-1.079-1.719,14.8,14.8,0,0,1-.827-1.878,13.155,13.155,0,0,1-.53-1.89,9.167,9.167,0,0,1-.187-1.758,6.412,6.412,0,0,1,.158-1.632,1.835,1.835,0,0,1,.556-.947,2.928,2.928,0,0,1,1.077-.549c.458-.148,1.034-.28,1.7-.432l.015,0h0l.01-.009a1.072,1.072,0,0,0,.652.24,1.084,1.084,0,1,0,0-2.168,1.052,1.052,0,0,0-.575.171,1.176,1.176,0,0,0-.393.434h0l-.014,0c-2.842.656-4.557,1.051-4.557,4.893a10.584,10.584,0,0,0,.2,1.983,14.543,14.543,0,0,0,.583,2.115,14.983,14.983,0,0,0,2.146,4.013,1.028,1.028,0,0,0,.229.816,10.456,10.456,0,0,0,1.105,1.1h0Zm1.9-11.264a.588.588,0,0,0-.592.561v4.632a.585.585,0,0,0,.591.559h4.563a.588.588,0,0,0,.594-.559v-4.623a.565.565,0,0,0-.18-.4.621.621,0,0,0-.417-.169Zm26.359,9.2h-1.607a1.387,1.387,0,0,1-.718-.208l-6.684-4.219a.66.66,0,0,1-.309-.556v-.419a3.27,3.27,0,0,0,0-4.712v-.742a.661.661,0,0,1,.309-.557l6.684-4.219a1.322,1.322,0,0,1,.718-.209h1.607a.661.661,0,0,1,.665.657v14.528a.65.65,0,0,1-.193.464.665.665,0,0,1-.471.191Z" transform="translate(-800.388 -937.498)" fill="#2e303a"/>
<path id="Path_656" data-name="Path 656" d="M894.195,1023.524l-.051,13.538c0,3.014-2.447,6.151-5.461,6.151a5.464,5.464,0,0,1-5.461-5.461l-.091-4.43c1.43-.191-2.655-.191-1.227,0l.079,4.43a6.707,6.707,0,0,0,6.7,6.693c3.69,0,6.687-3.692,6.687-7.383l.051-13.538C897.162,1023.233,892.453,1023.234,894.195,1023.524Z" transform="translate(-871.015 -1012.125)" fill="#de5c5d"/>
<path id="Path_663" data-name="Path 663" d="M970.188,998.3a1.9,1.9,0,1,1-1.9,1.9h0A1.9,1.9,0,0,1,970.188,998.3Z" transform="translate(-946.411 -990.378)" fill="#de5c5d"/>
<path id="Subtraction_64-2" data-name="Subtraction 64" d="M807.5,957.28h-3.132a3.925,3.925,0,0,1-1.545-.314,4.019,4.019,0,0,1-2.121-2.119,3.9,3.9,0,0,1-.314-1.54V941.469a3.908,3.908,0,0,1,.314-1.543,4.014,4.014,0,0,1,2.118-2.116,3.916,3.916,0,0,1,1.54-.312h14.682a3.915,3.915,0,0,1,1.543.314,4.01,4.01,0,0,1,2.116,2.118,3.92,3.92,0,0,1,.313,1.54v2.919a3.274,3.274,0,0,0,0,6.127V953.3a3.93,3.93,0,0,1-.309,1.545,4,4,0,0,1-2.113,2.12,3.91,3.91,0,0,1-1.542.314h-3.432a10.325,10.325,0,0,0,1.118-1.11,1.034,1.034,0,0,0,.228-.817,15.093,15.093,0,0,0,2.129-4.006,14.583,14.583,0,0,0,.579-2.111,10.557,10.557,0,0,0,.2-1.981,7,7,0,0,0-.313-2.292,2.991,2.991,0,0,0-.9-1.348,4.283,4.283,0,0,0-1.436-.751c-.565-.19-1.219-.34-1.91-.5h0l0-.007a1.068,1.068,0,0,0-.956-.607,1.084,1.084,0,1,0,0,2.169,1.043,1.043,0,0,0,.638-.239l.025.009h.007l.017,0c.691.159,1.236.284,1.689.431a2.958,2.958,0,0,1,1.076.549,1.844,1.844,0,0,1,.558.947,6.338,6.338,0,0,1,.16,1.631,9.146,9.146,0,0,1-.186,1.755,13.223,13.223,0,0,1-.529,1.887,14.692,14.692,0,0,1-.825,1.874,12.98,12.98,0,0,1-1.077,1.715,1.035,1.035,0,0,0-.714.346,7.34,7.34,0,0,1-1.544,1.378,3.552,3.552,0,0,1-4.162.006,7.291,7.291,0,0,1-1.543-1.371,1.035,1.035,0,0,0-.713-.346,13.038,13.038,0,0,1-1.079-1.719,14.8,14.8,0,0,1-.827-1.878,13.155,13.155,0,0,1-.53-1.89,9.167,9.167,0,0,1-.187-1.758,6.412,6.412,0,0,1,.158-1.632,1.835,1.835,0,0,1,.556-.947,2.928,2.928,0,0,1,1.077-.549c.458-.148,1.034-.28,1.7-.432l.015,0h0l.01-.009a1.072,1.072,0,0,0,.652.24,1.084,1.084,0,1,0,0-2.168,1.052,1.052,0,0,0-.575.171,1.176,1.176,0,0,0-.393.434h0l-.014,0c-2.842.656-4.557,1.051-4.557,4.893a10.584,10.584,0,0,0,.2,1.983,14.543,14.543,0,0,0,.583,2.115,14.983,14.983,0,0,0,2.146,4.013,1.028,1.028,0,0,0,.229.816,10.456,10.456,0,0,0,1.105,1.1h0Zm28.256-2.069h-1.607a1.387,1.387,0,0,1-.718-.208l-6.684-4.219a.66.66,0,0,1-.309-.556v-.419a3.27,3.27,0,0,0,0-4.712v-.742a.661.661,0,0,1,.309-.557l6.684-4.219a1.322,1.322,0,0,1,.718-.209h1.607a.661.661,0,0,1,.665.657v14.528a.65.65,0,0,1-.193.464.665.665,0,0,1-.471.191Z" transform="translate(-800.388 -937.498)" fill="#2e303a"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="31" height="31" viewBox="0 0 31 31">
<g id="Group_10602" data-name="Group 10602" transform="translate(-44.848 -10.426)">
<g id="Rectangle_18131" data-name="Rectangle 18131" transform="translate(44.848 10.426)" fill="#359846" stroke="#fff" stroke-width="1.25">
<rect width="31" height="31" rx="4" stroke="none"/>
<rect x="0.625" y="0.625" width="29.75" height="29.75" rx="3.375" fill="none"/>
</g>
<g id="pharmacy" transform="translate(51.361 16.275)">
<path id="Path_13509" data-name="Path 13509" d="M26.985,3H18.333A.333.333,0,0,0,18,3.333V9.989a.333.333,0,0,0,.333.333h8.652a.333.333,0,0,0,.333-.333V3.333A.333.333,0,0,0,26.985,3Zm-2,4.326a.333.333,0,0,1-.333.333h-1v1a.333.333,0,0,1-.333.333H21.993a.333.333,0,0,1-.333-.333v-1h-1a.333.333,0,0,1-.333-.333V6a.333.333,0,0,1,.333-.333h1v-1a.333.333,0,0,1,.333-.333h1.331a.333.333,0,0,1,.333.333v1h1A.333.333,0,0,1,24.989,6Z" transform="translate(-13.673 -3)" fill="#fff"/>
<path id="Path_13510" data-name="Path 13510" d="M22.1,36.706a2.769,2.769,0,0,1-1.784-.646,2.769,2.769,0,0,1-1.784.646,3.545,3.545,0,0,1-2.542-.646,2.769,2.769,0,0,1-1.784.646,3.545,3.545,0,0,1-2.542-.646,3.545,3.545,0,0,1-2.542.646A2.782,2.782,0,0,1,8,36.469v7.558a.333.333,0,0,0,.333.333H10V38.37a.333.333,0,0,1,.333-.333h4.326a.333.333,0,0,1,.333.333v5.99h8.652a.333.333,0,0,0,.333-.333V36.469A4.28,4.28,0,0,1,22.1,36.706Zm-.453,5.325a.333.333,0,0,1-.333.333H16.652a.333.333,0,0,1-.333-.333V38.37a.333.333,0,0,1,.333-.333h4.659a.333.333,0,0,1,.333.333Z" transform="translate(-7.001 -25.058)" fill="#fff"/>
<path id="Path_13511" data-name="Path 13511" d="M9.324,17.6a1,1,0,0,1-.666-.938V13H6.329a.333.333,0,0,0-.333.27l-1,5.2a.456.456,0,0,0,0,.063,2.117,2.117,0,0,0,2.117,2.117h.759a2.113,2.113,0,0,0,1.451-.576Z" transform="translate(-4.997 -9.672)" fill="#fff"/>
<path id="Path_13512" data-name="Path 13512" d="M23.661,27H20v2.419A2.113,2.113,0,0,0,21.451,30h.759a2.113,2.113,0,0,0,1.451-.576Z" transform="translate(-15.007 -19.013)" fill="#fff"/>
<path id="Path_13513" data-name="Path 13513" d="M36.661,27H33v2.419A2.113,2.113,0,0,0,34.451,30h.759a2.113,2.113,0,0,0,1.451-.576Z" transform="translate(-23.681 -19.013)" fill="#fff"/>
<path id="Path_13514" data-name="Path 13514" d="M50.326,18.474l-1-5.2A.333.333,0,0,0,49,13H46.666v3.661A1,1,0,0,1,46,17.6v2.479a2.113,2.113,0,0,0,1.451.576h.759a2.117,2.117,0,0,0,2.117-2.117.455.455,0,0,0,0-.063Z" transform="translate(-32.355 -9.672)" fill="#fff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 118.92 135.06"><circle cx="59.46" cy="67.53" r="38.32" style="fill:#cc121c"/><path d="M63.49,13.32h0a7.27,7.27,0,1,0-8.06,0h0c4.37,3.29,3.91,10.91-1.77,16.59h11.6C59.58,24.23,59.12,16.61,63.49,13.32Z" style="fill:#cc121c"/><path d="M14.53,36.94h0a7.28,7.28,0,1,0-4,7h0c5-2.14,11.4,2.06,13.48,9.83l2.9-5,2.9-5C22,45.78,15.19,42.36,14.53,36.94Z" style="fill:#cc121c"/><path d="M10.5,91.15h0a7.27,7.27,0,1,0,4,7h0c.66-5.43,7.49-8.84,15.25-6.76l-2.9-5-2.9-5C21.9,89.08,15.52,93.29,10.5,91.15Z" style="fill:#cc121c"/><path d="M55.43,121.74h0a7.27,7.27,0,1,0,8.06,0h0c-4.37-3.28-3.91-10.9,1.77-16.59H53.66C59.34,110.84,59.8,118.46,55.43,121.74Z" style="fill:#cc121c"/><path d="M104.39,98.13h0a7.27,7.27,0,1,0,4-7h0c-5,2.14-11.4-2.07-13.48-9.83l-2.9,5-2.9,5C96.9,89.29,103.73,92.7,104.39,98.13Z" style="fill:#cc121c"/><path d="M108.42,43.92h0a7.27,7.27,0,1,0-4-7h0c-.66,5.42-7.49,8.84-15.25,6.76l2.9,5,2.9,5C97,46,103.39,41.78,108.42,43.92Z" style="fill:#cc121c"/><path d="M81.13,34.18h0A5.32,5.32,0,1,0,76,31.34h0c1.64,3.64-1.33,8.37-7,10l3.72,2,3.73,2C74.78,39.8,77.17,34.75,81.13,34.18Z" style="fill:#cc121c"/><path d="M41.41,32.09h0a5.32,5.32,0,1,0-5,3.06h0c4,.39,6.58,5.34,5.18,11.05L45.18,44l3.63-2.21C43.1,40.4,39.92,35.8,41.41,32.09Z" style="fill:#cc121c"/><path d="M19.74,65.44h0a5.32,5.32,0,1,0,.13,5.89h0c2.33-3.25,7.91-3,12.16,1l-.09-4.24-.09-4.25C27.78,68.13,22.21,68.59,19.74,65.44Z" style="fill:#cc121c"/><path d="M37.79,100.89h0A5.32,5.32,0,1,0,43,103.72h0c-1.64-3.64,1.33-8.37,7-10l-3.72-2-3.73-2C44.14,95.27,41.75,100.32,37.79,100.89Z" style="fill:#cc121c"/><path d="M77.51,103h0a5.33,5.33,0,1,0,5-3h0c-4-.4-6.58-5.34-5.18-11l-3.63,2.2-3.63,2.2C75.82,94.67,79,99.26,77.51,103Z" style="fill:#cc121c"/><path d="M99.18,69.62h0a5.32,5.32,0,1,0-.13-5.89h0c-2.33,3.24-7.91,3-12.16-1L87,66.94l.09,4.24C91.14,66.93,96.71,66.48,99.18,69.62Z" style="fill:#cc121c"/><path d="M65.73,44.73a6.28,6.28,0,1,1-6.27-6.28A6.27,6.27,0,0,1,65.73,44.73Z" style="fill:#fff"/><path d="M52.27,54.88a3.86,3.86,0,1,1-5.46,0A3.86,3.86,0,0,1,52.27,54.88Z" style="fill:#fff"/><path d="M36.66,61.26a6.28,6.28,0,1,1-6.28,6.27A6.27,6.27,0,0,1,36.66,61.26Z" style="fill:#fff"/><path d="M46.81,74.72a3.86,3.86,0,1,1,0,5.47A3.87,3.87,0,0,1,46.81,74.72Z" style="fill:#fff"/><path d="M53.18,90.33a6.28,6.28,0,1,1,6.28,6.28A6.28,6.28,0,0,1,53.18,90.33Z" style="fill:#fff"/><circle cx="69.38" cy="77.46" r="3.86" style="fill:#fff"/><path d="M82.26,73.81a6.28,6.28,0,1,1,6.28-6.28A6.28,6.28,0,0,1,82.26,73.81Z" style="fill:#fff"/><path d="M72.11,60.34a3.86,3.86,0,1,1,0-5.46A3.86,3.86,0,0,1,72.11,60.34Z" style="fill:#fff"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -1 +1 @@
8d8845c5c035b7f87f2849054cdedb69
84018bae6147d7170a2e3bd8d9e051aa

@ -1,9 +1,10 @@
PODS:
- audio_session (0.0.1):
- Flutter
- barcode_scan_fix (0.0.1):
- barcode_scan2 (0.0.1):
- Flutter
- MTBBarcodeScanner
- SwiftProtobuf
- camera (0.0.1):
- Flutter
- connectivity (0.0.1):
@ -11,6 +12,8 @@ PODS:
- Reachability
- device_calendar (0.0.1):
- Flutter
- device_info_plus (0.0.1):
- Flutter
- DKImagePickerController/Core (4.3.2):
- DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource
@ -59,10 +62,10 @@ PODS:
- Firebase/Analytics (= 8.9.0)
- firebase_core
- Flutter
- firebase_core (1.10.0):
- firebase_core (1.10.5):
- Firebase/CoreOnly (= 8.9.0)
- Flutter
- firebase_messaging (11.1.0):
- firebase_messaging (11.2.3):
- Firebase/Messaging (= 8.9.0)
- firebase_core
- Flutter
@ -107,11 +110,7 @@ PODS:
- GoogleUtilities/Reachability (~> 7.6)
- GoogleUtilities/UserDefaults (~> 7.6)
- nanopb (~> 2.30908.0)
- fit_kit (0.0.1):
- Flutter
- Flutter (1.0.0)
- flutter_flexible_toast (0.0.1):
- Flutter
- flutter_hms_gms_availability (0.0.1):
- Flutter
- flutter_inappwebview (0.0.1):
@ -123,15 +122,24 @@ PODS:
- OrderedSet (~> 5.0)
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_native_timezone (0.0.1):
- Flutter
- flutter_nfc_kit (2.0.0):
- Flutter
- flutter_tts (0.0.1):
- Flutter
- flutter_webrtc (0.7.1):
- Flutter
- Libyuv (= 1703)
- WebRTC-SDK (= 92.4515.11)
- fluttertoast (0.0.2):
- Flutter
- Toast
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- geocoding (1.0.5):
- Flutter
- geolocator_apple (1.2.0):
- Flutter
- google_maps_flutter (0.0.1):
@ -185,6 +193,8 @@ PODS:
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.6.0):
- GoogleUtilities/Logger
- health (1.0.4):
- Flutter
- image_picker (0.0.1):
- Flutter
- in_app_review (0.2.0):
@ -198,6 +208,8 @@ PODS:
- Flutter
- manage_calendar_events (0.0.1):
- Flutter
- map_launcher (0.0.1):
- Flutter
- maps_launcher (0.0.1):
- Flutter
- MTBBarcodeScanner (5.0.11)
@ -208,8 +220,6 @@ PODS:
- nanopb/encode (2.30908.0)
- native_device_orientation (0.0.1):
- Flutter
- nfc_in_flutter (1.0.0):
- Flutter
- OrderedSet (5.0.0)
- package_info_plus (0.4.5):
- Flutter
@ -219,7 +229,7 @@ PODS:
- Flutter
- PromisesObjC (2.0.0)
- Reachability (3.2)
- screen (0.0.1):
- screen_brightness_ios (0.0.1):
- Flutter
- SDWebImage (5.12.1):
- SDWebImage/Core (= 5.12.1)
@ -234,7 +244,9 @@ PODS:
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- SwiftProtobuf (1.18.0)
- SwiftyGif (5.4.1)
- Toast (4.0.0)
- Try (2.1.1)
- url_launcher_ios (0.0.1):
- Flutter
@ -252,37 +264,41 @@ PODS:
DEPENDENCIES:
- audio_session (from `.symlinks/plugins/audio_session/ios`)
- barcode_scan_fix (from `.symlinks/plugins/barcode_scan_fix/ios`)
- barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
- camera (from `.symlinks/plugins/camera/ios`)
- connectivity (from `.symlinks/plugins/connectivity/ios`)
- device_calendar (from `.symlinks/plugins/device_calendar/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- fit_kit (from `.symlinks/plugins/fit_kit/ios`)
- Flutter (from `Flutter`)
- flutter_flexible_toast (from `.symlinks/plugins/flutter_flexible_toast/ios`)
- flutter_hms_gms_availability (from `.symlinks/plugins/flutter_hms_gms_availability/ios`)
- flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_native_timezone (from `.symlinks/plugins/flutter_native_timezone/ios`)
- flutter_nfc_kit (from `.symlinks/plugins/flutter_nfc_kit/ios`)
- flutter_tts (from `.symlinks/plugins/flutter_tts/ios`)
- flutter_webrtc (from `.symlinks/plugins/flutter_webrtc/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- geocoding (from `.symlinks/plugins/geocoding/ios`)
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`)
- google_maps_flutter (from `.symlinks/plugins/google_maps_flutter/ios`)
- health (from `.symlinks/plugins/health/ios`)
- image_picker (from `.symlinks/plugins/image_picker/ios`)
- in_app_review (from `.symlinks/plugins/in_app_review/ios`)
- just_audio (from `.symlinks/plugins/just_audio/ios`)
- local_auth (from `.symlinks/plugins/local_auth/ios`)
- location (from `.symlinks/plugins/location/ios`)
- manage_calendar_events (from `.symlinks/plugins/manage_calendar_events/ios`)
- map_launcher (from `.symlinks/plugins/map_launcher/ios`)
- maps_launcher (from `.symlinks/plugins/maps_launcher/ios`)
- native_device_orientation (from `.symlinks/plugins/native_device_orientation/ios`)
- nfc_in_flutter (from `.symlinks/plugins/nfc_in_flutter/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- screen (from `.symlinks/plugins/screen/ios`)
- screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`)
- searchable_dropdown (from `.symlinks/plugins/searchable_dropdown/ios`)
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- speech_to_text (from `.symlinks/plugins/speech_to_text/ios`)
@ -316,21 +332,25 @@ SPEC REPOS:
- PromisesObjC
- Reachability
- SDWebImage
- SwiftProtobuf
- SwiftyGif
- Toast
- Try
- WebRTC-SDK
EXTERNAL SOURCES:
audio_session:
:path: ".symlinks/plugins/audio_session/ios"
barcode_scan_fix:
:path: ".symlinks/plugins/barcode_scan_fix/ios"
barcode_scan2:
:path: ".symlinks/plugins/barcode_scan2/ios"
camera:
:path: ".symlinks/plugins/camera/ios"
connectivity:
:path: ".symlinks/plugins/connectivity/ios"
device_calendar:
:path: ".symlinks/plugins/device_calendar/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
firebase_analytics:
@ -339,26 +359,32 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_messaging:
:path: ".symlinks/plugins/firebase_messaging/ios"
fit_kit:
:path: ".symlinks/plugins/fit_kit/ios"
Flutter:
:path: Flutter
flutter_flexible_toast:
:path: ".symlinks/plugins/flutter_flexible_toast/ios"
flutter_hms_gms_availability:
:path: ".symlinks/plugins/flutter_hms_gms_availability/ios"
flutter_inappwebview:
:path: ".symlinks/plugins/flutter_inappwebview/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_native_timezone:
:path: ".symlinks/plugins/flutter_native_timezone/ios"
flutter_nfc_kit:
:path: ".symlinks/plugins/flutter_nfc_kit/ios"
flutter_tts:
:path: ".symlinks/plugins/flutter_tts/ios"
flutter_webrtc:
:path: ".symlinks/plugins/flutter_webrtc/ios"
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
geocoding:
:path: ".symlinks/plugins/geocoding/ios"
geolocator_apple:
:path: ".symlinks/plugins/geolocator_apple/ios"
google_maps_flutter:
:path: ".symlinks/plugins/google_maps_flutter/ios"
health:
:path: ".symlinks/plugins/health/ios"
image_picker:
:path: ".symlinks/plugins/image_picker/ios"
in_app_review:
@ -371,20 +397,20 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/location/ios"
manage_calendar_events:
:path: ".symlinks/plugins/manage_calendar_events/ios"
map_launcher:
:path: ".symlinks/plugins/map_launcher/ios"
maps_launcher:
:path: ".symlinks/plugins/maps_launcher/ios"
native_device_orientation:
:path: ".symlinks/plugins/native_device_orientation/ios"
nfc_in_flutter:
:path: ".symlinks/plugins/nfc_in_flutter/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
permission_handler:
:path: ".symlinks/plugins/permission_handler/ios"
screen:
:path: ".symlinks/plugins/screen/ios"
screen_brightness_ios:
:path: ".symlinks/plugins/screen_brightness_ios/ios"
searchable_dropdown:
:path: ".symlinks/plugins/searchable_dropdown/ios"
shared_preferences_ios:
@ -408,37 +434,41 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
barcode_scan_fix: 80dd65de55f27eec6591dd077c8b85f2b79e31f1
barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0
camera: fe33292aff715a981eb34d7ce7b35b54337ff34c
connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
device_calendar: 23b28a5f1ab3bf77e34542fb1167e1b8b29a98f5
device_calendar: 9cb33f88a02e19652ec7b8b122ca778f751b1f7b
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: 3e6c3790de664ccf9b882732d9db5eaf6b8d4eb1
Firebase: 13d8d96499e2635428d5bf0ec675df21f95d9a95
firebase_analytics: 7a7528bb2abf4ca22cff7a57bbf909dcab73e13d
firebase_core: f770e033e790657b3505f04be4cb24c482912f11
firebase_messaging: 0c8d1a1732487db7f332fb65232053e93201e2fb
firebase_core: dfcae4c150a5e24436a0b7677c470478a234d5bf
firebase_messaging: c4696ded2f44fb5c2bf6e94f9a575105793e58fa
FirebaseAnalytics: 4ab446ce08a3fe52e8a4303dd997cf26276bf968
FirebaseCore: 599ee609343eaf4941bd188f85e3aa077ffe325b
FirebaseCoreDiagnostics: 56fb7216d87e0e6ec2feddefa9d8a392fe8b2c18
FirebaseInstallations: 830327b45345ffc859eaa9c17bcd5ae893fd5425
FirebaseMessaging: 82c4a48638f53f7b184f3cc9f6cd2cbe533ab316
fit_kit: 7643191161673bcd32863ae3f10baed6ce55c7c0
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
flutter_flexible_toast: 0547e740cae0c33bb7c51bcd931233f4584e1143
flutter_hms_gms_availability: babc50b18670e99780270bc18d9b17d0a07cd77e
flutter_inappwebview: bfd58618f49dc62f2676de690fc6dcda1d6c3721
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
flutter_native_timezone: 5f05b2de06c9776b4cc70e1839f03de178394d22
flutter_nfc_kit: 965c98c3fa68f5609f1cc89abb968fe1b8ffdbaa
flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d
flutter_webrtc: a5a79904f0bca0ea23aff49c51ca765f70a0f703
fluttertoast: 6122fa75143e992b1d3470f61000f591a798cc58
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
geocoding: 32cfcdb16d38d907caaba65e2e42ad10d38bee58
geolocator_apple: b741765c55dc21950e3e106e8b3584e55cf81ce5
google_maps_flutter: abdb8dee6c52d4be36ad131ee6ebfacd14417c5a
GoogleAppMeasurement: 837649ad3987936c232f6717c5680216f6243d24
GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940
GoogleMaps: 025272d5876d3b32604e5c080dc25eaf68764693
GoogleUtilities: 684ee790a24f73ebb2d1d966e9711c203f2a4237
health: e7a5807e45ec58fe6b89a730c97abc6caafe94a0
image_picker: 9aa50e1d8cdacdbed739e925b7eea16d014367e6
in_app_review: 4a97249f7a2f539a0f294c2d9196b7fe35e49541
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
@ -446,24 +476,26 @@ SPEC CHECKSUMS:
local_auth: ef62030a2731330b95df7ef1331bd15f6a64b8a6
location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740
manage_calendar_events: 0338d505ea26cdfd20cd883279bc28afa11eca34
map_launcher: e325db1261d029ff33e08e03baccffe09593ffea
maps_launcher: 2e5b6a2d664ec6c27f82ffa81b74228d770ab203
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
native_device_orientation: 3b4cfc9565a7b879cc4fde282b3e27745e852d0d
nfc_in_flutter: c656fbfb1ec5b9d021da87b0c87629d62fd5264d
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider_ios: 7d7ce634493af4477d156294792024ec3485acd5
permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
screen: abd91ca7bf3426e1cc3646d27e9b2358d6bf07b0
screen_brightness_ios: e2f4c3492ec238bb8ea1f5558f67ea22557cf997
SDWebImage: 4dc3e42d9ec0c1028b960a33ac6b637bb432207b
searchable_dropdown: 5058be32fdc5e0481d300ff2087129072e71bd62
shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32
speech_to_text: b43a7d99aef037bd758ed8e45d79bbac035d2dfe
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86
SwiftyGif: 6895c887f5551618a3c5dd3ecb512419105bacca
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96
url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af
vibration: b5a33e764c3f609a975b9dca73dce20fdde627dc
@ -473,6 +505,6 @@ SPEC CHECKSUMS:
webview_flutter_wkwebview: 005fbd90c888a42c5690919a1527ecc6649e1162
wifi: d7d77c94109e36c4175d845f0a5964eadba71060
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
PODFILE CHECKSUM: cc1f88378b4bfcf93a6ce00d2c587857c6008d3b
COCOAPODS: 1.11.2

@ -13,7 +13,11 @@
306FE6C8271D790C002D6EFC /* OpenTokPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6C7271D790C002D6EFC /* OpenTokPlatformBridge.swift */; };
306FE6CB271D8B73002D6EFC /* OpenTok.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6CA271D8B73002D6EFC /* OpenTok.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
475592F05034141EC172233D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 784F1093F853B573C176EC8E /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
762D738E274E42650063CE73 /* ring_30Sec.caf in Resources */ = {isa = PBXBuildFile; fileRef = 762D738C274E42650063CE73 /* ring_30Sec.caf */; };
762D738F274E42650063CE73 /* ring_30Sec.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 762D738D274E42650063CE73 /* ring_30Sec.mp3 */; };
76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76815B26275F381C00E66E94 /* HealthKit.framework */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@ -35,7 +39,6 @@
E9C8C136256BACDA00EFFB62 /* HMG_Guest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9C8C135256BACDA00EFFB62 /* HMG_Guest.swift */; };
E9E27168256E3A4000F49B69 /* LocalizedFromFlutter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E27167256E3A4000F49B69 /* LocalizedFromFlutter.swift */; };
E9F7623B25922BCE00FB5CCF /* FlutterConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9F7623A25922BCE00FB5CCF /* FlutterConstants.swift */; };
FA0839686861F9C0546E6F45 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C703B0BB1CDBBCA30693DBD3 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@ -52,6 +55,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0E1B56877369D77C273A75CC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
301C79AD27200D9F0016307B /* OpenTokRemoteVideoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokRemoteVideoFactory.swift; sourceTree = "<group>"; };
@ -59,11 +63,14 @@
306FE6C7271D790C002D6EFC /* OpenTokPlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokPlatformBridge.swift; sourceTree = "<group>"; };
306FE6CA271D8B73002D6EFC /* OpenTok.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTok.swift; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
44DB2098C8C4B08C2F3B1329 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
578C284DFF3E98A58F201401 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
762D738C274E42650063CE73 /* ring_30Sec.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = ring_30Sec.caf; path = ../../assets/sounds/ring_30Sec.caf; sourceTree = "<group>"; };
762D738D274E42650063CE73 /* ring_30Sec.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = ring_30Sec.mp3; path = ../../assets/sounds/ring_30Sec.mp3; sourceTree = "<group>"; };
76815B26275F381C00E66E94 /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; };
784F1093F853B573C176EC8E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
84A70B284E0DDF62ECE83D3B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -71,8 +78,7 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9C2760F1A81999922ACAA9E6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
C703B0BB1CDBBCA30693DBD3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CA034E94472F7A2E6ADD99A0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
E91B538D256AAA6500E96549 /* GlobalHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalHelper.swift; sourceTree = "<group>"; };
E91B538E256AAA6500E96549 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
E91B538F256AAA6500E96549 /* API.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = API.swift; sourceTree = "<group>"; };
@ -99,8 +105,9 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */,
E9620805255C2ED100D3A35D /* NetworkExtension.framework in Frameworks */,
FA0839686861F9C0546E6F45 /* Pods_Runner.framework in Frameworks */,
475592F05034141EC172233D /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -120,8 +127,9 @@
555EAAA626EFB641859EF0BE /* Frameworks */ = {
isa = PBXGroup;
children = (
76815B26275F381C00E66E94 /* HealthKit.framework */,
E9620804255C2ED100D3A35D /* NetworkExtension.framework */,
C703B0BB1CDBBCA30693DBD3 /* Pods_Runner.framework */,
784F1093F853B573C176EC8E /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@ -129,9 +137,9 @@
605039E5DDF72C245F9765FE /* Pods */ = {
isa = PBXGroup;
children = (
44DB2098C8C4B08C2F3B1329 /* Pods-Runner.debug.xcconfig */,
9C2760F1A81999922ACAA9E6 /* Pods-Runner.release.xcconfig */,
84A70B284E0DDF62ECE83D3B /* Pods-Runner.profile.xcconfig */,
0E1B56877369D77C273A75CC /* Pods-Runner.debug.xcconfig */,
578C284DFF3E98A58F201401 /* Pods-Runner.release.xcconfig */,
CA034E94472F7A2E6ADD99A0 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@ -171,6 +179,8 @@
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
762D738C274E42650063CE73 /* ring_30Sec.caf */,
762D738D274E42650063CE73 /* ring_30Sec.mp3 */,
306FE6C9271D8B54002D6EFC /* OpenTok */,
E91B539E256AAC1400E96549 /* GuestPOC_Certificate.cer */,
E91B539D256AAC1400E96549 /* GuestPOC_Certificate.p12 */,
@ -232,15 +242,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
D74B98D9E413413D50043E1B /* [CP] Check Pods Manifest.lock */,
90E681C38D6D36A73BF84E03 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
796644D4DF82E4D5FBECBF3B /* [CP] Embed Pods Frameworks */,
0EF99525B5E50490BA0DF0A4 /* [CP] Copy Pods Resources */,
F4F7FCCC462E347C2D580F43 /* [CP] Embed Pods Frameworks */,
D767F6DDC3BD13ECA410CBAD /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -298,29 +308,14 @@
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
E91B53A3256AAD8200E96549 /* Main_Custom.storyboard in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
762D738E274E42650063CE73 /* ring_30Sec.caf in Resources */,
762D738F274E42650063CE73 /* ring_30Sec.mp3 in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
0EF99525B5E50490BA0DF0A4 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -335,21 +330,26 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
796644D4DF82E4D5FBECBF3B /* [CP] Embed Pods Frameworks */ = {
90E681C38D6D36A73BF84E03 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
@ -366,26 +366,38 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
D74B98D9E413413D50043E1B /* [CP] Check Pods Manifest.lock */ = {
D767F6DDC3BD13ECA410CBAD /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
F4F7FCCC462E347C2D580F43 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
@ -520,7 +532,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1;
MARKETING_VERSION = 4.5.17;
PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@ -660,7 +672,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1;
MARKETING_VERSION = 4.5.17;
PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@ -694,7 +706,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1;
MARKETING_VERSION = 4.5.17;
PRODUCT_BUNDLE_IDENTIFIER = "com.HMG.HMG-Smartphone";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";

@ -22,14 +22,29 @@
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>googlechromes</string>
<string>comgooglemaps</string>
<string>iosamap</string>
<string>http</string>
<string>https</string>
<string>baidumap</string>
<string>iosamap</string>
<string>waze</string>
<string>yandexmaps</string>
<string>yandexnavi</string>
<string>citymapper</string>
<string>mapswithme</string>
<string>osmandmaps</string>
<string>dgis</string>
<string>qqmap</string>
<string>here-location</string>
</array>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>MinimumOSVersion</key>
<string>11.0</string>
<key>NFCReaderUsageDescription</key>
<string>This app requires NFC Usage access to allow for Online CheckIn for appointments.</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
@ -100,5 +115,13 @@
<false/>
<key>io.flutter.embedded_views_preview</key>
<true/>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
<string>baidumap</string>
<string>iosamap</string>
</array>
</dict>
</plist>

@ -16,7 +16,8 @@ const PACKAGES_SHOPPING_CART = '/api/shopping_cart_items';
const PACKAGES_ORDERS = '/api/orders';
const PACKAGES_ORDER_HISTORY = '/api/orders/items';
const PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
// const BASE_URL = 'https://uat.hmgwebservices.com/';
// const BASE_URL = 'http://10.50.100.198:3334/';
// const BASE_URL = 'https://uat.hmgwebservices.com/';
const BASE_URL = 'https://hmgwebservices.com/';
// Pharmacy UAT URLs
@ -370,11 +371,14 @@ const HAS_DENTAL_PLAN =
const LASER_BODY_PARTS = 'Services/Patients.svc/REST/Laser_GetBodyPartsByCategory';
const INSERT_COVID_QUESTIONNAIRE = 'Services/Doctors.svc/REST/COVID19_Questionnarie_Insert';
const UPDATE_COVID_QUESTIONNAIRE = 'Services/Doctors.svc/REST/COVID19_Questionnarie_Update';
//URL to get medicine and pharmacies list
const CHANNEL = 3;
const GENERAL_ID = 'Cs2020@2016\$2958';
const IP_ADDRESS = '10.20.10.20';
const VERSION_ID = 8.8;
const VERSION_ID = 7.3;
const SETUP_ID = '91877';
const LANGUAGE = 2;
const PATIENT_OUT_SA = 0;

@ -1140,8 +1140,8 @@ const Map localizedValues = {
},
"updated-email": {"en": "Updated email successfully", "ar": "تم تحديث البريد الالكتروني"},
"view-list-children": {"en": "View List of Children", "ar": "عرض قائمة الأطفال"},
"covidTest": {"en": "COVID-19 TEST", "ar": "فحص كورونا"},
"driveThru": {"en": "Drive-Thru", "ar": "من داخل السيارة"},
"covidTest": {"en": "COVID-19", "ar": "فحص"},
"driveThru": {"en": "Test", "ar": "كورونا"},
"trackDeliveryDriver": {"en": "Track Delivery Driver", "ar": "تتبع السائق"},
"NearestErDesc": {
"en": "This service Displays nearest branch among all the branches of All Habib medical Group based on your current Location",
@ -1748,5 +1748,7 @@ const Map localizedValues = {
"yourTurn": {"en": "your turn is after", "ar": "دورك بعد"},
"patients": {"en": "patients", "ar": "مرضي"},
"group": {"en": "Group", "ar": "مجموعة"},
"covidTestTodo": {"en": "Covid-19 Test", "ar": "فحص كورونا"},
"ancillaryOrdersPaymentConfirm": {"en": "Are you sure you want to make payment for selected orders?", "ar": "هل أنت متأكد أنك تريد سداد قيمة الطلبات المختارة؟"},
"successRegister": {"en": "Your account has been created.", "ar": "لقد تم إنشاء حسابك."},
};

@ -37,3 +37,4 @@ const LIVECARE_CLINIC_DATA = 'LIVECARE_CLINIC_DATA';
const DOCTOR_SCHEDULE_DATE_SEL = 'DOCTOR_SCHEDULE_DATE_SEL';
const APPOINTMENT_HISTORY_MEDICAL = 'APPOINTMENT_HISTORY_MEDICAL';
const CLINICS_LIST = 'CLINICS_LIST';
const COVID_QA_LIST = 'COVID_QA_LIST';

@ -11,11 +11,11 @@ class CustomerAddressesService extends BaseService {
CustomerInfo customerInfo = new CustomerInfo();
Future addAddressInfo({AddNewAddressRequestModel addNewAddressRequestModel}) async {
addNewAddressRequestModel.customer.email = customerInfo.email;
addNewAddressRequestModel.customer.id = customerInfo.customerId;
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
addNewAddressRequestModel.customer.email = addNewAddressRequestModel.customer.addresses[0].email;
addNewAddressRequestModel.customer.id = customerId;
addNewAddressRequestModel.customer.roleIds = [3];
addNewAddressRequestModel.customer.addresses[0].email = customerInfo.email;
addNewAddressRequestModel.customer.addresses[0].phoneNumber = customerInfo.mobileNumber;
addNewAddressRequestModel.customer.addresses[0].phoneNumber = addNewAddressRequestModel.customer.addresses[0].phoneNumber;
addNewAddressRequestModel.customer.addresses[0].firstName = authenticatedUserObject.user.firstName;
addNewAddressRequestModel.customer.addresses[0].lastName = authenticatedUserObject.user.lastName;
addNewAddressRequestModel.customer.addresses[0].countryId = 69;
@ -30,8 +30,8 @@ class CustomerAddressesService extends BaseService {
addressesList.add(AddressInfo.fromJson(data));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
hasError = false;
// super.error = error;
}, body: addNewAddressRequestModel.toJson(), isAllowAny: true);
}

@ -124,7 +124,7 @@ class BaseAppClient {
// body['IdentificationNo'] = 2076117163;
// body['MobileNo'] = "966503109207";
// body['PatientID'] = 2478442; //3844083
// body['PatientID'] = 3648586; //3844083
// body['TokenID'] = "@dm!n";
// Patient ID: 2478442

@ -31,12 +31,13 @@ class LabsService extends BaseService {
List<LabResult> labResultList = List();
List<LabOrderResult> labOrdersResultsList = List();
Future getLaboratoryResult({String projectID, int clinicID, String invoiceNo, String orderNo}) async {
Future getLaboratoryResult({String projectID, int clinicID, String invoiceNo, String orderNo, String setupID}) async {
hasError = false;
_requestPatientLabSpecialResult.projectID = projectID;
_requestPatientLabSpecialResult.clinicID = clinicID;
_requestPatientLabSpecialResult.invoiceNo = invoiceNo;
_requestPatientLabSpecialResult.orderNo = orderNo;
_requestPatientLabSpecialResult.setupID = setupID;
await baseAppClient.post(GET_Patient_LAB_SPECIAL_RESULT, onSuccess: (dynamic response, int statusCode) {
patientLabSpecialResult.clear();

@ -20,7 +20,7 @@ class AddNewAddressRequestModel {
class Customer {
List<Addresses> addresses;
int id;
String id;
String email;
List<int> roleIds;
@ -51,7 +51,7 @@ class Customer {
}
class Addresses {
int id;
String id;
String firstName;
String lastName;
String email;
@ -67,7 +67,7 @@ class Addresses {
dynamic faxNumber;
String customerAttributes;
String createdOnUtc;
Null province;
dynamic province;
String latLong;
Addresses(

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/enum/OrderService.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/GetCMCAllOrdersResponseModel.dart';

@ -71,9 +71,9 @@ class LabsViewModel extends BaseViewModel {
List<LabResultList> labResultLists = List();
getLaboratoryResult({String projectID, int clinicID, String invoiceNo, String orderNo}) async {
getLaboratoryResult({String projectID, int clinicID, String invoiceNo, String orderNo, String setupID}) async {
setState(ViewState.Busy);
await _labsService.getLaboratoryResult(invoiceNo: invoiceNo, orderNo: orderNo, projectID: projectID, clinicID: clinicID);
await _labsService.getLaboratoryResult(invoiceNo: invoiceNo, orderNo: orderNo, projectID: projectID, clinicID: clinicID, setupID: setupID);
if (_labsService.hasError) {
error = _labsService.error;
setState(ViewState.Error);

@ -4,6 +4,7 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/Country.dart';
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart';
import 'package:diplomaticquarterapp/services/pharmacy_services/pharmacyAddress_service.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:geocoding/geocoding.dart';
import 'package:google_maps_place_picker/google_maps_place_picker.dart';
import '../../../locator.dart';
@ -33,7 +34,8 @@ class PharmacyAddressesViewModel extends BaseViewModel {
}
}
Future addEditAddress(PickResult value, AddressInfo editedAddress) async {
// Future addEditAddress(PickResult value, AddressInfo editedAddress) async {
Future addEditAddress(Placemark selectedPlace, AddressInfo editedAddress, {String latLong}) async {
setState(ViewState.Busy);
AddressInfo sendingAddress;
@ -48,27 +50,34 @@ class PharmacyAddressesViewModel extends BaseViewModel {
} else {
sendingAddress = editedAddress;
}
value.addressComponents.forEach((element) {
if (element.types.contains("country")) {
sendingAddress.country = element.longName;
}
if (element.types.contains("administrative_area_level_1")) {
sendingAddress.city = element.longName;
}
if (element.types.contains("postal_code")) {
sendingAddress.zipPostalCode = element.longName;
}
if (element.types.contains("administrative_area_level_2")) {
sendingAddress.province = element.longName;
}
});
sendingAddress.latLong = value.geometry.location.toString();
sendingAddress.country = selectedPlace.country;
sendingAddress.city = selectedPlace.locality;
sendingAddress.zipPostalCode = selectedPlace.postalCode;
sendingAddress.province = selectedPlace.locality;
sendingAddress.latLong = latLong;
// value.addressComponents.forEach((element) {
// if (element.types.contains("country")) {
// sendingAddress.country = element.longName;
// }
// if (element.types.contains("administrative_area_level_1")) {
// sendingAddress.city = element.longName;
// }
// if (element.types.contains("postal_code")) {
// sendingAddress.zipPostalCode = element.longName;
// }
// if (element.types.contains("administrative_area_level_2")) {
// sendingAddress.province = element.longName;
// }
// });
// sendingAddress.latLong = value.geometry.location.toString();
await _pharmacyAddressService.getCountries(sendingAddress.country);
sendingAddress.countryId = country.id;
sendingAddress.stateProvinceId = null;
sendingAddress.address1 = value.formattedAddress;
sendingAddress.address2 = "";
sendingAddress.address1 = selectedPlace.name;
sendingAddress.address2 = selectedPlace.street;
sendingAddress.phoneNumber = user.mobileNumber;
sendingAddress.faxNumber = user.faxNumber;
sendingAddress.customerAttributes = "";
@ -76,8 +85,7 @@ class PharmacyAddressesViewModel extends BaseViewModel {
if (editedAddress == null) {
await _pharmacyAddressService.addCustomerAddress(sendingAddress);
} else {
await _pharmacyAddressService.editCustomerAddress(sendingAddress).then((value) async {
});
await _pharmacyAddressService.editCustomerAddress(sendingAddress).then((value) async {});
}
if (_pharmacyAddressService.hasError) {

@ -9,6 +9,8 @@ class DriveThroughTestingCenterModel {
bool isActive;
int createdBy;
String createdOn;
num testTypeEnum;
num testProcedureEnum;
dynamic editedBy;
dynamic editedON;
dynamic projectName;
@ -16,19 +18,21 @@ class DriveThroughTestingCenterModel {
DriveThroughTestingCenterModel(
{this.rowID,
this.iD,
this.projectID,
this.setupID,
this.longitude,
this.latitude,
this.numberOfTracks,
this.isActive,
this.createdBy,
this.createdOn,
this.editedBy,
this.editedON,
this.projectName,
this.projectNameN});
this.iD,
this.projectID,
this.setupID,
this.longitude,
this.latitude,
this.numberOfTracks,
this.isActive,
this.createdBy,
this.createdOn,
this.testTypeEnum,
this.testProcedureEnum,
this.editedBy,
this.editedON,
this.projectName,
this.projectNameN});
DriveThroughTestingCenterModel.fromJson(Map<String, dynamic> json) {
rowID = json['RowID'];
@ -41,6 +45,8 @@ class DriveThroughTestingCenterModel {
isActive = json['IsActive'];
createdBy = json['CreatedBy'];
createdOn = json['CreatedOn'];
testTypeEnum = json['TestTypeEnum'];
testProcedureEnum = json['TestprocedureEnum'];
editedBy = json['EditedBy'];
editedON = json['EditedON'];
projectName = json['ProjectName'];
@ -59,6 +65,8 @@ class DriveThroughTestingCenterModel {
data['IsActive'] = this.isActive;
data['CreatedBy'] = this.createdBy;
data['CreatedOn'] = this.createdOn;
data['TestTypeEnum'] = this.testTypeEnum;
data['TestprocedureEnum'] = this.testProcedureEnum;
data['EditedBy'] = this.editedBy;
data['EditedON'] = this.editedON;
data['ProjectName'] = this.projectName;

@ -0,0 +1,135 @@
class ApplePayRequest {
String currency;
String language;
String customername;
dynamic customerEmail;
String orderdescription;
String liveServiceid;
String longitude;
String latitude;
String devicetoken;
String clientrequestid;
String projectid;
String serviceid;
String patientid;
String amount;
String appleData;
String appleSignature;
AppleHeader appleHeader;
ApplePaymentMethod applePaymentMethod;
ApplePayRequest(
{this.currency,
this.language,
this.customername,
this.customerEmail,
this.orderdescription,
this.liveServiceid,
this.longitude,
this.latitude,
this.devicetoken,
this.clientrequestid,
this.projectid,
this.serviceid,
this.patientid,
this.amount,
this.appleData,
this.appleSignature,
this.appleHeader,
this.applePaymentMethod});
ApplePayRequest.fromJson(Map<String, dynamic> json) {
currency = json['currency'];
language = json['language'];
customername = json['customername'];
customerEmail = json['customer_email'];
orderdescription = json['orderdescription'];
liveServiceid = json['live_serviceid'];
longitude = json['longitude'];
latitude = json['latitude'];
devicetoken = json['devicetoken'];
clientrequestid = json['clientrequestid'];
projectid = json['projectid'];
serviceid = json['serviceid'];
patientid = json['patientid'];
amount = json['Amount'];
appleData = json['apple_data'];
appleSignature = json['apple_signature'];
appleHeader = json['apple_header'] != null ? new AppleHeader.fromJson(json['apple_header']) : null;
applePaymentMethod = json['apple_paymentMethod'] != null ? new ApplePaymentMethod.fromJson(json['apple_paymentMethod']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['currency'] = this.currency;
data['language'] = this.language;
data['customername'] = this.customername;
data['customer_email'] = this.customerEmail;
data['orderdescription'] = this.orderdescription;
data['live_serviceid'] = this.liveServiceid;
data['longitude'] = this.longitude;
data['latitude'] = this.latitude;
data['devicetoken'] = this.devicetoken;
data['clientrequestid'] = this.clientrequestid;
data['projectid'] = this.projectid;
data['serviceid'] = this.serviceid;
data['patientid'] = this.patientid;
data['Amount'] = this.amount;
data['apple_data'] = this.appleData;
data['apple_signature'] = this.appleSignature;
if (this.appleHeader != null) {
data['apple_header'] = this.appleHeader.toJson();
}
if (this.applePaymentMethod != null) {
data['apple_paymentMethod'] = this.applePaymentMethod.toJson();
}
return data;
}
}
class AppleHeader {
String appleApplicationData;
String appleEphemeralPublicKey;
String applePublicKeyHash;
String appleTransactionId;
AppleHeader({this.appleApplicationData, this.appleEphemeralPublicKey, this.applePublicKeyHash, this.appleTransactionId});
AppleHeader.fromJson(Map<String, dynamic> json) {
appleApplicationData = json['apple_applicationData'];
appleEphemeralPublicKey = json['apple_ephemeralPublicKey'];
applePublicKeyHash = json['apple_publicKeyHash'];
appleTransactionId = json['apple_transactionId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['apple_applicationData'] = this.appleApplicationData;
data['apple_ephemeralPublicKey'] = this.appleEphemeralPublicKey;
data['apple_publicKeyHash'] = this.applePublicKeyHash;
data['apple_transactionId'] = this.appleTransactionId;
return data;
}
}
class ApplePaymentMethod {
String appleDisplayName;
String appleNetwork;
String appleType;
ApplePaymentMethod({this.appleDisplayName, this.appleNetwork, this.appleType});
ApplePaymentMethod.fromJson(Map<String, dynamic> json) {
appleDisplayName = json['apple_displayName'];
appleNetwork = json['apple_network'];
appleType = json['apple_type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['apple_displayName'] = this.appleDisplayName;
data['apple_network'] = this.appleNetwork;
data['apple_type'] = this.appleType;
return data;
}
}

@ -0,0 +1,112 @@
import 'dart:convert';
class ApplePayResponse {
PaymentMethod paymentMethod;
dynamic billingContact;
dynamic shippingMethod;
dynamic shippingContact;
Token token;
ApplePayResponse(
{this.paymentMethod,
this.billingContact,
this.shippingMethod,
this.shippingContact,
this.token});
ApplePayResponse.fromJson(Map<String, dynamic> jsonValue) {
paymentMethod = jsonValue['paymentMethod'] != null
? new PaymentMethod.fromJson(jsonValue['paymentMethod'])
: null;
// billingContact = json['billingContact'] != null ? json['billingContact'] : "";
// shippingMethod = json['shippingMethod'] != null ? json['shippingMethod'] : "";
// shippingContact = json['shippingContact'] != null ? json['shippingContact'] : "";
token = jsonValue['token'] != null ? new Token.fromJson(json.decode(jsonValue['token'])) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.paymentMethod != null) {
data['paymentMethod'] = this.paymentMethod.toJson();
}
data['billingContact'] = this.billingContact;
data['shippingMethod'] = this.shippingMethod;
data['shippingContact'] = this.shippingContact;
if (this.token != null) {
data['token'] = this.token.toJson();
}
return data;
}
}
class PaymentMethod {
dynamic network;
dynamic displayName;
dynamic type;
PaymentMethod({this.network, this.displayName, this.type});
PaymentMethod.fromJson(Map<String, dynamic> json) {
network = json['network'];
displayName = json['displayName'];
type = json['type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['network'] = this.network;
data['displayName'] = this.displayName;
data['type'] = this.type;
return data;
}
}
class Token {
String version;
String data;
String signature;
Header header;
Token({this.version, this.data, this.signature, this.header});
Token.fromJson(Map<String, dynamic> json) {
version = json['version'];
data = json['data'];
signature = json['signature'];
header =
json['header'] != null ? new Header.fromJson(json['header']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['version'] = this.version;
data['data'] = this.data;
data['signature'] = this.signature;
if (this.header != null) {
data['header'] = this.header.toJson();
}
return data;
}
}
class Header {
String ephemeralPublicKey;
String publicKeyHash;
String transactionId;
Header({this.ephemeralPublicKey, this.publicKeyHash, this.transactionId});
Header.fromJson(Map<String, dynamic> json) {
ephemeralPublicKey = json['ephemeralPublicKey'];
publicKeyHash = json['publicKeyHash'];
transactionId = json['transactionId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ephemeralPublicKey'] = this.ephemeralPublicKey;
data['publicKeyHash'] = this.publicKeyHash;
data['transactionId'] = this.transactionId;
return data;
}
}

@ -108,7 +108,7 @@ class _CMCLocationPageState extends State<CMCLocationPage> {
customerAttributes: "",
city: "",
createdOnUtc: "",
id: 0,
id: "0",
latLong: selectedPlace.geometry.location.lat.toString() + "," + selectedPlace.geometry.location.lng.toString(),
email: "",
)

@ -1,16 +1,21 @@
import 'dart:async';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/app_map/google_huawei_map.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_maps_place_picker/google_maps_place_picker.dart';
import 'package:provider/provider.dart';
@ -32,6 +37,16 @@ class _LocationPageState extends State<LocationPage> {
double longitude = 0;
bool showCurrentLocation = false;
AppMap appMap;
AppSharedPreferences sharedPref = AppSharedPreferences();
static CameraPosition _kGooglePlex = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
);
LatLng currentPostion;
Completer<GoogleMapController> mapController = Completer();
Placemark selectedPlace;
@override
void initState() {
latitude = widget.latitude;
@ -39,6 +54,23 @@ class _LocationPageState extends State<LocationPage> {
if (latitude == 0.0 && longitude == 0.0) {
showCurrentLocation = true;
}
appMap = AppMap(
_kGooglePlex.toMap(),
onCameraMove: (camera) {
_updatePosition(camera);
},
onMapCreated: () {
currentPostion = LatLng(widget.latitude, widget.longitude);
latitude = widget.latitude;
longitude = widget.longitude;
setMap();
setState(() {});
},
onCameraIdle: () async {
List<Placemark> placemarks = await placemarkFromCoordinates(latitude, longitude);
selectedPlace = placemarks[0];
},
);
super.initState();
}
@ -54,7 +86,60 @@ class _LocationPageState extends State<LocationPage> {
baseViewModel: model,
showNewAppBarTitle: true,
showNewAppBar: true,
body: PlacePicker(
body:
// Column(
// children: [
// Expanded(
// child: Stack(
// alignment: Alignment.center,
// children: [
// if (appMap != null) appMap,
// Container(
// margin: EdgeInsets.only(bottom: 50.0),
// child: Icon(
// Icons.place,
// color: CustomColors.accentColor,
// size: 50,
// ),
// ),
// ],
// ),
// ),
// Container(
// padding: const EdgeInsets.only(left: 20, right: 20, top: 14, bottom: 14),
// child: DefaultButton(TranslationBase.of(context).addNewAddress, () async {
// AddNewAddressRequestModel addNewAddressRequestModel = new AddNewAddressRequestModel(
// customer: Customer(addresses: [
// Addresses(
// address1: selectedPlace.name,
// address2: selectedPlace.street,
// customerAttributes: "",
// city: selectedPlace.locality,
// createdOnUtc: "",
// id: "0",
// faxNumber: "",
// phoneNumber: projectViewModel.user.mobileNumber,
// province: selectedPlace.locality,
// countryId: 69,
// latLong: "$latitude,$longitude",
// country: selectedPlace.country,
// zipPostalCode: selectedPlace.postalCode,
// email: projectViewModel.user.emailAddress)
// ]),
// );
// await model.addAddressInfo(addNewAddressRequestModel: addNewAddressRequestModel);
// if (model.state == ViewState.ErrorLocal) {
// Utils.showErrorToast(model.error);
// } else {
// AppToast.showSuccessToast(message: "Address Added Successfully");
// }
// Navigator.of(context).pop(addNewAddressRequestModel);
// }),
// ),
// ],
// ),
PlacePicker(
apiKey: GOOGLE_API_KEY,
enableMyLocationButton: true,
automaticallyImplyAppBarLeading: false,
@ -76,7 +161,7 @@ class _LocationPageState extends State<LocationPage> {
width: 500,
borderRadius: BorderRadius.circular(0.0),
child: state == SearchingState.Searching
? SizedBox(height: 43,child: Center(child: CircularProgressIndicator())).insideContainer
? SizedBox(height: 43, child: Center(child: CircularProgressIndicator())).insideContainer
: DefaultButton(TranslationBase.of(context).addNewAddress, () async {
AddNewAddressRequestModel addNewAddressRequestModel = new AddNewAddressRequestModel(
customer: Customer(addresses: [
@ -84,11 +169,22 @@ class _LocationPageState extends State<LocationPage> {
address1: selectedPlace.formattedAddress,
address2: selectedPlace.formattedAddress,
customerAttributes: "",
city: "",
createdOnUtc: "",
id: 0,
latLong: "${selectedPlace.geometry.location}",
email: "")
id: "0",
faxNumber: "",
phoneNumber: projectViewModel.user.mobileNumber,
countryId: 69,
latLong: "$latitude,$longitude",
email: projectViewModel.user.emailAddress)
// Addresses(
// address1: selectedPlace.formattedAddress,
// address2: selectedPlace.formattedAddress,
// customerAttributes: "",
// city: "",
// createdOnUtc: "",
// id: "0",
// latLong: "${selectedPlace.geometry.location}",
// email: "")
]),
);
@ -111,8 +207,7 @@ class _LocationPageState extends State<LocationPage> {
AppToast.showSuccessToast(message: "Address Added Successfully");
}
Navigator.of(context).pop(addNewAddressRequestModel);
}).insideContainer
);
}).insideContainer);
},
initialPosition: LatLng(latitude, longitude),
useCurrentLocation: showCurrentLocation,
@ -120,4 +215,19 @@ class _LocationPageState extends State<LocationPage> {
),
);
}
setMap() {
setState(() {
_kGooglePlex = CameraPosition(
target: currentPostion,
zoom: 14.4746,
);
appMap.moveTo(cameraPostion: _kGooglePlex);
});
}
void _updatePosition(CameraPosition _position) {
latitude = _position.target.latitude;
longitude = _position.target.longitude;
}
}

@ -4,26 +4,25 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart';
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/new_Home_health_care_step_three_page.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/reminder_dialog.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/app_map/google_huawei_map.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/select_location_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_maps_place_picker/google_maps_place_picker.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:diplomaticquarterapp/widgets/app_map/google_huawei_map.dart';
import 'location_page.dart';
import 'package:geolocator/geolocator.dart';
class NewHomeHealthCareStepTowPage extends StatefulWidget {
final Function(PickResult) onPick;
@ -53,6 +52,7 @@ class _NewHomeHealthCareStepTowPageState extends State<NewHomeHealthCareStepTowP
);
LatLng currentPostion;
Completer<GoogleMapController> mapController = Completer();
@override
void initState() {
appMap = AppMap(
@ -86,7 +86,7 @@ class _NewHomeHealthCareStepTowPageState extends State<NewHomeHealthCareStepTowP
setMap();
} else {
requestPermissions().then(
(value) async {
(value) async {
if (value[Permission.location].isGranted) {
var position = await GeolocatorPlatform.instance.getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
currentPostion = LatLng(position.latitude, position.longitude);
@ -236,20 +236,22 @@ class _NewHomeHealthCareStepTowPageState extends State<NewHomeHealthCareStepTowP
alignment: Alignment.center,
children: [
if (appMap != null) appMap,
Icon(
Icons.place,
color: CustomColors.accentColor,
size: 50,
Container(
margin: EdgeInsets.only(bottom: 50.0),
child: Icon(
Icons.place,
color: CustomColors.accentColor,
size: 50,
),
),
],
),
),
Padding(
padding: const EdgeInsets.only(left: 20, right: 20, top: 14, bottom: 14),
child: SecondaryButton(
color: Colors.red[800],
textColor: Colors.white,
onTap: () {
child: DefaultButton(
TranslationBase.of(context).continues,
() {
setState(() {
widget.patientERInsertPresOrderRequestModel.latitude = latitude;
widget.patientERInsertPresOrderRequestModel.longitude = longitude;
@ -263,7 +265,6 @@ class _NewHomeHealthCareStepTowPageState extends State<NewHomeHealthCareStepTowP
),
);
},
label: TranslationBase.of(context).continues,
),
),
],

@ -50,7 +50,7 @@ class _AllHabibMedicalSevicePage2State extends State<AllHabibMedicalSevicePage2>
hmgServices.clear();
hmgServices.add(new HmgServices(0, TranslationBase.of(context).liveCareTitle, TranslationBase.of(context).liveCareSubtitle, "assets/images/new/Live_Care.svg", isLogin));
hmgServices.add(new HmgServices(1, TranslationBase.of(context).covidTest, TranslationBase.of(context).driveThru, "assets/images/new/covid_test_drive_thru.svg", isLogin));
hmgServices.add(new HmgServices(1, TranslationBase.of(context).covidTest, TranslationBase.of(context).driveThru, "assets/images/new/CoronaIcon.svg", isLogin));
hmgServices.add(new HmgServices(2, TranslationBase.of(context).onlinePayment, TranslationBase.of(context).onlinePaymentSubtitle, "assets/images/new/paymentMethods.png", isLogin));
hmgServices.add(new HmgServices(3, TranslationBase.of(context).hhcHome, TranslationBase.of(context).healthCare, "assets/images/new/HHC.svg", isLogin));
hmgServices.add(new HmgServices(4, TranslationBase.of(context).cmcTitle, TranslationBase.of(context).cmcSubtitle, "assets/images/new/comprehensive_checkup.svg", isLogin));

@ -367,10 +367,10 @@ class _AnicllaryOrdersState extends State<AnicllaryOrdersDetails> with SingleTic
addSelectedProcedure(value[i]);
});
}),
Utils.tableColumnValue('${value[i].procedureName.toString()}', isLast: true),
Utils.tableColumnValue('${value[i].patientShare.toString() + " " + TranslationBase.of(context).sar.toUpperCase()}', isLast: true),
Utils.tableColumnValue('${value[i].patientTaxAmount.toString() + " " + TranslationBase.of(context).sar.toUpperCase()}', isLast: true),
Utils.tableColumnValue('${value[i].patientShareWithTax.toString() + " " + TranslationBase.of(context).sar.toUpperCase()}', isLast: true),
Utils.tableColumnValue('${value[i].procedureName}', isLast: true, isCapitable: false, mProjectViewModel: projectViewModel),
Utils.tableColumnValue('${value[i].patientShare.toString() + " " + TranslationBase.of(context).sar.toUpperCase()}', isLast: true, isCapitable: false, mProjectViewModel: projectViewModel),
Utils.tableColumnValue('${value[i].patientTaxAmount.toString() + " " + TranslationBase.of(context).sar.toUpperCase()}', isLast: true, isCapitable: false, mProjectViewModel: projectViewModel),
Utils.tableColumnValue('${value[i].patientShareWithTax.toString() + " " + TranslationBase.of(context).sar.toUpperCase()}', isLast: true, isCapitable: false, mProjectViewModel: projectViewModel),
]),
);
}
@ -478,17 +478,17 @@ class _AnicllaryOrdersState extends State<AnicllaryOrdersDetails> with SingleTic
addAdvancedNumberRequest(String advanceNumber, String paymentReference, dynamic appointmentID, AppoitmentAllHistoryResultList appo) {
DoctorsListService service = new DoctorsListService();
service.addAdvancedNumberRequest(advanceNumber, paymentReference, appointmentID, AppGlobal.context).then((res) {
print(res);
autoGenerateInvoice();
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
AppToast.showErrorToast(message: err);
AppToast.showErrorToast(message: err.toString());
print(err);
});
}
autoGenerateInvoice() {
List<dynamic> selectedProcListAPI = [];
Map<dynamic, dynamic> selectedProcListAPIMap;
selectedProcList.forEach((element) {
selectedProcListAPI.add({

@ -204,7 +204,8 @@ class _BookConfirmState extends State<BookConfirm> {
disabledTextColor: Colors.white,
disabledColor: new Color(0xFFbcc2c4),
onPressed: () async {
if (await this.sharedPref.getBool(IS_LIVECARE_APPOINTMENT) != null && !await this.sharedPref.getBool(IS_LIVECARE_APPOINTMENT)) {
bool isLiveCareSchedule = await this.sharedPref.getBool(IS_LIVECARE_APPOINTMENT);
if (isLiveCareSchedule != null && isLiveCareSchedule) {
insertLiveCareScheduledAppointment(context, widget.doctor);
} else {
insertAppointment(context, widget.doctor);

@ -154,12 +154,13 @@ class _DoctorProfileState extends State<DoctorProfile> with TickerProviderStateM
onTap: (index) {
setState(() {
if (index == 1) {
// if (widget.doctor.clinicID == 17 || widget.doctor.clinicID == 23 || widget.doctor.clinicID == 47 || widget.isLiveCareAppointment) {
// _tabController.index = _tabController.previousIndex;
if (widget.doctor.clinicID == 17 || widget.doctor.clinicID == 23 || widget.doctor.clinicID == 47 || widget.isLiveCareAppointment) {
_tabController.index = _tabController.previousIndex;
showFooterButton = false;
} else {
showFooterButton = true;
}
}
print(showFooterButton);
});
},

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
@ -6,6 +7,7 @@ import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.da
import 'package:diplomaticquarterapp/models/Appointments/timeSlot.dart';
import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/CovidTestProceduresResponse.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/DriveThroughTestingCenterModel.dart';
import 'package:diplomaticquarterapp/pages/Covid-DriveThru/covid-payment-alert.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
@ -23,7 +25,6 @@ import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';
class CovidTimeSlots extends StatefulWidget {
@ -33,6 +34,7 @@ class CovidTimeSlots extends StatefulWidget {
static String selectedDate;
static String selectedTime;
CovidTestProceduresResponse selectedProcedure;
DriveThroughTestingCenterModel selectedProject;
int selectedClinicID;
int selectedDoctorID;
@ -41,7 +43,7 @@ class CovidTimeSlots extends StatefulWidget {
PatientShareResponse patientShareResponse;
CovidTimeSlots({@required this.projectID, @required this.selectedProcedure});
CovidTimeSlots({@required this.projectID, @required this.selectedProcedure, @required this.selectedProject});
@override
_CovidTimeSlotsState createState() => _CovidTimeSlotsState();
@ -68,6 +70,7 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots> with TickerProviderStat
ScrollController _scrollController;
ToDoCountProviderModel toDoProvider;
ProjectViewModel projectViewModel;
@override
void initState() {
@ -113,7 +116,7 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots> with TickerProviderStat
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
projectViewModel = Provider.of(context);
toDoProvider = Provider.of<ToDoCountProviderModel>(context);
return AppScaffold(
appBarTitle: TranslationBase.of(context).covidTest,
@ -359,7 +362,8 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots> with TickerProviderStat
Widget getSelectedButton(int index) {
return RaisedButton(
color: CustomColors.green, //Color of the border
color: CustomColors.green,
//Color of the border
elevation: 0,
textColor: Colors.white,
onPressed: () {
@ -374,23 +378,65 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots> with TickerProviderStat
}
bookCovidTestAppointment() {
if(CovidTimeSlots.areSlotsAvailable) {
GifLoaderDialogUtils.showMyDialog(context);
DoctorList docObject = new DoctorList();
docObject.doctorID = widget.selectedDoctorID;
docObject.clinicID = widget.selectedClinicID;
docObject.projectID = widget.projectID;
insertAppointmentCovidTest(context, docObject);
if (CovidTimeSlots.areSlotsAvailable) {
var messageEn = "This Appointment is being booked for patient " +
projectViewModel.authenticatedUserObject.user.firstName +
" " +
projectViewModel.authenticatedUserObject.user.lastName +
", Having file number " +
projectViewModel.authenticatedUserObject.user.patientID.toString() +
". Please confirm!";
var messageAr = "يتم حجز هذا الموعد المراجع " +
projectViewModel.authenticatedUserObject.user.firstName +
" " +
projectViewModel.authenticatedUserObject.user.lastName +
", وجود رقم الملف " +
projectViewModel.authenticatedUserObject.user.patientID.toString() +
". يرجى تأكيد!";
ConfirmDialog dialog = new ConfirmDialog(
context: context,
confirmMessage: projectViewModel.isArabic ? messageAr : messageEn,
okText: TranslationBase.of(context).confirm,
cancelText: TranslationBase.of(context).cancel_nocaps,
okFunction: () {
GifLoaderDialogUtils.showMyDialog(context);
DoctorList docObject = new DoctorList();
docObject.doctorID = widget.selectedDoctorID;
docObject.clinicID = widget.selectedClinicID;
docObject.projectID = widget.projectID;
insertCovidQuestionnaire(context, docObject);
},
cancelFunction: () => {});
dialog.showAlertDialog(context);
} else {
AppToast.showErrorToast(message: TranslationBase.of(context).selectSlot);
}
}
insertCovidQuestionnaire(context, DoctorList docObject) async {
DoctorsListService service = new DoctorsListService();
List qa = await sharedPref.getObject(COVID_QA_LIST);
service.insertCovidQuestionnaire(qa, widget.projectID, widget.selectedProject.testTypeEnum, widget.selectedProject.testProcedureEnum).then((res) {
insertAppointmentCovidTest(context, docObject);
}).catchError((err) {
print(err);
});
}
updateCovidQuestionnaire(context, String appoNo) async {
DoctorsListService service = new DoctorsListService();
service.updateCovidQuestionnaire(appoNo, widget.projectID, widget.selectedProject.testTypeEnum, widget.selectedProject.testProcedureEnum).then((res) {
}).catchError((err) {
print(err);
});
}
insertAppointmentCovidTest(context, DoctorList docObject) {
DoctorsListService service = new DoctorsListService();
AppoitmentAllHistoryResultList appo;
service
.insertAppointment(docObject.doctorID, docObject.clinicID, docObject.projectID, CovidTimeSlots.selectedTime, CovidTimeSlots.selectedDate, context, widget.selectedProcedure.procedureID)
.insertAppointment(docObject.doctorID, docObject.clinicID, docObject.projectID, CovidTimeSlots.selectedTime, CovidTimeSlots.selectedDate, context, widget.selectedProcedure.procedureID,
widget.selectedProject.testTypeEnum, widget.selectedProject.testProcedureEnum)
.then((res) {
if (res['MessageStatus'] == 1) {
AppToast.showSuccessToast(message: TranslationBase.of(context).bookedSuccess);
@ -463,6 +509,7 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots> with TickerProviderStat
GifLoaderDialogUtils.hideDialog(context);
print(res);
widget.patientShareResponse = new PatientShareResponse.fromJson(res);
updateCovidQuestionnaire(context, appointmentNo);
navigateToPaymentAlert();
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
@ -482,7 +529,7 @@ class _CovidTimeSlotsState extends State<CovidTimeSlots> with TickerProviderStat
getCovidFreeSlots(BuildContext context, int projectID) {
CovidDriveThruService service = new CovidDriveThruService();
GifLoaderDialogUtils.showMyDialog(context);
service.getCovidFreeSlots(context, projectID).then((res) {
service.getCovidFreeSlots(context, projectID, widget.selectedProject.testTypeEnum, widget.selectedProject.testProcedureEnum).then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res['MessageStatus'] == 1) {
if (res['COVID19_FreeTimeSlots'].length != 0) {

@ -1,11 +1,14 @@
import 'dart:convert';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/CovidPaymentInfoResponse.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/CovidTestProceduresResponse.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/DriveThroughTestingCenterModel.dart';
import 'package:diplomaticquarterapp/pages/medical/labs/passport_update_page.dart';
import 'package:diplomaticquarterapp/services/covid-drivethru/covid-drivethru.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.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';
@ -21,8 +24,9 @@ import 'covid-payment-details.dart';
class CovidDirveThruQuestions extends StatefulWidget {
final String projectId;
final List<CovidTestProceduresResponse> proceduresList;
DriveThroughTestingCenterModel selectedProject;
CovidDirveThruQuestions({@required this.projectId, @required this.proceduresList});
CovidDirveThruQuestions({@required this.projectId, @required this.proceduresList, @required this.selectedProject});
@override
CovidDirveThruQuestionsState createState() => CovidDirveThruQuestionsState();
@ -263,6 +267,7 @@ class CovidDirveThruQuestionsState extends State<CovidDirveThruQuestions> {
}
next() async {
var sharedPref = new AppSharedPreferences();
bool all = true;
qa.forEach((element) {
all = all && (element["ans"] == 1 || element["ans"] == 0);
@ -270,6 +275,7 @@ class CovidDirveThruQuestionsState extends State<CovidDirveThruQuestions> {
if (all) if (qa[0]["ans"] == 1) {
openPassportUpdatePage();
} else {
sharedPref.setObject(COVID_QA_LIST, qa);
getPaymentInfo(context, widget.projectId);
}
else
@ -296,7 +302,7 @@ class CovidDirveThruQuestionsState extends State<CovidDirveThruQuestions> {
CovidDriveThruService service = new CovidDriveThruService();
CovidPaymentInfoResponse covidPaymentInfoResponse = new CovidPaymentInfoResponse();
GifLoaderDialogUtils.showMyDialog(context);
service.getCovidPaymentInformation(context, int.parse(projectID), widget.proceduresList[0].procedureID).then((res) {
service.getCovidPaymentInformation(context, int.parse(projectID), widget.proceduresList[0].procedureID, widget.selectedProject.testTypeEnum, widget.selectedProject.testProcedureEnum).then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res['MessageStatus'] == 1) {
covidPaymentInfoResponse = CovidPaymentInfoResponse.fromJson(res['COVID19_PatientShare']);
@ -307,6 +313,7 @@ class CovidDirveThruQuestionsState extends State<CovidDirveThruQuestions> {
covidPaymentInfoResponse: covidPaymentInfoResponse,
projectID: int.parse(projectID),
proceduresList: widget.proceduresList,
selectedProject: widget.selectedProject,
)));
} else {}
}).catchError((err) {

@ -49,7 +49,6 @@ class _CovidDrivethruLocationState extends State<CovidDrivethruLocation> {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (projectViewModel.isLogin) {
getProjectsList(context);
getTestProcedures(context);
}
});
super.initState();
@ -129,7 +128,10 @@ class _CovidDrivethruLocationState extends State<CovidDrivethruLocation> {
items: projectsList.map((DriveThroughTestingCenterModel item) {
return new DropdownMenuItem<DriveThroughTestingCenterModel>(
value: item,
child: new Text(item.projectName),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [Text(item.projectName), getCovidTestTypeImage(item)],
),
);
}).toList(),
onChanged: (newValue) {
@ -256,6 +258,23 @@ class _CovidDrivethruLocationState extends State<CovidDrivethruLocation> {
);
}
Widget getCovidTestTypeImage(DriveThroughTestingCenterModel item) {
if (item.testTypeEnum == 1) {
return Container(child: SvgPicture.asset("assets/images/new/DriveThru.svg", width: 20.0));
}
if (item.testTypeEnum == 2) {
return Container(child: SvgPicture.asset("assets/images/new/WalkIn.svg", width: 10.0));
}
if (item.testTypeEnum == 3) {
return Row(
children: [
Container(child: SvgPicture.asset("assets/images/new/WalkIn.svg", width: 10.0)),
Container(padding: EdgeInsets.only(left: 5.0, right: 5.0), child: SvgPicture.asset("assets/images/new/DriveThru.svg", width: 20.0)),
],
);
}
}
getDirections() {
if (isLocationSelected) {
MapsLauncher.launchCoordinates(double.parse(projectLat), double.parse(projectLong), this.projectName);
@ -266,7 +285,7 @@ class _CovidDrivethruLocationState extends State<CovidDrivethruLocation> {
next() {
if (isLocationSelected) {
Navigator.push(context, FadePage(page: CovidDirveThruQuestions(projectId: projectID, proceduresList: proceduresList)));
Navigator.push(context, FadePage(page: CovidDirveThruQuestions(projectId: projectID, proceduresList: proceduresList, selectedProject: selectedProject)));
} else {
Utils.showErrorToast("Please select address from the dropdown menu to continue");
}
@ -284,13 +303,14 @@ class _CovidDrivethruLocationState extends State<CovidDrivethruLocation> {
this.projectID = newValue.projectID.toString();
isLocationSelected = true;
});
getTestProcedures(context);
}
getPaymentInfo(BuildContext context, String projectID) {
CovidDriveThruService service = new CovidDriveThruService();
CovidPaymentInfoResponse covidPaymentInfoResponse = new CovidPaymentInfoResponse();
GifLoaderDialogUtils.showMyDialog(context);
service.getCovidPaymentInformation(context, int.parse(projectID), proceduresList[0].procedureID).then((res) {
service.getCovidPaymentInformation(context, int.parse(projectID), proceduresList[0].procedureID, selectedProject.testTypeEnum, selectedProject.testProcedureEnum).then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res['MessageStatus'] == 1) {
setState(() {
@ -303,6 +323,7 @@ class _CovidDrivethruLocationState extends State<CovidDrivethruLocation> {
covidPaymentInfoResponse: covidPaymentInfoResponse,
projectID: int.parse(projectID),
proceduresList: proceduresList,
selectedProject: selectedProject,
)));
} else {}
}).catchError((err) {
@ -314,7 +335,7 @@ class _CovidDrivethruLocationState extends State<CovidDrivethruLocation> {
CovidDriveThruService service = new CovidDriveThruService();
GifLoaderDialogUtils.showMyDialog(context);
service.getCovidTestProceduresList(context).then((res) {
service.getCovidTestProceduresList(context, selectedProject.testTypeEnum, selectedProject.testProcedureEnum, selectedProject.projectID).then((res) {
if (res['MessageStatus'] == 1) {
setState(() {
res['COVID19_TestProceduresList'].forEach((v) {

@ -1,17 +1,16 @@
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/CovidPaymentInfoResponse.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/CovidTestProceduresResponse.dart';
import 'package:diplomaticquarterapp/models/CovidDriveThru/DriveThroughTestingCenterModel.dart';
import 'package:diplomaticquarterapp/pages/Covid-DriveThru/Covid-TimeSlots.dart';
import 'package:diplomaticquarterapp/services/covid-drivethru/covid-drivethru.dart';
import 'package:diplomaticquarterapp/theme/colors.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/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
class CovidPaymentDetails extends StatefulWidget {
@ -19,8 +18,9 @@ class CovidPaymentDetails extends StatefulWidget {
int projectID;
List<CovidTestProceduresResponse> proceduresList;
CovidTestProceduresResponse selectedProcedure;
DriveThroughTestingCenterModel selectedProject;
CovidPaymentDetails({@required this.covidPaymentInfoResponse, @required this.projectID, @required this.proceduresList});
CovidPaymentDetails({@required this.covidPaymentInfoResponse, @required this.projectID, @required this.proceduresList, @required this.selectedProject});
@override
_CovidPaymentDetailsState createState() => _CovidPaymentDetailsState();
@ -89,7 +89,6 @@ class _CovidPaymentDetailsState extends State<CovidPaymentDetails> {
getPaymentInfo(context, widget.projectID.toString(), widget.selectedProcedure.procedureID);
});
},
),
Text(
projectViewModel.isArabic ? widget.proceduresList[index].procedureNameN : widget.proceduresList[index].procedureName,
@ -108,7 +107,6 @@ class _CovidPaymentDetailsState extends State<CovidPaymentDetails> {
],
),
),
Container(
decoration: cardRadius(12),
child: Padding(
@ -171,7 +169,6 @@ class _CovidPaymentDetailsState extends State<CovidPaymentDetails> {
),
),
),
Container(
margin: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
child: Row(
@ -210,7 +207,6 @@ class _CovidPaymentDetailsState extends State<CovidPaymentDetails> {
),
),
mFlex(1),
Text(
TranslationBase.of(context).payOptions,
textAlign: TextAlign.center,
@ -306,13 +302,7 @@ class _CovidPaymentDetailsState extends State<CovidPaymentDetails> {
}
void next() {
Navigator.push(
context,
FadePage(
page: CovidTimeSlots(
projectID: widget.projectID,
selectedProcedure: widget.selectedProcedure,
)));
Navigator.push(context, FadePage(page: CovidTimeSlots(projectID: widget.projectID, selectedProcedure: widget.selectedProcedure, selectedProject: widget.selectedProject)));
}
cancel() {
@ -322,7 +312,7 @@ class _CovidPaymentDetailsState extends State<CovidPaymentDetails> {
getPaymentInfo(BuildContext context, String projectID, String selectedProcedureID) {
CovidDriveThruService service = new CovidDriveThruService();
GifLoaderDialogUtils.showMyDialog(context);
service.getCovidPaymentInformation(context, int.parse(projectID), selectedProcedureID).then((res) {
service.getCovidPaymentInformation(context, int.parse(projectID), selectedProcedureID, widget.selectedProject.testTypeEnum, widget.selectedProject.testProcedureEnum).then((res) {
GifLoaderDialogUtils.hideDialog(context);
if (res['MessageStatus'] == 1) {
setState(() {

@ -115,7 +115,7 @@ class _ToDoState extends State<ToDo> {
child: widget.appoList[index].clinicID == 265
? Container(
margin: EdgeInsets.only(left: 5.0, right: 5.0),
child: SvgPicture.asset("assets/images/new/drive-thru.svg"),
child: SvgPicture.asset("assets/images/new/CoronaIcon.svg", width: 35.0, height: 35.0),
)
: widget.appoList[index].isLiveCareAppointment
? SvgPicture.asset("assets/images/new/virtual.svg")
@ -130,7 +130,7 @@ class _ToDoState extends State<ToDo> {
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
child: Text(
widget.appoList[index].clinicID == 265
? TranslationBase.of(context).drivethruAppo
? TranslationBase.of(context).covidTestTodo
: widget.appoList[index].isLiveCareAppointment
? TranslationBase.of(context).liveCareAppo
: TranslationBase.of(context).walkinAppo,

@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:pay/pay.dart';
class PaymentMethod extends StatefulWidget {
Function onSelectedMethod;
@ -300,35 +301,58 @@ class _PaymentMethodState extends State<PaymentMethod> {
bottomSheet: Container(
padding: EdgeInsets.all(16),
color: Colors.white,
child: Container(
width: MediaQuery.of(context).size.width,
height: 50.0,
color: Colors.white,
// margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
child: ButtonTheme(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
minWidth: MediaQuery.of(context).size.height * 0.1,
height: 45.0,
child: RaisedButton(
color: CustomColors.green,
textColor: Colors.white,
disabledTextColor: Colors.white,
disabledColor: new Color(0xFFbcc2c4),
elevation: 0,
onPressed: () {
widget.onSelectedMethod(selectedPaymentMethod);
Navigator.pop(context, selectedPaymentMethod);
},
child: Text(TranslationBase.of(context).confirm.toUpperCase(),
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.w600,
)),
),
),
),
child:
// selectedPaymentMethod == "ApplePay"
// ? ApplePayButton(
// paymentConfigurationAsset: 'applepay.json',
// paymentItems: _paymentItems,
// style: ApplePayButtonStyle.black,
// type: ApplePayButtonType.inStore,
// width: MediaQuery.of(context).size.width,
// height: 50,
// margin: const EdgeInsets.only(top: 15.0),
// onPaymentResult: (value) {
// print(value);
// // applePayResponse = ApplePayResponse.fromJson(value);
// // print(applePayResponse.token.data);
// },
// onError: (error) {
// print(error);
// },
// loadingIndicator: const Center(
// child: CircularProgressIndicator(),
// ),
// )
// :
Container(
width: MediaQuery.of(context).size.width,
height: 50.0,
color: Colors.white,
// margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0),
child: ButtonTheme(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
minWidth: MediaQuery.of(context).size.height * 0.1,
height: 45.0,
child: RaisedButton(
color: CustomColors.green,
textColor: Colors.white,
disabledTextColor: Colors.white,
disabledColor: new Color(0xFFbcc2c4),
elevation: 0,
onPressed: () {
widget.onSelectedMethod(selectedPaymentMethod);
Navigator.pop(context, selectedPaymentMethod);
},
child: Text(TranslationBase.of(context).confirm.toUpperCase(),
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.w600,
)),
),
),
),
),
);
}

@ -1,3 +1,4 @@
import 'dart:convert';
import 'dart:math' as math;
import 'package:auto_size_text/auto_size_text.dart';
@ -7,6 +8,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/models/apple_pay_response.dart';
import 'package:diplomaticquarterapp/models/gradient_color.dart';
import 'package:diplomaticquarterapp/models/hmg_services.dart';
import 'package:diplomaticquarterapp/models/slider_data.dart';
@ -23,7 +25,9 @@ import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';
import 'package:pay/pay.dart';
class HomePageFragment2 extends StatefulWidget {
DashboardViewModel model;
@ -39,6 +43,7 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
ProjectViewModel projectViewModel;
List<HmgServices> hmgServices = [];
List<AppoitmentAllHistoryResultList> appoList = [];
ApplePayResponse applePayResponse;
@override
void initState() {
@ -52,7 +57,7 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
initialiseHmgServices(bool isLogin) {
hmgServices.clear();
hmgServices.add(new HmgServices(0, TranslationBase.of(context).liveCare, TranslationBase.of(context).onlineConsulting, "assets/images/new/Live_Care.svg", isLogin));
hmgServices.add(new HmgServices(1, TranslationBase.of(context).covidTest, TranslationBase.of(context).driveThru, "assets/images/new/covid_test_drive_thru.svg", isLogin));
hmgServices.add(new HmgServices(1, TranslationBase.of(context).covidTest, TranslationBase.of(context).driveThru, "assets/images/new/CoronaIcon.svg", isLogin));
hmgServices.add(new HmgServices(2, TranslationBase.of(context).online, TranslationBase.of(context).payment, "assets/images/new/paymentMethods.png", isLogin));
hmgServices.add(new HmgServices(3, TranslationBase.of(context).hhcHome, TranslationBase.of(context).healthCare, "assets/images/new/HHC.svg", isLogin));
hmgServices.add(new HmgServices(4, TranslationBase.of(context).checkup, TranslationBase.of(context).comprehensive, "assets/images/new/comprehensive_checkup.svg", isLogin));
@ -562,6 +567,10 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
);
}
callPayfortApplePayAPI(ApplePayResponse applePayResponse) {
}
Widget showFloating(String icon) {
return Container(
width: MediaQuery.of(context).size.width * 0.06,

@ -3,38 +3,44 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart';
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart';
import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/models/Appointments/toDoCountProviderModel.dart';
import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart' as checkActivation;
import 'package:diplomaticquarterapp/models/Authentication/check_paitent_authentication_req.dart';
import 'package:diplomaticquarterapp/models/Authentication/register_info_response.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doctor.dart';
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:hijri/hijri_calendar.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
class RegisterInfo extends StatefulWidget {
final Function changePageViewIndex;
final int page;
const RegisterInfo({Key key, this.changePageViewIndex, this.page = 1}) : super(key: key);
@override
_RegisterInfo createState() => _RegisterInfo();
}
@ -128,90 +134,6 @@ class _RegisterInfo extends State<RegisterInfo> {
SizedBox(height: 20),
],
)
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
// children: <Widget>[
// AppText(TranslationBase.of(context).nationalID),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.idNumber,
// prefixIcon: Icon(Icons.chrome_reader_mode, color: Colors.red),
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).firstName),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.firstNameEn == '-' ? registerInfo.firstNameAr : registerInfo.firstNameEn,
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).middleName),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.secondNameEn == '-' ? registerInfo.secondNameAr : registerInfo.secondNameEn,
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).lastName),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.lastNameEn == '-' ? registerInfo.lastNameAr : registerInfo.lastNameEn,
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).gender),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.maritalStatusCode == 'U'
// ? 'Unknown'
// : registerInfo.maritalStatusCode == 'M'
// ? 'Male'
// : 'Female',
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).maritalStatus),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.maritalStatus,
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).nationality),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.nationalityCode,
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).mobileNumber),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerd_data.patientMobileNumber.toString(),
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// AppText(TranslationBase.of(context).dob),
// Container(
// margin: EdgeInsets.only(bottom: 10),
// child: TextFields(
// hintText: registerInfo.dateOfBirth,
// padding: EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
// readOnly: true,
// )),
// ],
// )
: registerInfo != null && widget.page == 2
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -349,22 +271,6 @@ class _RegisterInfo extends State<RegisterInfo> {
],
)
: SizedBox(),
// Column(
// mainAxisAlignment: MainAxisAlignment.end,
// children: <Widget>[
// Row(
// children: <Widget>[
// Expanded(
// child: DefaultButton(
// page == 1 ? TranslationBase.of(context).next : TranslationBase.of(context).register,
// () => {nextPage()},
// textColor: Colors.white,
// color: this.isValid() == false && page == 2 ? Colors.grey : Colors.black,
// ))
// ],
// ),
// ],
// )
]),
),
bottomSheet: Container(
@ -417,8 +323,6 @@ class _RegisterInfo extends State<RegisterInfo> {
.registerUser(request)
.then((result) => {
GifLoaderDialogUtils.hideDialog(context),
// userData = result.list;
//AuthenticatedUser.fromJson(result['List'][0]),
if (result is String)
{
new ConfirmDialog(
@ -450,6 +354,7 @@ class _RegisterInfo extends State<RegisterInfo> {
sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID),
sharedPref.setString(TOKEN, result.authenticationTokenID),
AppToast.showSuccessToast(message: TranslationBase.of(context).successRegister),
checkIfUserAgreedBefore(result),
}
})
@ -496,7 +401,7 @@ class _RegisterInfo extends State<RegisterInfo> {
return {
"Patientobject": {
"TempValue": true,
"PatientIdentificationType": 1,
"PatientIdentificationType": registerInfo.idNumber.substring(0, 1) == "1" ? 1 : 2,
"PatientIdentificationNo": registerInfo.idNumber,
"MobileNumber": registerd_data.patientMobileNumber,
"PatientOutSA": registerd_data.zipCode == '966' ? 0 : 1,
@ -541,13 +446,21 @@ class _RegisterInfo extends State<RegisterInfo> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
Text(
name1,
fontSize: 12,
fontWeight: FontWeight.bold,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
letterSpacing: -0.44,
),
),
AppText(
Text(
value1,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
letterSpacing: -0.44,
),
),
],
)),
@ -555,12 +468,22 @@ class _RegisterInfo extends State<RegisterInfo> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
Text(
name2,
fontSize: 12,
fontWeight: FontWeight.bold,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
letterSpacing: -0.44,
),
),
Text(
value2,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
letterSpacing: -0.44,
),
),
AppText(value2),
],
))
],
@ -569,7 +492,7 @@ class _RegisterInfo extends State<RegisterInfo> {
checkIfUserAgreedBefore(checkActivation.CheckActivationCode result) {
if (result.isNeedUserAgreement == true) {
//need to implement agreement page here
//TODO need to implement agreement page here
insertIMEI();
} else {
insertIMEI();
@ -581,7 +504,6 @@ class _RegisterInfo extends State<RegisterInfo> {
authService.insertDeviceImei(selectedOption).then((value) => {goToHome()}).catchError((err) {
print(err);
});
// authService.registeredAuthenticatedUser(data, token, 0, 0).then((res) => {});
}
goToHome() async {
@ -637,11 +559,13 @@ class _RegisterInfo extends State<RegisterInfo> {
class Language {
final String name;
final String value;
Language({this.name, this.value});
}
class Location {
final String name;
final String value;
Location({this.name, this.value});
}

@ -16,7 +16,6 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/otp/sms-popup.dart';
@ -33,11 +32,7 @@ class ConfirmPaymentPage extends StatefulWidget {
final String selectedPaymentMethod;
AuthenticatedUser authenticatedUser;
ConfirmPaymentPage(
{this.advanceModel,
this.patientInfoAndMobileNumber,
this.selectedPaymentMethod,
this.authenticatedUser});
ConfirmPaymentPage({this.advanceModel, this.patientInfoAndMobileNumber, this.selectedPaymentMethod, this.authenticatedUser});
@override
_ConfirmPaymentPageState createState() => _ConfirmPaymentPageState();
@ -51,16 +46,25 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
String transID = "";
ProjectViewModel projectViewModel;
Pay _payClient = Pay.withAssets([
'applepay.json',
]);
var _paymentItems = [
PaymentItem(
label: 'Total',
amount: '99.99',
status: PaymentItemStatus.final_price,
)
];
void submit(MyBalanceViewModel model, code) {
final activationCode = code;
GifLoaderDialogUtils.showMyDialog(AppGlobal.context);
model
.checkActivationCodeForAdvancePayment(activationCode: activationCode)
.then((value) {
model.checkActivationCodeForAdvancePayment(activationCode: activationCode).then((value) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
Navigator.pop(context, true);
AppoitmentAllHistoryResultList appo =
new AppoitmentAllHistoryResultList();
AppoitmentAllHistoryResultList appo = new AppoitmentAllHistoryResultList();
appo.projectID = widget.patientInfoAndMobileNumber.projectID;
projectViewModel.analytics.advancePayments.payment_otp_confirmation(method: widget.selectedPaymentMethod.toLowerCase(), type: 'wallet');
@ -119,12 +123,10 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
height: 100.0,
padding: EdgeInsets.all(7.0),
width: MediaQuery.of(context).size.width * 0.30,
child: Image.asset(
getImagePath(widget.selectedPaymentMethod)),
child: Image.asset(getImagePath(widget.selectedPaymentMethod)),
),
Text(
'${widget.advanceModel.amount} ' +
TranslationBase.of(context).sar,
'${widget.advanceModel.amount} ' + TranslationBase.of(context).sar,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w900,
@ -153,8 +155,7 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
margin: EdgeInsets.all(3),
child: NewTextFields(
hintText: TranslationBase.of(context).name,
initialValue:
widget.patientInfoAndMobileNumber.firstName,
initialValue: widget.patientInfoAndMobileNumber.firstName,
isEnabled: false,
),
),
@ -174,11 +175,7 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
),
NewTextFields(
hintText: TranslationBase.of(context).depositorName,
initialValue: model.user.firstName +
" " +
model.user.middleName +
" " +
model.user.lastName,
initialValue: model.user.firstName + " " + model.user.middleName + " " + model.user.lastName,
isEnabled: false,
),
SizedBox(
@ -214,6 +211,11 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
if (model.state != ViewState.ErrorLocal &&
model.state != ViewState.Error) showSMSDialog(model);
});
// GifLoaderDialogUtils.showMyDialog(context);
// model.sendActivationCodeForAdvancePayment(patientID: int.parse(widget.advanceModel.fileNumber), projectID: widget.advanceModel.hospitalsModel.iD).then((value) {
// GifLoaderDialogUtils.hideDialog(context);
// if (model.state != ViewState.ErrorLocal && model.state != ViewState.Error) showSMSDialog(model);
// });
},
),
),
@ -247,32 +249,13 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
return 'assets/images/new-design/mada.png';
}
openPayment(String paymentMethod, AuthenticatedUser authenticatedUser,
double amount, AppoitmentAllHistoryResultList appo) {
browser = new MyInAppBrowser(
onExitCallback: onBrowserExit,
appo: appo,
onLoadStartCallback: onBrowserLoadStart);
openPayment(String paymentMethod, AuthenticatedUser authenticatedUser, double amount, AppoitmentAllHistoryResultList appo) {
browser = new MyInAppBrowser(onExitCallback: onBrowserExit, appo: appo, onLoadStartCallback: onBrowserLoadStart);
transID = Utils.getAdvancePaymentTransID(
widget.advanceModel.hospitalsModel.iD,
int.parse(widget.advanceModel.fileNumber));
transID = Utils.getAdvancePaymentTransID(widget.advanceModel.hospitalsModel.iD, int.parse(widget.advanceModel.fileNumber));
browser.openPaymentBrowser(
amount,
"Advance Payment",
transID,
widget.advanceModel.hospitalsModel.iD.toString(),
widget.advanceModel.email,
paymentMethod,
widget.patientInfoAndMobileNumber.patientType,
widget.advanceModel.patientName,
widget.advanceModel.fileNumber,
authenticatedUser,
browser,
false,
"3",
"");
browser.openPaymentBrowser(amount, "Advance Payment", transID, widget.advanceModel.hospitalsModel.iD.toString(), widget.advanceModel.email, paymentMethod,
widget.patientInfoAndMobileNumber.patientType, widget.advanceModel.patientName, widget.advanceModel.fileNumber, authenticatedUser, browser, false, "3", "");
}
onBrowserLoadStart(String url) {
@ -322,22 +305,10 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
createAdvancePayment(res, AppoitmentAllHistoryResultList appo) {
DoctorsListService service = new DoctorsListService();
String paymentReference = res['Fort_id'].toString();
service.HIS_createAdvancePayment(
appo,
widget.advanceModel.hospitalsModel.iD.toString(),
res['Amount'],
res['Fort_id'],
res['PaymentMethod'],
widget.patientInfoAndMobileNumber.patientType,
widget.advanceModel.patientName,
widget.advanceModel.fileNumber,
AppGlobal.context)
service.HIS_createAdvancePayment(appo, widget.advanceModel.hospitalsModel.iD.toString(), res['Amount'], res['Fort_id'], res['PaymentMethod'], widget.patientInfoAndMobileNumber.patientType,
widget.advanceModel.patientName, widget.advanceModel.fileNumber, AppGlobal.context)
.then((res) {
addAdvancedNumberRequest(
res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(),
paymentReference,
0,
appo);
addAdvancedNumberRequest(res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), paymentReference, 0, appo);
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
AppToast.showErrorToast(message: err);
@ -345,13 +316,9 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
});
}
addAdvancedNumberRequest(String advanceNumber, String paymentReference,
dynamic appointmentID, AppoitmentAllHistoryResultList appo) {
addAdvancedNumberRequest(String advanceNumber, String paymentReference, dynamic appointmentID, AppoitmentAllHistoryResultList appo) {
DoctorsListService service = new DoctorsListService();
service
.addAdvancedNumberRequest(
advanceNumber, paymentReference, appointmentID, AppGlobal.context)
.then((res) {
service.addAdvancedNumberRequest(advanceNumber, paymentReference, appointmentID, AppGlobal.context).then((res) {
print(res);
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
navigateToHome(AppGlobal.context);

@ -18,16 +18,18 @@ class LaboratoryResultPage extends StatefulWidget {
}
class _LaboratoryResultPageState extends State<LaboratoryResultPage> {
@override
Widget build(BuildContext context) {
return BaseView<LabsViewModel>(
onModelReady: (model) => model.getLaboratoryResult(
invoiceNo: widget.patientLabOrders.invoiceNo, clinicID: widget.patientLabOrders.clinicID, projectID: widget.patientLabOrders.projectID, orderNo: widget.patientLabOrders.orderNo),
invoiceNo: widget.patientLabOrders.invoiceNo,
clinicID: widget.patientLabOrders.clinicID,
projectID: widget.patientLabOrders.projectID,
orderNo: widget.patientLabOrders.orderNo,
setupID: widget.patientLabOrders.setupID),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: widget.patientLabOrders.doctorName,
appBarTitle: widget.patientLabOrders.doctorName,
baseViewModel: model,
showNewAppBar: true,
showNewAppBarTitle: true,

@ -1,10 +1,10 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/review_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:rating_bar/rating_bar.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
class MyReviewsPage extends StatefulWidget {
@override
@ -47,7 +47,8 @@ class _MyReviewsPageState extends State<MyReviewsPage> {
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(TranslationBase.of(context).noData,
child: Text(
TranslationBase.of(context).noData,
// 'There is no data',
style: TextStyle(fontSize: 30),
),
@ -65,11 +66,8 @@ class _MyReviewsPageState extends State<MyReviewsPage> {
Container(
child: reviewDetails(
model.reviewListList[index],
double.parse(model.reviewListList[index].product
.approvedTotalReviews
.toString()),
double.parse(model.reviewListList[index].rating
.toString()),
double.parse(model.reviewListList[index].product.approvedTotalReviews.toString()),
double.parse(model.reviewListList[index].rating.toString()),
),
),
Divider(height: 1, color: Colors.grey)
@ -97,9 +95,7 @@ reviewDetails(data, rate, myRate) {
Row(
children: [
Container(
margin: languageID == 'ar'
? EdgeInsets.only(top: 10, right: 10)
: EdgeInsets.only(top: 10, left: 10),
margin: languageID == 'ar' ? EdgeInsets.only(top: 10, right: 10) : EdgeInsets.only(top: 10, left: 10),
child: Image.network(
data.product.images[0].src.trim(),
fit: BoxFit.cover,
@ -114,18 +110,11 @@ reviewDetails(data, rate, myRate) {
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: languageID == 'ar'
? Alignment.topRight
: Alignment.topLeft,
alignment: languageID == 'ar' ? Alignment.topRight : Alignment.topLeft,
child: RichText(
text: TextSpan(
text: languageID == 'ar'
? data.product.namen
: data.product.name,
style: TextStyle(
color: Colors.black54,
fontSize: languageID == 'ar' ? 12 : 13,
fontWeight: FontWeight.bold),
text: languageID == 'ar' ? data.product.namen : data.product.name,
style: TextStyle(color: Colors.black54, fontSize: languageID == 'ar' ? 12 : 13, fontWeight: FontWeight.bold),
),
),
),
@ -135,18 +124,11 @@ reviewDetails(data, rate, myRate) {
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: languageID == 'ar'
? Alignment.topRight
: Alignment.topLeft,
alignment: languageID == 'ar' ? Alignment.topRight : Alignment.topLeft,
child: RichText(
text: TextSpan(
text: data.product.quantity.toString() +
" " +
data.product.currency,
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
text: data.product.price.toString() + " " + data.product.currency,
style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black, fontSize: 13),
),
),
),
@ -156,9 +138,7 @@ reviewDetails(data, rate, myRate) {
Container(
margin: EdgeInsets.all(5),
child: Align(
alignment: languageID == 'ar'
? Alignment.topRight
: Alignment.topLeft,
alignment: languageID == 'ar' ? Alignment.topRight : Alignment.topLeft,
child: RatingBar.readOnly(
initialRating: rate,
size: 15.0,
@ -186,11 +166,7 @@ reviewDetails(data, rate, myRate) {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
padding: languageID == 'ar'
? EdgeInsets.only(right: 10)
: EdgeInsets.only(left: 10),
child: Text(data.createdOnUtc.toString().substring(0 , 11))),
Container(padding: languageID == 'ar' ? EdgeInsets.only(right: 10) : EdgeInsets.only(left: 10), child: Text(data.createdOnUtc.toString().substring(0, 11))),
],
),
),
@ -200,9 +176,7 @@ reviewDetails(data, rate, myRate) {
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
padding: languageID == 'ar'
? EdgeInsets.only(right: 60)
: EdgeInsets.only(left: 60),
padding: languageID == 'ar' ? EdgeInsets.only(right: 60) : EdgeInsets.only(left: 60),
child: RatingBar.readOnly(
initialRating: myRate,
size: 15.0,
@ -225,10 +199,8 @@ reviewDetails(data, rate, myRate) {
),
Expanded(
child: Container(
padding: languageID == 'ar'
? EdgeInsets.only(right: 10)
: EdgeInsets.only(left: 10),
child: Text(fixingString(data.reviewText.toString())),
padding: languageID == 'ar' ? EdgeInsets.only(right: 10) : EdgeInsets.only(left: 10),
child: Text(getReview(data) ?? ""),
),
),
],
@ -238,6 +210,20 @@ reviewDetails(data, rate, myRate) {
);
}
String getReview(data) {
String reviewTxt = "";
if (data.reviewText == null && data.replyText == null) {
reviewTxt = "";
}
if (data.reviewText == null)
reviewTxt = data.replyText;
else
reviewTxt = data.reviewText;
return reviewTxt;
}
fixingString(txt) {
String stringTxt;
String newTxt;

@ -437,6 +437,7 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
FadePage(
page: PharmacyAddressesPage(
orderPreviewViewModel: widget.model,
isShippingAddress: true,
))).then((result) async {
if (result != null) {
GifLoaderDialogUtils.showMyDialog(context);

@ -6,7 +6,6 @@ import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class LakumPointMonthPage extends StatefulWidget {

@ -1,17 +1,27 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'dart:async';
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.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/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/app_map/google_huawei_map.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/pickupLocation/PickupLocationFromMap.dart';
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_maps_place_picker/google_maps_place_picker.dart';
import 'package:provider/provider.dart';
class AddAddressPage extends StatefulWidget {
final AddressInfo editedAddress;
final Function(PickResult) onPick;
final Function(Placemark, String) onPick;
AddAddressPage(this.editedAddress, this.onPick);
@ -22,10 +32,21 @@ class AddAddressPage extends StatefulWidget {
class _AddAddressPageState extends State<AddAddressPage> {
double _latitude;
double _longitude;
AppMap appMap;
AppSharedPreferences sharedPref = AppSharedPreferences();
LatLng currentPostion;
Completer<GoogleMapController> mapController = Completer();
Placemark selectedPlace;
static CameraPosition _kGooglePlex = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
);
@override
void initState() {
super.initState();
if (widget.editedAddress != null && widget.editedAddress.latLong != null && widget.editedAddress.latLong != "") {
List<String> latLng = widget.editedAddress.latLong.split(",");
_latitude = double.parse(latLng[0]);
@ -33,13 +54,43 @@ class _AddAddressPageState extends State<AddAddressPage> {
} else {
_getCurrentLocation();
}
// setState(() {});
appMap = AppMap(
_kGooglePlex.toMap(),
onCameraMove: (camera) {
_updatePosition(camera);
},
onMapCreated: () {
currentPostion = LatLng(_latitude, _longitude);
// latitude = widget.latitude;
// longitude = widget.longitude;
setMap();
setState(() {});
},
onCameraIdle: () async {
List<Placemark> placemarks = await placemarkFromCoordinates(_latitude, _longitude);
selectedPlace = placemarks[0];
print(selectedPlace);
},
);
}
setMap() {
setState(() {
_kGooglePlex = CameraPosition(
target: currentPostion,
zoom: 14.4746,
);
appMap.moveTo(cameraPostion: _kGooglePlex);
});
}
void _updatePosition(CameraPosition _position) {
_latitude = _position.target.latitude;
_longitude = _position.target.longitude;
print(_position);
}
_getCurrentLocation() async {
await Geolocator.getLastKnownPosition().then((value) {
@ -48,37 +99,93 @@ class _AddAddressPageState extends State<AddAddressPage> {
}).catchError((e) {
_longitude = 0;
_latitude = 0;
});
}
@override
Widget build(BuildContext context) {
final mediaQuery = MediaQuery.of(context);
final height = mediaQuery.size.height - 60 - mediaQuery.padding.top;
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<PharmacyAddressesViewModel>(
builder: (_, model, wi) => AppScaffold(
appBarTitle: TranslationBase.of(context).changeAddress,
isShowAppBar: false,
isShowAppBar: true,
isPharmacy: true,
backgroundColor: Colors.white,
body: Container(
height: height * 1,
child: PickupLocationFromMap(
latitude: _latitude??0,
longitude: _longitude??0,
isWithAppBar: false,
buttonColor: Color(0xFF5AB145),
buttonLabel: TranslationBase.of(context).save,
onPick: (value) {
widget.onPick(value);
},
),
showNewAppBarTitle: true,
showNewAppBar: true,
body: Column(
children: [
Expanded(
child: Stack(
alignment: Alignment.center,
children: [
if (appMap != null) appMap,
Container(
margin: EdgeInsets.only(bottom: 50.0),
child: Icon(
Icons.place,
color: CustomColors.accentColor,
size: 50,
),
),
],
),
),
Container(
padding: const EdgeInsets.only(left: 20, right: 20, top: 14, bottom: 14),
child: DefaultButton(TranslationBase.of(context).addNewAddress, () async {
// AddNewAddressRequestModel addNewAddressRequestModel = new AddNewAddressRequestModel(
// customer: Customer(addresses: [
// Addresses(
// address1: selectedPlace.name,
// address2: selectedPlace.street,
// customerAttributes: "",
// city: selectedPlace.locality,
// createdOnUtc: "",
// id: "0",
// faxNumber: "",
// phoneNumber: projectViewModel.user.mobileNumber,
// province: selectedPlace.locality,
// countryId: 69,
// latLong: "$_latitude,$_longitude",
// country: selectedPlace.country,
// zipPostalCode: selectedPlace.postalCode,
// email: projectViewModel.user.emailAddress)
// ]),
// );
widget.onPick(selectedPlace, "$_latitude,$_longitude");
Navigator.of(context).pop();
// await model.addAddressInfo(addNewAddressRequestModel: addNewAddressRequestModel);
// if (model.state == ViewState.ErrorLocal) {
// Utils.showErrorToast(model.error);
// } else {
// AppToast.showSuccessToast(message: "Address Added Successfully");
// }
// Navigator.of(context).pop(addNewAddressRequestModel);
}),
),
],
),
),
);
// Container(
// height: height * 1,
// child: PickupLocationFromMap(
// latitude: _latitude ?? 0,
// longitude: _longitude ?? 0,
// isWithAppBar: false,
// buttonColor: Color(0xFF5AB145),
// buttonLabel: TranslationBase.of(context).save,
// onPick: (value) {
// widget.onPick(value);
// },
// ),
),
);
// );
}
}

@ -24,8 +24,9 @@ class PharmacyAddressesPage extends StatefulWidget {
final Function changeMainState;
final bool isUpdate;
final bool isShippingAddress;
const PharmacyAddressesPage({Key key, this.orderPreviewViewModel, this.isUpdate = false, this.changeMainState}) : super(key: key);
const PharmacyAddressesPage({Key key, this.orderPreviewViewModel, this.isUpdate = false, this.isShippingAddress = false, this.changeMainState}) : super(key: key);
@override
_PharmacyAddressesState createState() => _PharmacyAddressesState();
@ -38,8 +39,8 @@ class _PharmacyAddressesState extends State<PharmacyAddressesPage> {
FadePage(
page: AddAddressPage(
address,
(pickResult) async {
await model.addEditAddress(pickResult, address);
(pickResult, latLong) async {
await model.addEditAddress(pickResult, address, latLong: latLong);
},
),
),
@ -62,7 +63,7 @@ class _PharmacyAddressesState extends State<PharmacyAddressesPage> {
baseViewModel: model,
backgroundColor: Colors.white,
body: Container(
height: height * 0.90,
height: widget.isShippingAddress ? height * 0.90 : height * 0.99,
child: SingleChildScrollView(
child: Column(
children: <Widget>[
@ -106,52 +107,51 @@ class _PharmacyAddressesState extends State<PharmacyAddressesPage> {
),
),
),
bottomSheet: Container(
height: height * 0.10,
color: Colors.white,
child: Column(
children: [
Divider(
color: Colors.grey.shade300,
height: 1,
thickness: 1,
indent: 0,
endIndent: 0,
),
Container(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: BorderedButton(
TranslationBase.of(context).confirmAddress,
hasBorder: true,
borderColor: Color(0xFF5AB145),
textColor: Colors.white,
fontWeight: FontWeight.bold,
backgroundColor: Color(0xFF5AB145),
fontSize: 14,
vPadding: 8,
handler: () async {
//TODO Elham*
widget.orderPreviewViewModel.paymentCheckoutData.address = Addresses.fromJson(model.addresses[model.selectedAddressIndex].toJson());
GifLoaderDialogUtils.showMyDialog(context);
await widget.orderPreviewViewModel.getInformationsByAddress(projectProvider.user.patientIdentificationNo);
if (widget.orderPreviewViewModel.error == "") {
await widget.orderPreviewViewModel.getShoppingCart();
GifLoaderDialogUtils.hideDialog(context);
model.saveSelectedAddressLocally(model.addresses[model.selectedAddressIndex]);
_navigateToPaymentOption(model);
} else {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: widget.orderPreviewViewModel.error);
return;
}
},
bottomSheet: widget.isShippingAddress
? Container(
height: height * 0.10,
color: Colors.white,
child: Column(
children: [
Divider(
color: Colors.grey.shade300,
height: 1,
thickness: 1,
indent: 0,
endIndent: 0,
),
Container(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: BorderedButton(
TranslationBase.of(context).confirmAddress,
hasBorder: true,
borderColor: Color(0xFF5AB145),
textColor: Colors.white,
fontWeight: FontWeight.bold,
backgroundColor: Color(0xFF5AB145),
fontSize: 14,
vPadding: 8,
handler: () async {
widget.orderPreviewViewModel.paymentCheckoutData.address = Addresses.fromJson(model.addresses[model.selectedAddressIndex].toJson());
GifLoaderDialogUtils.showMyDialog(context);
await widget.orderPreviewViewModel.getInformationsByAddress(projectProvider.user.patientIdentificationNo);
if (widget.orderPreviewViewModel.error == "") {
await widget.orderPreviewViewModel.getShoppingCart();
GifLoaderDialogUtils.hideDialog(context);
model.saveSelectedAddressLocally(model.addresses[model.selectedAddressIndex]);
_navigateToPaymentOption(model);
} else {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: widget.orderPreviewViewModel.error);
return;
}
},
),
),
],
),
),
],
),
),
)
: SizedBox(),
),
);
}

@ -432,7 +432,7 @@ class _ProfilePageState extends State<PharmacyProfilePage> {
),
InkWell(
onTap: () {
Navigator.push(context, FadePage(page: PharmacyAddressesPage()));
Navigator.push(context, FadePage(page: PharmacyAddressesPage(isShippingAddress: false)));
},
child: Row(
children: <Widget>[

@ -1,50 +1,50 @@
import 'dart:convert';
// import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:diplomaticquarterapp/pages/webRTC/fcm/FCMSendNotification.dart';
import 'package:diplomaticquarterapp/uitl/SignalRUtil.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart';
import 'call_page.dart';
typedef void StreamStateCallback(MediaStream stream);
typedef void RTCIceGatheringStateCallback(RTCIceGatheringState state);
typedef void RTCPeerConnectionStateCallback(RTCPeerConnectionState state);
typedef void RTCSignalingStateCallback(RTCSignalingState state);
class Signaling {
dispose(){
if(peerConnection != null)
peerConnection.dispose();
dispose() {
if (peerConnection != null) peerConnection.dispose();
signalR.closeConnection();
}
init(){
init() {
// Create Peer Connection
createPeerConnection(configuration).then((value){
createPeerConnection(configuration).then((value) {
peerConnection = value;
registerPeerConnectionListeners();
});
}
initializeSignalR(String userName) async{
if(signalR != null)
await signalR.closeConnection();
initializeSignalR(String userName) async {
if (signalR != null) await signalR.closeConnection();
// https://vcallapi.hmg.com/webRTCHub?source=web&username=zohaib
signalR = SignalRUtil(hubName: "https://vcallapi.hmg.com/webRTCHub?source=mobile&username=$userName");
final connected = await signalR.openConnection();
if(!connected)
throw 'Failed to connect SignalR';
if (!connected) throw 'Failed to connect SignalR';
}
Map<String, dynamic> configuration = {
// 'iceServers': [
// {
// 'urls': ['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302']
// }
// ]
'iceServers': [
{
'urls': ['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302']
}
// {
// 'urls': ['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302']
// }
{'url': "stun:ec2-15-185-116-59.me-south-1.compute.amazonaws.com:3478"},
{'url': "turn:ec2-15-185-116-59.me-south-1.compute.amazonaws.com:3479", 'credential': "admin", 'username': "admin"}
]
};
@ -65,8 +65,7 @@ class Signaling {
// return isCallPlaced;
// }
Future<bool> acceptCall(String caller, String receiver, {@required MediaStream localMediaStream, @required Function(MediaStream) onRemoteMediaStream}) async{
Future<bool> acceptCall(String caller, String receiver, {@required MediaStream localMediaStream, @required Function(MediaStream) onRemoteMediaStream}) async {
await initializeSignalR(receiver);
signalR.setContributors(caller: caller, receiver: receiver);
await signalR.acceptCall(receiver, caller).catchError((e) => throw 'Failed to inform signalR that i accepted a call');
@ -81,35 +80,28 @@ class Signaling {
return true;
}
Future hangupCall(String caller, String receiver) async{
Future hangupCall(String caller, String receiver) async {
await signalR.hangupCall(caller, receiver);
dispose();
}
answerOffer(String sdp) async{
answerOffer(String sdp) async {
final offer = jsonDecode(sdp);
final caller = offer['caller'];
final receiver = offer['target'];
final offerSdp = offer['sdp'];
peerConnection.setRemoteDescription(rtcSessionDescriptionFrom(offerSdp))
.then((value) {
peerConnection.setRemoteDescription(rtcSessionDescriptionFrom(offerSdp)).then((value) {
return peerConnection.createAnswer();
})
.then((anwser) {
}).then((anwser) {
return peerConnection.setLocalDescription(anwser);
})
.then((value) {
}).then((value) {
return peerConnection.getLocalDescription();
})
.then((answer) {
}).then((answer) {
return signalR.answerOffer(answer, caller, receiver);
});
}
Future<void> hangUp(RTCVideoRenderer localVideo) async {
}
Future<void> hangUp(RTCVideoRenderer localVideo) async {}
Future<String> createSdpAnswer(String toOfferSdp) async {
final offerSdp = rtcSessionDescriptionFrom(jsonDecode(toOfferSdp));
@ -128,12 +120,12 @@ class Signaling {
return offerSdp;
}
addCandidate(String candidateJson){
addCandidate(String candidateJson) {
peerConnection.addCandidate(rtcIceCandidateFrom(candidateJson));
}
void registerPeerConnectionListeners() {
peerConnection.onIceCandidate = (RTCIceCandidate candidate){
peerConnection.onIceCandidate = (RTCIceCandidate candidate) {
// print(json.encode(candidate.toMap()));
signalR.addIceCandidate(json.encode(candidate.toMap()));
};
@ -152,14 +144,14 @@ class Signaling {
}
}
rtcSessionDescriptionFrom(Map sdp){
rtcSessionDescriptionFrom(Map sdp) {
return RTCSessionDescription(
sdp['sdp'],sdp['type'],
sdp['sdp'],
sdp['type'],
);
}
rtcIceCandidateFrom(String json){
rtcIceCandidateFrom(String json) {
final map = jsonDecode(json)['candidate'];
return RTCIceCandidate(map['candidate'], map['sdpMid'], map['sdpMLineIndex']);
}

@ -9,10 +9,12 @@ import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.da
import 'package:diplomaticquarterapp/models/Appointments/doctor_pre_post_image.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/models/Request.dart';
import 'package:diplomaticquarterapp/models/apple_pay_request.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
import 'package:flutter/cupertino.dart';
class DoctorsListService extends BaseService {
@ -315,7 +317,8 @@ class DoctorsListService extends BaseService {
return Future.value(localRes);
}
Future<Map> insertAppointment(int docID, int clinicID, int projectID, String selectedTime, String selectedDate, BuildContext context, [String procedureID]) async {
Future<Map> insertAppointment(int docID, int clinicID, int projectID, String selectedTime, String selectedDate, BuildContext context,
[String procedureID, num testTypeEnum, num testProcedureEnum]) async {
Map<String, dynamic> request;
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
@ -334,6 +337,8 @@ class DoctorsListService extends BaseService {
"SelectedTime": selectedTime,
"EndTime": selectedTime,
"ProcedureID": procedureID,
"TestTypeEnum": testTypeEnum,
"TestProcedureEnum": testProcedureEnum,
"InitialSlotDuration": 0,
"StrAppointmentDate": selectedDate,
"IsVirtual": false,
@ -388,6 +393,7 @@ class DoctorsListService extends BaseService {
"StrAppointmentDate": selectedDate,
"IsVirtual": false,
"DeviceType": Platform.isIOS ? 'iOS' : 'Android',
"DeviceToken": await sharedPref.getString(PUSH_TOKEN),
"BookedBy": 102,
"VisitType": 1,
"VisitFor": 1,
@ -848,7 +854,7 @@ class DoctorsListService extends BaseService {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
}, body: request, isAllowAny: true);
return Future.value(localRes);
}
@ -904,7 +910,7 @@ class DoctorsListService extends BaseService {
return Future.value(localRes);
}
Future<Map> autoGenerateAncillaryOrdersInvoice(String orderNo, int projectID, dynamic appointmentID, List<dynamic> selectedProcListAPI, BuildContext context) async {
Future<Map> autoGenerateAncillaryOrdersInvoice(dynamic orderNo, int projectID, dynamic appointmentID, List<dynamic> selectedProcListAPI, BuildContext context) async {
Map<String, dynamic> request;
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
var data = AuthenticatedUser.fromJson(await this.sharedPref.getObject(USER_PROFILE));
@ -1340,6 +1346,47 @@ class DoctorsListService extends BaseService {
return Future.value(localRes);
}
Future<Map> callPayfortApplePayAPI(ApplePayRequest applePayRequest, BuildContext context) async {
Map<String, dynamic> request;
request = {
"currency": applePayRequest.currency,
"language": applePayRequest.language,
"customername": applePayRequest.customername,
"customer_email": applePayRequest.customerEmail,
"orderdescription": applePayRequest.orderdescription,
"live_serviceid": applePayRequest.liveServiceid,
"longitude": applePayRequest.longitude,
"latitude": applePayRequest.latitude,
"devicetoken": applePayRequest.devicetoken,
"clientrequestid": applePayRequest.clientrequestid,
"projectid": applePayRequest.projectid,
"serviceid": applePayRequest.serviceid,
"patientid": applePayRequest.patientid,
"Amount": applePayRequest.amount,
"apple_data": applePayRequest.appleData,
"apple_signature": applePayRequest.appleSignature,
"apple_header": {
"apple_applicationData": "76a9a9cb2d9811e8de56d8e7713601bfa6acda3d488b1cf03b9b115bc3ff12b4",
"apple_ephemeralPublicKey": applePayRequest.appleHeader.appleEphemeralPublicKey,
"apple_publicKeyHash": applePayRequest.appleHeader.applePublicKeyHash,
"apple_transactionId": applePayRequest.appleHeader.appleTransactionId
},
"apple_paymentMethod": {
"apple_displayName": applePayRequest.applePaymentMethod.appleDisplayName,
"apple_network": applePayRequest.applePaymentMethod.appleNetwork,
"apple_type": applePayRequest.applePaymentMethod.appleType
}
};
dynamic localRes;
await baseAppClient.post(MyInAppBrowser.APPLE_PAY_PAYFORT_URL, onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request, isExternal: true);
return Future.value(localRes);
}
Future<Map> getLaserBodyPartsList(int laserCategoryID) async {
Map<String, dynamic> request;
@ -1354,4 +1401,51 @@ class DoctorsListService extends BaseService {
}, body: request);
return Future.value(localRes);
}
Future<Map> insertCovidQuestionnaire(List qa, int projectID, int testTypeEnum, int testProcedureEnum) async {
Map<String, dynamic> request;
request = {
"ProjectID": projectID,
"IsForTravel": qa[0]['ans'].toString(),
"IsComingOutSA": qa[1]['ans'].toString(),
"IsFeverCurrently": qa[2]['ans'].toString(),
"IsFeverLast2Week": qa[3]['ans'].toString(),
"IsSorethroat": qa[4]['ans'].toString(),
"IsRunnyNose": qa[5]['ans'].toString(),
"IsCough": qa[6]['ans'].toString(),
"IsShortnessBreath": qa[7]['ans'].toString(),
"IsNausea": qa[8]['ans'].toString(),
"IsVomiting": qa[9]['ans'].toString(),
"IsHeadache": qa[10]['ans'].toString(),
"IsMusclePain": qa[11]['ans'].toString(),
"IsJoinPain": qa[12]['ans'].toString(),
"IsDiarrhea": qa[13]['ans'].toString(),
"TestTypeEnum": testTypeEnum,
"TestProcedureEnum": testProcedureEnum
};
dynamic localRes;
await baseAppClient.post(INSERT_COVID_QUESTIONNAIRE, onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
return Future.value(localRes);
}
Future<Map> updateCovidQuestionnaire(String appoNo, int projectID, int testTypeEnum, int testProcedureEnum) async {
Map<String, dynamic> request;
request = {"AppointmentNo": appoNo, "ProjectID": projectID, "TestTypeEnum": testTypeEnum, "TestProcedureEnum": testProcedureEnum};
dynamic localRes;
await baseAppClient.post(UPDATE_COVID_QUESTIONNAIRE, onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
return Future.value(localRes);
}
}

@ -34,14 +34,18 @@ class CovidDriveThruService extends BaseService {
return Future.value(localRes);
}
Future<Map> getCovidTestProceduresList(BuildContext context) async {
Future<Map> getCovidTestProceduresList(BuildContext context, num testTypeEnum, num testProcedureEnum, int projectID) async {
Map<String, dynamic> request;
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
var data = AuthenticatedUser.fromJson(await this.sharedPref.getObject(USER_PROFILE));
authUser = data;
}
request = {};
request = {
"ProjectID": projectID,
"TestTypeEnum": testTypeEnum,
"TestProcedureEnum": testProcedureEnum
};
dynamic localRes;
@ -53,7 +57,7 @@ class CovidDriveThruService extends BaseService {
return Future.value(localRes);
}
Future<Map> getCovidPaymentInformation(BuildContext context, int projectID, String procedureID) async {
Future<Map> getCovidPaymentInformation(BuildContext context, int projectID, String procedureID, num testTypeEnum, num testProcedureEnum) async {
Map<String, dynamic> request;
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
@ -63,7 +67,9 @@ class CovidDriveThruService extends BaseService {
request = {
"ProjectID": projectID,
"ProcedureId": procedureID
"ProcedureId": procedureID,
"TestTypeEnum": testTypeEnum,
"TestProcedureEnum": testProcedureEnum
};
dynamic localRes;
@ -76,7 +82,7 @@ class CovidDriveThruService extends BaseService {
return Future.value(localRes);
}
Future<Map> getCovidFreeSlots(BuildContext context, int projectID) async {
Future<Map> getCovidFreeSlots(BuildContext context, int projectID, num testTypeEnum, num testProcedureEnum) async {
Map<String, dynamic> request;
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
@ -86,6 +92,8 @@ class CovidDriveThruService extends BaseService {
request = {
"ProjectID": projectID,
"TestTypeEnum": testTypeEnum,
"TestProcedureEnum": testProcedureEnum
};
dynamic localRes;

@ -209,8 +209,9 @@ class LiveCareService extends BaseService {
"ClientRequestID": clientRequestID,
"DeviceToken": deviceToken,
"VoipToken": "",
"Latitude": "24.708488",
"Longitude": "46.665925",
"IsFlutter": true,
"Latitude": await this.sharedPref.getDouble(USER_LAT),
"Longitude": await this.sharedPref.getDouble(USER_LONG),
"DeviceType": Platform.isIOS ? 'iOS' : 'Android',
"Age": authUser.age != null ? authUser.age : 0,
"PatientID": authUser.patientID != null ? authUser.patientID : 0,

@ -121,6 +121,8 @@ class AppSharedPreferences {
/// remove value based on [key] the key was saved
remove(String key) async {
final SharedPreferences prefs = await _prefs;
prefs.remove(key);
prefs.remove(key).then((value) {
print(value);
});
}
}

@ -2825,8 +2825,8 @@ class TranslationBase {
String get patients => localizedValues["patients"][locale.languageCode];
String get group => localizedValues["group"][locale.languageCode];
String get ancillaryOrdersPaymentConfirm => localizedValues["ancillaryOrdersPaymentConfirm"][locale.languageCode];
String get covidTestTodo => localizedValues["covidTestTodo"][locale.languageCode];
String get successRegister => localizedValues["successRegister"][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -1,5 +1,6 @@
import 'dart:async';
import 'package:diplomaticquarterapp/services/pharmacy_services/writeReview_service.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hms_gms_availability/flutter_hms_gms_availability.dart';
@ -12,8 +13,9 @@ class AppMap extends StatefulWidget {
AppMapState _state;
Function onMapCreated;
Function onCameraIdle;
AppMap(this.initialCamera, {this.onCameraMove, this.onMapCreated});
AppMap(this.initialCamera, {this.onCameraMove, this.onMapCreated, this.onCameraIdle});
@override
State<StatefulWidget> createState() => _state = AppMapState();
@ -69,6 +71,7 @@ class AppMapState extends State<AppMap> {
_googleMapControllerComp.complete(controller);
widget.onMapCreated();
},
onCameraIdle: widget.onCameraIdle,
);
}

@ -28,13 +28,16 @@ var _InAppBrowserOptions = InAppBrowserClassOptions(
class MyInAppBrowser extends InAppBrowser {
_PAYMENT_TYPE paymentType;
// static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT
// static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWebLive/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL LIVE
static String APPLE_PAY_PAYFORT_URL = 'https://hmgwebservices.com/PayFortWeb/PayFortApi/MakeApplePayRequest'; // Payfort Payment Gateway URL UAT
static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE
static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT
// static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT
// static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE
static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store
static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT
// static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store
// static String PRESCRIPTION_PAYMENT_WITH_ORDERID =
// 'https://uat.hmgwebservices.com/epharmacy/checkout/OpcCompleteRedirectionPaymentClientbyOrder?orderID=';

@ -42,7 +42,10 @@ dependencies:
permission_handler: ^8.3.0
# Flutter Html View
flutter_html: ^2.1.5
flutter_html: ^2.2.1
#Apple Pay
pay: ^1.0.7
# Pagnation
pull_to_refresh: ^2.0.0
@ -107,7 +110,7 @@ dependencies:
syncfusion_flutter_calendar: ^19.3.55
# SVG Images
flutter_svg: ^0.23.0+1
# flutter_svg: ^0.23.0+1
#Calendar Events
manage_calendar_events: ^2.0.1
@ -138,6 +141,9 @@ dependencies:
#Handle Geolocation
geolocator: ^7.7.1
#Handle lat long to address
geocoding: ^2.0.1
jiffy: ^4.1.0
#Flutter WebRTC
@ -197,6 +203,7 @@ dependencies:
dependency_overrides:
provider : ^5.0.0
permission_handler : ^6.0.1+1
flutter_svg: ^1.0.0
dev_dependencies:
@ -208,6 +215,7 @@ flutter:
uses-material-design: true
# assets:
assets:
- assets/
- assets/images/
- assets/images/map_markers/
- assets/images/pharmacy/

Loading…
Cancel
Save