diff --git a/DQKey.jks b/DQKey.jks
deleted file mode 100644
index 7c844584..00000000
Binary files a/DQKey.jks and /dev/null differ
diff --git a/Keystore Pass.rtf b/Keystore Pass.rtf
deleted file mode 100644
index cd33f08e..00000000
--- a/Keystore Pass.rtf
+++ /dev/null
@@ -1,9 +0,0 @@
-{\rtf1\ansi\ansicpg1252\cocoartf2513
-\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-{\*\expandedcolortbl;;}
-\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
-\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
-
-\f0\fs24 \cf0 keyPassword=HmGsa123\
-storePassword=HmGsa123}
\ No newline at end of file
diff --git a/android/app/build.gradle b/android/app/build.gradle
index faff5fa6..91c15cde 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -26,65 +26,43 @@ apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-def keystoreProperties = new Properties()
-def keystorePropertiesFile = rootProject.file('key.properties')
-if (keystorePropertiesFile.exists()) {
- keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
-}
-
android {
- compileSdkVersion 30
+ compileSdkVersion 28
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
-// disable 'InvalidPackage'
- checkReleaseBuilds false
- abortOnError false
+ disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.cloud.diplomaticquarterapp"
minSdkVersion 21
- targetSdkVersion 30
+ targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
- signingConfigs {
- release {
- keyAlias keystoreProperties['keyAlias']
- keyPassword keystoreProperties['keyPassword']
- storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
- storePassword keystoreProperties['storePassword']
- }
- }
-
buildTypes {
debug {}
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
-// signingConfig signingConfigs.debug
-// useProguard true
-
-// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
-
- signingConfigs.release
+ signingConfig signingConfigs.debug
+ }
+ staging {
+ // Specifies a sorted list of fallback build types that the
+ // plugin should try to use when a dependency does not include a
+ // "staging" build type. You may specify as many fallbacks as you
+ // like, and the plugin selects the first build type that's
+ // available in the dependency.
+ matchingFallbacks = ['debug', 'qa', 'release']
}
-// staging {
-// // Specifies a sorted list of fallback build types that the
-// // plugin should try to use when a dependency does not include a
-// // "staging" build type. You may specify as many fallbacks as you
-// // like, and the plugin selects the first build type that's
-// // available in the dependency.
-// matchingFallbacks = ['debug', 'qa', 'release']
-// }
}
}
@@ -105,4 +83,10 @@ dependencies {
// implementation 'com.example.android:app-magic:12.3'
+ // Native Dependency
+ implementation "org.jetbrains.anko:anko-commons:0.10.4"
+ implementation 'com.github.kittinunf.fuel:fuel:2.3.0' //for JVM
+ implementation 'com.github.kittinunf.fuel:fuel-android:2.3.0' //for Android
+
+
}
diff --git a/android/app/google-services.json b/android/app/google-services.json
index a4655794..f86832ad 100644
--- a/android/app/google-services.json
+++ b/android/app/google-services.json
@@ -1,37 +1,39 @@
{
"project_info": {
- "project_number": "864393916058",
- "firebase_url": "https://diplomaticquarter-d2385.firebaseio.com",
- "project_id": "diplomaticquarter-d2385",
- "storage_bucket": "diplomaticquarter-d2385.appspot.com"
+ "project_number": "815750722565",
+ "firebase_url": "https://api-project-815750722565.firebaseio.com",
+ "project_id": "api-project-815750722565",
+ "storage_bucket": "api-project-815750722565.appspot.com"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:864393916058:android:5b5a65cd6d8c18b4b97923",
+ "mobilesdk_app_id": "1:815750722565:android:62281cd3e5df4063",
"android_client_info": {
"package_name": "com.cloud.diplomaticquarterapp"
}
},
"oauth_client": [
{
- "client_id": "864393916058-tphjrn8j39ntevt32ekcvmll8aue7qql.apps.googleusercontent.com",
+ "client_id": "815750722565-3a0gc7neins0eoahdrimrfksk0sqice8.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
- "current_key": "AIzaSyBdV3mos1BPhUzNKCj2KANJtiO3o2zh9IM"
+ "current_key": "AIzaSyDUfg6AKM1-00WyzpvLImUBC46wFrq9-qw"
}
],
"services": {
+ "analytics_service": {
+ "status": 1
+ },
"appinvite_service": {
- "other_platform_oauth_client": [
- {
- "client_id": "864393916058-tphjrn8j39ntevt32ekcvmll8aue7qql.apps.googleusercontent.com",
- "client_type": 3
- }
- ]
+ "status": 1,
+ "other_platform_oauth_client": []
+ },
+ "ads_service": {
+ "status": 2
}
}
}
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
index beeadd9e..d8fd4e88 100644
--- a/android/app/src/debug/AndroidManifest.xml
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -3,6 +3,5 @@
-
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 12ced804..b2132a0d 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -7,6 +7,7 @@
FlutterApplication and put your custom class here. -->
+
@@ -20,11 +21,16 @@
+
+
+
+
+
+ android:label="diplomaticquarterapp">
+
+
+
+
+
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/MainActivity.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/MainActivity.kt
index b8a87c8c..8b73b0c7 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/MainActivity.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/MainActivity.kt
@@ -1,11 +1,23 @@
package com.cloud.diplomaticquarterapp
+import android.os.Bundle
+import android.util.Log
import androidx.annotation.NonNull;
- import io.flutter.embedding.android.FlutterFragmentActivity
+import com.cloud.diplomaticquarterapp.utils.FlutterText
+import com.cloud.diplomaticquarterapp.utils.PlatformBridge
+import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
- import io.flutter.plugins.GeneratedPluginRegistrant
+import io.flutter.plugin.common.MethodChannel
+import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity: FlutterFragmentActivity() {
- override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
- GeneratedPluginRegistrant.registerWith(flutterEngine);
- }
+ override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
+ GeneratedPluginRegistrant.registerWith(flutterEngine);
+ // Create Flutter Platform Bridge
+ PlatformBridge(flutterEngine.dartExecutor.binaryMessenger, this).create()
+
+ }
+
+ override fun onResume() {
+ super.onResume()
+ }
}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/HMG_Guest.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/HMG_Guest.kt
new file mode 100644
index 00000000..61433596
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/HMG_Guest.kt
@@ -0,0 +1,172 @@
+package com.cloud.diplomaticquarterapp.hmgwifi
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.wifi.WifiConfiguration
+import android.net.wifi.WifiInfo
+import android.net.wifi.WifiManager
+import android.os.Build
+import android.util.Log
+import android.widget.Toast
+import com.cloud.diplomaticquarterapp.MainActivity
+import com.cloud.diplomaticquarterapp.utils.FlutterText
+import com.cloud.diplomaticquarterapp.utils.HMGUtils
+
+
+class HMG_Guest(context: MainActivity) {
+ private var wifiManager: WifiManager? = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager?
+ private var connectivityManager: ConnectivityManager? = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ private var context = context
+
+ private val TAG = "HMG_Guest"
+ private val TEST = false
+ private var SSID = """"HMG-MobileApp""""
+
+ private lateinit var completionListener: ((status: Boolean, message: String) -> Unit)
+
+ fun completionOnUiThread(status: Boolean, message: String){
+ completionListener(status, message)
+ }
+
+ /*
+ * Helpful:
+ * http://stackoverflow.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-programmatically
+ */
+ fun connectToHMGGuestNetwork(completion: (status: Boolean, message: String) -> Unit) {
+ wifiManager?.let { wm ->
+ completionListener = completion
+
+ if (!wm.isWifiEnabled){
+ wm.isWifiEnabled = true
+ HMGUtils.popFlutterText(context,"enablingWifi");
+ HMGUtils.timer(2000,false){
+ connect()
+ }
+ }else{
+ connect()
+ }
+
+ }
+
+ }
+
+
+ private fun connect(){
+ val security = "OPEN"
+ val networkPass = ""
+ Log.d(TAG, "Connecting to SSID \"$SSID\" with password \"$networkPass\" and with security \"$security\" ...")
+
+ // You need to create WifiConfiguration instance like this:
+ val conf = WifiConfiguration()
+ conf.SSID = SSID
+ conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE)
+ conf.networkId = ssidToNetworkId(SSID)
+
+ val wm = wifiManager!!
+
+ if (conf.networkId == -1) {
+ wm.addNetwork(conf)
+ } else {
+ Log.v(TAG, "WiFi found - updating it.\n")
+ wm.updateNetwork(conf)
+ }
+
+ conf.networkId = ssidToNetworkId(SSID)
+ Log.d(TAG, "Network ID: ${conf.networkId}")
+
+ val networkIdToConnect = conf.networkId
+ if (networkIdToConnect >= 0) {
+ Log.v(TAG, "Start connecting to $SSID Wifi...")
+
+ // We disable the network before connecting, because if this was the last connection before
+ // a disconnect(), this will not reconnect.
+ wm.disableNetwork(networkIdToConnect)
+ val result = wm.enableNetwork(networkIdToConnect, true)
+ if(result){
+ HMGUtils.timer(8000,false){
+ if(wm.getConnectionInfo().getSSID() == SSID){
+ completionOnUiThread(true, "successConnectingHmgNetwork")
+
+ }else{
+ errorConnecting()
+ }
+ }
+
+ }else{
+ errorConnecting()
+ }
+
+
+
+ }else{
+ Log.v(TAG, "Cannot connect to $SSID network")
+ errorConnecting()
+ }
+ }
+
+ private fun errorConnecting(){
+ completionOnUiThread(false, "errorConnectingHmgNetwork")
+ }
+
+ // If CompileSDK is greater and equals to APILevel 29
+ private fun connectNewer(wm:WifiManager){
+
+// Log.e(TAG, "connection wifi Q")
+//
+// val wifiNetworkSpecifier: WifiNetworkSpecifier = WifiNetworkSpecifier.Builder()
+// .setSsid(ssid)
+// .setWpa2Passphrase(password)
+// .build()
+//
+// val networkRequest: NetworkRequest = NetworkRequest.Builder()
+// .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+// .setNetworkSpecifier(wifiNetworkSpecifier)
+// .build()
+//
+// var connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+// var networkCallback = object : ConnectivityManager.NetworkCallback() {
+// override fun onAvailable(network: Network) {
+// super.onAvailable(network)
+// connectivityManager.bindProcessToNetwork(network)
+// Log.e(TAG, "onAvailable")
+// }
+//
+// override fun onLosing(network: Network, maxMsToLive: Int) {
+// super.onLosing(network, maxMsToLive)
+// Log.e(TAG, "onLosing")
+// }
+//
+// override fun onLost(network: Network) {
+// super.onLost(network)
+// Log.e(TAG, "onLosing")
+// Log.e(TAG, "losing active connection")
+// }
+//
+// override fun onUnavailable() {
+// super.onUnavailable()
+// Log.e(TAG, "onUnavailable")
+// }
+// }
+// connectivityManager.requestNetwork(networkRequest, networkCallback)
+ }
+
+
+ /**
+ * This method takes a given String, searches the current list of configured WiFi
+ * networks, and returns the networkId for the network if the SSID matches. If not,
+ * it returns -1.
+ */
+ private fun ssidToNetworkId(ssid: String): Int {
+ val currentNetworks = wifiManager!!.configuredNetworks
+ var networkId = -1
+
+ // For each network in the list, compare the SSID with the given one
+ for (test in currentNetworks) {
+ if (test.SSID == ssid) {
+ networkId = test.networkId
+ break
+ }
+ }
+ return networkId
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/HMG_Internet.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/HMG_Internet.kt
new file mode 100644
index 00000000..332e60a5
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/HMG_Internet.kt
@@ -0,0 +1,110 @@
+package com.cloud.diplomaticquarterapp.hmgwifi
+
+import android.annotation.SuppressLint
+import com.cloud.diplomaticquarterapp.utils.API
+import com.cloud.diplomaticquarterapp.MainActivity
+import com.cloud.diplomaticquarterapp.utils.FlutterText
+import com.github.kittinunf.fuel.core.extensions.jsonBody
+import com.github.kittinunf.fuel.httpGet
+import com.github.kittinunf.fuel.httpPost
+import org.json.JSONObject
+import java.util.*
+
+
+@SuppressLint("MissingPermission")
+class HMG_Internet(flutterMainActivity: MainActivity) {
+ private val TAG = "HMG_Wifi"
+ private val TEST = false
+
+ private var context = flutterMainActivity;
+
+ private lateinit var completionListener: ((status: Boolean, message: String) -> Unit)
+
+ private var SSID = "GUEST-POC"
+ private var USER_NAME = ""
+ private var PASSWORD = ""
+
+ fun completionOnUiThread(status: Boolean, message: String){
+ completionListener(status, message)
+// context.runOnUiThread {
+//
+// FlutterText.with(message){localized ->
+// completionListener(status, localized)
+// }
+// }
+ }
+
+ /*
+ * Helpful:
+ * http://stackoverflow.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-programmatically
+ */
+ fun connectToHMGGuestNetwork(patientId: String, completion: (status: Boolean, message: String) -> Unit): HMG_Internet {
+ completionListener = completion
+ getWifiCredentials(patientId) {
+ WPA(context,SSID).connect(USER_NAME,PASSWORD) { status, message ->
+ completionOnUiThread(status,message)
+ }
+ }
+ return this
+ }
+
+ private fun haveInternet(completion: ((status: Boolean) -> Unit)){
+ if (TEST)
+ completion(true)
+
+ "https://captive.apple.com".httpGet().response { request, response, result ->
+ result.fold(success = {
+ val html = String(it).toLowerCase(Locale.ENGLISH)
+ .replace(" ", "", true)
+ .replace("\n","",true)
+ val have = html.contains("success", true)
+ completion(have)
+
+ },failure = {
+ completion(false)
+ })
+ }
+ }
+
+ private fun getWifiCredentials(patientId:String, success: (() -> Unit)){
+ if (TEST){
+ SSID = "GUEST-POC"
+ USER_NAME = "0696"
+ PASSWORD = "0000"
+ success()
+ return
+ }
+
+ val jsonBody = """{"PatientID":$patientId}"""
+ API.WIFI_CREDENTIALS.
+ httpPost()
+ .jsonBody(jsonBody, Charsets.UTF_8)
+ .response { request, response, result ->
+
+ result.fold(success = { data ->
+ val jsonString = String(data)
+ val jsonObject = JSONObject(jsonString)
+ if(!jsonObject.getString("ErrorMessage").equals("null")){
+ val errorMsg = jsonObject.getString("ErrorMessage")
+ completionOnUiThread(false, errorMsg)
+
+ }else{
+ jsonObject.getJSONArray("Hmg_SMS_Get_By_ProjectID_And_PatientIDList").let { array ->
+ array.getJSONObject(0).let { object_ ->
+ if (object_.has("UserName") && object_.has("UserName")){
+ USER_NAME = object_.getString("UserName")
+ PASSWORD = object_.getString("Password")
+ success()
+ }else{
+ completionOnUiThread(false, "somethingWentWrong")
+ }
+ }
+ }
+ }
+
+ },failure = { error ->
+ completionOnUiThread(false, "somethingWentWrong" )
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/WPA.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/WPA.kt
new file mode 100644
index 00000000..86e67def
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/hmgwifi/WPA.kt
@@ -0,0 +1,105 @@
+package com.cloud.diplomaticquarterapp.hmgwifi
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.wifi.*
+import android.net.wifi.SupplicantState.ASSOCIATED
+import android.net.wifi.SupplicantState.COMPLETED
+import android.util.Log
+import com.cloud.diplomaticquarterapp.MainActivity
+import com.cloud.diplomaticquarterapp.utils.HMGUtils
+
+class WPA(mainActivity: MainActivity, SSID:String) {
+ private var TAG = "WPA"
+ private var SSID = "GUEST-POC"
+ private var wifiManager_: WifiManager? = null
+ private var connectivityManager_: ConnectivityManager? = null
+
+ init {
+ wifiManager_ = mainActivity.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager?
+ connectivityManager_ = mainActivity.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+ }
+
+ fun connect(identity:String, password:String, completion: (status: Boolean, message: String) -> Unit) {
+ if(wifiManager_ == null || connectivityManager_ == null){
+ completion(false,"errorConnectingHmgNetwork")
+ return
+ }
+
+ val wifiManager = wifiManager_!!
+ val connectivityManager = connectivityManager_!!
+
+ // Initialize the WifiConfiguration object
+ val enterpriseConfig = WifiEnterpriseConfig()
+ val wifi = WifiConfiguration()
+ wifi.SSID = """"$SSID""""
+ wifi.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP)
+ wifi.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X)
+ enterpriseConfig.eapMethod = WifiEnterpriseConfig.Eap.PEAP
+ enterpriseConfig.identity = identity
+ enterpriseConfig.password = password
+ wifi.enterpriseConfig = enterpriseConfig
+ wifi.networkId = ssidToNetworkId(wifi.SSID)
+ if (wifi.networkId == -1) {
+ wifiManager.addNetwork(wifi)
+ } else {
+ Log.v(TAG, "WiFi found - updating it.\n")
+ wifiManager.updateNetwork(wifi)
+ }
+ Log.v(TAG, "saving config.\n")
+ wifiManager.saveConfiguration()
+ wifi.networkId = ssidToNetworkId(wifi.SSID)
+
+ Log.v(TAG, "wifi ID in device = " + wifi.networkId)
+
+ var supState: SupplicantState
+ val networkIdToConnect = wifi.networkId
+ if (networkIdToConnect >= 0) {
+ Log.v(TAG, "Start connecting...\n")
+
+ // We disable the network before connecting, because if this was the last connection before
+ // a disconnect(), this will not reconnect.
+ wifiManager.disableNetwork(networkIdToConnect)
+ wifiManager.enableNetwork(networkIdToConnect, true)
+
+ val wifiInfo: WifiInfo = wifiManager.connectionInfo
+
+ HMGUtils.timer(5000,false){
+ supState = wifiInfo.supplicantState
+ Log.i(TAG, "WifiWizard: Done connect to network : status = $supState")
+ val successStates = listOf(COMPLETED, ASSOCIATED)
+ if (successStates.contains(COMPLETED /*supState*/))
+
+ completion(true,"Connected to internet Wifi")
+
+ else
+ completion(false,"errorConnectingHmgNetwork")
+ }
+
+ } else {
+ Log.v(TAG, "WifiWizard: cannot connect to network")
+ completion(false,"errorConnectingHmgNetwork")
+ }
+ }
+
+ /**
+ * This method takes a given String, searches the current list of configured WiFi
+ * networks, and returns the networkId for the network if the SSID matches. If not,
+ * it returns -1.
+ */
+ @SuppressLint("MissingPermission")
+ private fun ssidToNetworkId(ssid: String): Int {
+ val currentNetworks = wifiManager_!!.configuredNetworks
+ var networkId = -1
+
+ // For each network in the list, compare the SSID with the given one
+ for (test in currentNetworks) {
+ if (test.SSID == ssid) {
+ networkId = test.networkId
+ break
+ }
+ }
+ return networkId
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/API.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/API.kt
new file mode 100644
index 00000000..0d5f1e7e
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/API.kt
@@ -0,0 +1,10 @@
+package com.cloud.diplomaticquarterapp.utils
+
+class API {
+ companion object{
+ private val BASE = "https://uat.hmgwebservices.com"
+ private val SERVICE = "Services/Patients.svc/REST"
+
+ val WIFI_CREDENTIALS = "$BASE/$SERVICE/Hmg_SMS_Get_By_ProjectID_And_PatientID"
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/FlutterText.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/FlutterText.kt
new file mode 100644
index 00000000..419eb340
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/FlutterText.kt
@@ -0,0 +1,36 @@
+package com.cloud.diplomaticquarterapp.utils
+
+import io.flutter.plugin.common.MethodChannel
+import io.flutter.plugin.common.MethodChannel.Result
+
+class FlutterText{
+
+ companion object{
+ fun with(key:String, completion:(String)->Unit){
+ HMGUtils.getPlatformChannel().invokeMethod("localizedValue",key, object:MethodChannel.Result{
+ override fun success(result: Any?) {
+ val localized = result as String?
+ if (localized != null){
+ completion(localized)
+ }else{
+ completion(key)
+ }
+ }
+
+ override fun error(errorCode: String?, errorMessage: String?, errorDetails: Any?) {
+ completion(key)
+ require(false){
+ "'localizedValue' $errorMessage"
+ }
+ }
+
+ override fun notImplemented() {
+ require(false){
+ "'localizedValue' method not implemented at flutter"
+ }
+ }
+
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HMGUtils.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HMGUtils.kt
new file mode 100644
index 00000000..13d31d74
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HMGUtils.kt
@@ -0,0 +1,55 @@
+package com.cloud.diplomaticquarterapp.utils
+
+import android.view.View
+import android.widget.Toast
+import com.cloud.diplomaticquarterapp.MainActivity
+import io.flutter.plugin.common.MethodChannel
+import java.util.*
+import kotlin.concurrent.timerTask
+
+class HMGUtils {
+
+ companion object{
+ private lateinit var platformChannel: MethodChannel
+ fun getPlatformChannel():MethodChannel{
+ return platformChannel
+ }
+ fun setPlatformChannel(channel:MethodChannel){
+ platformChannel = channel
+ }
+
+ fun timer(delay:Long, repeat:Boolean, tick:(Timer)->Unit) : Timer{
+ val timer = Timer()
+ if(repeat)
+ timer.schedule(timerTask {
+ tick(timer)
+ },delay,delay)
+ else
+ timer.schedule(timerTask {
+ tick(timer)
+ },delay)
+
+ return timer
+ }
+
+ fun popMessage(context:MainActivity, message:String){
+ context.runOnUiThread {
+ Toast.makeText(context,message,Toast.LENGTH_LONG).show()
+ }
+ }
+
+ fun popFlutterText(context:MainActivity, key:String){
+ context.runOnUiThread {
+ FlutterText.with(key){
+ Toast.makeText(context,it,Toast.LENGTH_LONG).show()
+ }
+ }
+ }
+
+ }
+
+}
+
+private fun Timer.schedule(timerTask: TimerTask) {
+
+}
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HMG_Wifi_.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HMG_Wifi_.kt
new file mode 100644
index 00000000..decc9bdf
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HMG_Wifi_.kt
@@ -0,0 +1,351 @@
+//package com.cloud.diplomaticquarterapp.utils
+//
+//import android.annotation.SuppressLint
+//import android.content.Context
+//import android.net.ConnectivityManager
+//import android.net.Network
+//import android.net.NetworkCapabilities
+//import android.net.NetworkRequest
+//import android.net.wifi.ScanResult
+//import android.net.wifi.WifiConfiguration
+//import android.net.wifi.WifiManager
+//import android.util.Log
+//import com.cloud.diplomaticquarterapp.utils.API
+//import com.cloud.diplomaticquarterapp.FlutterMainActivity
+//import com.github.kittinunf.fuel.core.extensions.jsonBody
+//import com.github.kittinunf.fuel.httpGet
+//import com.github.kittinunf.fuel.httpPost
+//import org.json.JSONObject
+//import java.util.*
+//
+//
+//@SuppressLint("MissingPermission")
+//class HMG_Wifi_(flutterMainActivity: FlutterMainActivity) {
+// val TAG = "WIFI"
+// val TEST = true
+//
+// var context = flutterMainActivity;
+// var completionListener: ((status: Boolean, message: String) -> Unit)? = null
+//
+//
+// private var SSID = "HMG-GUEST"
+// private var USER_NAME = ""
+// private var PASSWORD = ""
+// var NETWORK_ID = -1 // HMG-GUEST Assigned Network ID by Android
+// private lateinit var PATIENT_ID:String
+// /*
+// * Helpful:
+// * http://stackoverflow.com/questions/5452940/how-can-i-get-android-wifi-scan-results-into-a-list
+// */
+// fun triggerWifiScan(context: Context) {
+// val wifi = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
+// wifi.startScan()
+// }
+//
+// /*
+// * Helpful:
+// * http://stackoverflow.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-programmatically
+// */
+// fun connectToWifiNetworkWith(patientId: String): HMG_Wifi_ {
+//
+// val connectivityManager = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+//
+// PATIENT_ID = patientId
+//
+// val security = "OPEN"
+// val networkPass = ""
+// Log.d(TAG, "Connecting to SSID \"$SSID\" with password \"$networkPass\" and with security \"$security\" ...")
+//
+// // You need to create WifiConfiguration instance like this:
+// val conf = WifiConfiguration()
+// conf.SSID = "\"" + SSID + "\""
+//
+// if (security == "OPEN") {
+// conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE)
+// } else if (security == "WEP") {
+// conf.wepKeys[0] = "\"" + networkPass + "\""
+// conf.wepTxKeyIndex = 0
+// conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE)
+// conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40)
+// } else {
+// conf.preSharedKey = "\"" + networkPass + "\""
+// }
+//
+// // Then, you need to add it to Android wifi manager settings:
+// val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
+//
+// NETWORK_ID = wifiManager.addNetwork(conf)
+// Log.d(TAG, "Network ID: $NETWORK_ID")
+//
+// //wifiManager.disconnect();
+// val result = wifiManager.enableNetwork(NETWORK_ID, true)
+// //wifiManager.reconnect();
+// wifiManager.saveConfiguration()
+//
+// if(result == true){
+// authNetworkConnection(NETWORK_ID);
+// }else{
+// completionListener?.let { it(false, "Error connecting to HMG network") }
+// }
+// return this
+// }
+//
+// private var authTimer:Timer? = null
+// fun authNetworkConnection(networkId: Int){
+// authTimer = Timer()
+// authTimer?.scheduleAtFixedRate(object : TimerTask() {
+// override fun run() {
+// if (connectedNetworkId() == networkId && connectedNetworkIPAddress() > 0) {
+// authServerCall()
+// authTimer?.cancel()
+// }
+// }
+//
+// }, 2000, 1000)
+//
+// // If wifi not connected in 5 sec terminate with fail status
+// Timer().schedule(object : TimerTask() {
+// override fun run() {
+// if (null != authTimer) {
+// authTimer?.cancel()
+// completionListener?.let { it(false, "Error connecting to HMG network") }
+// }
+// }
+// }, 5000)
+//
+// }
+//
+// fun authServerCall(){
+//
+// fun call(){
+//
+// forceNetworkCallOverWifi()
+//
+// val params = listOf("cmd" to "authenticate", "password" to PASSWORD, "user" to USER_NAME)
+// val serverUrl = "https://captiveportal-login.hmg.com/cgi-bin/login"
+//// val serverUrl = "http://192.168.102.223/cgi-bin/login"
+// serverUrl
+// .httpPost(params)
+// .timeout(10000)
+// .response { request, response, result ->
+// Log.v(TAG, response.statusCode.toString())
+//
+// haveInternet { have ->
+// if(have){
+// Log.v(TAG, "Connected to internet via $SSID network at HMG")
+// completionListener?.let { it(true, "Successfully connected to the internet") }
+// }else{
+// Log.e(TAG, "failed to connect to internet via $SSID network at HMG")
+// completionListener?.let { it(false, "Authentication failed or you are already using your credentials on another device") }
+// }
+// }
+// }
+// }
+//
+// haveInternet { has ->
+// if (has){
+// getAuthCredentials {
+// call()
+// }
+// }else{
+// completionListener?.let { it(false, "You must have active internet connection to connect with HMG Network") }
+// }
+// }
+// }
+//
+// fun haveInternet(completion: ((status: Boolean) -> Unit)){
+// if (TEST)
+// completion(true)
+//
+// "https://captive.apple.com".httpGet().response { request, response, result ->
+// val have = response.statusCode == 200 && String(response.data).contains("Success", true)
+// completion(have)
+// }
+// }
+//
+// fun getAuthCredentials(completion: (() -> Unit)){
+// if (TEST){
+// USER_NAME = "2300"
+// PASSWORD = "1820"
+// completion()
+// return
+// }
+//
+// val jsonBody = """{"PatientID":$PATIENT_ID}"""
+// API.WIFI_CREDENTIALS
+// .httpPost()
+// .jsonBody(jsonBody, Charsets.UTF_8)
+// .response { request, response, result ->
+// val jsonString = String(response.data)
+// Log.d(TAG, "JSON $jsonString")
+//
+// if (response.statusCode == 200){
+//
+// val jsonObject = JSONObject(jsonString)
+// if(!jsonObject.getString("ErrorMessage").equals("null")){
+// val errorMsg = jsonObject.getString("ErrorMessage")
+// completionListener?.let { it(false, errorMsg) }
+//
+// }else{
+// jsonObject.getJSONArray("Hmg_SMS_Get_By_ProjectID_And_PatientIDList").let { array ->
+// array.getJSONObject(0).let { object_ ->
+// if (object_.has("UserName") && object_.has("UserName")){
+// USER_NAME = object_.getString("UserName")
+// PASSWORD = object_.getString("Password")
+// completion()
+// }else{
+// completionListener?.let { it(false, "Failed to get your internet credentials") }
+// }
+// }
+// }
+// }
+//
+// }else{
+// completionListener?.let { it(false, "Failed to get your internet credentials") }
+// }
+// }
+// }
+//
+// fun forceNetworkCallOverWifi(){
+// val connectivityManager = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+//// val network = Network
+//// connectivityManager.activeNetwork
+// // Exit app if Network disappears.
+// // Exit app if Network disappears.
+//// val networkCapabilities: NetworkCapabilities = ConnectivityManager.from(context).getNetworkCapabilities(network)
+//// val networkCapabilities: NetworkCapabilities = connectivityManager.getNetworkCapabilities(network)
+//
+//// if (networkCapabilities == null) {
+//// return
+//// }
+//
+// val mNetworkCallback = object : ConnectivityManager.NetworkCallback() {
+// override fun onLost(lostNetwork: Network?) {
+//// if (network.equals(lostNetwork)){
+//// //GlyphLayout.done(false)
+//// }
+// }
+// }
+// val builder: NetworkRequest.Builder = NetworkRequest.Builder()
+//// for (transportType in networkCapabilities.getTransportTypes()) {
+//// builder.addTransportType(transportType)
+//// }
+// connectivityManager.registerNetworkCallback(builder.build(), mNetworkCallback)
+// }
+//
+// /*
+// * Helpful:
+// * http://stackoverflow.com/questions/6517314/android-wifi-connection-programmatically
+// */
+// fun getScanResultSecurity(result: ScanResult): String? {
+// val capabilities: String = result.capabilities
+// val securityModes = arrayOf("WEP", "PSK", "EAP")
+// for (securityMode in securityModes) {
+// if (capabilities.contains(securityMode)) {
+// return securityMode
+// }
+// }
+// return "OPEN"
+// }
+//
+// //connects to the given ssid
+// fun connectToWPAWiFi(ssid: String, password: String){
+//
+// WifiUtils.withContext(context)
+// .connectWith(ssid, "")
+// .setTimeout(40000)
+// .onConnectionResult(object : ConnectionSuccessListener {
+// override fun success() {
+// Log.v(TAG,"Success")
+// }
+//
+// override fun failed(@NonNull errorCode: ConnectionErrorCode) {
+// Log.v(TAG,"Failed")
+// }
+// })
+// .start()
+// if(isConnectedTo(ssid)){ //see if we are already connected to the given ssid
+// return
+// }
+//
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+// Log.e(TAG, "connection wifi Q")
+//
+// val wifiNetworkSpecifier: WifiNetworkSpecifier = WifiNetworkSpecifier.Builder()
+// .setSsid(ssid)
+// .setWpa2Passphrase(password)
+// .build()
+//
+// val networkRequest: NetworkRequest = NetworkRequest.Builder()
+// .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+// .setNetworkSpecifier(wifiNetworkSpecifier)
+// .build()
+//
+// var connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+// var networkCallback = object : ConnectivityManager.NetworkCallback() {
+// override fun onAvailable(network: Network) {
+// super.onAvailable(network)
+// connectivityManager.bindProcessToNetwork(network)
+// Log.e(TAG, "onAvailable")
+// }
+//
+// override fun onLosing(network: Network, maxMsToLive: Int) {
+// super.onLosing(network, maxMsToLive)
+// Log.e(TAG, "onLosing")
+// }
+//
+// override fun onLost(network: Network) {
+// super.onLost(network)
+// Log.e(TAG, "onLosing")
+// Log.e(TAG, "losing active connection")
+// }
+//
+// override fun onUnavailable() {
+// super.onUnavailable()
+// Log.e(TAG, "onUnavailable")
+// }
+// }
+// connectivityManager.requestNetwork(networkRequest, networkCallback)
+//
+// }else{
+//
+// try {
+// val wm:WifiManager= context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
+//
+// Log.e(TAG, "connection wifi pre Q")
+//
+// var netId: Int = wm.addNetwork(getWifiConfig(ssid))
+// if (netId == -1) netId = getExistingNetworkId(ssid);
+// wm.saveConfiguration()
+// if(wm.enableNetwork(netId, true)){
+// Log.v(TAG,"HMG-GUEST Connected")
+// }else{
+// Log.v(TAG,"HMG-GUEST failed to connect")
+// }
+// } catch (e: Exception) {
+// e.printStackTrace()
+// Log.v(TAG,"HMG-GUEST failed to connect")
+// }
+// }
+//
+// }
+//
+// fun connectedNetworkId():Int{
+// val wm:WifiManager= context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
+// return wm.connectionInfo.networkId
+// }
+//
+// fun connectedNetworkIPAddress():Int{
+// val wm:WifiManager= context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
+// return wm.connectionInfo.ipAddress
+// }
+//
+// fun isConnectedTo(bssid: String):Boolean{
+// val wm:WifiManager= context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
+// if(wm.connectionInfo.bssid == bssid){
+// return true
+// }
+// return false
+// }
+//
+//}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HTTPRequest.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HTTPRequest.kt
new file mode 100644
index 00000000..e34c7c9b
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/HTTPRequest.kt
@@ -0,0 +1,46 @@
+package com.cloud.diplomaticquarterapp.utils
+
+import android.util.Log
+import java.io.BufferedReader
+import java.io.InputStreamReader
+import java.io.OutputStreamWriter
+import java.net.HttpURLConnection
+import java.net.URL
+import java.net.URLEncoder
+
+class HTTPRequest {
+ val TAG = "HTTPRequest"
+
+ fun post(serverURL:String, params:Map){
+
+ var encodedParamsList = params.map {
+ URLEncoder.encode(it.key, "UTF-8") + "=" + URLEncoder.encode(it.value,"UTF-8")
+ }
+
+ val postParam = encodedParamsList.joinToString (separator = "&")
+
+
+ val url = URL(serverURL)
+
+ with(url.openConnection() as HttpURLConnection) {
+ requestMethod = "POST"
+
+ val wr = OutputStreamWriter(outputStream)
+ wr.write(postParam)
+ wr.flush()
+
+ BufferedReader(InputStreamReader(inputStream)).use {
+ val response = StringBuffer()
+
+ var inputLIne = it.readLine()
+ while(inputLIne != null) {
+ response.append(inputLIne)
+ inputLIne = it.readLine()
+ }
+
+ it.close()
+ Log.v(TAG,response.toString())
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/PlatformBridge.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/PlatformBridge.kt
new file mode 100644
index 00000000..0f69a444
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/PlatformBridge.kt
@@ -0,0 +1,96 @@
+package com.cloud.diplomaticquarterapp.utils
+
+import android.content.Context
+import android.net.wifi.WifiManager
+import android.util.Log
+import android.widget.Toast
+import androidx.annotation.UiThread
+import com.cloud.diplomaticquarterapp.MainActivity
+import com.cloud.diplomaticquarterapp.hmgwifi.HMG_Guest
+import com.cloud.diplomaticquarterapp.hmgwifi.HMG_Internet
+import io.flutter.plugin.common.BinaryMessenger
+import io.flutter.plugin.common.MethodCall
+import io.flutter.plugin.common.MethodChannel
+
+class PlatformBridge(binaryMessenger: BinaryMessenger, flutterMainActivity: MainActivity) {
+ private var binaryMessenger = binaryMessenger
+ private var mainActivity = flutterMainActivity
+
+ private lateinit var channel: MethodChannel
+
+ companion object {
+ private const val CHANNEL = "HMG-Platform-Bridge"
+ private const val HMG_INTERNET_WIFI_CONNECT_METHOD = "connectHMGInternetWifi"
+ private const val HMG_GUEST_WIFI_CONNECT_METHOD = "connectHMGGuestWifi"
+ private const val ENABLE_WIFI_IF_NOT = "enableWifiIfNot"
+
+ }
+
+ fun create(){
+ channel = MethodChannel(binaryMessenger, CHANNEL)
+ HMGUtils.setPlatformChannel(channel)
+ channel.setMethodCallHandler { methodCall: MethodCall, result: MethodChannel.Result ->
+
+ if (methodCall.method == HMG_INTERNET_WIFI_CONNECT_METHOD) {
+ connectHMGInternetWifi(methodCall,result)
+
+ }else if (methodCall.method == HMG_GUEST_WIFI_CONNECT_METHOD) {
+ connectHMGGuestWifi(methodCall,result)
+
+ }else if (methodCall.method == ENABLE_WIFI_IF_NOT) {
+ enableWifiIfNot(methodCall,result)
+ }else{
+
+ result.notImplemented()
+ }
+
+ }
+
+ val res = channel.invokeMethod("localizedValue","errorConnectingHmgNetwork")
+ print(res)
+ }
+
+ private fun connectHMGInternetWifi(methodCall: MethodCall, result: MethodChannel.Result){
+ (methodCall.arguments as ArrayList<*>).let {
+ require(it.size > 0 && (it[0] is String),lazyMessage = {
+ "Missing or invalid arguments (Must have one argument 'String at 0'"
+ })
+
+ val patientId = it[0].toString()
+ HMG_Internet(mainActivity)
+ .connectToHMGGuestNetwork(patientId){ status, message ->
+
+ mainActivity.runOnUiThread {
+ result.success(if(status) 1 else 0)
+
+ HMGUtils.popFlutterText(mainActivity, message)
+ Log.v(this.javaClass.simpleName, "$status | $message")
+ }
+
+ }
+ }
+ }
+
+
+ private fun connectHMGGuestWifi(methodCall: MethodCall, result: MethodChannel.Result){
+ HMG_Guest(mainActivity).connectToHMGGuestNetwork { status, message ->
+ mainActivity.runOnUiThread {
+ result.success(if(status) 1 else 0)
+
+ HMGUtils.popFlutterText(mainActivity, message)
+ Log.v(this.javaClass.simpleName, "$status | $message")
+ }
+ }
+ }
+
+ private fun enableWifiIfNot(methodCall: MethodCall, result: MethodChannel.Result) {
+ val wm = mainActivity.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager?
+ if (wm != null){
+ if (!wm.isWifiEnabled)
+ wm.isWifiEnabled = true
+ result.success(true)
+ }else{
+ result.error("101","Error while opening wifi, Please try to open wifi yourself and try again","'WifiManager' service failed");
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 81bc6ebb..db77bb4b 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index a35f0ed7..17987b79 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 4bfdccb8..09d43914 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index fc595a38..d5f1c8d3 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 605c7e4a..4d6372ee 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml
index 71c11607..d8fd4e88 100644
--- a/android/app/src/profile/AndroidManifest.xml
+++ b/android/app/src/profile/AndroidManifest.xml
@@ -4,5 +4,4 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
-
diff --git a/android/build.gradle b/android/build.gradle
index 8c57e18a..8e56476b 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -6,7 +6,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.6.2'
+ classpath 'com.android.tools.build:gradle:4.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.2'
}
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 5ffeb56f..5660070d 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Nov 25 14:25:50 AST 2020
+#Thu Sep 03 16:26:30 EEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
diff --git a/help/.gitignore b/help/.gitignore
new file mode 100644
index 00000000..9d532b18
--- /dev/null
+++ b/help/.gitignore
@@ -0,0 +1,41 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Web related
+lib/generated_plugin_registrant.dart
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
diff --git a/help/.metadata b/help/.metadata
new file mode 100644
index 00000000..107fcb7b
--- /dev/null
+++ b/help/.metadata
@@ -0,0 +1,10 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: 8874f21e79d7ec66d0457c7ab338348e31b17f1d
+ channel: stable
+
+project_type: app
diff --git a/help/README.md b/help/README.md
new file mode 100644
index 00000000..4ac021c0
--- /dev/null
+++ b/help/README.md
@@ -0,0 +1,16 @@
+# help
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
+
+For help getting started with Flutter, view our
+[online documentation](https://flutter.dev/docs), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/help/android/.gitignore b/help/android/.gitignore
new file mode 100644
index 00000000..0a741cb4
--- /dev/null
+++ b/help/android/.gitignore
@@ -0,0 +1,11 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
diff --git a/help/android/app/build.gradle b/help/android/app/build.gradle
new file mode 100644
index 00000000..f44ed6c9
--- /dev/null
+++ b/help/android/app/build.gradle
@@ -0,0 +1,63 @@
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterRoot = localProperties.getProperty('flutter.sdk')
+if (flutterRoot == null) {
+ throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
+
+android {
+ compileSdkVersion 29
+
+ sourceSets {
+ main.java.srcDirs += 'src/main/kotlin'
+ }
+
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.example.help"
+ minSdkVersion 16
+ targetSdkVersion 29
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+dependencies {
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+}
diff --git a/help/android/app/src/debug/AndroidManifest.xml b/help/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 00000000..fa2c5cd4
--- /dev/null
+++ b/help/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/help/android/app/src/main/AndroidManifest.xml b/help/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..125d6242
--- /dev/null
+++ b/help/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/help/android/app/src/main/kotlin/com/example/help/MainActivity.kt b/help/android/app/src/main/kotlin/com/example/help/MainActivity.kt
new file mode 100644
index 00000000..75298a08
--- /dev/null
+++ b/help/android/app/src/main/kotlin/com/example/help/MainActivity.kt
@@ -0,0 +1,6 @@
+package com.example.help
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity() {
+}
diff --git a/help/android/app/src/main/res/drawable/launch_background.xml b/help/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 00000000..304732f8
--- /dev/null
+++ b/help/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/help/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/help/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..db77bb4b
Binary files /dev/null and b/help/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/help/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/help/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..17987b79
Binary files /dev/null and b/help/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/help/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/help/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..09d43914
Binary files /dev/null and b/help/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/help/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/help/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..d5f1c8d3
Binary files /dev/null and b/help/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/help/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/help/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..4d6372ee
Binary files /dev/null and b/help/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/help/android/app/src/main/res/values/styles.xml b/help/android/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..1f83a33f
--- /dev/null
+++ b/help/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/help/android/app/src/profile/AndroidManifest.xml b/help/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 00000000..fa2c5cd4
--- /dev/null
+++ b/help/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/help/android/build.gradle b/help/android/build.gradle
new file mode 100644
index 00000000..3100ad2d
--- /dev/null
+++ b/help/android/build.gradle
@@ -0,0 +1,31 @@
+buildscript {
+ ext.kotlin_version = '1.3.50'
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.5.0'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(':app')
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/help/android/gradle.properties b/help/android/gradle.properties
new file mode 100644
index 00000000..94adc3a3
--- /dev/null
+++ b/help/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx1536M
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/help/android/gradle/wrapper/gradle-wrapper.properties b/help/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..296b146b
--- /dev/null
+++ b/help/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Jun 23 08:50:38 CEST 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
diff --git a/help/android/settings.gradle b/help/android/settings.gradle
new file mode 100644
index 00000000..44e62bcf
--- /dev/null
+++ b/help/android/settings.gradle
@@ -0,0 +1,11 @@
+include ':app'
+
+def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
+def properties = new Properties()
+
+assert localPropertiesFile.exists()
+localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
+
+def flutterSdkPath = properties.getProperty("flutter.sdk")
+assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
diff --git a/help/ios/.gitignore b/help/ios/.gitignore
new file mode 100644
index 00000000..e96ef602
--- /dev/null
+++ b/help/ios/.gitignore
@@ -0,0 +1,32 @@
+*.mode1v3
+*.mode2v3
+*.moved-aside
+*.pbxuser
+*.perspectivev3
+**/*sync/
+.sconsign.dblite
+.tags*
+**/.vagrant/
+**/DerivedData/
+Icon?
+**/Pods/
+**/.symlinks/
+profile
+xcuserdata
+**/.generated/
+Flutter/App.framework
+Flutter/Flutter.framework
+Flutter/Flutter.podspec
+Flutter/Generated.xcconfig
+Flutter/app.flx
+Flutter/app.zip
+Flutter/flutter_assets/
+Flutter/flutter_export_environment.sh
+ServiceDefinitions.json
+Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!default.mode1v3
+!default.mode2v3
+!default.pbxuser
+!default.perspectivev3
diff --git a/help/ios/Flutter/AppFrameworkInfo.plist b/help/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 00000000..f2872cf4
--- /dev/null
+++ b/help/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 9.0
+
+
diff --git a/help/ios/Flutter/Debug.xcconfig b/help/ios/Flutter/Debug.xcconfig
new file mode 100644
index 00000000..592ceee8
--- /dev/null
+++ b/help/ios/Flutter/Debug.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/help/ios/Flutter/Release.xcconfig b/help/ios/Flutter/Release.xcconfig
new file mode 100644
index 00000000..592ceee8
--- /dev/null
+++ b/help/ios/Flutter/Release.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/help/ios/Runner.xcodeproj/project.pbxproj b/help/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..4f158fea
--- /dev/null
+++ b/help/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,495 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 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 */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1020;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.help;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.help;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.help;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/help/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/help/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..1d526a16
--- /dev/null
+++ b/help/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/help/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/help/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/help/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/help/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/help/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/help/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/help/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/help/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 00000000..a28140cf
--- /dev/null
+++ b/help/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/help/ios/Runner.xcworkspace/contents.xcworkspacedata b/help/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..1d526a16
--- /dev/null
+++ b/help/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/help/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/help/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/help/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/help/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/help/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/help/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/help/ios/Runner/AppDelegate.swift b/help/ios/Runner/AppDelegate.swift
new file mode 100644
index 00000000..70693e4a
--- /dev/null
+++ b/help/ios/Runner/AppDelegate.swift
@@ -0,0 +1,13 @@
+import UIKit
+import Flutter
+
+@UIApplicationMain
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..d36b1fab
--- /dev/null
+++ b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-83.5x83.5@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "Icon-App-1024x1024@1x.png",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 00000000..dc9ada47
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..28c6bf03
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..2ccbfd96
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..f091b6b0
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..4cde1211
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..d0ef06e7
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..dcdc2306
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..2ccbfd96
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..c8f9ed8f
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..a6d6b860
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..a6d6b860
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..75b2d164
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..c4df70d3
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..6a84f41e
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..d0e1f585
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 00000000..0bedcf2f
--- /dev/null
+++ b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 00000000..89c2725b
--- /dev/null
+++ b/help/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/help/ios/Runner/Base.lproj/LaunchScreen.storyboard b/help/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 00000000..f2e259c7
--- /dev/null
+++ b/help/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/help/ios/Runner/Base.lproj/Main.storyboard b/help/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 00000000..f3c28516
--- /dev/null
+++ b/help/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/help/ios/Runner/Info.plist b/help/ios/Runner/Info.plist
new file mode 100644
index 00000000..fe4c8174
--- /dev/null
+++ b/help/ios/Runner/Info.plist
@@ -0,0 +1,45 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ help
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+
+
diff --git a/help/ios/Runner/Runner-Bridging-Header.h b/help/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 00000000..308a2a56
--- /dev/null
+++ b/help/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/help/lib/main.dart b/help/lib/main.dart
new file mode 100644
index 00000000..11655b66
--- /dev/null
+++ b/help/lib/main.dart
@@ -0,0 +1,117 @@
+import 'package:flutter/material.dart';
+
+void main() {
+ runApp(MyApp());
+}
+
+class MyApp extends StatelessWidget {
+ // This widget is the root of your application.
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ title: 'Flutter Demo',
+ theme: ThemeData(
+ // This is the theme of your application.
+ //
+ // Try running your application with "flutter run". You'll see the
+ // application has a blue toolbar. Then, without quitting the app, try
+ // changing the primarySwatch below to Colors.green and then invoke
+ // "hot reload" (press "r" in the console where you ran "flutter run",
+ // or simply save your changes to "hot reload" in a Flutter IDE).
+ // Notice that the counter didn't reset back to zero; the application
+ // is not restarted.
+ primarySwatch: Colors.blue,
+ // This makes the visual density adapt to the platform that you run
+ // the app on. For desktop platforms, the controls will be smaller and
+ // closer together (more dense) than on mobile platforms.
+ visualDensity: VisualDensity.adaptivePlatformDensity,
+ ),
+ home: MyHomePage(title: 'Flutter Demo Home Page'),
+ );
+ }
+}
+
+class MyHomePage extends StatefulWidget {
+ MyHomePage({Key key, this.title}) : super(key: key);
+
+ // This widget is the home page of your application. It is stateful, meaning
+ // that it has a State object (defined below) that contains fields that affect
+ // how it looks.
+
+ // This class is the configuration for the state. It holds the values (in this
+ // case the title) provided by the parent (in this case the App widget) and
+ // used by the build method of the State. Fields in a Widget subclass are
+ // always marked "final".
+
+ final String title;
+
+ @override
+ _MyHomePageState createState() => _MyHomePageState();
+}
+
+class _MyHomePageState extends State {
+ int _counter = 0;
+
+ void _incrementCounter() {
+ setState(() {
+ // This call to setState tells the Flutter framework that something has
+ // changed in this State, which causes it to rerun the build method below
+ // so that the display can reflect the updated values. If we changed
+ // _counter without calling setState(), then the build method would not be
+ // called again, and so nothing would appear to happen.
+ _counter++;
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ // This method is rerun every time setState is called, for instance as done
+ // by the _incrementCounter method above.
+ //
+ // The Flutter framework has been optimized to make rerunning build methods
+ // fast, so that you can just rebuild anything that needs updating rather
+ // than having to individually change instances of widgets.
+ return Scaffold(
+ appBar: AppBar(
+ // Here we take the value from the MyHomePage object that was created by
+ // the App.build method, and use it to set our appbar title.
+ title: Text(widget.title),
+ ),
+ body: Center(
+ // Center is a layout widget. It takes a single child and positions it
+ // in the middle of the parent.
+ child: Column(
+ // Column is also a layout widget. It takes a list of children and
+ // arranges them vertically. By default, it sizes itself to fit its
+ // children horizontally, and tries to be as tall as its parent.
+ //
+ // Invoke "debug painting" (press "p" in the console, choose the
+ // "Toggle Debug Paint" action from the Flutter Inspector in Android
+ // Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
+ // to see the wireframe for each widget.
+ //
+ // Column has various properties to control how it sizes itself and
+ // how it positions its children. Here we use mainAxisAlignment to
+ // center the children vertically; the main axis here is the vertical
+ // axis because Columns are vertical (the cross axis would be
+ // horizontal).
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ 'You have pushed the button this many times:',
+ ),
+ Text(
+ '$_counter',
+ style: Theme.of(context).textTheme.headline4,
+ ),
+ ],
+ ),
+ ),
+ floatingActionButton: FloatingActionButton(
+ onPressed: _incrementCounter,
+ tooltip: 'Increment',
+ child: Icon(Icons.add),
+ ), // This trailing comma makes auto-formatting nicer for build methods.
+ );
+ }
+}
diff --git a/help/pubspec.yaml b/help/pubspec.yaml
new file mode 100644
index 00000000..66af3d9e
--- /dev/null
+++ b/help/pubspec.yaml
@@ -0,0 +1,76 @@
+name: help
+description: A new Flutter project.
+
+# The following line prevents the package from being accidentally published to
+# pub.dev using `pub publish`. This is preferred for private packages.
+publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+version: 1.0.0+1
+
+environment:
+ sdk: ">=2.7.0 <3.0.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+
+ # The following adds the Cupertino Icons font to your application.
+ # Use with the CupertinoIcons class for iOS style icons.
+ cupertino_icons: ^1.0.0
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter.
+flutter:
+
+ # The following line ensures that the Material Icons font is
+ # included with your application, so that you can use the icons in
+ # the material Icons class.
+ uses-material-design: true
+
+ # To add assets to your application, add an assets section, like this:
+ # assets:
+ # - images/a_dot_burr.jpeg
+ # - images/a_dot_ham.jpeg
+
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/assets-and-images/#resolution-aware.
+
+ # For details regarding adding assets from package dependencies, see
+ # https://flutter.dev/assets-and-images/#from-packages
+
+ # To add custom fonts to your application, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts from package dependencies,
+ # see https://flutter.dev/custom-fonts/#from-packages
diff --git a/help/test/widget_test.dart b/help/test/widget_test.dart
new file mode 100644
index 00000000..0d8435b7
--- /dev/null
+++ b/help/test/widget_test.dart
@@ -0,0 +1,30 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility that Flutter provides. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:help/main.dart';
+
+void main() {
+ testWidgets('Counter increments smoke test', (WidgetTester tester) async {
+ // Build our app and trigger a frame.
+ await tester.pumpWidget(MyApp());
+
+ // Verify that our counter starts at 0.
+ expect(find.text('0'), findsOneWidget);
+ expect(find.text('1'), findsNothing);
+
+ // Tap the '+' icon and trigger a frame.
+ await tester.tap(find.byIcon(Icons.add));
+ await tester.pump();
+
+ // Verify that our counter has incremented.
+ expect(find.text('0'), findsNothing);
+ expect(find.text('1'), findsOneWidget);
+ });
+}
diff --git a/ios/Flutter/.last_build_id b/ios/Flutter/.last_build_id
index 6bca0336..3aa2cd1e 100644
--- a/ios/Flutter/.last_build_id
+++ b/ios/Flutter/.last_build_id
@@ -1 +1 @@
-f4a819c27119d0f472892c1088ad1ca3
\ No newline at end of file
+3f3d14a0ae775b56806906c2cb14a1f0
\ No newline at end of file
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index f2872cf4..6b4c0f78 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 9.0
+ 8.0
diff --git a/ios/GoogleService-Info.plist b/ios/GoogleService-Info.plist
new file mode 100644
index 00000000..0c093a2a
--- /dev/null
+++ b/ios/GoogleService-Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ CLIENT_ID
+ 864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com
+ REVERSED_CLIENT_ID
+ com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r
+ API_KEY
+ AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs
+ GCM_SENDER_ID
+ 864393916058
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ com.cloud.diplomaticquarterapp
+ PROJECT_ID
+ diplomaticquarter-d2385
+ STORAGE_BUCKET
+ diplomaticquarter-d2385.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:864393916058:ios:13f787bbfe6051f8b97923
+ DATABASE_URL
+ https://diplomaticquarter-d2385.firebaseio.com
+
+
\ No newline at end of file
diff --git a/ios/Podfile b/ios/Podfile
index 1d1a003e..5579d926 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-platform :ios, '11.0'
+ platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -10,32 +10,85 @@ project 'Runner', {
'Release' => :release,
}
-def flutter_root
- generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
- unless File.exist?(generated_xcode_build_settings_path)
- raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
- end
+# pod 'FBSDKCoreKit'
+# pod 'FBSDKLoginKit'
- File.foreach(generated_xcode_build_settings_path) do |line|
- matches = line.match(/FLUTTER_ROOT\=(.*)/)
- return matches[1].strip if matches
+def parse_KV_file(file, separator='=')
+ file_abs_path = File.expand_path(file)
+ if !File.exists? file_abs_path
+ return [];
+ end
+ generated_key_values = {}
+ skip_line_start_symbols = ["#", "/"]
+ File.foreach(file_abs_path) do |line|
+ next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
+ plugin = line.split(pattern=separator)
+ if plugin.length == 2
+ podname = plugin[0].strip()
+ path = plugin[1].strip()
+ podpath = File.expand_path("#{path}", file_abs_path)
+ generated_key_values[podname] = podpath
+ else
+ puts "Invalid plugin specification: #{line}"
+ end
end
- raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
+ generated_key_values
end
-require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
-
-flutter_ios_podfile_setup
-
target 'Runner' do
use_frameworks!
use_modular_headers!
- flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+ # Native Pods
+ pod 'NVActivityIndicatorView'
+
+
+ # Flutter Pod
+ copied_flutter_dir = File.join(__dir__, 'Flutter')
+ copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
+ copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
+ unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
+ # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
+ # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
+ # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
+
+ generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+ end
+ generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
+ cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
+
+ unless File.exist?(copied_framework_path)
+ FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
+ end
+ unless File.exist?(copied_podspec_path)
+ FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
+ end
+ end
+
+ # Keep pod path relative so it can be checked into Podfile.lock.
+ pod 'Flutter', :path => 'Flutter'
+
+ # Plugin Pods
+
+ # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
+ # referring to absolute paths on developers' machines.
+ system('rm -rf .symlinks')
+ system('mkdir -p .symlinks/plugins')
+ plugin_pods = parse_KV_file('../.flutter-plugins')
+ plugin_pods.each do |name, path|
+ symlink = File.join('.symlinks', 'plugins', name)
+ File.symlink(path, symlink)
+ pod name, :path => File.join(symlink, 'ios')
+ end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
- flutter_additional_ios_build_settings(target)
+ target.build_configurations.each do |config|
+ config.build_settings['ENABLE_BITCODE'] = 'NO'
+ end
end
-end
\ No newline at end of file
+end
+
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 00000000..6a965de8
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,443 @@
+PODS:
+ - android_intent (0.0.1):
+ - Flutter
+ - barcode_scan_fix (0.0.1):
+ - Flutter
+ - MTBBarcodeScanner
+ - connectivity (0.0.1):
+ - Flutter
+ - Reachability
+ - connectivity_for_web (0.1.0):
+ - Flutter
+ - connectivity_macos (0.0.1):
+ - Flutter
+ - device_calendar (0.0.1):
+ - Flutter
+ - device_info (0.0.1):
+ - Flutter
+ - Firebase/CoreOnly (6.33.0):
+ - FirebaseCore (= 6.10.3)
+ - Firebase/Messaging (6.33.0):
+ - Firebase/CoreOnly
+ - FirebaseMessaging (~> 4.7.0)
+ - firebase_core (0.5.2):
+ - Firebase/CoreOnly (~> 6.33.0)
+ - Flutter
+ - firebase_core_web (0.1.0):
+ - Flutter
+ - firebase_messaging (7.0.3):
+ - Firebase/CoreOnly (~> 6.33.0)
+ - Firebase/Messaging (~> 6.33.0)
+ - firebase_core
+ - Flutter
+ - FirebaseCore (6.10.3):
+ - FirebaseCoreDiagnostics (~> 1.6)
+ - GoogleUtilities/Environment (~> 6.7)
+ - GoogleUtilities/Logger (~> 6.7)
+ - FirebaseCoreDiagnostics (1.7.0):
+ - GoogleDataTransport (~> 7.4)
+ - GoogleUtilities/Environment (~> 6.7)
+ - GoogleUtilities/Logger (~> 6.7)
+ - nanopb (~> 1.30906.0)
+ - FirebaseInstallations (1.7.0):
+ - FirebaseCore (~> 6.10)
+ - GoogleUtilities/Environment (~> 6.7)
+ - GoogleUtilities/UserDefaults (~> 6.7)
+ - PromisesObjC (~> 1.2)
+ - FirebaseInstanceID (4.8.0):
+ - FirebaseCore (~> 6.10)
+ - FirebaseInstallations (~> 1.6)
+ - GoogleUtilities/Environment (~> 6.7)
+ - GoogleUtilities/UserDefaults (~> 6.7)
+ - FirebaseMessaging (4.7.1):
+ - FirebaseCore (~> 6.10)
+ - FirebaseInstanceID (~> 4.7)
+ - GoogleUtilities/AppDelegateSwizzler (~> 6.7)
+ - GoogleUtilities/Environment (~> 6.7)
+ - GoogleUtilities/Reachability (~> 6.7)
+ - GoogleUtilities/UserDefaults (~> 6.7)
+ - Protobuf (>= 3.9.2, ~> 3.9)
+ - Flutter (1.0.0)
+ - flutter_email_sender (0.0.1):
+ - Flutter
+ - flutter_flexible_toast (0.0.1):
+ - Flutter
+ - flutter_inappwebview (0.0.1):
+ - Flutter
+ - flutter_local_notifications (0.0.1):
+ - Flutter
+ - flutter_plugin_android_lifecycle (0.0.1):
+ - Flutter
+ - flutter_tts (0.0.1):
+ - Flutter
+ - "geolocator (6.0.0+4)":
+ - Flutter
+ - google_maps_flutter (0.0.1):
+ - Flutter
+ - GoogleMaps (< 3.10)
+ - GoogleDataTransport (7.5.1):
+ - nanopb (~> 1.30906.0)
+ - GoogleMaps (3.9.0):
+ - GoogleMaps/Maps (= 3.9.0)
+ - GoogleMaps/Base (3.9.0)
+ - GoogleMaps/Maps (3.9.0):
+ - GoogleMaps/Base
+ - GoogleUtilities/AppDelegateSwizzler (6.7.2):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Environment (6.7.2):
+ - PromisesObjC (~> 1.2)
+ - GoogleUtilities/Logger (6.7.2):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Network (6.7.2):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (6.7.2)"
+ - GoogleUtilities/Reachability (6.7.2):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/UserDefaults (6.7.2):
+ - GoogleUtilities/Logger
+ - hexcolor (0.0.1):
+ - Flutter
+ - image_cropper (0.0.3):
+ - Flutter
+ - TOCropViewController (~> 2.5.4)
+ - image_picker (0.0.1):
+ - Flutter
+ - just_audio (0.0.1):
+ - Flutter
+ - local_auth (0.0.1):
+ - Flutter
+ - manage_calendar_events (0.0.1):
+ - Flutter
+ - map_launcher (0.0.1):
+ - Flutter
+ - maps_launcher (0.0.1):
+ - Flutter
+ - MTBBarcodeScanner (5.0.11)
+ - nanopb (1.30906.0):
+ - nanopb/decode (= 1.30906.0)
+ - nanopb/encode (= 1.30906.0)
+ - nanopb/decode (1.30906.0)
+ - nanopb/encode (1.30906.0)
+ - native_device_orientation (0.0.1):
+ - Flutter
+ - native_progress_hud (0.0.1):
+ - Flutter
+ - NVActivityIndicatorView (5.1.1):
+ - NVActivityIndicatorView/Base (= 5.1.1)
+ - NVActivityIndicatorView/Base (5.1.1)
+ - path_provider (0.0.1):
+ - Flutter
+ - path_provider_linux (0.0.1):
+ - Flutter
+ - path_provider_macos (0.0.1):
+ - Flutter
+ - path_provider_windows (0.0.1):
+ - Flutter
+ - "permission_handler (5.0.1+1)":
+ - Flutter
+ - PromisesObjC (1.2.11)
+ - Protobuf (3.13.0)
+ - Reachability (3.2)
+ - screen (0.0.1):
+ - Flutter
+ - shared_preferences (0.0.1):
+ - Flutter
+ - shared_preferences_linux (0.0.1):
+ - Flutter
+ - shared_preferences_macos (0.0.1):
+ - Flutter
+ - shared_preferences_web (0.0.1):
+ - Flutter
+ - shared_preferences_windows (0.0.1):
+ - Flutter
+ - speech_to_text (0.0.1):
+ - Flutter
+ - Try
+ - TOCropViewController (2.5.5)
+ - Try (2.1.1)
+ - "twilio_programmable_video (0.5.0+4)":
+ - Flutter
+ - TwilioVideo (~> 3.4)
+ - TwilioVideo (3.7.2)
+ - url_launcher (0.0.1):
+ - Flutter
+ - url_launcher_linux (0.0.1):
+ - Flutter
+ - url_launcher_macos (0.0.1):
+ - Flutter
+ - url_launcher_web (0.0.1):
+ - Flutter
+ - url_launcher_windows (0.0.1):
+ - Flutter
+ - video_player (0.0.1):
+ - Flutter
+ - video_player_web (0.0.1):
+ - Flutter
+ - wakelock (0.0.1):
+ - Flutter
+ - webview_flutter (0.0.1):
+ - Flutter
+ - wifi (0.0.1):
+ - Flutter
+
+DEPENDENCIES:
+ - android_intent (from `.symlinks/plugins/android_intent/ios`)
+ - barcode_scan_fix (from `.symlinks/plugins/barcode_scan_fix/ios`)
+ - connectivity (from `.symlinks/plugins/connectivity/ios`)
+ - connectivity_for_web (from `.symlinks/plugins/connectivity_for_web/ios`)
+ - connectivity_macos (from `.symlinks/plugins/connectivity_macos/ios`)
+ - device_calendar (from `.symlinks/plugins/device_calendar/ios`)
+ - device_info (from `.symlinks/plugins/device_info/ios`)
+ - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
+ - firebase_core_web (from `.symlinks/plugins/firebase_core_web/ios`)
+ - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
+ - Flutter (from `Flutter`)
+ - flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`)
+ - flutter_flexible_toast (from `.symlinks/plugins/flutter_flexible_toast/ios`)
+ - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
+ - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
+ - flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`)
+ - flutter_tts (from `.symlinks/plugins/flutter_tts/ios`)
+ - geolocator (from `.symlinks/plugins/geolocator/ios`)
+ - google_maps_flutter (from `.symlinks/plugins/google_maps_flutter/ios`)
+ - hexcolor (from `.symlinks/plugins/hexcolor/ios`)
+ - image_cropper (from `.symlinks/plugins/image_cropper/ios`)
+ - image_picker (from `.symlinks/plugins/image_picker/ios`)
+ - just_audio (from `.symlinks/plugins/just_audio/ios`)
+ - local_auth (from `.symlinks/plugins/local_auth/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`)
+ - native_progress_hud (from `.symlinks/plugins/native_progress_hud/ios`)
+ - NVActivityIndicatorView
+ - path_provider (from `.symlinks/plugins/path_provider/ios`)
+ - path_provider_linux (from `.symlinks/plugins/path_provider_linux/ios`)
+ - path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`)
+ - path_provider_windows (from `.symlinks/plugins/path_provider_windows/ios`)
+ - permission_handler (from `.symlinks/plugins/permission_handler/ios`)
+ - screen (from `.symlinks/plugins/screen/ios`)
+ - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
+ - shared_preferences_linux (from `.symlinks/plugins/shared_preferences_linux/ios`)
+ - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`)
+ - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`)
+ - shared_preferences_windows (from `.symlinks/plugins/shared_preferences_windows/ios`)
+ - speech_to_text (from `.symlinks/plugins/speech_to_text/ios`)
+ - twilio_programmable_video (from `.symlinks/plugins/twilio_programmable_video/ios`)
+ - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
+ - url_launcher_linux (from `.symlinks/plugins/url_launcher_linux/ios`)
+ - url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`)
+ - url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`)
+ - url_launcher_windows (from `.symlinks/plugins/url_launcher_windows/ios`)
+ - video_player (from `.symlinks/plugins/video_player/ios`)
+ - video_player_web (from `.symlinks/plugins/video_player_web/ios`)
+ - wakelock (from `.symlinks/plugins/wakelock/ios`)
+ - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
+ - wifi (from `.symlinks/plugins/wifi/ios`)
+
+SPEC REPOS:
+ trunk:
+ - Firebase
+ - FirebaseCore
+ - FirebaseCoreDiagnostics
+ - FirebaseInstallations
+ - FirebaseInstanceID
+ - FirebaseMessaging
+ - GoogleDataTransport
+ - GoogleMaps
+ - GoogleUtilities
+ - MTBBarcodeScanner
+ - nanopb
+ - NVActivityIndicatorView
+ - PromisesObjC
+ - Protobuf
+ - Reachability
+ - TOCropViewController
+ - Try
+ - TwilioVideo
+
+EXTERNAL SOURCES:
+ android_intent:
+ :path: ".symlinks/plugins/android_intent/ios"
+ barcode_scan_fix:
+ :path: ".symlinks/plugins/barcode_scan_fix/ios"
+ connectivity:
+ :path: ".symlinks/plugins/connectivity/ios"
+ connectivity_for_web:
+ :path: ".symlinks/plugins/connectivity_for_web/ios"
+ connectivity_macos:
+ :path: ".symlinks/plugins/connectivity_macos/ios"
+ device_calendar:
+ :path: ".symlinks/plugins/device_calendar/ios"
+ device_info:
+ :path: ".symlinks/plugins/device_info/ios"
+ firebase_core:
+ :path: ".symlinks/plugins/firebase_core/ios"
+ firebase_core_web:
+ :path: ".symlinks/plugins/firebase_core_web/ios"
+ firebase_messaging:
+ :path: ".symlinks/plugins/firebase_messaging/ios"
+ Flutter:
+ :path: Flutter
+ flutter_email_sender:
+ :path: ".symlinks/plugins/flutter_email_sender/ios"
+ flutter_flexible_toast:
+ :path: ".symlinks/plugins/flutter_flexible_toast/ios"
+ flutter_inappwebview:
+ :path: ".symlinks/plugins/flutter_inappwebview/ios"
+ flutter_local_notifications:
+ :path: ".symlinks/plugins/flutter_local_notifications/ios"
+ flutter_plugin_android_lifecycle:
+ :path: ".symlinks/plugins/flutter_plugin_android_lifecycle/ios"
+ flutter_tts:
+ :path: ".symlinks/plugins/flutter_tts/ios"
+ geolocator:
+ :path: ".symlinks/plugins/geolocator/ios"
+ google_maps_flutter:
+ :path: ".symlinks/plugins/google_maps_flutter/ios"
+ hexcolor:
+ :path: ".symlinks/plugins/hexcolor/ios"
+ image_cropper:
+ :path: ".symlinks/plugins/image_cropper/ios"
+ image_picker:
+ :path: ".symlinks/plugins/image_picker/ios"
+ just_audio:
+ :path: ".symlinks/plugins/just_audio/ios"
+ local_auth:
+ :path: ".symlinks/plugins/local_auth/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"
+ native_progress_hud:
+ :path: ".symlinks/plugins/native_progress_hud/ios"
+ path_provider:
+ :path: ".symlinks/plugins/path_provider/ios"
+ path_provider_linux:
+ :path: ".symlinks/plugins/path_provider_linux/ios"
+ path_provider_macos:
+ :path: ".symlinks/plugins/path_provider_macos/ios"
+ path_provider_windows:
+ :path: ".symlinks/plugins/path_provider_windows/ios"
+ permission_handler:
+ :path: ".symlinks/plugins/permission_handler/ios"
+ screen:
+ :path: ".symlinks/plugins/screen/ios"
+ shared_preferences:
+ :path: ".symlinks/plugins/shared_preferences/ios"
+ shared_preferences_linux:
+ :path: ".symlinks/plugins/shared_preferences_linux/ios"
+ shared_preferences_macos:
+ :path: ".symlinks/plugins/shared_preferences_macos/ios"
+ shared_preferences_web:
+ :path: ".symlinks/plugins/shared_preferences_web/ios"
+ shared_preferences_windows:
+ :path: ".symlinks/plugins/shared_preferences_windows/ios"
+ speech_to_text:
+ :path: ".symlinks/plugins/speech_to_text/ios"
+ twilio_programmable_video:
+ :path: ".symlinks/plugins/twilio_programmable_video/ios"
+ url_launcher:
+ :path: ".symlinks/plugins/url_launcher/ios"
+ url_launcher_linux:
+ :path: ".symlinks/plugins/url_launcher_linux/ios"
+ url_launcher_macos:
+ :path: ".symlinks/plugins/url_launcher_macos/ios"
+ url_launcher_web:
+ :path: ".symlinks/plugins/url_launcher_web/ios"
+ url_launcher_windows:
+ :path: ".symlinks/plugins/url_launcher_windows/ios"
+ video_player:
+ :path: ".symlinks/plugins/video_player/ios"
+ video_player_web:
+ :path: ".symlinks/plugins/video_player_web/ios"
+ wakelock:
+ :path: ".symlinks/plugins/wakelock/ios"
+ webview_flutter:
+ :path: ".symlinks/plugins/webview_flutter/ios"
+ wifi:
+ :path: ".symlinks/plugins/wifi/ios"
+
+SPEC CHECKSUMS:
+ android_intent: 367df2f1277a74e4a90e14a8ab3df3112d087052
+ barcode_scan_fix: 80dd65de55f27eec6591dd077c8b85f2b79e31f1
+ connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
+ connectivity_for_web: 2b8584556930d4bd490d82b836bcf45067ce345b
+ connectivity_macos: e2e9731b6b22dda39eb1b128f6969d574460e191
+ device_calendar: 23b28a5f1ab3bf77e34542fb1167e1b8b29a98f5
+ device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
+ Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5
+ firebase_core: 350ba329d1641211bc6183a3236893cafdacfea7
+ firebase_core_web: d501d8b946b60c8af265428ce483b0fff5ad52d1
+ firebase_messaging: 0aea2cd5885b65e19ede58ee3507f485c992cc75
+ FirebaseCore: d889d9e12535b7f36ac8bfbf1713a0836a3012cd
+ FirebaseCoreDiagnostics: 770ac5958e1372ce67959ae4b4f31d8e127c3ac1
+ FirebaseInstallations: 466c7b4d1f58fe16707693091da253726a731ed2
+ FirebaseInstanceID: bd3ffc24367f901a43c063b36c640b345a4a5dd1
+ FirebaseMessaging: 5eca4ef173de76253352511aafef774caa1cba2a
+ Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
+ flutter_email_sender: f787522d0e82f50e5766c1213dbffff22fdcf009
+ flutter_flexible_toast: 0547e740cae0c33bb7c51bcd931233f4584e1143
+ flutter_inappwebview: 69dfbac46157b336ffbec19ca6dfd4638c7bf189
+ flutter_local_notifications: 9e4738ce2471c5af910d961a6b7eadcf57c50186
+ flutter_plugin_android_lifecycle: dc0b544e129eebb77a6bfb1239d4d1c673a60a35
+ flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d
+ geolocator: 1ae40084cc6c1586ce5ad12cfc3fd38c64d05f2f
+ google_maps_flutter: c7f9c73576de1fbe152a227bfd6e6c4ae8088619
+ GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833
+ GoogleMaps: 4b5346bddfe6911bb89155d43c903020170523ac
+ GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3
+ hexcolor: fdfb9c4258ad96e949c2dbcdf790a62194b8aa89
+ image_cropper: c8f9b4157933c7bb965a66d1c5e6c8fd408c6eb4
+ image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09
+ just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
+ local_auth: 25938960984c3a7f6e3253e3f8d962fdd16852bd
+ manage_calendar_events: 0338d505ea26cdfd20cd883279bc28afa11eca34
+ map_launcher: e325db1261d029ff33e08e03baccffe09593ffea
+ maps_launcher: eae38ee13a9c3f210fa04e04bb4c073fa4c6ed92
+ MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
+ nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
+ native_device_orientation: e24d00be281de72996640885d80e706142707660
+ native_progress_hud: f95f5529742b36a3c7fdecfa88dc018319e39bf9
+ NVActivityIndicatorView: 1f6c5687f1171810aa27a3296814dc2d7dec3667
+ path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
+ path_provider_linux: 4d630dc393e1f20364f3e3b4a2ff41d9674a84e4
+ path_provider_macos: f760a3c5b04357c380e2fddb6f9db6f3015897e0
+ path_provider_windows: a2b81600c677ac1959367280991971cb9a1edb3b
+ permission_handler: eac8e15b4a1a3fba55b761d19f3f4e6b005d15b6
+ PromisesObjC: 8c196f5a328c2cba3e74624585467a557dcb482f
+ Protobuf: 3dac39b34a08151c6d949560efe3f86134a3f748
+ Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
+ screen: abd91ca7bf3426e1cc3646d27e9b2358d6bf07b0
+ shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
+ shared_preferences_linux: afefbfe8d921e207f01ede8b60373d9e3b566b78
+ shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087
+ shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9
+ shared_preferences_windows: 36b76d6f54e76ead957e60b49e2f124b4cd3e6ae
+ speech_to_text: b43a7d99aef037bd758ed8e45d79bbac035d2dfe
+ TOCropViewController: da59f531f8ac8a94ef6d6c0fc34009350f9e8bfe
+ Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96
+ twilio_programmable_video: 6a41593640f3d86af60b22541fd457b22deaae7f
+ TwilioVideo: 5257640fab00d1b9f44db060815b03516a9eb0e8
+ url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
+ url_launcher_linux: ac237cb7a8058736e4aae38bdbcc748a4b394cc0
+ url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313
+ url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c
+ url_launcher_windows: 683d7c283894db8d1914d3ab2223b20cc1ad95d5
+ video_player: 9cc823b1d9da7e8427ee591e8438bfbcde500e6e
+ video_player_web: da8cadb8274ed4f8dbee8d7171b420dedd437ce7
+ wakelock: 0d4a70faf8950410735e3f61fb15d517c8a6efc4
+ webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96
+ wifi: d7d77c94109e36c4175d845f0a5964eadba71060
+
+PODFILE CHECKSUM: ac5efa1ac3c9555d0008dc18004313c84746da62
+
+COCOAPODS: 1.10.0
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 31d8d1f5..fb2dffc4 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
- DisableBuildSystemDeprecationWarning
-
PreviewsEnabled
diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
index 70693e4a..e686619c 100644
--- a/ios/Runner/AppDelegate.swift
+++ b/ios/Runner/AppDelegate.swift
@@ -1,13 +1,47 @@
import UIKit
import Flutter
+import GoogleMaps
+
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
- override func application(
- _ application: UIApplication,
- didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
- ) -> Bool {
- GeneratedPluginRegistrant.register(with: self)
- return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ let locationManager = CLLocationManager()
+
+ override func application( _ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+// initLocationManager()
+
+ GMSServices.provideAPIKey("AIzaSyCiiJiHkocPbcziHt9O8rGWavDrxHRQys8")
+ GeneratedPluginRegistrant.register(with: self)
+
+ if let mainViewController = window.rootViewController as? MainFlutterVC{
+ HMGPlatformBridge.initialize(flutterViewController: mainViewController)
+ }
+
+ if let _ = launchOptions?[.location] {
+ HMG_Geofence.initGeofencing()
+ }
+
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
+
+extension AppDelegate: CLLocationManagerDelegate {
+
+ func initLocationManager(){
+ locationManager.allowsBackgroundLocationUpdates = true
+ locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
+ locationManager.activityType = .other
+ locationManager.delegate = self
+ locationManager.requestAlwaysAuthorization()
+ }
+
+ func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
+ if region is CLCircularRegion {
+ }
+ }
+
+ func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
+ if region is CLCircularRegion {
+ }
}
}
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
index 65b74d7e..d36b1fab 100644
--- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1 +1,122 @@
-{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]}
\ No newline at end of file
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-83.5x83.5@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "Icon-App-1024x1024@1x.png",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 00000000..dc9ada47
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..28c6bf03
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..2ccbfd96
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..f091b6b0
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..4cde1211
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..d0ef06e7
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..dcdc2306
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..2ccbfd96
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..c8f9ed8f
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..a6d6b860
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..a6d6b860
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..75b2d164
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..c4df70d3
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..6a84f41e
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..d0e1f585
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 00000000..0bedcf2f
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 00000000..89c2725b
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard
index f3c28516..8ae1ba59 100644
--- a/ios/Runner/Base.lproj/Main.storyboard
+++ b/ios/Runner/Base.lproj/Main.storyboard
@@ -1,26 +1,29 @@
-
-
+
+
+
-
+
+
-
+
-
+
-
+
-
+
+
diff --git a/ios/Runner/Base.lproj/Main_Custom.storyboard b/ios/Runner/Base.lproj/Main_Custom.storyboard
new file mode 100644
index 00000000..de2d580c
--- /dev/null
+++ b/ios/Runner/Base.lproj/Main_Custom.storyboard
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/Controllers/MainFlutterVC.swift b/ios/Runner/Controllers/MainFlutterVC.swift
new file mode 100644
index 00000000..4f91d052
--- /dev/null
+++ b/ios/Runner/Controllers/MainFlutterVC.swift
@@ -0,0 +1,118 @@
+//
+// MainFlutterVC.swift
+// Runner
+//
+// Created by ZiKambrani on 25/03/1442 AH.
+//
+
+import UIKit
+import Flutter
+import NetworkExtension
+import SystemConfiguration.CaptiveNetwork
+
+class MainFlutterVC: FlutterViewController {
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+// flutterMethodChannel?.setMethodCallHandler { (methodCall, result) in
+//
+// if methodCall.method == "connectHMGInternetWifi"{
+// self.connectHMGInternetWifi(methodCall:methodCall, result: result)
+//
+// }else if methodCall.method == "connectHMGGuestWifi"{
+// self.connectHMGGuestWifi(methodCall:methodCall, result: result)
+//
+// }else if methodCall.method == "isHMGNetworkAvailable"{
+// self.isHMGNetworkAvailable(methodCall:methodCall, result: result)
+//
+// }else if methodCall.method == "registerHmgGeofences"{
+// self.registerHmgGeofences(result: result)
+// }
+//
+// print("")
+// }
+//
+// FlutterText.with(key: "errorConnectingHmgNetwork") { (localized) in
+// print(localized)
+// }
+
+ }
+
+
+ // Connect HMG Wifi and Internet
+ func connectHMGInternetWifi(methodCall:FlutterMethodCall ,result: @escaping FlutterResult){
+
+ guard let pateintId = (methodCall.arguments as? [Any])?.first as? String
+ else { return assert(true, "Missing or invalid arguments (Must have one argument 'String at 0'") }
+
+
+ HMG_Internet.shared.connect(patientId: pateintId) { (status, message) in
+ result(status ? 1 : 0)
+ if status{
+ self.showMessage(title:"Congratulations", message:message)
+ }else{
+ self.showMessage(title:"Ooops,", message:message)
+ }
+ }
+ }
+
+ // Connect HMG-Guest for App Access
+ func connectHMGGuestWifi(methodCall:FlutterMethodCall ,result: @escaping FlutterResult){
+ HMG_GUEST.shared.connect() { (status, message) in
+ result(status ? 1 : 0)
+ if status{
+ self.showMessage(title:"Congratulations", message:message)
+ }else{
+ self.showMessage(title:"Ooops,", message:message)
+ }
+ }
+ }
+
+ func isHMGNetworkAvailable(methodCall:FlutterMethodCall ,result: @escaping FlutterResult) -> Bool{
+ guard let ssid = methodCall.arguments as? String else {
+ assert(true, "Missing or invalid arguments (Must have one argument 'String at 0'")
+ return false
+ }
+
+ let queue = DispatchQueue.init(label: "com.hmg.wifilist")
+ NEHotspotHelper.register(options: nil, queue: queue) { (command) in
+ print(command)
+
+ if(command.commandType == NEHotspotHelperCommandType.filterScanList) {
+ if let networkList = command.networkList{
+ for network in networkList{
+ print(network.ssid)
+ }
+ }
+ }
+ }
+ return false
+
+ }
+
+
+ // Message Dailog
+ func showMessage(title:String, message:String){
+ DispatchQueue.main.async {
+ let alert = UIAlertController(title: title, message: message, preferredStyle: .alert )
+ alert.addAction(UIAlertAction(title: "OK", style: .destructive, handler: nil))
+ self.present(alert, animated: true) {
+
+ }
+ }
+ }
+
+ // Register Geofence
+ func registerHmgGeofences(result: @escaping FlutterResult){
+ flutterMethodChannel?.invokeMethod("getGeofencePreferenceKey", arguments: nil){ geoFencesJsonString in
+ if let jsonString = geoFencesJsonString as? String{
+ let allZones = GeoZoneModel.list(from: jsonString)
+ HMG_Geofence().register(geoZones: allZones)
+
+ }else{
+ }
+ }
+ }
+
+}
diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist
new file mode 100644
index 00000000..0c093a2a
--- /dev/null
+++ b/ios/Runner/GoogleService-Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ CLIENT_ID
+ 864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com
+ REVERSED_CLIENT_ID
+ com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r
+ API_KEY
+ AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs
+ GCM_SENDER_ID
+ 864393916058
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ com.cloud.diplomaticquarterapp
+ PROJECT_ID
+ diplomaticquarter-d2385
+ STORAGE_BUCKET
+ diplomaticquarter-d2385.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:864393916058:ios:13f787bbfe6051f8b97923
+ DATABASE_URL
+ https://diplomaticquarter-d2385.firebaseio.com
+
+
\ No newline at end of file
diff --git a/ios/Runner/GuestPOC_Certificate.cer b/ios/Runner/GuestPOC_Certificate.cer
new file mode 100644
index 00000000..f3804f6e
Binary files /dev/null and b/ios/Runner/GuestPOC_Certificate.cer differ
diff --git a/ios/Runner/GuestPOC_Certificate.p12 b/ios/Runner/GuestPOC_Certificate.p12
new file mode 100644
index 00000000..8e289212
Binary files /dev/null and b/ios/Runner/GuestPOC_Certificate.p12 differ
diff --git a/ios/Runner/Helper/API.swift b/ios/Runner/Helper/API.swift
new file mode 100644
index 00000000..763147c8
--- /dev/null
+++ b/ios/Runner/Helper/API.swift
@@ -0,0 +1,17 @@
+//
+// API.swift
+// Runner
+//
+// Created by ZiKambrani on 04/04/1442 AH.
+//
+
+import UIKit
+
+fileprivate let DOMAIN = "https://uat.hmgwebservices.com"
+fileprivate let SERVICE = "Services/Patients.svc/REST"
+fileprivate let BASE_URL = "\(DOMAIN)/\(SERVICE)"
+
+struct API {
+ static let WIFI_CREDENTIALS = "\(BASE_URL)/Hmg_SMS_Get_By_ProjectID_And_PatientID"
+
+}
diff --git a/ios/Runner/Helper/Extensions.swift b/ios/Runner/Helper/Extensions.swift
new file mode 100644
index 00000000..a8793617
--- /dev/null
+++ b/ios/Runner/Helper/Extensions.swift
@@ -0,0 +1,132 @@
+//
+// Extensions.swift
+// Runner
+//
+// Created by ZiKambrani on 04/04/1442 AH.
+//
+
+import UIKit
+
+
+extension String{
+ func toUrl() -> URL?{
+ return URL(string: self)
+ }
+
+ func removeSpace() -> String?{
+ return self.replacingOccurrences(of: " ", with: "")
+ }
+}
+
+extension Bundle {
+
+ func certificate(named name: String) -> SecCertificate {
+ let cerURL = self.url(forResource: name, withExtension: "cer")!
+ let cerData = try! Data(contentsOf: cerURL)
+ let cer = SecCertificateCreateWithData(nil, cerData as CFData)!
+ return cer
+ }
+
+ func identity(named name: String, password: String) -> SecIdentity {
+ let p12URL = self.url(forResource: name, withExtension: "p12")!
+ let p12Data = try! Data(contentsOf: p12URL)
+
+ var importedCF: CFArray? = nil
+ let options = [kSecImportExportPassphrase as String: password]
+ let err = SecPKCS12Import(p12Data as CFData, options as CFDictionary, &importedCF)
+ precondition(err == errSecSuccess)
+ let imported = importedCF! as NSArray as! [[String:AnyObject]]
+ precondition(imported.count == 1)
+
+ return (imported[0][kSecImportItemIdentity as String]!) as! SecIdentity
+ }
+
+
+}
+
+extension SecCertificate{
+ func trust() -> Bool?{
+ var optionalTrust: SecTrust?
+ let policy = SecPolicyCreateBasicX509()
+
+ let status = SecTrustCreateWithCertificates([self] as AnyObject,
+ policy,
+ &optionalTrust)
+ guard status == errSecSuccess else { return false}
+ let trust = optionalTrust!
+
+ let stat = optionalTrust?.evaluateAllowing(rootCertificates: [self])
+ return stat
+ }
+
+ func secTrustObject() -> SecTrust?{
+ var optionalTrust: SecTrust?
+ let policy = SecPolicyCreateBasicX509()
+
+ let status = SecTrustCreateWithCertificates([self] as AnyObject,
+ policy,
+ &optionalTrust)
+ return optionalTrust
+ }
+}
+
+
+extension SecTrust {
+
+ func evaluate() -> Bool {
+ var trustResult: SecTrustResultType = .invalid
+ let err = SecTrustEvaluate(self, &trustResult)
+ guard err == errSecSuccess else { return false }
+ return [.proceed, .unspecified].contains(trustResult)
+ }
+
+ func evaluateAllowing(rootCertificates: [SecCertificate]) -> Bool {
+
+ // Apply our custom root to the trust object.
+
+ var err = SecTrustSetAnchorCertificates(self, rootCertificates as CFArray)
+ guard err == errSecSuccess else { return false }
+
+ // Re-enable the system's built-in root certificates.
+
+ err = SecTrustSetAnchorCertificatesOnly(self, false)
+ guard err == errSecSuccess else { return false }
+
+ // Run a trust evaluation and only allow the connection if it succeeds.
+
+ return self.evaluate()
+ }
+}
+
+
+extension UIView{
+ func show(){
+ self.alpha = 0.0
+ self.isHidden = false
+ UIView.animate(withDuration: 0.25, animations: {
+ self.alpha = 1
+ }) { (complete) in
+
+ }
+ }
+
+ func hide(){
+ UIView.animate(withDuration: 0.25, animations: {
+ self.alpha = 0.0
+ }) { (complete) in
+ self.isHidden = true
+ }
+ }
+}
+
+
+extension UIViewController{
+ func showAlert(withTitle: String, message: String){
+ let alert = UIAlertController(title: withTitle, message: message, preferredStyle: .alert)
+ alert.addAction(UIAlertAction(title: "OK", style: .destructive, handler: nil))
+ present(alert, animated: true) {
+
+ }
+ }
+}
+
diff --git a/ios/Runner/Helper/GeoZoneModel.swift b/ios/Runner/Helper/GeoZoneModel.swift
new file mode 100644
index 00000000..a6e10a45
--- /dev/null
+++ b/ios/Runner/Helper/GeoZoneModel.swift
@@ -0,0 +1,67 @@
+//
+// GeoZoneModel.swift
+// Runner
+//
+// Created by ZiKambrani on 13/12/2020.
+//
+
+import UIKit
+import CoreLocation
+
+class GeoZoneModel{
+ var geofenceId:Int = -1
+ var description:String = ""
+ var descriptionN:String?
+ var latitude:String?
+ var longitude:String?
+ var radius:Int?
+ var type:Int?
+ var projectID:Int?
+ var imageURL:String?
+ var isCity:String?
+
+ func identifier() -> String{
+ return "\(geofenceId)_hmg_geozone"
+ }
+
+ func message() -> String{
+ return description
+ }
+
+ func toRegion(locationManager:CLLocationManager) -> CLCircularRegion?{
+ if let rad = radius, let lat = latitude?.removeSpace(), let long = longitude?.removeSpace(),
+ let radius_d = Double("\(rad)"), let lat_d = Double(lat), let long_d = Double(long){
+
+ let coordinate = CLLocationCoordinate2D(latitude: lat_d, longitude: long_d)
+ let validatedRadius = min(radius_d, locationManager.maximumRegionMonitoringDistance)
+
+ let region = CLCircularRegion(center: coordinate, radius: validatedRadius, identifier: identifier())
+ region.notifyOnExit = true
+ region.notifyOnEntry = true
+ return region
+ }
+ return nil
+ }
+
+ class func from(json:[String:Any]) -> GeoZoneModel{
+ let model = GeoZoneModel()
+ model.geofenceId = json["GEOF_ID"] as? Int ?? 0
+ model.radius = json["Radius"] as? Int
+ model.projectID = json["ProjectID"] as? Int
+ model.type = json["Type"] as? Int
+ model.description = json["Description"] as? String ?? ""
+ model.descriptionN = json["DescriptionN"] as? String
+ model.latitude = json["Latitude"] as? String
+ model.longitude = json["Longitude"] as? String
+ model.imageURL = json["ImageURL"] as? String
+ model.isCity = json["IsCity"] as? String
+
+ return model
+ }
+
+ class func list(from jsonString:String) -> [GeoZoneModel]{
+ let value = dictionaryArray(from: jsonString)
+ let geoZones = value.map { GeoZoneModel.from(json: $0) }
+ return geoZones
+ }
+}
diff --git a/ios/Runner/Helper/GlobalHelper.swift b/ios/Runner/Helper/GlobalHelper.swift
new file mode 100644
index 00000000..c5eb7295
--- /dev/null
+++ b/ios/Runner/Helper/GlobalHelper.swift
@@ -0,0 +1,85 @@
+//
+// GlobalHelper.swift
+// Runner
+//
+// Created by ZiKambrani on 29/03/1442 AH.
+//
+
+import UIKit
+
+func dictionaryArray(from:String) -> [[String:Any]]{
+ if let data = from.data(using: .utf8) {
+ do {
+ return try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] ?? []
+ } catch {
+ print(error.localizedDescription)
+ }
+ }
+ return []
+
+}
+
+func dictionary(from:String) -> [String:Any]?{
+ if let data = from.data(using: .utf8) {
+ do {
+ return try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
+ } catch {
+ print(error.localizedDescription)
+ }
+ }
+ return nil
+
+}
+
+func showNotification(identifier:String? = nil, title:String?, subtitle:String?, message:String?, sound:UNNotificationSound = UNNotificationSound.default){
+ let notificationContent = UNMutableNotificationContent()
+
+ if identifier != nil { notificationContent.categoryIdentifier = identifier! }
+ if title != nil { notificationContent.title = title! }
+ if subtitle != nil { notificationContent.body = message! }
+ if message != nil { notificationContent.subtitle = subtitle! }
+
+ notificationContent.sound = UNNotificationSound.default
+ let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
+ let request = UNNotificationRequest(identifier: "\(Date().timeIntervalSinceNow)", content: notificationContent, trigger: trigger)
+ UNUserNotificationCenter.current().add(request) { error in
+ if let error = error {
+ print("Error: \(error)")
+ }
+ }
+}
+
+
+func httpPostRequest(urlString:String, jsonBody:[String:Any], completion:((Bool,[String:Any]?)->Void)?){
+ let json: [String: Any] = jsonBody
+ let jsonData = try? JSONSerialization.data(withJSONObject: json)
+
+ // create post request
+ let url = URL(string: urlString)!
+ var request = URLRequest(url: url)
+ request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+ request.addValue("*/*", forHTTPHeaderField: "Accept")
+ request.httpMethod = "POST"
+ request.httpBody = jsonData
+
+ let task = URLSession.shared.dataTask(with: request) { data, response, error in
+ guard let data = data, error == nil else {
+ print(error?.localizedDescription ?? "No data")
+ return
+ }
+
+ let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
+ if let responseJSON = responseJSON as? [String: Any], let status = responseJSON["MessageStatus"] as? Int{
+ print(responseJSON)
+ if status == 1{
+ completion?(true,responseJSON)
+ }else{
+ completion?(false,responseJSON)
+ }
+
+ }
+ }
+
+ task.resume()
+
+}
diff --git a/ios/Runner/Helper/HMGPlatformBridge.swift b/ios/Runner/Helper/HMGPlatformBridge.swift
new file mode 100644
index 00000000..1e8ee735
--- /dev/null
+++ b/ios/Runner/Helper/HMGPlatformBridge.swift
@@ -0,0 +1,128 @@
+//
+// HMGPlatformBridge.swift
+// Runner
+//
+// Created by ZiKambrani on 14/12/2020.
+//
+
+import UIKit
+import NetworkExtension
+import SystemConfiguration.CaptiveNetwork
+
+var flutterMethodChannel:FlutterMethodChannel? = nil
+var mainViewController:MainFlutterVC!
+
+class HMGPlatformBridge{
+ private let channelName = "HMG-Platform-Bridge"
+ private static var shared_:HMGPlatformBridge?
+
+ class func initialize(flutterViewController:MainFlutterVC){
+ shared_ = HMGPlatformBridge()
+ mainViewController = flutterViewController
+ shared_?.openChannel()
+ }
+
+ func shared() -> HMGPlatformBridge{
+ assert((HMGPlatformBridge.shared_ != nil), "HMGPlatformBridge is not initialized, call initialize(mainViewController:MainFlutterVC) function first.")
+ return HMGPlatformBridge.shared_!
+ }
+
+ private func openChannel(){
+ flutterMethodChannel = FlutterMethodChannel(name: channelName, binaryMessenger: mainViewController.binaryMessenger)
+ flutterMethodChannel?.setMethodCallHandler { (methodCall, result) in
+ print("Called function \(methodCall.method)")
+ if methodCall.method == "connectHMGInternetWifi"{
+ self.connectHMGInternetWifi(methodCall:methodCall, result: result)
+
+ }else if methodCall.method == "connectHMGGuestWifi"{
+ self.connectHMGGuestWifi(methodCall:methodCall, result: result)
+
+ }else if methodCall.method == "isHMGNetworkAvailable"{
+ self.isHMGNetworkAvailable(methodCall:methodCall, result: result)
+
+ }else if methodCall.method == "registerHmgGeofences"{
+ self.registerHmgGeofences(result: result)
+ }
+
+ print("")
+ }
+ }
+
+
+
+ // Connect HMG Wifi and Internet
+ func connectHMGInternetWifi(methodCall:FlutterMethodCall ,result: @escaping FlutterResult){
+
+ guard let pateintId = (methodCall.arguments as? [Any])?.first as? String
+ else { return assert(true, "Missing or invalid arguments (Must have one argument 'String at 0'") }
+
+
+ HMG_Internet.shared.connect(patientId: pateintId) { (status, message) in
+ result(status ? 1 : 0)
+ if status{
+ self.showMessage(title:"Congratulations", message:message)
+ }else{
+ self.showMessage(title:"Ooops,", message:message)
+ }
+ }
+ }
+
+ // Connect HMG-Guest for App Access
+ func connectHMGGuestWifi(methodCall:FlutterMethodCall ,result: @escaping FlutterResult){
+ HMG_GUEST.shared.connect() { (status, message) in
+ result(status ? 1 : 0)
+ if status{
+ self.showMessage(title:"Congratulations", message:message)
+ }else{
+ self.showMessage(title:"Ooops,", message:message)
+ }
+ }
+ }
+
+ func isHMGNetworkAvailable(methodCall:FlutterMethodCall ,result: @escaping FlutterResult) -> Bool{
+ guard let ssid = methodCall.arguments as? String else {
+ assert(true, "Missing or invalid arguments (Must have one argument 'String at 0'")
+ return false
+ }
+
+ let queue = DispatchQueue.init(label: "com.hmg.wifilist")
+ NEHotspotHelper.register(options: nil, queue: queue) { (command) in
+ print(command)
+
+ if(command.commandType == NEHotspotHelperCommandType.filterScanList) {
+ if let networkList = command.networkList{
+ for network in networkList{
+ print(network.ssid)
+ }
+ }
+ }
+ }
+ return false
+
+ }
+
+
+ // Message Dailog
+ func showMessage(title:String, message:String){
+ DispatchQueue.main.async {
+ let alert = UIAlertController(title: title, message: message, preferredStyle: .alert )
+ alert.addAction(UIAlertAction(title: "OK", style: .destructive, handler: nil))
+ mainViewController.present(alert, animated: true) {
+
+ }
+ }
+ }
+
+ // Register Geofence
+ func registerHmgGeofences(result: @escaping FlutterResult){
+ flutterMethodChannel?.invokeMethod("getGeoZones", arguments: nil){ geoFencesJsonString in
+ if let jsonString = geoFencesJsonString as? String{
+ let allZones = GeoZoneModel.list(from: jsonString)
+ HMG_Geofence.shared().register(geoZones: allZones)
+
+ }else{
+ }
+ }
+ }
+
+}
diff --git a/ios/Runner/Helper/HMG_Geofence.swift b/ios/Runner/Helper/HMG_Geofence.swift
new file mode 100644
index 00000000..20d2d1e8
--- /dev/null
+++ b/ios/Runner/Helper/HMG_Geofence.swift
@@ -0,0 +1,188 @@
+//
+// HMG_Geofence.swift
+// Runner
+//
+// Created by ZiKambrani on 13/12/2020.
+//
+
+import UIKit
+import CoreLocation
+
+fileprivate var df = DateFormatter()
+fileprivate var transition = ""
+
+enum Transition:Int {
+ case entry = 1
+ case exit = 2
+ func name() -> String{
+ return self.rawValue == 1 ? "Enter" : "Exit"
+ }
+}
+
+class HMG_Geofence:NSObject{
+
+ var geoZones:[GeoZoneModel]?
+ var locationManager:CLLocationManager!{
+ didSet{
+ // https://developer.apple.com/documentation/corelocation/cllocationmanager/1423531-startmonitoringsignificantlocati
+
+ locationManager.allowsBackgroundLocationUpdates = true
+ locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
+ locationManager.activityType = .other
+ locationManager.delegate = self
+ locationManager.requestAlwaysAuthorization()
+ // locationManager.distanceFilter = 500
+ // locationManager.startMonitoringSignificantLocationChanges()
+ }
+ }
+
+ private static var shared_:HMG_Geofence?
+ class func shared() -> HMG_Geofence{
+ if HMG_Geofence.shared_ == nil{
+ HMG_Geofence.initGeofencing()
+ }
+ return shared_!
+ }
+
+ class func initGeofencing(){
+ shared_ = HMG_Geofence()
+ shared_?.locationManager = CLLocationManager()
+ }
+
+ func register(geoZones:[GeoZoneModel]){
+
+ self.geoZones = geoZones
+
+ let monitoredRegions_ = monitoredRegions()
+ self.geoZones?.forEach({ (zone) in
+ if let region = zone.toRegion(locationManager: locationManager){
+ if let already = monitoredRegions_.first(where: {$0.identifier == zone.identifier()}){
+ debugPrint("Already monitering region: \(already)")
+ }else{
+ startMonitoring(region: region)
+ }
+ }else{
+ debugPrint("Invalid region: \(zone.latitude ?? "invalid_latitude"),\(zone.longitude ?? "invalid_longitude"),r\(zone.radius ?? 0) | \(zone.identifier())")
+ }
+ })
+ }
+
+ func monitoredRegions() -> Set{
+ return locationManager.monitoredRegions
+ }
+
+}
+
+// CLLocationManager Delegates
+extension HMG_Geofence : CLLocationManagerDelegate{
+
+ func startMonitoring(region: CLCircularRegion) {
+ if !CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self) {
+ return
+ }
+
+ if CLLocationManager.authorizationStatus() != .authorizedAlways {
+ let message = """
+ Your geotification is saved but will only be activated once you grant
+ HMG permission to access the device location.
+ """
+ debugPrint(message)
+ }
+
+ locationManager.startMonitoring(for: region)
+ locationManager.requestState(for: region)
+ debugPrint("Starts monitering region: \(region)")
+ }
+
+ func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
+ debugPrint("didEnterRegion: \(region)")
+ if region is CLCircularRegion {
+ handleEvent(for: region,transition: .entry, location: manager.location)
+ }
+ }
+
+ func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
+ debugPrint("didExitRegion: \(region)")
+ if region is CLCircularRegion {
+ handleEvent(for: region,transition: .exit, location: manager.location)
+ }
+ }
+
+ func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) {
+ debugPrint("didDetermineState: \(state)")
+ }
+
+ func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
+ debugPrint("didUpdateLocations: \(locations)")
+ }
+
+
+}
+
+// Helpers
+extension HMG_Geofence{
+
+ func handleEvent(for region: CLRegion!, transition:Transition, location:CLLocation?) {
+ notifyUser(forRegion: region, transition: transition, location: locationManager.location)
+ notifyServer(forRegion: region, transition: transition, location: locationManager.location)
+ }
+
+ func geoZone(by id: String) -> GeoZoneModel? {
+ var zone:GeoZoneModel? = nil
+ if let zones_ = geoZones{
+ zone = zones_.first(where: { $0.identifier() == id})
+ }else{
+ // let jsonArray = UserDefaults.standard.string(forKey: "hmg-geo-fences")
+ }
+ return zone
+ }
+
+
+ func notifyUser(forRegion:CLRegion, transition:Transition, location:CLLocation?){
+ if let zone = geoZone(by: forRegion.identifier){
+ if UIApplication.shared.applicationState == .active {
+ mainViewController.showAlert(withTitle: transition.name(), message: zone.message())
+ }else{
+
+ }
+ }
+ }
+
+ func notifyServer(forRegion:CLRegion, transition:Transition, location:CLLocation?){
+ showNotification(title: "Notifying server..." , subtitle: forRegion.identifier, message: "")
+ if let userProfileJson = UserDefaults.standard.string(forKey: "user-profile"),
+ let userProfile = dictionary(from: userProfileJson), let patientId = userProfile["PatientID"] as? String{
+
+ if let idString = forRegion.identifier.split(separator: "_").first, let idInt = Int(idString){
+ let body:[String:Any] = [
+ "PointsID":idInt,
+ "GeoType":transition.rawValue,
+ "PatientID":patientId
+ ]
+
+ let url = "https://hmgwebservices.com/Services/Patients.svc/REST/GeoF_InsertPatientFileInfo"
+ httpPostRequest(urlString: url, jsonBody: body){ (status,json) in
+ showNotification(title: transition.name(), subtitle: forRegion.identifier, message: status ? "Success: notified to server ✔️" : "Failed to notified server ✖️")
+ }
+ }
+ }
+ }
+
+ // func notifyServer(forRegion:GeoZoneModel, transition:Transition, location:CLLocation?){
+ // flutterMethodChannel?.invokeMethod("getLogGeofenceFullUrl", arguments: nil){ fullUrlString in
+ // if let url = fullUrlString as? String{
+ // flutterMethodChannel?.invokeMethod("getDefaultHttpParameters", arguments: nil){ params in
+ // if var body = params as? [String : Any]{
+ // body.updateValue(forZone.geofenceId, forKey: "PointsID")
+ // body.updateValue(transition.rawValue, forKey: "GeoType")
+ // httpPostRequest(urlString: url, jsonBody: body){ (status,json) in
+ // showNotification(title: transition.name(), subtitle: forZone.identifier(), message: status ? "Success: sent to server ✔️" : "Failed: sent to server ✖️")
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+
+}
+
diff --git a/ios/Runner/Helper/LocalizedFromFlutter.swift b/ios/Runner/Helper/LocalizedFromFlutter.swift
new file mode 100644
index 00000000..88530649
--- /dev/null
+++ b/ios/Runner/Helper/LocalizedFromFlutter.swift
@@ -0,0 +1,22 @@
+//
+// LocalizedFromFlutter.swift
+// Runner
+//
+// Created by ZiKambrani on 10/04/1442 AH.
+//
+
+import UIKit
+
+class FlutterText{
+
+ class func with(key:String,completion: @escaping (String)->Void){
+ flutterMethodChannel?.invokeMethod("localizedValue", arguments: key, result: { (result) in
+ if let localized = result as? String{
+ completion(localized)
+ }else{
+ completion(key)
+ }
+ })
+ }
+
+}
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 6a2a87ce..ae084167 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -4,8 +4,6 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- Dr. Alhabib MC
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -13,7 +11,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- DiplomaticQuarter
+ diplomaticquarterapp
CFBundlePackageType
APPL
CFBundleShortVersionString
@@ -24,47 +22,43 @@
$(FLUTTER_BUILD_NUMBER)
LSRequiresIPhoneOS
- NSBluetoothAlwaysUsageDescription
- This App requires access to Bluetooth to connect blood pressure & blood sugar devices with the app to analyze the data.
- NSBluetoothPeripheralUsageDescription
- This App requires access to Bluetooth to connect blood pressure & blood sugar devices with the app to analyze the data.
NSCalendarsUsageDescription
- This app requires calendar access to set reminders for Virtual & Normal Appointments.
+ We need access to record you event in to calender.
NSCameraUsageDescription
- This app requires camera access to enable virtual consultation between patient & doctor
- NSContactsUsageDescription
- This app requires contacts access to show incoming virtual consultation request.
- NSFaceIDUsageDescription
- This app requires Face ID to allow biometric authentication for app login.
+ Need camera access for uploading images
NSLocationAlwaysAndWhenInUseUsageDescription
- This App requires access to your location to show the nearest hospitals & ER Locations from your location.
+ This app will use your location to show cool stuffs near you.
NSLocationAlwaysUsageDescription
- This App requires access to your location to show the nearest hospitals from your location.
+ This app will use your location to show cool stuffs near you.
+ NSLocationUsageDescription
+ Need location access for updating nearby friends
NSLocationWhenInUseUsageDescription
- This App requires access to your location to show the nearest hospitals from your location.
+ This app will use your location to show cool stuffs near you.
NSMicrophoneUsageDescription
- This app requires microphone access to enable virtual consultation between patient & doctor
- NSMotionUsageDescription
- This app requires motion detection access to function properly.
+ Need microphone access for uploading videos
NSPhotoLibraryUsageDescription
- This app requires photo library access to select image as document & upload it.
- NSRemindersUsageDescription
- This app requires calendar access to set reminders for Virtual & Normal Appointments.
- NSSpeechRecognitionUsageDescription
- This app requires access to speech recognition to identify which words are spoken into the microphone.
- NSAppleMusicUsageDescription
- Required usage description for a Flutter dependency
+ Need photo library access for uploading images
UIBackgroundModes
- remote-notification
+ fetch
+ location
+ processing
UILaunchStoryboardName
LaunchScreen
UIMainStoryboardFile
Main
+ UIRequiredDeviceCapabilities
+
+ location-services
+ gps
+ armv7
+
UISupportedInterfaceOrientations
UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
UISupportedInterfaceOrientations~ipad
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
index 903def2a..be2e0283 100644
--- a/ios/Runner/Runner.entitlements
+++ b/ios/Runner/Runner.entitlements
@@ -2,7 +2,13 @@
+
+
aps-environment
development
+ com.apple.developer.networking.HotspotConfiguration
+
+ com.apple.developer.networking.wifi-info
+
diff --git a/ios/Runner/WifiConnect/HMG_GUEST.swift b/ios/Runner/WifiConnect/HMG_GUEST.swift
new file mode 100644
index 00000000..ad6d3922
--- /dev/null
+++ b/ios/Runner/WifiConnect/HMG_GUEST.swift
@@ -0,0 +1,77 @@
+//
+// HMG_GUEST.swift
+// HMG-iOS-Wifi
+//
+// Created by ZiKambrani on 23/03/1442 AH.
+// Copyright © 1442 ZiKambrani. All rights reserved.
+//
+
+import UIKit
+import NetworkExtension
+import SystemConfiguration.CaptiveNetwork
+
+fileprivate let SSID = "HMG-MobileApp"
+
+class HMG_GUEST{
+ static let shared = HMG_GUEST()
+
+ private var complete:((_ status:Bool, _ message:String) -> Void)!
+ func connect(completion:@escaping ((_ status:Bool, _ message:String) -> Void)){
+ complete = completion
+
+ if isAlreadyConnected() {
+ FlutterText.with(key: "alreadyConnectedHmgNetwork") { (localized) in
+ self.complete(true, localized )
+ }
+ }else{
+ connect()
+ }
+ }
+
+ private func connect() {
+
+ let hotspotConfig = NEHotspotConfiguration(ssid: "\(SSID)")
+ hotspotConfig.joinOnce = false
+ NEHotspotConfigurationManager.shared.apply(hotspotConfig) {[weak self] (error) in
+ guard let self = self else { return; }
+
+ if let error = error {
+ FlutterText.with(key: "errorConnectingHmgNetwork") { (localized) in
+ self.complete(false, localized )
+ }
+ }else{
+ _ = Timer.scheduledTimer(withTimeInterval: 10, repeats: false) { (timer) in
+ let connected = self.isAlreadyConnected()
+ let message = connected ? "successConnectingHmgNetwork" : "failedConnectingHmgNetwork"
+ FlutterText.with(key: message) { (localized) in
+ self.complete(false, localized )
+ }
+ }
+ }
+ }
+
+
+// NSMutableURLRequest(url: URL(string: "www.google.com")!).bind(to: command)
+// NEHotspotHelper.register(options: [:], queue: DispatchQueue.global()) { (command) in
+// command
+// print(command)
+// }
+
+ }
+
+ private func isAlreadyConnected() -> Bool{
+ var currentSSID: String?
+ if let interfaces = CNCopySupportedInterfaces() as NSArray? {
+ for interface in interfaces {
+ if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
+ currentSSID = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
+ break
+ }
+ }
+ }
+
+ print("CurrentConnectedSSID: \(currentSSID)")
+ return currentSSID == SSID
+ }
+
+}
diff --git a/ios/Runner/WifiConnect/HMG_GUEST_bkp.swift b/ios/Runner/WifiConnect/HMG_GUEST_bkp.swift
new file mode 100644
index 00000000..e3dfd468
--- /dev/null
+++ b/ios/Runner/WifiConnect/HMG_GUEST_bkp.swift
@@ -0,0 +1,129 @@
+////
+//// HMG_GUEST.swift
+//// HMG-iOS-Wifi
+////
+//// Created by ZiKambrani on 23/03/1442 AH.
+//// Copyright © 1442 ZiKambrani. All rights reserved.
+////
+//
+//import UIKit
+//import NetworkExtension
+//import SystemConfiguration.CaptiveNetwork
+//
+//
+//class HMG_GUEST{
+// static let shared = HMG_GUEST()
+// private let SSID = "GUEST-POC"
+// private let USER = "1301"
+// private let PASS = "8928"
+//
+// var complete:((_ status:Bool, _ message:String) -> Void)!
+// func connect(completion:@escaping ((_ status:Bool, _ message:String) -> Void)){
+// complete = completion
+//
+// if isAlreadyConnected() {
+// hasInternet { (has) in
+// if has == true{
+// self.complete(true, "You already connected to internet")
+// return
+// }else{
+// self.authenticate()
+// }
+// }
+// }else{
+// connect()
+// }
+// }
+//
+// private func connect() {
+// let hotspotConfig = NEHotspotConfiguration(ssid: SSID)
+// hotspotConfig.joinOnce = true
+//
+// NEHotspotConfigurationManager.shared.apply(hotspotConfig) {[weak self] (error) in
+// guard let self = self else { return; }
+//
+// if let error = error {
+// self.complete(false, error.localizedDescription ?? "Error connecting to HMG wifi network" )
+// }else{
+// _ = Timer.scheduledTimer(withTimeInterval: 2, repeats: false) { (timer) in
+// self.authenticate()
+// }
+// }
+// }
+// }
+//
+// func authenticate(){
+//
+// func callLogin(){
+//
+// let parameters = "Login=Log%20In&cmd=authenticate&password=1820&user=2300"
+// let postData = parameters.data(using: .utf8)
+//
+// var request = URLRequest(url: URL(string: "https://captiveportal-login.hmg.com/cgi-bin/login")!,timeoutInterval: 5)
+// request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
+//
+// request.httpMethod = "POST"
+// request.httpBody = postData
+//
+// let task = URLSession.shared.dataTask(with: request) { data, response, error in
+// // guard let data = data else {
+// // self.complete(false, "Error at authentication")
+// // return
+// // }
+//
+// self.hasInternet { (has) in
+// self.complete(has, has ? "Successfully connected to the internet" : "Authentication failed or you are already using your credentials on another device")
+// }
+// }
+// task.resume()
+//
+// }
+//
+// self.hasInternet { (has) in
+// if has == true{
+// self.complete(true, "Your internet account is already authenticated")
+// }else{
+// callLogin()
+// }
+// }
+//
+// }
+//
+// private func isAlreadyConnected() -> Bool{
+// var currentSSID: String?
+// if let interfaces = CNCopySupportedInterfaces() as NSArray? {
+// for interface in interfaces {
+// if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
+// currentSSID = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
+// break
+// }
+// }
+// }
+//
+// print("CurrentConnectedSSID: \(currentSSID)")
+// return currentSSID == SSID
+// }
+//
+//
+// func hasInternet( completion:@escaping ((Bool)->Void)){
+//
+// let testUrl = "https://captive.apple.com"
+// var request = URLRequest(url: URL(string: testUrl)!,timeoutInterval: 5)
+// request.httpMethod = "GET"
+// let task = URLSession.shared.dataTask(with: request) { data, response, error in
+// guard let data = data else {
+// completion(false)
+// return
+// }
+// let resp = String(data: data, encoding: .utf8)!
+// if resp.contains("Success"){
+// completion(true)
+// }else{
+// completion(false)
+// }
+//
+// }
+// task.resume()
+// }
+//
+//}
diff --git a/ios/Runner/WifiConnect/HMG_Internet.swift b/ios/Runner/WifiConnect/HMG_Internet.swift
new file mode 100644
index 00000000..00ac172f
--- /dev/null
+++ b/ios/Runner/WifiConnect/HMG_Internet.swift
@@ -0,0 +1,193 @@
+//
+// HMG_GUEST.swift
+// HMG-iOS-Wifi
+//
+// Created by ZiKambrani on 23/03/1442 AH.
+// Copyright © 1442 ZiKambrani. All rights reserved.
+//
+
+import UIKit
+import NetworkExtension
+import SystemConfiguration.SCNetworkConnection
+
+fileprivate var TEST = false
+fileprivate let SSID = "GUEST-POC"
+fileprivate var USER = ""
+fileprivate var PASS = ""
+
+fileprivate func supportedEAPTypes() -> [NSNumber]{
+ let peap = NEHotspotEAPSettings.EAPType.EAPPEAP.rawValue
+ let fast = NEHotspotEAPSettings.EAPType.EAPFAST.rawValue
+ let tls = NEHotspotEAPSettings.EAPType.EAPTLS.rawValue
+ let ttls = NEHotspotEAPSettings.EAPType.EAPTTLS.rawValue
+ return [NSNumber(value: peap), NSNumber(value: fast), NSNumber(value: tls), NSNumber(value: ttls)]
+}
+
+class HMG_Internet{
+ static let shared = HMG_Internet()
+
+ private var complete:((_ status:Bool, _ message:String) -> Void)!
+ func connect(patientId:String, completion:@escaping ((_ status:Bool, _ message:String) -> Void)){
+ complete = completion
+
+ if isAlreadyConnected() {
+ hasInternet { (has) in
+ if has == true{
+ FlutterText.with(key: "alreadyConnectedHmgNetwork"){ localized in
+ self.complete(true, localized)
+ }
+ return
+ }else{
+ FlutterText.with(key: "connectedToHmgNetworkWithNoInternet"){ localized in
+ self.complete(false, localized)
+ }
+ }
+ }
+ }else{
+ connect(patientId: patientId)
+ }
+ }
+
+ private func connect(patientId:String) {
+
+ getWifiCredentials(patientId: patientId) {
+ let trust_cert = Bundle.main.certificate(named: "GuestPOC_Certificate")
+ guard trust_cert.trust() == true else{
+ FlutterText.with(key: "notConnectedToHmgNetworkSecurityIssue"){ localized in
+ self.complete(false,localized)
+ }
+ return
+ }
+
+ let eapSettings = NEHotspotEAPSettings()
+ eapSettings.username = USER
+ eapSettings.password = PASS
+ eapSettings.trustedServerNames = ["*.hmg.com","onboard.hmg.com","hmg.com"]
+ eapSettings.supportedEAPTypes = [supportedEAPTypes().first!]
+// eapSettings.isTLSClientCertificateRequired = true
+// eapSettings.ttlsInnerAuthenticationType = .eapttlsInnerAuthenticationMSCHAPv2 // MSCHAPv2
+// eapSettings.setIdentity(Bundle.main.identity(named: "GuestPOC_Certificate", password: "1"))
+// eapSettings.setTrustedServerCertificates([trust_cert])
+
+ let hotspotConfig = NEHotspotConfiguration(ssid: SSID, eapSettings: eapSettings)
+ NEHotspotConfigurationManager.shared.apply(hotspotConfig) {[weak self] (error) in
+ guard let self = self else { return; }
+
+ if let error = error {
+
+ FlutterText.with(key: "errorConnectingHmgNetwork"){ localized in
+ self.complete(false,localized)
+ }
+
+ }else{
+ _ = Timer.scheduledTimer(withTimeInterval: 5, repeats: false) { (timer) in
+ self.hasInternet { (has) in
+ if has == true{
+ FlutterText.with(key: "connectedHmgNetworkWithInternet"){ localized in
+ self.complete(true,localized)
+ }
+ return
+ }else{
+ FlutterText.with(key: "connectedToHmgNetworkWithNoInternet"){ localized in
+ self.complete(false,localized)
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ private func isAlreadyConnected() -> Bool{
+ var currentSSID: String?
+ if let interfaces = CNCopySupportedInterfaces() as NSArray? {
+ for interface in interfaces {
+ if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
+ currentSSID = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
+ break
+ }
+ }
+ }
+ print("CurrentConnectedSSID: \(currentSSID)")
+ return currentSSID == SSID
+ }
+
+
+ private func getWifiCredentials(patientId:String, success: @escaping (() -> Void)){
+ if TEST {
+ success()
+ return
+ }
+
+ guard let url = API.WIFI_CREDENTIALS.toUrl() else { return assert(true, "Invalid URL: \(API.WIFI_CREDENTIALS)") }
+
+ // JSON Body for HTTP Request
+ let json: [String: Any] = ["PatientID": patientId]
+ let jsonData = try? JSONSerialization.data(withJSONObject: json)
+
+ var request = URLRequest(url: url, timeoutInterval: 20)
+ request.httpMethod = "POST"
+ request.setValue("application/json", forHTTPHeaderField: "Content-Type")
+ request.httpBody = jsonData
+
+ let task = URLSession.shared.dataTask(with: request) { data, response, error in
+ guard let data = data else {
+ self.somethingWentWrong()
+ return
+ }
+
+ if let responseJSON = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]{
+ if let requiredData = (responseJSON["Hmg_SMS_Get_By_ProjectID_And_PatientIDList"] as? [[String:Any]])?.first,
+ let userName = requiredData["UserName"] as? String, let password = requiredData["Password"] as? String{
+
+ USER = userName
+ PASS = password
+ success()
+
+ }else if let errorMessage = responseJSON["ErrorMessage"] as? String{
+ self.complete(false, errorMessage)
+ }else{
+ self.somethingWentWrong()
+ }
+ }else{
+ self.somethingWentWrong()
+ }
+
+ }
+ task.resume()
+
+ }
+
+ private func somethingWentWrong(){
+ FlutterText.with(key: "somethingWentWrong") { (localized) in
+ self.complete(false, localized)
+ }
+ }
+
+
+ func hasInternet( completion:@escaping ((Bool)->Void)){
+
+ let testUrl = "https://captive.apple.com"
+ var request = URLRequest(url: URL(string: testUrl)!,timeoutInterval: 5)
+ request.httpMethod = "GET"
+ let task = URLSession.shared.dataTask(with: request) { data, response, error in
+ guard let data = data else {
+ completion(false)
+ return
+ }
+
+ completion(
+ String(data: data, encoding: .utf8)!
+ .replacingOccurrences(of: " ", with: "")
+ .replacingOccurrences(of: "\n", with: "")
+ .lowercased()
+ .contains("success")
+ )
+
+ }
+ task.resume()
+ }
+
+}
diff --git a/ios/Runner/WifiConnect/HMG_Wifi.swift b/ios/Runner/WifiConnect/HMG_Wifi.swift
new file mode 100644
index 00000000..1335f766
--- /dev/null
+++ b/ios/Runner/WifiConnect/HMG_Wifi.swift
@@ -0,0 +1,172 @@
+//
+// HMG_GUEST.swift
+// HMG-iOS-Wifi
+//
+// Created by ZiKambrani on 23/03/1442 AH.
+// Copyright © 1442 ZiKambrani. All rights reserved.
+//
+
+import UIKit
+import NetworkExtension
+import SystemConfiguration.CaptiveNetwork
+
+fileprivate var TEST = true
+fileprivate let SSID = "GUEST-POC"
+fileprivate var USER = "0696"
+fileprivate var PASS = "0000"
+
+fileprivate func supportedEAPTypes() -> [NSNumber]{
+ let peap = NEHotspotEAPSettings.EAPType.EAPPEAP.rawValue
+ let fast = NEHotspotEAPSettings.EAPType.EAPFAST.rawValue
+ let tls = NEHotspotEAPSettings.EAPType.EAPTLS.rawValue
+ let ttls = NEHotspotEAPSettings.EAPType.EAPTTLS.rawValue
+ return [NSNumber(value: peap), NSNumber(value: fast), NSNumber(value: tls), NSNumber(value: ttls)]
+}
+
+class HMG_Internet{
+ static let shared = HMG_Wifi()
+
+ private var complete:((_ status:Bool, _ message:String) -> Void)!
+ func connect(patientId:String, completion:@escaping ((_ status:Bool, _ message:String) -> Void)){
+ complete = completion
+
+ if isAlreadyConnected() {
+ hasInternet { (has) in
+ if has == true{
+ self.complete(true, "You already connected to HMG network to access internet")
+ return
+ }else{
+ self.complete(false, "You are connected to HMG network but it have no internet access")
+ }
+ }
+ }else{
+ connect(patientId: patientId)
+ }
+ }
+
+ private func connect(patientId:String) {
+
+ getWifiCredentials(patientId: patientId) {
+ let trust_cert = Bundle.main.certificate(named: "GuestPOC_Certificate")
+ guard trust_cert.trust() == true else{
+ self.complete(false,"We are not able to connect you to HMG network due to security certificate")
+ return
+ }
+
+ let eapSettings = NEHotspotEAPSettings()
+ eapSettings.username = USER
+ eapSettings.password = PASS
+ eapSettings.trustedServerNames = ["*.hmg.com","onboard.hmg.com","hmg.com"]
+ eapSettings.supportedEAPTypes = [supportedEAPTypes().first!]
+// eapSettings.isTLSClientCertificateRequired = true
+// eapSettings.ttlsInnerAuthenticationType = .eapttlsInnerAuthenticationMSCHAPv2 // MSCHAPv2
+// eapSettings.setIdentity(Bundle.main.identity(named: "GuestPOC_Certificate", password: "1"))
+// eapSettings.setTrustedServerCertificates([trust_cert])
+
+ let hotspotConfig = NEHotspotConfiguration(ssid: SSID, eapSettings: eapSettings)
+ NEHotspotConfigurationManager.shared.apply(hotspotConfig) {[weak self] (error) in
+ guard let self = self else { return; }
+
+ if let error = error {
+ self.complete(false, "Error connecting to HMG network" /*error.localizedDescription*/ )
+ }else{
+ _ = Timer.scheduledTimer(withTimeInterval: 3, repeats: false) { (timer) in
+ self.hasInternet { (has) in
+ if has == true{
+ self.complete(true, "Successfully connected to the HMG network to access internet")
+ return
+ }else{
+ self.complete(false, "Successfully connected to the HMG network but it have no internet access")
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ private func isAlreadyConnected() -> Bool{
+ var currentSSID: String?
+ if let interfaces = CNCopySupportedInterfaces() as NSArray? {
+ for interface in interfaces {
+ if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
+ currentSSID = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
+ break
+ }
+ }
+ }
+
+ print("CurrentConnectedSSID: \(currentSSID)")
+ return currentSSID == SSID
+ }
+
+
+ private func getWifiCredentials(patientId:String, completion: @escaping (() -> Void)){
+ if TEST {
+ completion()
+ return
+ }
+
+ guard let url = API.WIFI_CREDENTIALS.toUrl() else { return assert(true, "Invalid URL: \(API.WIFI_CREDENTIALS)") }
+
+ // JSON Body for HTTP Request
+ let json: [String: Any] = ["PatientID": patientId]
+ let jsonData = try? JSONSerialization.data(withJSONObject: json)
+
+ var request = URLRequest(url: url, timeoutInterval: 20)
+ request.httpMethod = "POST"
+ request.setValue("application/json", forHTTPHeaderField: "Content-Type")
+ request.httpBody = jsonData
+
+ let task = URLSession.shared.dataTask(with: request) { data, response, error in
+ guard let data = data else {
+ self.complete(false, "Failed to get your internet credentials")
+ return
+ }
+
+ if let responseJSON = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]{
+ if let requiredData = responseJSON["Hmg_SMS_Get_By_ProjectID_And_PatientIDList"] as? [String:Any],
+ let userName = requiredData["UserName"] as? String, let password = requiredData["Password"] as? String{
+
+ USER = userName
+ PASS = password
+ completion()
+
+ }else if let errorMessage = responseJSON["ErrorMessage"] as? String{
+ self.complete(false, errorMessage)
+ }
+ }else{
+ self.complete(false, "Failed to get your internet credentials")
+ }
+
+ }
+ task.resume()
+
+ }
+
+
+ func hasInternet( completion:@escaping ((Bool)->Void)){
+
+ let testUrl = "https://captive.apple.com"
+ var request = URLRequest(url: URL(string: testUrl)!,timeoutInterval: 5)
+ request.httpMethod = "GET"
+ let task = URLSession.shared.dataTask(with: request) { data, response, error in
+ guard let data = data else {
+ completion(false)
+ return
+ }
+
+ completion(
+ String(data: data, encoding: .utf8)!
+ .replacingOccurrences(of: " ", with: "")
+ .replacingOccurrences(of: "\n", with: "")
+ .lowercased()
+ .contains("success")
+ )
+
+ }
+ task.resume()
+ }
+
+}
diff --git a/ios/gpx.gpx b/ios/gpx.gpx
new file mode 100644
index 00000000..addbfa24
--- /dev/null
+++ b/ios/gpx.gpx
@@ -0,0 +1 @@
+
Sverrir Sigmundarson
Office
Office
Panorama Mall
Panorama Mall
Saudi Architects Crossing
Saudi Architects Crossing
Office
Office
\ No newline at end of file
diff --git a/lib/config/config.dart b/lib/config/config.dart
index 2317361f..4a420ec8 100644
--- a/lib/config/config.dart
+++ b/lib/config/config.dart
@@ -1,53 +1,49 @@
import 'dart:io';
+import 'package:diplomaticquarterapp/core/service/geofencing/GeofencingServices.dart';
import 'package:diplomaticquarterapp/models/Request.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart';
const MAX_SMALL_SCREEN = 660;
+// PACKAGES and OFFERS
+const EXA_CART_API_BASE_URL = 'https://mdlaboratories.com/exacartapi';
+const PACKAGES_CATEGORIES = '/api/categories';
+const PACKAGES_PRODUCTS = '/api/products';
+
// const BASE_URL = 'https://uat.hmgwebservices.com/';
+const PING_SERVICE = 'Services/Weather.svc/REST/CheckConnectivity';
+
const BASE_URL = 'https://hmgwebservices.com/';
const GET_PROJECT = 'Services/Lists.svc/REST/GetProject';
-//weather
-const WEATHER_INDICATOR = 'Services/Weather.svc/REST/GetCityInfo';
+///Geofencing
+const GET_GEO_ZONES = 'Services/Patients.svc/REST/GeoF_GetAllPoints';
+const LOG_GEO_ZONES = 'Services/Patients.svc/REST/GeoF_InsertPatientFileInfo';
///Doctor
-const GET_MY_DOCTOR =
- 'Services/Doctors.svc/REST/GetPatientDoctorAppointmentResult';
+const GET_MY_DOCTOR = 'Services/Doctors.svc/REST/GetPatientDoctorAppointmentResult';
const GET_DOCTOR_PROFILE = 'Services/Doctors.svc/REST/GetDocProfiles';
-const GET_DOCTOR_RATING_NOTES =
- 'Services/Doctors.svc/REST/dr_GetNotesDoctorRating';
-const GET_DOCTOR_RATING_DETAILS =
- 'Services/Doctors.svc/REST/dr_GetDoctorRatingDetails';
const GET_DOCTOR_RATING = 'Services/Doctors.svc/REST/dr_GetAvgDoctorRating';
///Prescriptions
const PRESCRIPTIONS = 'Services/Patients.svc/REST/GetPrescriptionApptList';
-const GET_PRESCRIPTIONS_ALL_ORDERS =
- 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders';
-const GET_PRESCRIPTION_REPORT =
- 'Services/Patients.svc/REST/INP_GetPrescriptionReport';
-const SEND_PRESCRIPTION_EMAIL =
- 'Services/Notifications.svc/REST/SendPrescriptionEmail';
-const GET_PRESCRIPTION_REPORT_ENH =
- 'Services/Patients.svc/REST/GetPrescriptionReport_enh';
+const GET_PRESCRIPTIONS_ALL_ORDERS = 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders';
+const GET_PRESCRIPTION_REPORT = 'Services/Patients.svc/REST/INP_GetPrescriptionReport';
+const SEND_PRESCRIPTION_EMAIL = 'Services/Notifications.svc/REST/SendPrescriptionEmail';
+const GET_PRESCRIPTION_REPORT_ENH = 'Services/Patients.svc/REST/GetPrescriptionReport_enh';
///Lab Order
const GET_Patient_LAB_ORDERS = 'Services/Patients.svc/REST/GetPatientLabOrders';
-const GET_Patient_LAB_SPECIAL_RESULT =
- 'Services/Patients.svc/REST/GetPatientLabSpecialResults';
-const GET_Patient_LAB_RESULT =
- 'Services/Patients.svc/REST/GetPatientLabResults';
+const GET_Patient_LAB_SPECIAL_RESULT = 'Services/Patients.svc/REST/GetPatientLabSpecialResults';
+const GET_Patient_LAB_RESULT = 'Services/Patients.svc/REST/GetPatientLabResults';
///
const GET_PATIENT_ORDERS = 'Services/Patients.svc/REST/GetPatientRadOrders';
-const GET_PATIENT_ORDERS_DETAILS =
- 'Services/Patients.svc/REST/Rad_UpdatePatientRadOrdersToRead';
+const GET_PATIENT_ORDERS_DETAILS = 'Services/Patients.svc/REST/Rad_UpdatePatientRadOrdersToRead';
const GET_RAD_IMAGE_URL = 'Services/Patients.svc/Rest/GetRadImageURL';
-const SEND_RAD_REPORT_EMAIL =
- 'Services/Notifications.svc/REST/SendRadReportEmail';
+const SEND_RAD_REPORT_EMAIL = 'Services/Notifications.svc/REST/SendRadReportEmail';
///Feedback
const SEND_FEEDBACK = 'Services/COCWS.svc/REST/InsertCOCItemInSPList';
@@ -56,24 +52,17 @@ const GET_PATIENT_AppointmentHistory = 'Services'
'/Doctors.svc/REST/PateintHasAppoimentHistory';
///VITAL SIGN
-const GET_PATIENT_VITAL_SIGN =
- 'Services/Doctors.svc/REST/Doctor_GetPatientVitalSign';
+const GET_PATIENT_VITAL_SIGN = 'Services/Doctors.svc/REST/Doctor_GetPatientVitalSign';
///Er Nearest
-const GET_NEAREST_HOSPITAL =
- 'Services/Patients.svc/REST/Patient_GetProjectAvgERWaitingTime';
+const GET_NEAREST_HOSPITAL = 'Services/Patients.svc/REST/Patient_GetProjectAvgERWaitingTime';
///Er Nearest
-const GET_AMBULANCE_REQUEST =
- 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod';
-const GET_PATIENT_ALL_PRES_ORDERS =
- 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders';
-const GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID =
- 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID';
-const UPDATE_PRESS_ORDER =
- 'Services/Patients.svc/REST/PatientER_UpdatePresOrder';
-const INSERT_ER_INERT_PRES_ORDER =
- 'Services/Patients.svc/REST/PatientER_InsertPresOrder';
+const GET_AMBULANCE_REQUEST = 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod';
+const GET_PATIENT_ALL_PRES_ORDERS = 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders';
+const GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID = 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID';
+const UPDATE_PRESS_ORDER = 'Services/Patients.svc/REST/PatientER_UpdatePresOrder';
+const INSERT_ER_INERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertPresOrder';
///FindUs
const GET_FINDUS_REQUEST = 'Services/Lists.svc/REST/Get_HMG_Locations';
@@ -82,8 +71,7 @@ const GET_FINDUS_REQUEST = 'Services/Lists.svc/REST/Get_HMG_Locations';
const GET_LIVECHAT_REQUEST = 'Services/Patients.svc/REST/GetPatientICProjects';
///babyInformation
-const GET_BABYINFORMATION_REQUEST =
- 'Services/Community.svc/REST/GetBabyByUserID';
+const GET_BABYINFORMATION_REQUEST = 'Services/Community.svc/REST/GetBabyByUserID';
///Get Baby By User ID
const GET_BABY_BY_USER_ID = 'Services/Community.svc/REST/GetBabyByUserID';
@@ -91,18 +79,14 @@ const GET_BABY_BY_USER_ID = 'Services/Community.svc/REST/GetBabyByUserID';
///userInformation
const GET_USERINFORMATION_REQUEST = 'Services/Community.svc/REST/GetUserInformation_New';
-///Update email
-const UPDATE_PATENT_EMAIL = 'Services/Patients.svc/REST/UpdatePateintEmail';
-const UPDATE_PATENT_INFO = 'Services/Community.svc/REST/UpdateUserInfo_New';
-
///addNewChild
const GET_NEWCHILD_REQUEST = 'Services/Community.svc/REST/CreateNewBaby';
///newUserId
const GET_NEW_USER_REQUEST = 'Services/Community.svc/REST/CreateNewUser_New';
-///delete Child
-const DELETE_CHILD_REQUEST = '/Services/Community.svc/REST/DeleteBaby';
+///delteChild
+const DELETE_CHILD_REQUEST = 'Services/Community.svc/REST/DeleteBaby';
///addNewTABLE
const GET_TABLE_REQUEST = 'Services/Community.svc/REST/CreateVaccinationTable';
@@ -111,19 +95,15 @@ const GET_TABLE_REQUEST = 'Services/Community.svc/REST/CreateVaccinationTable';
const GET_CITIES_REQUEST = 'Services/Lists.svc/REST/GetAllCities';
///BloodDetails
-const GET_BLOOD_REQUEST =
- 'services/PatientVarification.svc/REST/BloodDonation_GetBloodGroupDetails';
+const GET_BLOOD_REQUEST = 'services/PatientVarification.svc/REST/BloodDonation_GetBloodGroupDetails';
///Reports
const REPORTS = 'Services/Doctors.svc/REST/GetPatientMedicalReportStatusInfo';
-const INSERT_REQUEST_FOR_MEDICAL_REPORT =
- 'Services/Doctors.svc/REST/InsertRequestForMedicalReport';
+const INSERT_REQUEST_FOR_MEDICAL_REPORT = 'Services/Doctors.svc/REST/InsertRequestForMedicalReport';
///Rate
-const IS_LAST_APPOITMENT_RATED =
- 'Services/Doctors.svc/REST/IsLastAppoitmentRated';
-const GET_APPOINTMENT_DETAILS_BY_NO =
- 'Services/MobileNotifications.svc/REST/GetAppointmentDetailsByApptNo';
+const IS_LAST_APPOITMENT_RATED = 'Services/Doctors.svc/REST/IsLastAppoitmentRated';
+const GET_APPOINTMENT_DETAILS_BY_NO = 'Services/MobileNotifications.svc/REST/GetAppointmentDetailsByApptNo';
const GET_QR_PARKING = 'Services/SWP.svc/REST/GetQRParkingByID';
@@ -135,8 +115,7 @@ const GET_QR_PARKING = 'Services/SWP.svc/REST/GetQRParkingByID';
const GET_CLINICS_LIST_URL = "Services/lists.svc/REST/GetClinicCentralized";
//URL to get active appointment list
-const GET_ACTIVE_APPOINTMENTS_LIST_URL =
- "Services/Doctors.svc/Rest/Dr_GetAppointmentActiveNumber";
+const GET_ACTIVE_APPOINTMENTS_LIST_URL = "Services/Doctors.svc/Rest/Dr_GetAppointmentActiveNumber";
//URL to get projects list
const GET_PROJECTS_LIST = 'Services/Lists.svc/REST/GetProject';
@@ -145,106 +124,76 @@ const GET_PROJECTS_LIST = 'Services/Lists.svc/REST/GetProject';
const GET_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/SearchDoctorsByTime";
//URL to dental doctors list
-const GET_DENTAL_DOCTORS_LIST_URL =
- "Services/Doctors.svc/REST/Dental_DoctorChiefComplaintMapping";
+const GET_DENTAL_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/Dental_DoctorChiefComplaintMapping";
//URL to get doctor free slots
const GET_DOCTOR_FREE_SLOTS = "Services/Doctors.svc/REST/GetDoctorFreeSlots";
//URL to insert appointment
-const INSERT_SPECIFIC_APPOINTMENT =
- "Services/Doctors.svc/REST/InsertSpecificAppointment";
+const INSERT_SPECIFIC_APPOINTMENT = "Services/Doctors.svc/REST/InsertSpecificAppointment";
//URL to get patient share
-const GET_PATIENT_SHARE =
- "Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNO";
+const GET_PATIENT_SHARE = "Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNO";
//URL to get patient appointment history
-const GET_PATIENT_APPOINTMENT_HISTORY =
- "Services/Doctors.svc/REST/PateintHasAppoimentHistory";
+const GET_PATIENT_APPOINTMENT_HISTORY = "Services/Doctors.svc/REST/PateintHasAppoimentHistory";
//URL to get patient appointment curfew history
-const GET_PATIENT_APPOINTMENT_CURFEW_HISTORY =
- "Services/Doctors.svc/REST/AppoimentHistoryForCurfew";
+const GET_PATIENT_APPOINTMENT_CURFEW_HISTORY = "Services/Doctors.svc/REST/AppoimentHistoryForCurfew";
//URL to confirm appointment
-const CONFIRM_APPOINTMENT =
- "Services/MobileNotifications.svc/REST/ConfirmAppointment";
+const CONFIRM_APPOINTMENT = "Services/MobileNotifications.svc/REST/ConfirmAppointment";
-const INSERT_VIDA_REQUEST =
- "Services/ER_VirtualCall.svc/REST/PatientER_VidaRequestInseart";
+const INSERT_VIDA_REQUEST = "Services/ER_VirtualCall.svc/REST/PatientER_VidaRequestInseart";
//URL to cancel appointment
const CANCEL_APPOINTMENT = "Services/Doctors.svc/REST/CancelAppointment";
//URL get appointment QR
-const GENERATE_QR_APPOINTMENT =
- "Services/Doctors.svc/REST/GenerateQRAppointmentNo";
+const GENERATE_QR_APPOINTMENT = "Services/Doctors.svc/REST/GenerateQRAppointmentNo";
//URL send email appointment QR
-const EMAIL_QR_APPOINTMENT =
- "Services/Notifications.svc/REST/sendEmailForOnLineCheckin";
+const EMAIL_QR_APPOINTMENT = "Services/Notifications.svc/REST/sendEmailForOnLineCheckin";
//URL check payment status
-const CHECK_PAYMENT_STATUS =
- "Services/PayFort_Serv.svc/REST/GetRequestStatusByRequestID";
+const CHECK_PAYMENT_STATUS = "Services/PayFort_Serv.svc/REST/GetRequestStatusByRequestID";
//URL create advance payment
const CREATE_ADVANCE_PAYMENT = "Services/Doctors.svc/REST/CreateAdvancePayment";
-const HIS_CREATE_ADVANCE_PAYMENT =
- "Services/Patients.svc/REST/HIS_CreateAdvancePayment";
+const HIS_CREATE_ADVANCE_PAYMENT = "Services/Patients.svc/REST/HIS_CreateAdvancePayment";
-const ADD_ADVANCE_NUMBER_REQUEST =
- 'Services/PayFort_Serv.svc/REST/AddAdvancedNumberRequest';
+const ADD_ADVANCE_NUMBER_REQUEST = 'Services/PayFort_Serv.svc/REST/AddAdvancedNumberRequest';
-const IS_ALLOW_ASK_DOCTOR =
- 'Services/Doctors.svc/REST/GetPatientDoctorAppointmentResult';
-const GET_CALL_REQUEST_TYPE =
- 'Services/Doctors.svc/REST/GetCallRequestType_LOV';
+const IS_ALLOW_ASK_DOCTOR = 'Services/Doctors.svc/REST/GetPatientDoctorAppointmentResult';
+const GET_CALL_REQUEST_TYPE = 'Services/Doctors.svc/REST/GetCallRequestType_LOV';
const SEND_CALL_REQUEST = 'Services/Doctors.svc/REST/InsertCallInfo';
-const GET_LIVECARE_CLINICS =
- 'Services/ER_VirtualCall.svc/REST/PatientER_GetClinics';
+const GET_LIVECARE_CLINICS = 'Services/ER_VirtualCall.svc/REST/PatientER_GetClinics';
-const GET_LIVECARE_SCHEDULE_CLINICS =
- 'Services/Doctors.svc/REST/PatientER_GetClinicsHaveSchedule';
+const GET_LIVECARE_SCHEDULE_CLINICS = 'Services/Doctors.svc/REST/PatientER_GetClinicsHaveSchedule';
-const GET_LIVECARE_SCHEDULE_CLINIC_DOCTOR_LIST =
- 'Services/Doctors.svc/REST/PatientER_GetDoctorByClinicID';
+const GET_LIVECARE_SCHEDULE_CLINIC_DOCTOR_LIST = 'Services/Doctors.svc/REST/PatientER_GetDoctorByClinicID';
-const GET_LIVECARE_SCHEDULE_DOCTOR_TIME_SLOTS =
- 'Services/Doctors.svc/REST/PatientER_GetDoctorFreeSlots';
+const GET_LIVECARE_SCHEDULE_DOCTOR_TIME_SLOTS = 'Services/Doctors.svc/REST/PatientER_GetDoctorFreeSlots';
-const INSERT_LIVECARE_SCHEDULE_APPOINTMENT =
- 'Services/Doctors.svc/REST/InsertSpecificAppoitmentForSchedule';
+const INSERT_LIVECARE_SCHEDULE_APPOINTMENT = 'Services/Doctors.svc/REST/InsertSpecificAppoitmentForSchedule';
-const GET_PATIENT_SHARE_LIVECARE =
- "Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNOForLiveCare";
+const GET_PATIENT_SHARE_LIVECARE = "Services/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNOForLiveCare";
-const GET_LIVECARE_CLINIC_TIMING =
- 'Services/ER_VirtualCall.svc/REST/PatientER_GetClinicsServiceTimingsSchedule';
+const GET_LIVECARE_CLINIC_TIMING = 'Services/ER_VirtualCall.svc/REST/PatientER_GetClinicsServiceTimingsSchedule';
-const GET_ER_APPOINTMENT_FEES =
- 'Services/DoctorApplication.svc/REST/GetERAppointmentFees';
+const GET_ER_APPOINTMENT_FEES = 'Services/DoctorApplication.svc/REST/GetERAppointmentFees';
const GET_ER_APPOINTMENT_TIME = 'Services/ER_VirtualCall.svc/REST/GetRestTime';
-const ADD_NEW_CALL_FOR_PATIENT_ER =
- 'Services/DoctorApplication.svc/REST/NewCallForPatientER';
+const ADD_NEW_CALL_FOR_PATIENT_ER = 'Services/DoctorApplication.svc/REST/NewCallForPatientER';
-const GET_LIVECARE_HISTORY =
- 'Services/ER_VirtualCall.svc/REST/GetPatientErVirtualHistory';
-const CANCEL_LIVECARE_REQUEST =
- 'Services/ER_VirtualCall.svc/REST/DeleteErRequest';
-const SEND_LIVECARE_INVOICE_EMAIL =
- 'Services/Notifications.svc/REST/SendInvoiceForLiveCare';
+const GET_LIVECARE_HISTORY = 'Services/ER_VirtualCall.svc/REST/GetPatientErVirtualHistory';
+const CANCEL_LIVECARE_REQUEST = 'Services/ER_VirtualCall.svc/REST/DeleteErRequest';
+const SEND_LIVECARE_INVOICE_EMAIL = 'Services/Notifications.svc/REST/SendInvoiceForLiveCare';
const GET_USER_TERMS = '/Services/Patients.svc/REST/GetUserTermsAndConditions';
-const UPDATE_HEALTH_TERMS =
- '/services/Patients.svc/REST/UpdatePateintHealthSummaryReport';
-
-///
-const GET_PRIVILEGE = 'Services/Patients.svc/REST/Service_Privilege';
+const UPDATE_HEALTH_TERMS = '/services/Patients.svc/REST/UpdatePateintHealthSummaryReport';
//URL to get medicine and pharmacies list
const CHANNEL = 3;
@@ -256,24 +205,21 @@ const LANGUAGE = 2;
const PATIENT_OUT_SA = 0;
const SESSION_ID = 'TMRhVmkGhOsvamErw';
const IS_DENTAL_ALLOWED_BACKEND = false;
-const PATIENT_TYPE = 1;
-const PATIENT_TYPE_ID = 1;
+const PATIENT_TYPE = 2;
+const PATIENT_TYPE_ID = 2;
var DEVICE_TOKEN = "";
var DeviceTypeID = Platform.isIOS ? 1 : 2;
-const LANGUAGE_ID = 1;
+const LANGUAGE_ID = 2;
const GET_PHARMCY_ITEMS = "Services/Lists.svc/REST/GetPharmcyItems_Region";
const GET_PHARMACY_LIST = "Services/Patients.svc/REST/GetPharmcyList";
-const GET_PAtIENTS_INSURANCE =
- "Services/Patients.svc/REST/Get_PatientInsuranceDetails";
-const GET_PAtIENTS_INSURANCE_UPDATED =
- "Services/Patients.svc/REST/PatientER_GetPatientInsuranceCardUpdateHistory";
+const GET_PAtIENTS_INSURANCE = "Services/Patients.svc/REST/Get_PatientInsuranceDetails";
+const GET_PAtIENTS_INSURANCE_UPDATED = "Services/Patients.svc/REST/PatientER_GetPatientInsuranceCardUpdateHistory";
const INSURANCE_DETAILS = "Services/Patients.svc/REST/Get_InsuranceCheckList";
const GET_VACCINES = "Services/Patients.svc/REST/GetDoneVaccinesByPatientID";
const GET_VACCINES_EMAIL = "Services/Notifications.svc/REST/SendVaccinesEmail";
-const GET_PAtIENTS_INSURANCE_APPROVALS =
- "Services/Patients.svc/REST/GetApprovalStatus";
+const GET_PAtIENTS_INSURANCE_APPROVALS = "Services/Patients.svc/REST/GetApprovalStatus";
const SEARCH_BOT = 'HabibiChatBotApi/BotInterface/GetVoiceCommandResponse';
const GET_VACCINATIONS_ITEMS = "/Services/ERP.svc/REST/GET_VACCINATIONS_ITEMS";
@@ -283,59 +229,38 @@ const GET_PATIENT_SICK_LEAVE = 'Services/Patients.svc/REST/GetPatientSickLeave';
const SendSickLeaveEmail = 'Services/Notifications.svc/REST/SendSickLeaveEmail';
-const GET_PATIENT_AdVANCE_BALANCE_AMOUNT =
- 'Services/Patients.svc/REST/GetPatientAdvanceBalanceAmount';
-const GET_PATIENT_INFO_BY_ID =
- 'Services/Doctors.svc/REST/GetPatientInfoByPatientID';
-const GET_PATIENT_INFO_BY_ID_AND_MOBILE_NUMBER =
- 'Services/Patients.svc/REST/AP_GetPatientInfoByPatientIDandMobileNumber';
-const SEND_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT =
- 'Services/Authentication.svc/REST/SendActivationCodeForAdvancePayment';
-const CHECK_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT =
- 'Services/Authentication.svc/REST/CheckActivationCodeForAdvancePayment';
+const GET_PATIENT_AdVANCE_BALANCE_AMOUNT = 'Services/Patients.svc/REST/GetPatientAdvanceBalanceAmount';
+const GET_PATIENT_INFO_BY_ID = 'Services/Doctors.svc/REST/GetPatientInfoByPatientID';
+const GET_PATIENT_INFO_BY_ID_AND_MOBILE_NUMBER = 'Services/Patients.svc/REST/AP_GetPatientInfoByPatientIDandMobileNumber';
+const SEND_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = 'Services/Authentication.svc/REST/SendActivationCodeForAdvancePayment';
+const CHECK_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT = 'Services/Authentication.svc/REST/CheckActivationCodeForAdvancePayment';
-const GET_COVID_DRIVETHRU_PROJECT_LIST =
- 'Services/Doctors.svc/REST/COVID19_ProjectDriveThroughTestingCenter';
+const GET_COVID_DRIVETHRU_PROJECT_LIST = 'Services/Doctors.svc/REST/COVID19_ProjectDriveThroughTestingCenter';
-const GET_COVID_DRIVETHRU_PAYMENT_INFO =
- 'Services/Doctors.svc/REST/COVID19_GetPatientPaymentInormation';
+const GET_COVID_DRIVETHRU_PAYMENT_INFO = 'Services/Doctors.svc/REST/COVID19_GetPatientPaymentInormation';
-const GET_COVID_DRIVETHRU_FREE_SLOTS =
- 'Services/Doctors.svc/REST/COVID19_GetFreeSlots';
+const GET_COVID_DRIVETHRU_FREE_SLOTS = 'Services/Doctors.svc/REST/COVID19_GetFreeSlots';
///Smartwatch Integration Services
-const GET_PATIENT_LAST_RECORD =
- 'Services/Patients.svc/REST/Med_GetPatientLastRecord';
+const GET_PATIENT_LAST_RECORD = 'Services/Patients.svc/REST/Med_GetPatientLastRecord';
///My Trackers
-const GET_DIABETIC_RESULT_AVERAGE =
- 'Services/Patients.svc/REST/Patient_GetDiabeticResultAverage';
-const GET_DIABTEC_RESULT =
- 'Services/Patients.svc/REST/Patient_GetDiabtecResults';
-const ADD_DIABTEC_RESULT =
- 'Services/Patients.svc/REST/Patient_AddDiabtecResult';
-
-const GET_BLOOD_PRESSURE_RESULT_AVERAGE =
- 'Services/Patients.svc/REST/Patient_GetBloodPressureResultAverage';
-const GET_BLOOD_PRESSURE_RESULT =
- 'Services/Patients.svc/REST/Patient_GetBloodPressureResult';
-const ADD_BLOOD_PRESSURE_RESULT =
- 'Services/Patients.svc/REST/Patient_AddBloodPressureResult';
-
-const GET_WEIGHT_PRESSURE_RESULT_AVERAGE =
- 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResultAverage';
-const GET_WEIGHT_PRESSURE_RESULT =
- 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResult';
-const ADD_WEIGHT_PRESSURE_RESULT =
- 'Services/Patients.svc/REST/Patient_AddWeightMeasurementResult';
-
-const ADD_ACTIVE_PRESCRIPTIONS_REPORT_BY_PATIENT_ID =
- 'Services/Patients.svc/Rest/GetActivePrescriptionReportByPatientID';
-
-const GET_CALL_INFO_HOURS_RESULT =
- 'Services/Doctors.svc/REST/GetCallInfoHoursResult';
-const GET_CALL_REQUEST_TYPE_LOV =
- 'Services/Doctors.svc/REST/GetCallRequestType_LOV';
+const GET_DIABETIC_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetDiabeticResultAverage';
+const GET_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_GetDiabtecResults';
+const ADD_DIABTEC_RESULT = 'Services/Patients.svc/REST/Patient_AddDiabtecResult';
+
+const GET_BLOOD_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetBloodPressureResultAverage';
+const GET_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetBloodPressureResult';
+const ADD_BLOOD_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddBloodPressureResult';
+
+const GET_WEIGHT_PRESSURE_RESULT_AVERAGE = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResultAverage';
+const GET_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_GetWeightMeasurementResult';
+const ADD_WEIGHT_PRESSURE_RESULT = 'Services/Patients.svc/REST/Patient_AddWeightMeasurementResult';
+
+const ADD_ACTIVE_PRESCRIPTIONS_REPORT_BY_PATIENT_ID = 'Services/Patients.svc/Rest/GetActivePrescriptionReportByPatientID';
+
+const GET_CALL_INFO_HOURS_RESULT = 'Services/Doctors.svc/REST/GetCallInfoHoursResult';
+const GET_CALL_REQUEST_TYPE_LOV = 'Services/Doctors.svc/REST/GetCallRequestType_LOV';
const GET_DOCTOR_RESPONSE = 'Services/Patients.svc/REST/GetDoctorResponse';
const UPDATE_READ_STATUS = 'Services/Patients.svc/REST/UpdateReadStatus';
const INSERT_CALL_INFO = 'Services/Doctors.svc/REST/InsertCallInfo';
@@ -343,18 +268,13 @@ const INSERT_CALL_INFO = 'Services/Doctors.svc/REST/InsertCallInfo';
const GET_PATIENT_ALLERGIES = 'Services/Patients.svc/REST/GetPatientAllergies';
// H2O
-const H2O_GET_USER_PROGRESS =
- "Services/H2ORemainder.svc/REST/H2O_GetUserProgress";
-const H2O_INSERT_USER_ACTIVITY =
- "Services/H2ORemainder.svc/REST/H2O_InsertUserActivity";
+const H2O_GET_USER_PROGRESS = "Services/H2ORemainder.svc/REST/H2O_GetUserProgress";
+const H2O_INSERT_USER_ACTIVITY = "Services/H2ORemainder.svc/REST/H2O_InsertUserActivity";
//E_Referral Services
-const GET_ALL_RELATIONSHIP_TYPES =
- "Services/Patients.svc/REST/GetAllRelationshipTypes";
-const SEND_ACTIVATION_CODE_FOR_E_REFERRAL =
- 'Services/Authentication.svc/REST/SendActivationCodeForEReferral';
-const CHECK_ACTIVATION_CODE_FOR_E_REFERRAL =
- 'Services/Authentication.svc/REST/CheckActivationCodeForEReferral';
+const GET_ALL_RELATIONSHIP_TYPES = "Services/Patients.svc/REST/GetAllRelationshipTypes";
+const SEND_ACTIVATION_CODE_FOR_E_REFERRAL = 'Services/Authentication.svc/REST/SendActivationCodeForEReferral';
+const CHECK_ACTIVATION_CODE_FOR_E_REFERRAL = 'Services/Authentication.svc/REST/CheckActivationCodeForEReferral';
const GET_ALL_CITIES = 'services/Lists.svc/rest/GetAllCities';
const CREATE_E_REFERRAL = "Services/Patients.svc/REST/CreateEReferral";
const GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals";
@@ -367,31 +287,14 @@ const GET_PHARMACY_PRODUCTs_BY_IDS = "epharmacy/api/productsbyids/";
const GET_CUSTOMERS_ADDRESSES = "epharmacy/api/Customers/";
// Home Health Care
-const HHC_GET_ALL_SERVICES =
- "Services/Patients.svc/REST/PatientER_HHC_GetAllServices";
-const HHC_GET_ALL_CMC_SERVICES =
- "Services/Patients.svc/REST/PatientER_CMC_GetAllServices";
-const PATIENT_ER_UPDATE_PRES_ORDER =
- "Services/Patients.svc/REST/PatientER_UpdatePresOrder";
-const GET_ORDER_DETAIL_BY_ID =
- "Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder";
-const GET_CMC_ORDER_DETAIL_BY_ID =
- "Services/Patients.svc/REST/PatientER_CMC_GetTransactionsForOrder";
+const HHC_GET_ALL_SERVICES = "Services/Patients.svc/REST/PatientER_HHC_GetAllServices";
+const HHC_GET_ALL_CMC_SERVICES = "Services/Patients.svc/REST/PatientER_CMC_GetAllServices";
+const PATIENT_ER_UPDATE_PRES_ORDER = "Services/Patients.svc/REST/PatientER_UpdatePresOrder";
+const GET_ORDER_DETAIL_BY_ID = "Services/Patients.svc/REST/PatientER_HHC_GetTransactionsForOrder";
+const GET_CMC_ORDER_DETAIL_BY_ID = "Services/Patients.svc/REST/PatientER_CMC_GetTransactionsForOrder";
const GET_CHECK_UP_ITEMS = "Services/Patients.svc/REST/GetCheckUpItems";
-const PUSH_NOTIFICATION_GET_ALL_NOTIFICATIONS =
- 'Services/MobileNotifications.svc/REST/PushNotification_GetAllNotifications';
-const PUSH_NOTIFICATION_SET_MESSAGES_FROM_POOL_AS_READ =
- 'Services/MobileNotifications.svc/REST/PushNotification_SetMessagesFromPoolAsRead';
-const GET_PATIENT_ALL_PRES_ORD= 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders';
-const PATIENT_ER_INSERT_PRES_ORDER= 'Services/Patients.svc/REST/PatientER_InsertPresOrder';
-
-
-// External API
-const ADD_ADDRESS_INFO= "https://mdlaboratories.com/exacartapi/api/addcustomeraddress";
-const GET_CUSTOMER_ADDRESSES= "https://mdlaboratories.com/exacartapi/api/Customers/";
-const GET_CUSTOMER_INFO = "https://mdlaboratories.com/exacartapi/api/VerifyCustomer";
-
-
+const PUSH_NOTIFICATION_GET_ALL_NOTIFICATIONS = 'Services/MobileNotifications.svc/REST/PushNotification_GetAllNotifications';
+const PUSH_NOTIFICATION_SET_MESSAGES_FROM_POOL_AS_READ = 'Services/MobileNotifications.svc/REST/PushNotification_SetMessagesFromPoolAsRead';
const TIMER_MIN = 10;
const GOOGLE_API_KEY = "AIzaSyCmevVlr2Bh-c8W1VUzo8gt8JRY7n5PANw";
diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart
index df63929a..3aa066e6 100644
--- a/lib/config/localized_values.dart
+++ b/lib/config/localized_values.dart
@@ -1,3 +1,27 @@
+// --------- - -- - - - - - - - - ----------------
+// Used for Native through Platform Method Channel
+// --------- - -- - - - - - - - - ----------------
+const Map platformLocalizedValues = {
+ "errorConnectingHmgNetwork": {"en": "Sorry you are not connecting to HMG network", "ar": "نعتذر لست متصل في شكبة مستشفى د.سليمان الحبيب"},
+ "successConnectingHmgNetwork": {"en": "You connected to HMG network successfully, you can access the app", "ar": "تم التصال بشبكة د.سليمان الحبيب بنجاح, تستطيع الان استخدام تطبيق الحبيب"},
+ "failedConnectingHmgNetwork": {
+ "en": "Sorry the connection to HMG network had been failed, make sure you are in range of HMG network",
+ "ar": "نعتذر لقد فشل الاتصال بشبكة د.سليمان الحبيب, تاكد من وجودك داخل نطاق الشبكة"
+ },
+ "alreadyConnectedHmgNetwork": {"en": " You already connected to HMG network to access Alhabib app", "ar": "انت متصل مسبقاً بالشبكة تستطيع استخدام تطبيق الحبيب"},
+ "somethingWentWrong": {"en": "Sorry something went wrong please try again later", "ar": "نعتذر لخدمتكم يرجى المحاولة لاحقا"},
+ "enablingWifi": {"en": "Enabling wifi...", "ar": "Enabling wifi..."},
+ "connectedHmgNetworkWithInternet": {"en": "Successfully connected to the HMG network to access internet", "ar": "Successfully connected to the HMG network to access internet"},
+ "connectedToHmgNetworkWithNoInternet": {
+ "en": "Successfully connected to the HMG network but it have no internet access",
+ "ar": "Successfully connected to the HMG network but it have no internet access"
+ },
+ "notConnectedToHmgNetworkSecurityIssue": {
+ "en": "We are not able to connect you to HMG network due to security reasons",
+ "ar": "We are not able to connect you to HMG network due to security reasons"
+ }
+};
+
const Map localizedValues = {
'dashboardScreenToolbarTitle': {'ar': 'الرئيسة', 'en': 'Home'},
'settings': {'en': 'Settings', 'ar': 'الاعدادات'},
@@ -21,10 +45,7 @@ const Map localizedValues = {
'clinicName': {'en': 'Clinic Name', 'ar': 'اسم العيادة'},
'doctorName': {'en': 'Doctor Name', 'ar': 'إسم الطبيب'},
'nearestAppo': {'en': 'Nearest appointment', 'ar': 'أقرب موعد'},
- 'searchByDocText': {
- 'en': 'Type the name of the doctor to help you find him',
- 'ar': 'اكتب اسم الطبيب لمساعدتك في العثور عليه'
- },
+ 'searchByDocText': {'en': 'Type the name of the doctor to help you find him', 'ar': 'اكتب اسم الطبيب لمساعدتك في العثور عليه'},
'enterDocName': {'en': 'Enter Doctor name', 'ar': 'أدخل إسم الطبيب'},
'search': {'en': 'Search', 'ar': 'بحث'},
'bookNow': {'en': 'BOOK NOW', 'ar': 'احجز الآن'},
@@ -34,17 +55,11 @@ const Map localizedValues = {
'gender': {'en': 'Gender', 'ar': 'الجنس'},
'nationality': {'en': 'Nationality', 'ar': 'الجنسية'},
'docQualifications': {'en': 'Doctor Qualifications', 'ar': 'مؤهلات الطبيب'},
- 'confirmAppoHeading': {
- 'en': 'Kindly confirm your Appointment',
- 'ar': 'يرجى تأكيد موعدك'
- },
+ 'confirmAppoHeading': {'en': 'Kindly confirm your Appointment', 'ar': 'يرجى تأكيد موعدك'},
'patientInfo': {'en': 'Patient Information', 'ar': 'معلومات المريض'},
'bookSuccess': {'en': 'Book Success', 'ar': 'تم حجز الموعد بنجاح'},
'patientShare': {'en': 'Patient Share', 'ar': 'المبلغ المستحق'},
- 'patientShareWithTax': {
- 'en': 'Patient Share with Tax',
- 'ar': 'المبلغ الإجمالي المستحق'
- },
+ 'patientShareWithTax': {'en': 'Patient Share with Tax', 'ar': 'المبلغ الإجمالي المستحق'},
'confirmAppo': {'en': 'Confirm Appointment', 'ar': 'تأكيد الموعد'},
'confirm': {'en': 'Confirm', 'ar': 'تأكيد'},
'confirmLiveCare': {'en': 'Confirm LiveCare', 'ar': 'تأكيد لايف كير'},
@@ -61,41 +76,15 @@ const Map localizedValues = {
'instruction': {'en': 'Instructions', 'ar': 'تعليمات'},
'livecare': {'en': 'LiveCare', 'ar': 'لايف كير'},
'livecareAppo': {'en': 'LiveCare Appointment', 'ar': 'الموعد لايف كير'},
- 'cancelAppoMsg': {
- 'en': 'Are you sure you want to cancel this appointment?',
- 'ar': 'هل أنت متأكد أنك تريد إلغاء هذا الموعد؟'
- },
+ 'cancelAppoMsg': {'en': 'Are you sure you want to cancel this appointment?', 'ar': 'هل أنت متأكد أنك تريد إلغاء هذا الموعد؟'},
- 'upcoming-noAction': {
- 'en': 'No Action Required',
- 'ar': 'لا يوجد إجراء مطلوب'
- },
- 'upcoming-confirm': {
- 'en': 'Please confirm the appointment to avoid cancellation',
- 'ar': 'يرجى تأكيد الموعد لتفادي الإلغاء'
- },
- 'upcoming-payment-pending': {
- 'en':
- 'Online Payment will be Activated before 24 Hours of Appointment Time',
- 'ar': 'سيتم تفعيل خدمة الدفع الالكتروني قبل 24 ساعة من موعد الحجز'
- },
- 'upcoming-payment-now': {
- 'en': 'Pay Online now to avoid long waiting queue',
- 'ar': 'ادفع الآن لتفادي الانتظار'
- },
- 'upcoming-QR': {
- 'en': 'Use the QR Code to Check-In in hospital',
- 'ar': 'استخدم الرمز لتسجيل الحضور في المستشفى'
- },
- 'upcoming-virtual': {
- 'en':
- 'This is a virtual appointment, Please adhere to the instructions for a seamless experience.',
- 'ar': 'هذا موعد اتصال مرئي عن بعد ، يرجى اتباع تعليمات الخدمة.'
- },
- 'upcoming-livecare': {
- 'en': 'This is a LiveCare appointment',
- 'ar': 'هذا موعد لايف كير'
- },
+ 'upcoming-noAction': {'en': 'No Action Required', 'ar': 'لا يوجد إجراء مطلوب'},
+ 'upcoming-confirm': {'en': 'Please confirm the appointment to avoid cancellation', 'ar': 'يرجى تأكيد الموعد لتفادي الإلغاء'},
+ 'upcoming-payment-pending': {'en': 'Online Payment will be Activated before 24 Hours of Appointment Time', 'ar': 'سيتم تفعيل خدمة الدفع الالكتروني قبل 24 ساعة من موعد الحجز'},
+ 'upcoming-payment-now': {'en': 'Pay Online now to avoid long waiting queue', 'ar': 'ادفع الآن لتفادي الانتظار'},
+ 'upcoming-QR': {'en': 'Use the QR Code to Check-In in hospital', 'ar': 'استخدم الرمز لتسجيل الحضور في المستشفى'},
+ 'upcoming-virtual': {'en': 'This is a virtual appointment, Please adhere to the instructions for a seamless experience.', 'ar': 'هذا موعد اتصال مرئي عن بعد ، يرجى اتباع تعليمات الخدمة.'},
+ 'upcoming-livecare': {'en': 'This is a LiveCare appointment', 'ar': 'هذا موعد لايف كير'},
'upcoming-details': {'en': 'More Details', 'ar': 'المزيد'},
'reschedule': {'en': 'Reschedule', 'ar': 'إعادة جدولة'},
'raise': {'en': 'Raise', 'ar': 'رفع'},
@@ -112,54 +101,27 @@ const Map localizedValues = {
'loginregister': {'en': 'Login / Register', 'ar': 'تسجيل الدخول'},
'poweredBy': {'en': 'Powered By', 'ar': 'مشغل بواسطة'},
"welcome": {"en": "Welcome", "ar": "مرحبا"},
- "welcome_text": {
- "en": "Dr. Sulaiman Al Habib Mobile Application",
- "ar": "الدكتور سليمان الحبيب لتطبيقات الهاتف المتحرك"
- },
- 'welcome_text2': {
- 'en': 'Have you visited AlHabib Medical Group before? ',
- 'ar': 'هل قمت بزيارة مجموعة الحبيب الطبية من قبل؟'
- },
+ "welcome_text": {"en": "Dr. Sulaiman Al Habib Mobile Application", "ar": "الدكتور سليمان الحبيب لتطبيقات الهاتف المتحرك"},
+ 'welcome_text2': {'en': 'Have you visited AlHabib Medical Group before? ', 'ar': 'هل قمت بزيارة مجموعة الحبيب الطبية من قبل؟'},
'yes': {'en': 'Yes', 'ar': 'نعم'},
'no': {'en': 'No', 'ar': 'لا'},
- "logintyperadio": {
- "en": "Choose from below options to login to your medical file.",
- "ar": "اختر من الخيارات أدناه لتسجيل الدخول إلى ملفك الطبي."
- },
+ "logintyperadio": {"en": "Choose from below options to login to your medical file.", "ar": "اختر من الخيارات أدناه لتسجيل الدخول إلى ملفك الطبي."},
"registernow": {"en": "Register Now", "ar": "تسجيل الان"},
- "nationalID": {
- "en": "Enter the Identification Number",
- "ar": "أدخل رقم الهوية الوطنية او الاقامة"
- },
+ "nationalID": {"en": "Enter the Identification Number", "ar": "أدخل رقم الهوية الوطنية او الاقامة"},
"national-id": {"en": "National ID", "ar": "رقم الهوية"},
"fileNo": {"en": "File Number", "ar": "رقم الملف"},
"fileno": {"en": "File No", "ar": "رقم الملف"},
"forgotFileNo": {"en": "Forgot file Number?", "ar": "نسيت رقم الملف الطبي؟"},
- "forgotFileNoTitle": {
- "en": "Forgot medical file Number",
- "ar": "نسيت رقم الملف"
- },
+ "forgotFileNoTitle": {"en": "Forgot medical file Number", "ar": "نسيت رقم الملف"},
- "enter-national-id": {
- "en": "Please enter mobile number and identification number",
- "ar": "الرجاء إدخال رقم الجوال ورقم الهوية"
- },
- "profile-info": {
- "en": "Please enter profile information",
- "ar": "الرجاء إدخال معلومات الملف الشخصي"
- },
+ "enter-national-id": {"en": "Please enter mobile number and identification number", "ar": "الرجاء إدخال رقم الجوال ورقم الهوية"},
+ "profile-info": {"en": "Please enter profile information", "ar": "الرجاء إدخال معلومات الملف الشخصي"},
"submit": {"en": "Submit", "ar": "ارسال"},
- "forgot-desc": {
- "en": "Enter the mobile number to receive the Medical file Number via SMS",
- "ar": "أدخل رقم الجوال المسجل لاستلام رقم الملف عن طريق الرسائل النصية"
- },
+ "forgot-desc": {"en": "Enter the mobile number to receive the Medical file Number via SMS", "ar": "أدخل رقم الجوال المسجل لاستلام رقم الملف عن طريق الرسائل النصية"},
"dob": {"en": "Birth Date:", "ar": "تاريخ الميلاد"},
"hijri-date": {"en": "Hijri Date", "ar": "التاريخ الهجري"},
"gregorian-date": {"en": "Gregorian Date", "ar": "التاريخ الميلادي"},
- "verify-login-with": {
- "en": "Please choose one of the following options to verify",
- "ar": "الرجاء اختيار احدى الخيارات التالية للتحقق من البيانات"
- },
+ "verify-login-with": {"en": "Please choose one of the following options to verify", "ar": "الرجاء اختيار احدى الخيارات التالية للتحقق من البيانات"},
"register-user": {"en": "Register", "ar": "تسجيل"},
"verify-with-fingerprint": {"en": "Fingerprint", "ar": "بصمة"},
"verify-with-faceid": {"en": "Face ID", "ar": "معرف الوجه"},
@@ -168,32 +130,18 @@ const Map localizedValues = {
"last-login": {"en": "LAST LOGIN AT:", "ar": "آخر تسجيل دخول"},
"last-login-with": {"en": "VERIFICATION TYPE:", "ar": "نوع التحقق:"},
"verify-fingerprint": {
- "en":
- "To activate the fingerprint login service, please verify data by using one of the following options.",
- "ar":
- "لتفعيل خدمة الدخول بالبصمة، يرجى اختيار احدى القنوات التالية للتحقق من البيانات"
+ "en": "To activate the fingerprint login service, please verify data by using one of the following options.",
+ "ar": "لتفعيل خدمة الدخول بالبصمة، يرجى اختيار احدى القنوات التالية للتحقق من البيانات"
},
'searchMedicine': {'en': 'Search Medicine', 'ar': 'البحث عن الدواء'},
'pharmaciesList': {'en': 'Pharmacies List', 'ar': 'قائمة الصيدلايات'},
- 'searchMedicineHere': {
- 'en': 'Search Medicine Here',
- 'ar': 'ابحث عن الدواء هنا'
- },
+ 'searchMedicineHere': {'en': 'Search Medicine Here', 'ar': 'ابحث عن الدواء هنا'},
'description': {'en': 'Description', 'ar': 'الوصف'},
'price': {'en': 'Price', 'ar': 'السعر'},
'youCanFindItIn': {'en': 'You can find it in', 'ar': 'يمكنكة ان تجده في'},
- 'pleaseEnterMedicineName': {
- 'en': 'Please Enter Medicine Name',
- 'ar': 'الرجائ ادخال اسم الدواء'
- },
- "verification_message": {
- "en": "Please enter the Verification Code sent to",
- "ar": "الرجاء ادخال رمز التحقق الذي تم إرساله إلى"
- },
- "validation_message": {
- "en": "The verification code expires in",
- "ar": "تنتهي صلاحية رمز التحقق خلال"
- },
+ 'pleaseEnterMedicineName': {'en': 'Please Enter Medicine Name', 'ar': 'الرجائ ادخال اسم الدواء'},
+ "verification_message": {"en": "Please enter verification code", "ar": "الرجاء إدخال رمز التحقق"},
+ "validation_message": {"en": "The verification code expires in", "ar": "تنتهي صلاحية رمز التحقق خلال"},
"arabic-change": {"en": "عربي", "ar": "English"},
"notification": {"en": "Notifications", "ar": "إشعارات"},
"app-settings": {"en": "App Settings", "ar": "إعدادات التطبيق"},
@@ -201,80 +149,31 @@ const Map localizedValues = {
"before": {"en": "Before", "ar": "قبل"},
"minute": {"en": "Minutes", "ar": "دقيقة"},
"hour": {"en": "Hour", "ar": "ساعة"},
- "reminderSuccess": {
- "en": "The reminder has been added successfully",
- "ar": "يضاف التذكير بنجاح"
- },
- "patientShareToDo": {
- "en": "Amount before tax: ",
- "ar": "المبلغ قبل الضريبة:"
- },
+ "reminderSuccess": {"en": "The reminder has been added successfully", "ar": "يضاف التذكير بنجاح"},
+ "patientShareToDo": {"en": "Amount before tax: ", "ar": "المبلغ قبل الضريبة:"},
"patientTaxToDo": {"en": "Tax amount: ", "ar": "قيمة الضريبة:"},
- "patientShareTotalToDo": {
- "en": "Total amount Due: ",
- "ar": "المبلغ الإجمالي المستحق:"
- },
+ "patientShareTotalToDo": {"en": "Total amount Due: ", "ar": "المبلغ الإجمالي المستحق:"},
'paymentMethod': {'en': 'Payment Method', 'ar': 'طريقة الدفع او السداد'},
- 'noNeedToWaitInLine': {
- 'en': 'No need to stand in line.',
- 'ar': 'لا داعي للوقوف في الطابور.'
- },
- 'useQRAppoAttend': {
- 'en': 'Use the QR code to register the appointment attendance.',
- 'ar': 'استخدم الكود لتسجيل الحضور في المستشفى.'
- },
- 'passQRAppoAttend': {
- 'en':
- 'Pass the QR code through the attendance devices available in the Hospital.',
- 'ar': 'تمرير الكود من خلال اجهزة تسجيل الحضور المتوفرة في الفرع.'
- },
- 'sitWaitingQR': {
- 'en': 'Sit in the waiting rooms until called by the nurse.',
- 'ar': 'الجلوس في غرف الانتظار لحين منادتك من قبل الممرضة.'
- },
- 'attendRegisterCode': {
- 'en': 'Attendance registration code',
- 'ar': 'رمز تسجيل الحضور'
- },
- 'scanQRHospital': {
- 'en': 'Scan above QR Code to Check-In on the Machine in Hospital',
- 'ar': 'مسح فوق رمز الاستجابة السريعة للتحقق في الجهاز في المستشفى'
- },
+ 'noNeedToWaitInLine': {'en': 'No need to stand in line.', 'ar': 'لا داعي للوقوف في الطابور.'},
+ 'useQRAppoAttend': {'en': 'Use the QR code to register the appointment attendance.', 'ar': 'استخدم الكود لتسجيل الحضور في المستشفى.'},
+ 'passQRAppoAttend': {'en': 'Pass the QR code through the attendance devices available in the Hospital.', 'ar': 'تمرير الكود من خلال اجهزة تسجيل الحضور المتوفرة في الفرع.'},
+ 'sitWaitingQR': {'en': 'Sit in the waiting rooms until called by the nurse.', 'ar': 'الجلوس في غرف الانتظار لحين منادتك من قبل الممرضة.'},
+ 'attendRegisterCode': {'en': 'Attendance registration code', 'ar': 'رمز تسجيل الحضور'},
+ 'scanQRHospital': {'en': 'Scan above QR Code to Check-In on the Machine in Hospital', 'ar': 'مسح فوق رمز الاستجابة السريعة للتحقق في الجهاز في المستشفى'},
"sendEmail": {"en": "Send Email", "ar": "ارسال نسخة"},
- "EmailSentSuccessfully": {
- "en": "Email Sent Successfully",
- "ar": "تم إرسال البريد الإلكتروني بنجاح"
- },
+ "EmailSentSuccessfully": {"en": "Email Sent Successfully", "ar": "تم إرسال البريد الإلكتروني بنجاح"},
"close": {"en": "Close", "ar": "مغلق"},
"booked": {"en": "Booked", "ar": "محجوز"},
"confirmed": {"en": "Confirmed", "ar": "مؤكد"},
"arrived": {"en": "Arrived", "ar": "تم الحضور"},
- "payNowBookSuccess": {
- "en": "Pay now via Al Habib App",
- "ar": "ادفع الآن عبر تطبيق الحبيب"
- },
- "payNowBookSuccesstext1": {
- "en": "Pay Now using online payment service From secure payment gateways",
- "ar": "ادفع الآن باستخدام خدمة الدفع عبر الإنترنت من بوابات الدفع الآمنة"
- },
- "payNowBookSuccesstext2": {
- "en": "You can also Pay Later via online payment Or in Hospital",
- "ar": "يمكنك أيضًا الدفع لاحقًا عبر الدفع عبر الإنترنت أو في المستشفى"
- },
+ "payNowBookSuccess": {"en": "Pay now via Al Habib App", "ar": "ادفع الآن عبر تطبيق الحبيب"},
+ "payNowBookSuccesstext1": {"en": "Pay Now using online payment service From secure payment gateways", "ar": "ادفع الآن باستخدام خدمة الدفع عبر الإنترنت من بوابات الدفع الآمنة"},
+ "payNowBookSuccesstext2": {"en": "You can also Pay Later via online payment Or in Hospital", "ar": "يمكنك أيضًا الدفع لاحقًا عبر الدفع عبر الإنترنت أو في المستشفى"},
'payLater': {'en': 'Pay Later', 'ar': 'ادفع لاحقا'},
- 'askDocNotAllowed': {
- 'en': 'This service will be available for last 15 days doctor Visit only',
- 'ar': 'هذه الخدمة متاحة للزيارات خلال اخر 15 يوم فقط'
- },
- "more-verify": {
- "en": "More Verification Options",
- "ar": "المزيد من خيارات التحقق"
- },
+ 'askDocNotAllowed': {'en': 'This service will be available for last 15 days doctor Visit only', 'ar': 'هذه الخدمة متاحة للزيارات خلال اخر 15 يوم فقط'},
+ "more-verify": {"en": "More Verification Options", "ar": "المزيد من خيارات التحقق"},
"welcome-back": {"en": "Welcome back!", "ar": "مرحبا بعودتك!"},
- "account-info": {
- "en": "Would you like to login with current username?",
- "ar": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟"
- },
+ "account-info": {"en": "Would you like to login with current username?", "ar": "هل ترغب في تسجيل الدخول باسم المستخدم الحالي؟"},
"another-acc": {"en": "Use Another Account", "ar": "استخدم حسابا آخر"},
"next": {"en": "Next", "ar": 'التالى'},
"first-name": {"en": "First Name", "ar": "الاسم الأول"},
@@ -285,10 +184,7 @@ const Map localizedValues = {
"preferred-language": {"en": "Preferred Language", "ar": "اللغة المفضلة"},
"english": {"en": "English", "ar": "الإنجليزية"},
"arabic": {"en": "Arabic", "ar": "العربية"},
- "locations-register": {
- "en": "Where do you want to create this file?",
- "ar": "أين تريد فتح هذا الملف؟"
- },
+ "locations-register": {"en": "Where do you want to create this file?", "ar": "أين تريد فتح هذا الملف؟"},
"ksa": {"en": "KSA", "ar": "السعودية"},
"dubai": {"en": "Dubai", "ar": "دبي"},
"enter-email": {"en": "Enter Email", "ar": "ادخل البريد الالكتروني"},
@@ -327,10 +223,7 @@ const Map localizedValues = {
"procedureStatus": {"en": "Procedure Status: ", "ar": "حالة الاجراء"},
"usageStatus": {"en": "Usage Status", "ar": "جالة الاستخدام"},
"unusedCount": {"en": "Unused Count: ", "ar": "غير مستخدم: "},
- "totalApproval": {
- "en": "Total approval unused",
- "ar": "اجمالي الموافقات الغير مستخدمة"
- },
+ "totalApproval": {"en": "Total approval unused", "ar": "اجمالي الموافقات الغير مستخدمة"},
"category": {"en": "Category: ", "ar": "الفئة"},
"expirationDate": {"en": "Expiration Date: ", "ar": "تاريخ الانتهاء"},
"patientCard": {"en": "Patient Card ID: ", "ar": "رقم الاشتراك"},
@@ -338,68 +231,34 @@ const Map localizedValues = {
"seeDetails": {"en": "SEE DETAILS", "ar": "منافعك التامينية"},
"insuranceCards": {"en": "Insurance Cards", "ar": "بطاقات التأمين"},
"requestType": {"en": "Request Type", "ar": "نوع الاستفسار"},
- "register-info-family": {
- "en": "How would like to add the new member?",
- "ar": "كيف ترغب باضافة العضو الجديد؟"
- },
- "remove-family-member": {
- "en": "Remove this member?",
- "ar": "إزالة ملف العضو؟"
- },
+ "register-info-family": {"en": "How would like to add the new member?", "ar": "كيف ترغب باضافة العضو الجديد؟"},
+ "remove-family-member": {"en": "Remove this member?", "ar": "إزالة ملف العضو؟"},
"MyMedicalFile": {"en": "My Medical File", 'ar': 'ملف الطبي الالكتروني'},
- "myMedicalFileSubTitle": {
- "en": "All your medical records",
- 'ar': 'جميع سجلاتك الطبية'
- },
+ "myMedicalFileSubTitle": {"en": "All your medical records", 'ar': 'جميع سجلاتك الطبية'},
"viewMore": {"en": "View More", 'ar': 'عرض المزيد'},
- "homeHealthCareService": {
- "en": "Home Health Care Service",
- 'ar': 'الرعاية الصحية المنزلية'
- },
+ "homeHealthCareService": {"en": "Home Health Care Service", 'ar': 'الرعاية الصحية المنزلية'},
"OnlinePharmacy": {"en": "Online Pharmacy", 'ar': 'صيدليات الحبيب'},
"EmergencyService": {"en": "Emergency Service", 'ar': 'الفحص الطبي الشامل'},
- "OnlinePaymentService": {
- "en": "Online Payment Service",
- 'ar': 'خدمة الدفع الإلكتدوني'
- },
- "OffersAndPackages": {
- "en": "Online transfer request",
- 'ar': 'طلب التحويل الالكتروني'
- },
- "ComprehensiveMedicalCheckup": {
- "en": "Comprehensive Medical Check up",
- 'ar': 'فحص طبي شامل'
- },
+ "OnlinePaymentService": {"en": "Online Payment Service", 'ar': 'خدمة الدفع الإلكتدوني'},
+ "OffersAndPackages": {"en": "Online transfer request", 'ar': 'طلب التحويل الالكتروني'},
+ "ComprehensiveMedicalCheckup": {"en": "Comprehensive Medical Check up", 'ar': 'فحص طبي شامل'},
"HMGService": {"en": "HMG Service", 'ar': 'جميع خدمات الحبيب'},
- "ViewAllHabibMedicalService": {
- "en": "View All Habib Medical Service",
- 'ar': 'عرض خدمات الحبيب الطبية'
- },
+ "ViewAllHabibMedicalService": {"en": "View All Habib Medical Service", 'ar': 'عرض خدمات الحبيب الطبية'},
"viewAll": {"en": "View All", 'ar': 'عرض الكل'},
+ "view": {"en": "View", 'ar': 'عرض'},
"ContactUs": {"en": "Contact Us", 'ar': 'الوصول إلينا'},
- "ViewAllWaysReachUs": {
- "en": "View All Ways Reach Us",
- 'ar': 'جميع طرق الاتصال بنا'
- },
+ "ViewAllWaysReachUs": {"en": "View All Ways Reach Us", 'ar': 'جميع طرق الاتصال بنا'},
"medicalProfile": {"en": "Medical Profile", 'ar': 'الملف الطبي'},
"consultation": {"en": "Consultation", "ar": "استشارة"},
"logs": {"en": "Logs", "ar": "السجلات"},
"textToSpeech": {"en": "How May I Help You?", "ar": "كيف يمكنني مساعدتك؟"},
"locationDialogMessage": {
- "en":
- "Allow the HMG app to access your location will assist you in showing the hospitals according to the nearest to you.",
- "ar":
- "السماح لتطبيق مجموعة الحبيب الطبية بالوصول إلى موقعك سيساعدك في إظهار المستشفيات وفقًا للأقرب إليك."
+ "en": "Allow the HMG app to access your location will assist you in showing the hospitals according to the nearest to you.",
+ "ar": "السماح لتطبيق مجموعة الحبيب الطبية بالوصول إلى موقعك سيساعدك في إظهار المستشفيات وفقًا للأقرب إليك."
},
- "user-view-requester": {
- "en": "User Wants To View Your Medical File",
- "ar": "أشخاص يرغبون الاطلاع على ملفك الطبي"
- },
- "user-view": {
- "en": "User Can View Your Medical File",
- "ar": "أشخاص يمكنهم الاطلاع على ملفك الطبي"
- },
+ "user-view-requester": {"en": "User Wants To View Your Medical File", "ar": "أشخاص يرغبون الاطلاع على ملفك الطبي"},
+ "user-view": {"en": "User Can View Your Medical File", "ar": "أشخاص يمكنهم الاطلاع على ملفك الطبي"},
"parking": {"en": "Parking", "ar": "مواقف"},
"alhabiServices": {"en": "HMG Service", "ar": "خدمات الحبيب"},
@@ -422,18 +281,9 @@ const Map localizedValues = {
"ambulancerequest": {"en": "Ambulance :", "ar": "طلب نقل "},
"requestA": {"en": "Request:", "ar": "اسعاف"},
"MyAppointments": {"en": "Appointments", "ar": "مواعيدي"},
- "NoBookedAppointments": {
- "en": "No Booked Appointments",
- "ar": "لا توجد مواعيد محجوزة"
- },
- "NoConfirmedAppointments": {
- "en": "No Confirmed Appointments",
- "ar": "لا توجد مواعيد مؤكدة"
- },
- "noArrivedAppointments": {
- "en": "No Arrived Appointments",
- "ar": "لم تصل المواعيد"
- },
+ "NoBookedAppointments": {"en": "No Booked Appointments", "ar": "لا توجد مواعيد محجوزة"},
+ "NoConfirmedAppointments": {"en": "No Confirmed Appointments", "ar": "لا توجد مواعيد مؤكدة"},
+ "noArrivedAppointments": {"en": "No Arrived Appointments", "ar": "لم تصل المواعيد"},
"MyAppointmentsList": {"en": "List", "ar": "قائمة بمواعدي"},
"Radiology": {"en": "Radiology", "ar": "الأشعة"},
"RadiologySubtitle": {"en": "Result", "ar": "صور وتقارير"},
@@ -489,19 +339,10 @@ const Map localizedValues = {
"VitalSign": {"en": "Vital Sign", "ar": "العلامة حيوية"},
"MonthlyReports": {"en": "Monthly Reports", "ar": "تقارير شهرية"},
"km": {"en": "KMs:", "ar": "كم"},
- "PatientHealthSummaryReport": {
- "en": "Patient Health Summary Report",
- "ar": " ملخص التقارير الشهرية"
- },
- "ToViewTheTermsAndConditions": {
- "en": "To View The Terms And Conditions Report",
- "ar": " عرض الشروط والأحكام "
- },
+ "PatientHealthSummaryReport": {"en": "Patient Health Summary Report", "ar": " ملخص التقارير الشهرية"},
+ "ToViewTheTermsAndConditions": {"en": "To View The Terms And Conditions Report", "ar": " عرض الشروط والأحكام "},
"ClickHere": {"en": "Click here", "ar": "أنقر هنا"},
- "IAgreeToTheTermsAndConditions": {
- "en": "I agree to the terms and conditions ",
- "ar": "أوافق على الشروط والاحكام "
- },
+ "IAgreeToTheTermsAndConditions": {"en": "I agree to the terms and conditions ", "ar": "أوافق على الشروط والاحكام "},
"IAgreeToTheTermsAndConditionsSubtitle": {
"en": "I agree to the terms and conditions ",
"ar":
@@ -510,36 +351,20 @@ const Map localizedValues = {
"Save": {"en": "Save", "ar": "حفظ "},
"UserAgreement": {"en": "User Agreement", "ar": "اتفاقية الخصوصية "},
"UpdateSuccessfully": {"en": "Update Successfully", "ar": "تم التحديث بنجاح"},
- "CHECK_VACCINE_AVAILABILITY": {
- "en": "CHECK VACCINE AVAILABILITY",
- "ar": "تحقق من توافر اللقاح"
- },
- "MyVaccinesAvailability": {
- "en": "MyVaccinesAvailability",
- "ar": "توفر لقاحي"
- },
+ "CHECK_VACCINE_AVAILABILITY": {"en": "CHECK VACCINE AVAILABILITY", "ar": "تحقق من توافر اللقاح"},
+ "MyVaccinesAvailability": {"en": "MyVaccinesAvailability", "ar": "توفر لقاحي"},
"PaymentService": {"en": "Payment Service", "ar": "خدمة المدفوعات"},
"PaymentOnline": {"en": "Service", "ar": "الالكتروني"},
"OnlineCheckIn": {"en": "Online Check-In", "ar": "مدفوعات معلقة"},
"MyBalances": {"en": "My Balances", "ar": "رصيدي"},
- "BalanceAmount": { "en": "Wallet Amount", "ar": "مبلغ المحفظة"},
- "TotalBalance": { "en": "Total Amount", "ar": "المبلغ الإجمالي"},
- "CreateAdvancedPayment": {
- "en": "Recharge Wallet",
- "ar": "إعادة شحن المحفظة"
- },
+ "BalanceAmount": {"en": "Balance Amount", "ar": "رصيدالحساب"},
+ "TotalBalance": {"en": "Total Balance", "ar": "الرصيد الكلي"},
+ "CreateAdvancedPayment": {"en": "Create Advanced Payment", "ar": "إنشاء دفعة مقدمة"},
"AdvancePayment": {"en": "Advance Payment", "ar": "الدفع مقدما"},
- "AdvancePaymentLabel": {
- "en":
- "You can create and add an Advanced Payment for you account or other accounts.",
- "ar": "يمكنك تحويل مبلغ لحسابك لدى المجموعة أو لحساب احد المراجعين"
- },
+ "AdvancePaymentLabel": {"en": "You can create and add an Advanced Payment for you account or other accounts.", "ar": "يمكنك تحويل مبلغ لحسابك لدى المجموعة أو لحساب احد المراجعين"},
"FileNumber": {"en": "File Number", "ar": "رقم الملف"},
"Amount": {"en": "Amount *", "ar": "المبلغ *"},
- "DepositorEmail": {
- "en": "Depositor Email *",
- "ar": "البريد الإلكتروني للمودع *"
- },
+ "DepositorEmail": {"en": "Depositor Email *", "ar": "البريد الإلكتروني للمودع *"},
"Notes": {"en": "Notes", "ar": "ملاحظات"},
"SelectPatientName": {"en": "Select Patient Name", "ar": "اختر اسم المريض"},
"SelectFamilyPatientName": {"en": "Family Members", "ar": "أفراد الأسرة"},
@@ -551,14 +376,8 @@ const Map localizedValues = {
"DepositorName": {"en": "Depositor Name", "ar": "اسم المودع *"},
"MobileNumber": {"en": "Mobile Number", "ar": "رقم الجوال"},
"Ok": {"en": "Ok", "ar": "حسنا"},
- "TheVerificationCodeExpiresIn": {
- "en": "The Verification Code Expires In",
- "ar": "تنتهي صلاحية رمز التحقق في"
- },
- "PleaseEnterTheVerificationCode": {
- "en": "Please enter the verification code send to",
- "ar": "الرجاء إدخال رمز التحقق المرسل إلى"
- },
+ "TheVerificationCodeExpiresIn": {"en": "The Verification Code Expires In", "ar": "تنتهي صلاحية رمز التحقق في"},
+ "PleaseEnterTheVerificationCode": {"en": "Please enter the verification code send to", "ar": "الرجاء إدخال رمز التحقق المرسل إلى"},
"EyeMeasurements": {"en": "Eye Measurements", "ar": "قياسات النظر"},
"Measurements": {"en": "Measurements", "ar": "قياسات"},
"Classes": {"en": "Classes", "ar": "نظارات"},
@@ -581,10 +400,8 @@ const Map localizedValues = {
"DailyQuantity": {"en": "Daily Quantity :", "ar": "جرعات يومية"},
"AddReminder": {"en": "Add Reminder", "ar": "إضافة تذكير"},
"reminderDes": {
- "en":
- "Please select treatment start day and time to be notified when it\'s time to take the medicine",
- "ar":
- " يرجى تحديد يوم بدء العلاج والوقت ليتم ارسال تنبيه عندما يحين الوقت لتناول الدواء"
+ "en": "Please select treatment start day and time to be notified when it\'s time to take the medicine",
+ "ar": " يرجى تحديد يوم بدء العلاج والوقت ليتم ارسال تنبيه عندما يحين الوقت لتناول الدواء"
},
"StartDay": {"en": "Start Day", "ar": "يوم البداية"},
"EndDay": {"en": "End Day", "ar": "يوم الانتهاء"},
@@ -594,24 +411,12 @@ const Map localizedValues = {
"DoctorResponses": {"en": "Doctor Responses", "ar": "ردود الأطباء"},
"New": {"en": "New", "ar": "جديد"},
"All": {"en": "All", "ar": "الكل"},
- "QuestionHere": {
- "en": "Enter the question here...",
- "ar": "اضف الاستفسار هنا"
- },
- "ViewDoctorResponses": {
- "en": "View Doctor Responses",
- "ar": "الاطلاع على ردود الأطباء"
- },
+ "QuestionHere": {"en": "Enter the question here...", "ar": "اضف الاستفسار هنا"},
+ "ViewDoctorResponses": {"en": "View Doctor Responses", "ar": "الاطلاع على ردود الأطباء"},
"ServiceInformationButton": {"en": "LOGIN / REGISTER", "ar": "دخول / تسجيل"},
- "ServiceInformationTitle": {
- "en": "Service Information",
- "ar": "معلومات الخدمة"
- },
+ "ServiceInformationTitle": {"en": "Service Information", "ar": "معلومات الخدمة"},
"ServiceInformation": {"en": "Service Information", "ar": "معلومات الخدمة"},
- "HomeHealthCare": {
- "en": "Home Health Care",
- "ar": " الرعاية الصحية المنزلية "
- },
+ "HomeHealthCare": {"en": "Home Health Care", "ar": " الرعاية الصحية المنزلية "},
"HomeHealthCareText": {
"en":
"This service provides a set of home health care services, continuous and comprehensive follow-up in their places of residence for those who cannot access health facilities, such as (laboratory analyzes - radiology - vaccinations - physical therapy), etc.",
@@ -621,105 +426,42 @@ const Map localizedValues = {
"LoginRegister": {"en": "Login/Register", "ar": "دخول / تسجيل"},
"OrderLog": {"en": "Order Log", "ar": " سجل الطلبات"},
"info-lab": {
- "en":
- "This service allows you to view the results of all laboratory tests performed in Al Habib Medical Group as well as sending the report via e-mail.",
- "ar":
- "خدمة نتائج المختبر: هذه الخدمة تمكنك من الاطلاع على نتائج جميع الفحوصات المخبرية التي تمت في مجموعة الحبيب الطبية."
+ "en": "This service allows you to view the results of all laboratory tests performed in Al Habib Medical Group as well as sending the report via e-mail.",
+ "ar": "خدمة نتائج المختبر: هذه الخدمة تمكنك من الاطلاع على نتائج جميع الفحوصات المخبرية التي تمت في مجموعة الحبيب الطبية."
},
"info-radiology": {
- "en":
- "This service allows you to view the reports and photos of radiology in Al Habib Medical Group as well as send the report by e-mail.",
- "ar":
- "خدمة الاشعة: هذه الخدمة تمكنك من الاطلاع على تقارير وصور الاشعة التي تمت في مجموعة الحبيب الطبية وكذلك ارسال التقرير عن طريق الايميل."
+ "en": "This service allows you to view the reports and photos of radiology in Al Habib Medical Group as well as send the report by e-mail.",
+ "ar": "خدمة الاشعة: هذه الخدمة تمكنك من الاطلاع على تقارير وصور الاشعة التي تمت في مجموعة الحبيب الطبية وكذلك ارسال التقرير عن طريق الايميل."
},
"TermsService": {"en": "Terms of Service", "ar": "شروط الخدمه"},
- "Beforeusing": {
- "en": "Before using the checkup, please read Terms of Service.",
- "ar": "قبل استخدام الفحص ، يرجى قراءة شروط الخدمة"
- },
- "accept": {
- "en": "I read and accept Terms of Service and Privacy Policy",
- "ar": "قرأت ووافقت على شروط الخدمة وسياسة الخصوصية"
- },
- "data-safe-info": {
- "en":
- "Information that you provide is anonymous and not shared with anyone.",
- "ar": "المعلومات التي تقدمها لا تتم مشاركتها مع أي شخص"
- },
+ "Beforeusing": {"en": "Before using the checkup, please read Terms of Service.", "ar": "قبل استخدام الفحص ، يرجى قراءة شروط الخدمة"},
+ "accept": {"en": "I read and accept Terms of Service and Privacy Policy", "ar": "قرأت ووافقت على شروط الخدمة وسياسة الخصوصية"},
+ "data-safe-info": {"en": "Information that you provide is anonymous and not shared with anyone.", "ar": "المعلومات التي تقدمها لا تتم مشاركتها مع أي شخص"},
"data-safe": {"en": " Your data is safe.", "ar": "بياناتك آمنة"},
- "informational": {
- "en":
- "Checkup is for informational purposes and is not a qualified medical opinion",
- "ar": "الفحص هو لأغراض معلوماتية وليس رأي طبي مؤهل"
- },
- "not-use-in-emerbency": {
- "en": "Do not use in emergencies.",
- "ar": "لا تستخدم في حالات الطوارئ"
- },
- "not-use-in-emerbency-details": {
- "en": "In case of health emergency, ",
- "ar": "في حالة الطوارئ اتصل بأقرب رقم للطوارئ على الفور"
- },
- "not-use-in-emerbency-details-call": {
- "en": "call the nearest emergency number immediately",
- "ar": " اتصل بأقرب رقم للطوارئ على الفور"
- },
- "check-diagnosis": {
- "en": "Checkup is not a diagnosis.",
- "ar": "الفحص ليس تشخيص."
- },
+ "informational": {"en": "Checkup is for informational purposes and is not a qualified medical opinion", "ar": "الفحص هو لأغراض معلوماتية وليس رأي طبي مؤهل"},
+ "not-use-in-emerbency": {"en": "Do not use in emergencies.", "ar": "لا تستخدم في حالات الطوارئ"},
+ "not-use-in-emerbency-details": {"en": "In case of health emergency, ", "ar": "في حالة الطوارئ اتصل بأقرب رقم للطوارئ على الفور"},
+ "not-use-in-emerbency-details-call": {"en": "call the nearest emergency number immediately", "ar": " اتصل بأقرب رقم للطوارئ على الفور"},
+ "check-diagnosis": {"en": "Checkup is not a diagnosis.", "ar": "الفحص ليس تشخيص."},
"remeberthat": {"en": "Remember that", "ar": "تذكر ذلك:"},
- "loginToUseService": {
- "en": "You need to login to use this service",
- "ar": "هذة الخدمة تتطلب تسجيل الدخول"
- },
+ "loginToUseService": {"en": "You need to login to use this service", "ar": "هذة الخدمة تتطلب تسجيل الدخول"},
// pharmacy module
- "medicationRefill": {
- "en": "MEDICATION REFILL",
- "ar": "إعادة تعبئة الدواء"
- },
- "offersAndPromotions": {
- "en": "OFFERS & SPECIAL PROMOTIONS",
- "ar": "العروض والترقيات الخاصة"
- },
- "myPrescriptions": {
- "en": "MY PRESCRIPTIONS",
- "ar": "وصفاتي"
- },
- "searchAndScanMedication": {
- "en": "SEARCH & SCAN FOR MEDICATION",
- "ar": "البحث والمسح للأدوية"
- },
- "shopByBrands": {
- "en": "Shop By Brands",
- "ar": "تسوق حسب الماركات"
- },
- "recentlyViewed": {
- "en": "Recently Viewed",
- "ar": "شوهدت مؤخرا"
- },
- "bestSellers": {
- "en": "Best Sellers",
- "ar": "أفضل البائعين"
- },
- "deleteAllItems": {
- "en": "Delete All Items",
- "ar": "حذف كافة العناصر"
- },
+ "medicationRefill": {"en": "MEDICATION REFILL", "ar": "إعادة تعبئة الدواء"},
+ "offersAndPromotions": {"en": "OFFERS & SPECIAL PROMOTIONS", "ar": "العروض والترقيات الخاصة"},
+ "myPrescriptions": {"en": "MY PRESCRIPTIONS", "ar": "وصفاتي"},
+ "searchAndScanMedication": {"en": "SEARCH & SCAN FOR MEDICATION", "ar": "البحث والمسح للأدوية"},
+ "shopByBrands": {"en": "Shop By Brands", "ar": "تسوق حسب الماركات"},
+ "recentlyViewed": {"en": "Recently Viewed", "ar": "شوهدت مؤخرا"},
+ "bestSellers": {"en": "Best Sellers", "ar": "أفضل البائعين"},
+ "deleteAllItems": {"en": "Delete All Items", "ar": "حذف كافة العناصر"},
"select-gender": {"en": "Select Gender", "ar": "اختر الجنس"},
"i-am-a": {"en": "I am a ...", "ar": "أنا ..."},
"select-age": {"en": "Select Your Age", "ar": "حدد العمر"},
"i-am": {"en": "I am", "ar": "أنا"},
"years-old": {"en": "years old", "ar": "سنة"},
- "drag-point": {
- "en": "Drag point to change your age",
- "ar": "اسحب لتغيير عمرك"
- },"HHCNotAuthMsg": {
- "en": "This service provides a set of home health care services, continuous and comprehensive follow-up in their places of residence for those who cannot access health facilities, such as (laboratory analyzes - radiology - vaccinations - physical therapy), etc.",
- "ar": "من خلال هذه الخدمة يمكنك طلب مجموعة من الفحوصات التي تساعدك وتساعد طبيبك في فهم حالتك الصحية الحالية ومن ثم تحديد المخاطر المحتملة"
- },
+ "drag-point": {"en": "Drag point to change your age", "ar": "اسحب لتغيير عمرك"},
"email": {"en": "Email", "ar": "البريد الالكتروني"},
"Book": {"en": "Book", "ar": "احجز"},
"AppointmentLabel": {"en": "Appointment", "ar": "موعد"},
@@ -729,10 +471,7 @@ const Map localizedValues = {
"profile": {"en": "Profile", "ar": "ملفي"},
"notifications": {"en": "Notifications", "ar": "إشعارات"},
"notificationDetails": {"en": "Notification Details", "ar": "تفاصيل الاشعار"},
- "notificationDetailsa": {
- "en": "Notification Details",
- "ar": "تفاصيل الاشعار"
- },
+ "notificationDetailsa": {"en": "Notification Details", "ar": "تفاصيل الاشعار"},
"info-my-doctor-points": {
"en": [
@@ -741,24 +480,15 @@ const Map localizedValues = {
"View details of your appointments with the selected doctor.",
"Book appointment with the doctor. ",
],
- "ar": [
- "الاطلاع على معلومات الطبيب ومؤهلاته.",
- "الاطلاع على جدول الطبيب.",
- "الاطلاع على تفاصيل المواعيد التي تمت مع الطبيب.",
- "حجز موعد مع الطبيب."
- ]
+ "ar": ["الاطلاع على معلومات الطبيب ومؤهلاته.", "الاطلاع على جدول الطبيب.", "الاطلاع على تفاصيل المواعيد التي تمت مع الطبيب.", "حجز موعد مع الطبيب."]
},
"info-my-doctor": {
- "en":
- "This service allows you to see all the doctors you have visited in Al Habib Medical Group, and through this service:",
- "ar":
- "خدمة اطبائي: هذه الخدمة تمكنك من الاطلاع على جميع الاطباء الذين قمت بزيارتهم في مجموعة الحبيب الطبية, كما تستطيع من خلال هذه الخدمة:"
+ "en": "This service allows you to see all the doctors you have visited in Al Habib Medical Group, and through this service:",
+ "ar": "خدمة اطبائي: هذه الخدمة تمكنك من الاطلاع على جميع الاطباء الذين قمت بزيارتهم في مجموعة الحبيب الطبية, كما تستطيع من خلال هذه الخدمة:"
},
"info-prescriptions": {
- "en":
- "This service allows you to view all the medical prescriptions issued by Al Habib Medical Group, and through this service, you can:",
- "ar":
- "خدمة الوصفات الطبية: هذه الخدمة تمكنك من الاطلاع على جميع الوصفات الطبية التي تم اصدارها في مجموعة الحبيب الطبية، كما تستطيع من خلال هذه الخدمة:"
+ "en": "This service allows you to view all the medical prescriptions issued by Al Habib Medical Group, and through this service, you can:",
+ "ar": "خدمة الوصفات الطبية: هذه الخدمة تمكنك من الاطلاع على جميع الوصفات الطبية التي تم اصدارها في مجموعة الحبيب الطبية، كما تستطيع من خلال هذه الخدمة:"
},
"info-my-prescription-points": {
"en": [
@@ -782,10 +512,8 @@ const Map localizedValues = {
},
"info-insurance-cards": {
- "en":
- "This service allows you to view all the insurance cards that recorded during your visits to Al Habib Medical Group in addition to:",
- "ar":
- "خدمة بطاقات التامين: هذه الخدمة تمكنك من الاطلاع على جميع بطاقات التامين والتي تم تسجيلها اثناء زياراتك لمجموعة الحبيب الطبية بالاضافة الى:"
+ "en": "This service allows you to view all the insurance cards that recorded during your visits to Al Habib Medical Group in addition to:",
+ "ar": "خدمة بطاقات التامين: هذه الخدمة تمكنك من الاطلاع على جميع بطاقات التامين والتي تم تسجيلها اثناء زياراتك لمجموعة الحبيب الطبية بالاضافة الى:"
},
"info-insurance-cards-points": {
@@ -808,19 +536,15 @@ const Map localizedValues = {
},
"info-allergies": {
- "en":
- "This service allows you to view all types of allergies recorded during your visits to Al Habib Medical Group.",
- "ar":
- "خدمة الحساسية: هذه الخدمة تمكنك من الاطلاع على جميع انواع الحساسية التي تم تسجيلها خلال زياراتك في مجموعة الحبيب الطبية."
+ "en": "This service allows you to view all types of allergies recorded during your visits to Al Habib Medical Group.",
+ "ar": "خدمة الحساسية: هذه الخدمة تمكنك من الاطلاع على جميع انواع الحساسية التي تم تسجيلها خلال زياراتك في مجموعة الحبيب الطبية."
},
"sick-leaves": {"en": "Sick Leaves", "ar": "الاجازات المرضية"},
"info-sick-leaves": {
- "en":
- "This service allows you to view all sick leaves that were taken in Al Habib Medical Group in addition to:",
- "ar":
- "الاجازات المرضية: هذه الخدمة تمكنك من الاطلاع على جميع الاجازات المرضية والتي تم اصدارها في مجموعة الحبيب الطبية بالاضافة الى:"
+ "en": "This service allows you to view all sick leaves that were taken in Al Habib Medical Group in addition to:",
+ "ar": "الاجازات المرضية: هذه الخدمة تمكنك من الاطلاع على جميع الاجازات المرضية والتي تم اصدارها في مجموعة الحبيب الطبية بالاضافة الى:"
},
"info-sick-leave-points": {
"en": [
@@ -830,20 +554,12 @@ const Map localizedValues = {
"Branch that patient take the vaccination form.",
"Sending a report of vaccinations to the email. ",
],
- "ar": [
- "اسم الطبيب",
- "تاريخ الاجازة.",
- "عدد ايام الاجازة.",
- "الفرع الذي تم اصدار الاجازة منه.",
- "ارسال نسخة مختومة من الاجازة الى البريد الالكتروني."
- ]
+ "ar": ["اسم الطبيب", "تاريخ الاجازة.", "عدد ايام الاجازة.", "الفرع الذي تم اصدار الاجازة منه.", "ارسال نسخة مختومة من الاجازة الى البريد الالكتروني."]
},
"info-approvals": {
- "en":
- "This service allows you to view all approvals requests that have been sent to the insurance companies in addition to:",
- "ar":
- "خدمة الموافقات: هذه الخدمة تمكنك من الاطلاع على جميع طلبات الموافقات والتي تم ارسالها الى شركات التامين بالاضافة الى:"
+ "en": "This service allows you to view all approvals requests that have been sent to the insurance companies in addition to:",
+ "ar": "خدمة الموافقات: هذه الخدمة تمكنك من الاطلاع على جميع طلبات الموافقات والتي تم ارسالها الى شركات التامين بالاضافة الى:"
},
"info-approval-points": {
@@ -861,37 +577,18 @@ const Map localizedValues = {
"info-month-report": {
"en":
"Upon activation of this service, the system will send a monthly report automatically to the registered email which lists the vital signs and the results for the last visits made in AlHabib Medical Group.",
- "ar":
- "خدمة التقارير الشهرية: عند تفعيل هذه الخدمة سيقوم النظام بارسال تقرير شهري بشكل آلي على الايميل المسجل والذي يسرد المؤشرات الحيوية ونتائج التحاليل لآخر زيارات تمت بمجموعة الحبيب الطبية."
- },
- "language-setting": {
- "en": "SMS and Confirmation Calls Language",
- "ar": "لغة الرسائل القصيرة و الاتصال الآلي"
+ "ar": "خدمة التقارير الشهرية: عند تفعيل هذه الخدمة سيقوم النظام بارسال تقرير شهري بشكل آلي على الايميل المسجل والذي يسرد المؤشرات الحيوية ونتائج التحاليل لآخر زيارات تمت بمجموعة الحبيب الطبية."
},
+ "language-setting": {"en": "SMS and Confirmation Calls Language", "ar": "لغة الرسائل القصيرة و الاتصال الآلي"},
"alert": {"en": "Alerts", "ar": "التنبيهات"},
- "email-alert": {
- "en": "Alert By Email",
- "ar": "استلام التنبيهات بالبريد الالكتروني"
- },
- "sms-alert": {
- "en": "Alert By SMS",
- "ar": "استلام التنبيهات بالرسائل القصيرة"
- },
+ "email-alert": {"en": "Alert By Email", "ar": "استلام التنبيهات بالبريد الالكتروني"},
+ "sms-alert": {"en": "Alert By SMS", "ar": "استلام التنبيهات بالرسائل القصيرة"},
"contact-info": {"en": "Contact Information", "ar": "معلومات التواصل"},
- "emrg-name": {
- "en": "Emergency Contact Name",
- "ar": "اسم للتواصل في حالة الطوارئ"
- },
- "emrg-no": {
- "en": "Emergency Contact Number",
- "ar": "رقم للتواصل في حالة الطوارئ"
- },
+ "emrg-name": {"en": "Emergency Contact Name", "ar": "اسم للتواصل في حالة الطوارئ"},
+ "emrg-no": {"en": "Emergency Contact Number", "ar": "رقم للتواصل في حالة الطوارئ"},
"modes": {"en": "Modes", "ar": "الاوضاع"},
"vibration": {"en": "Vibration Touch Feedback", "ar": "الاهتزاز عند اللمس"},
- "blind-modes": {
- "en": "Modes for Partially Blind",
- "ar": "تأثيرات لدعم ضعاف البصر"
- },
+ "blind-modes": {"en": "Modes for Partially Blind", "ar": "تأثيرات لدعم ضعاف البصر"},
"invert-theme": {"en": "Invert", "ar": "ألوان سلبية"},
"off-theme": {"en": "Off", "ar": "إيقاف"},
"dim-theme": {"en": "Dim", "ar": "ضوء خافت"},
@@ -908,14 +605,8 @@ const Map localizedValues = {
"LiveChat": {"en": "Live Chat", "ar": "محادثة مباشرة"},
"Service": {"en": "Service", "ar": "خدمة"},
"HMGServiceLabel": {"en": "HMG Service", 'ar': 'خدمات الحبيب'},
- "HealthWeatherIndicators": {
- "en": "Health Weather Indicators",
- 'ar': ' مؤشرات الطقس الصحية '
- },
- "HealthTipsBasedOnCurrentWeather": {
- "en": "Health Tips Based On Current Weather",
- 'ar': ' نصائح صحية على أساس الطقس الحالي '
- },
+ "HealthWeatherIndicators": {"en": "Health Weather Indicators", 'ar': ' مؤشرات الطقس الصحية '},
+ "HealthTipsBasedOnCurrentWeather": {"en": "Health Tips Based On Current Weather", 'ar': ' نصائح صحية على أساس الطقس الحالي '},
"MoreDetails": {"en": "More details", "ar": " المزيد من التفاصيل "},
"SendCopy": {"en": "Send Copy", "ar": "ارسال نسخة"},
"ResendOrder": {"en": "Resend order & deliver", "ar": "إعادة طلب و توصيل"},
@@ -936,394 +627,33 @@ const Map localizedValues = {
"send": {"en": "Send", "ar": "أرسل"},
"status": {"en": "Status", "ar": "الحالة"},
"like-to-hear": {
- "en":
- "We would love to hear the feedback, concerns on healthcare services and eServices experience. Please use the below form",
- "ar":
- "يسعدنا سماع ملاحظاتك حول خدمات الرعاية الصحية والخدمات الإلكترونية. يرجى تعبئة الحقول المطلوبة"
+ "en": "We would love to hear the feedback, concerns on healthcare services and eServices experience. Please use the below form",
+ "ar": "يسعدنا سماع ملاحظاتك حول خدمات الرعاية الصحية والخدمات الإلكترونية. يرجى تعبئة الحقول المطلوبة"
},
"subject": {"en": "Subject", "ar": "الموضوع"},
"message": {"en": "Message", "ar": "رسالة"},
- "empty-subject": {
- "en": "Please enter the subject",
- "ar": "يرجى ادخال الموضوع"
- },
+ "empty-subject": {"en": "Please enter the subject", "ar": "يرجى ادخال الموضوع"},
"empty-message": {"en": "Please enter message", "ar": "يرجى ادخال الموضوع"},
"select-attachment": {"en": "Select Attachment", "ar": "إختر المرفق"},
"complain-appo": {"en": "Complaint for appointment", "ar": "شكوى على موعد"},
- "complain-without-appo": {
- "en": "Complaint without appointment",
- "ar": "شكوى بدون موعد"
- },
+ "complain-without-appo": {"en": "Complaint without appointment", "ar": "شكوى بدون موعد"},
"question": {"en": "Question", "ar": "سؤال"},
"message-type": {"en": "Message Type", "ar": "نوع الرسالة"},
"compliment": {"en": "compliment", "ar": "ثناء"},
"suggestion": {"en": "Suggestion", "ar": "إقتراح"},
"your-feedback": {"en": "Your feedback was sent", "ar": "إقتراح"},
- "select-part": {
- "en": "Please select the part that complain about",
- "ar": "يرجى تحديد الجزء الذي تشكو منه"
- },
+ "select-part": {"en": "Please select the part that complain about", "ar": "يرجى تحديد الجزء الذي تشكو منه"},
"number": {"en": "Number", "ar": "الرقم"},
"not-classified": {"en": "Not classified", "ar": "غير محدد"},
"selectClinic": {"en": "Select Clinic", "ar": " بحث بالعيادة"},
"reviews": {"en": "Reviews", "ar": "تقييمات"},
- "searchItemError": {
- "en": "Item name should be more than 3 character ",
- "ar": "يجب أن يكون اسم العنصر أكثر من 3 أحرف"
- },
- "YouCanFind": {"en": "You Can Find ", "ar": "باستطاعتك العثور على "},
+ "searchItemError": {"en": "Item name should be more than 3 character ", "ar": "يجب أن يكون اسم العنصر أكثر من 3 أحرف"},
+ "YouCanFind": {"en": "YouCanFind", "ar": "باستطاعتك العثور على "},
"ItemInSearch": {"en": " Item In Search", "ar": " عنصر في البحث "},
- "InvoiceNo": {"en": " Invoice No", "ar": "رقم الفاتورة"},
- "SpecialResult": {"en": " Special Result", "ar": "نتيجة خاصة"},
- "GeneralResult": {"en": "General Result", "ar": "نتيجة عامة"},
- "show-more-btn": {"en": "Flow Chart", "ar": "النتائج التراكمية"},
-
- "value": {"en": "Value", "ar": "القيمة"},
- "range": {"en": "Range", "ar": "المدى"},
- "out-patient": {"en": "Out Patient", "ar": "عيادات خارجية"},
- "in-patient": {"en": "In Patient", "ar": "تنويم"},
- "report": {"en": "Radiology Report", "ar": "تقرير الاشعة"},
- "open-rad": {"en": "Open Image", "ar": "فتح صور الاشعة"},
- "send-copy": {"en": "Email the Report", "ar": "أرسل التقرير"},
- "appoSurvey": {"en": "Survey", "ar": "إستبيان"},
- "appoSurveySubtitle": {"en": "Survey", "ar": "إستبيان"},
- "labResults": {"en": "Lab Result", "ar": "نتيجة المختبر"},
- "doctorRating": {"en": "Doctor Rating", "ar": "تقييم الطبيب"},
- "good": {"en": "Good", "ar": "جيد"},
- "v-good": {"en": "Very Good", "ar": "جيد جدا"},
- "excellent": {"en": "Excellent", "ar": "ممتاز"},
- "average": {"en": "Average", "ar": "متوسط"},
- "below-average": {"en": "Below Average", "ar": "أقل من المتوسط"},
- "info-signs": {
- "en":
- "This service allows you to view all vital signs were performed in the Habib Medical Group, e.x (height, weight, body mass index, heart rate, etc.) as well shows some statistics charts.",
- "ar":
- "خدمة المؤشرات الحيوية: هذه الخدمة تمكنك من الاطلاع على جميع المؤشرات الحيوية على سبيل المثال (الطول، الوزن، مؤشر كتلة الجسم، معدل نبضات القلب الخ..) التي تمت في مجموعة الحبيب الطبية وكذلك رسوم بيانية على مستوى المؤشر."
- },
- "info-advance-payment": {
- "en":
- "This service designed so that you can deposit an amount in advance either in your account or in someone else's account with Al Habib Medical Group.",
- "ar":
- "تم تصميم هذه الخدمة حتى تتمكن من دفع مبلغ مقدما او تحت الحساب سواء في حسابك او في حساب شخص اخر لدى مجموعة الحبيب الطبية."
- },
- "info-my-balance": {
- "en": "This service allows you to check your balance in all branchs",
- "ar": "هذه الخدمه تتيح لك الاطلاع رصيدك في كل الفروع"
- },
- "er-contant": {
- "en":
- "This service displays nearest branch among all the branches of Al Habib Medical Group based on your current location.",
- "ar":
- "تعرض هذه الخدمة أقرب فرع من بين جميع فروع مجموعة الحبيب الطبية بناءً على موقعك الحالي."
- },
- "er": {"en": "ER", "ar": "الطوارىء"},
- "transportation-Service": {"en": "Ambulance Request", "ar": "طلب نقل اسعاف"},
- "info-ambulance": {
- "en":
- "Through this service, you can request evacuation by ambulance, whether from home or to home, in addition to a set of other services",
- "ar":
- "عن طريق هذه الخدمة يمكنك طلب اخلاء بواسطة سيارة اسعاف سواء من المزل او الى المنزل بالاضافة الى مجموعة من الخدمات الاخرى"
- },
- "RRT-transport-heading": {
- "en": "Select Transportation Method",
- "ar": "حدد طريقة النقل"
- },
- "sar": {"en": "SR", "ar": "ر.س"},
- "RRT-direction-heading": {"en": "Select Direction", "ar": "حدد الاتجاه"},
- "to-hospital": {"en": "To Hospital", "ar": "الى المستشفى"},
- "from-hospital": {"en": "From Hospital", "ar": "من المستشفى"},
- "one-direc": {"en": "One Way", "ar": "ذهاب"},
- "two-direc": {"en": "Two Ways", "ar": "ذهاب وعودة"},
- "pickup-location": {"en": "Pickup Location", "ar": "نقطة الانطلاق"},
- "pickup-spot": {"en": "Pickup Spot", "ar": "نقطة اللقاء"},
- "inside-home": {"en": "Inside Home", "ar": "داخل المنزل"},
- "have-appo": {"en": "Do you have an appointment?", "ar": "هل لديك موعد؟"},
- "dropoff-location": {"en": "Dropoff Location", "ar": "نقطة الوصول"},
- "select-all": {
- "en": "Please select all fields",
- "ar": "يرجى تحديد جميع الحقول"
- },
- "select-map": {"en": "Select From Map", "ar": "حدد من الخريطة"},
- "no-appointment": {
- "en": "You don't have any appointments yet",
- "ar": "ليس لديك أي مواعيد حتى الآن"
- },
- "patient-share": {"en": "Amount before tax: ", "ar": "المبلغ قبل الضريبة:"},
- "patient-share-tax": {"en": "Tax amount: ", "ar": "قيمة الضريبة:"},
- "patient-share-total": {
- "en": "Total amount payable: ",
- "ar": "المبلغ الإجمالي المستحق:"
- },
- "select-ambulate": {"en": "Select Ambulate", "ar": "بحاجة للتنقل بواسطة"},
- "wheelchair": {"en": "Wheelchair", "ar": "كرسي متحرك"},
- "walker": {"en": "Walker", "ar": "مشاية"},
- "stretcher": {"en": "Stretcher", "ar": "نقالة"},
- "none": {"en": "None", "ar": "لا شيء"},
- "RRT-Summary": {"en": "Summary", "ar": "ملخص الطلب"},
- "bill-amount": {"en": "Bill Amount", "ar": "مبلغ الفاتورة"},
- "transport-method": {"en": "Transportation Method", "ar": "طريقة النقل"},
- "directions": {"en": "Directions", "ar": "الاتجاهات"},
- "info-my-appointments": {
- "en":
- "This service allows you to see all the appointment you have visited in Al Habib Medical Group, and through this service:",
- "ar":
- "خدمة مواعيدي: هذه الخدمة تمكنك من الاطلاع على جميع المواعيد التي قمت بزيارتهم في مجموعة الحبيب الطبية, كما تستطيع من خلال هذه الخدمة:"
- },
- "info-todo": {
- "en":
- "This service is designed to enable you to have a quick link to the list of tasks that need to be done",
- "ar":
- "هذه الخدمة تم تصميمها لتمكنك من الوصول الى رابط سريع لقائمة المهام التي يجب القيام بها"
- },
- "family-info": {
- "en":
- "Through this service, you will be able to link your family medical files to your medical file so that you can manage their records by login to your medical file.",
- "ar":
- "هذه الخدمة تم تصميمها لتتمكن من ربط الملفات الطبية للعائلة بملفك الطبي حتى تتمكن من إدارة سجلاتهم عن طريق تسجيل الدخول إلى ملفك الطبي."
- },
- "dental-complains": {
- "en": "Symptoms",
- "ar": "الأعراض"
- },
- "empty-result": {
- "en": "There is no search results found",
- "ar": "لايوجد نتائج"
- },
-
- "no-booked-appointment": {
- "en": "No booked appointments",
- "ar": "لا يوجد مواعيد محجوزة"
- },
- "no-confirmed-appointment": {
- "en": "No confirmed appointments",
- "ar": "لا توجد مواعيد مؤكدة"
- },
- "no-arrived-appointment": {
- "en": "No arrived appointments",
- "ar": "لا يوجد مواعيد"
- },
- "upcoming-empty": {
- "en": "You do not have any Todo actions yet.",
- "ar": "ليس لديك أي إجراءات الآن."
- },
- "upcoming-timeLeft": {
- "en": "time left for appointment",
- "ar": "الوقت المتبقي للموعد"
- },
- "covid-test-all-services": {
- "en": "Covid-19 Drive-Thru Test",
- "ar": "فحص كورونا من داخل السيارة"
- },
- "pharmacy": {
- "en": "Pharmacy",
- "ar": "الصيدلية"
- },
- "ereferral": {
- "en": "E-Referral",
- "ar": "طلب التحويل"
- },
- "child-vaccine": {
- "en": "Child Vaccines",
- "ar": "تطعيمات الأطفال"
- },
- "calculators": {
- "en": "Health Calculators",
- "ar": "الحاسبات الصحية"
- },
- "converters": {
- "en": "Health Converter",
- "ar": "تحويل القياسات"
- },
- "h2o": {
- "en": "Water Tracker",
- "ar": "حساب كمية الماء"
- },
- "v-tour": {
- "en": "Virtual Tour",
- "ar": "جولة إفتراضية"
- },
- "hmg-news": {
- "en": "HMG News",
- "ar": "أخبار المجموعة"
- },
- "blood-d": {
- "en": "Blood Donation",
- "ar": "تبرع بالدم"
- },
- "symptomCheckerTitle": {
- "en": "Symptom Checker",
- "ar": "مدقق الأعراض"
- },
- "latest-news": {
- "en": "Latest News",
- "ar": "أحدث الأخبار"
- },
- "our-location": {
- "en": "Our Locations",
- "ar": "موقعنا"
- },
- "pharmacies": {
- "en": "Pharmacies",
- "ar": "الصيدليات"
- },
- "hospitals": {
- "en": "Hospitals",
- "ar": "المستشفيات"
- },
- "wallet": {
- "en": "Wallet",
- "ar": "محفظة نقود"
- },
- "hmg": {
- "en": "Al Habib",
- "ar": "الحبيب"
- },
-
- "requested": {
- "en": "Requested",
- "ar": "مطلوب"
- },
- "ready": {
- "en": "Ready",
- "ar": "جاهز"
- },
- "completed": {
- "en": "Completed",
- "ar": "مكتمل"
- },
- "cancelled": {
- "en": "Cancelled",
- "ar": "ملغى"
- },
-
- "request-medical-report": {
- "en": "Request medical report",
- "ar": "طلب تقرير طبي"
- },
-
- "vaccination": {
- "en": "Vaccination",
- "ar": "جدول التطعيمات"
- },
- "welcomeBack": {
- "en": "Welcome back",
- "ar": "مرحبا مرة أخرى"
- },
- "instructions": {
- "en": "Please ensure that the email address is up-to-date and process to view the schedule",
- "ar": "يرجى التأكد من صحة عنوان البريد الالكتروني و المتابعة لعرض الجدول "
- },
- "update-email": {
- "en": "Update Email",
- "ar": "تحديث البريد الالكتروني"
- },
-
- "updated-email": {
- "en": "Updated email successfully",
- "ar": "تم تحديث البريد الالكتروني"
- },
-
- "view-list-children": {
- "en": "View List of Children",
- "ar": "عرض قائمة الأطفال"
- },
-
- "add-child": {
- "en": "Add New Child",
- "ar": "اضافة طفل"
- },
- "child-name": {
- "en": "Child Name",
- "ar": "اسم الطفل"
- },
- "childDob": {
- "en": "Birth Date",
- "ar": "تاريخ الولادة"
- },
- "delete": {
- "en": "Delete",
- "ar": "حذف"
- },
- "deleted-child-mes": {
- "en": "The request was successful. The children have removed from the vaccination schedule subscription service.",
- "ar": "تم حذف الطفل بنجاح"
- },
- "deleted-child":{
- "en":"Delete child",
- "ar":"إالغاء الطفل"
- },
- "visit": {
- "en": "Visit",
- "ar": "زيارة"
- },
- "description-vaccination": {
- "en": "Description",
- "ar": "وصف"
- },
- "due-date": {
- "en": "Due date",
- "ar": "تاريخ الاستحقاق"
- },
- "valid-email": {
- "en": "Please enter valid email",
- "ar": "الرجاء إدخال عنوان بريد صحيح"
- },
- "confirm-send": {
- "en": "Send the child's schedule to the email?",
- "ar": "ارسال جدول التطعيمات الى بريدك الالكتروني؟"
- },
- "email-success": {
- "en": " The request was successful. You will receive the Schedule in moments.",
- "ar": "تم ارسال جدول التطعيمات "
- },
- "add-instructions": {
- "en": "Add the child's information below to recieve the schedule of vaccinations.",
- "ar": "أضف معلومات الطفل لاستلام جدول التطعيمات"
- },
- "added-child": {
- "en": "The request was successful. You have added a child to the vaccination schedule subscription service.",
- "ar": "تمت الاضافة بنجاح."
- },
- "appUpdate": {
- "en": "UPDATE THE APP",
- "ar": "تحديث التطبيق"
- },
- "ereferralSaveSuccess": {
- "en": "The referral request has been submitted successfully, you will be contacted ASAP to complete the process. Referral request no is ",
- "ar": " تم إرسال طلب الإحالة بنجاح ، وسيتم الاتصال بك في أسرع وقت ممكن لإكمال العملية. رقم طلب الإحالة"
- },
- "referralStatus": {
- "en": "Referral Status",
- "ar": "حالة الإحالة"
- },
- "referralDate": {
- "en": "Referral Date",
- "ar": "تاريخ الإحالة"
- },
- "patientName": {
- "en": "Patient Name",
- "ar": "اسم المريض"
- },
- "referralNumber": {
- "en": "Referral Number",
- "ar": "رقم الإحالة"
- },
- "requestID": {
- "en": "Request ID",
- "ar": " رقم الطلب"
+ "wantConnectHmgNetwork": {
+ "en": "Dear customer there is no internet access, Do you want to connect with HMG network to use our app, make sure you are in range of HMG network",
+ "ar": "عزيز العميل لا يوجد اتصال بالإنترنت, هل تريد الاتصال بشبكة مستشفى د. سليمان الحبيب لاستخدام التطبيق. يجب عليك ان تكون في نطاق شبكة المستشفى"
},
- "OrderStatus": {
- "en": "Status",
- "ar": "الحاله"
- },"pickupDate": {"en": "Pickup Date", "ar": "التاريخ"},
- "serviceName": {"en": "Service Name", "ar": " اسم الخدمة"},
- "orderLocation": {"en": "Location", "ar": "الموقع"},
- "selectService": {"en": "Select Service", "ar": "حدد الخدمة"},
- "coveredService": {"en": "Covered Service : ", "ar": " الخدمات المغطاة : "},
- "selectAddress": {"en": "Select Address", "ar": "حدد العنوان"},
- "addNewAddress": {"en": "Add New Address", "ar": "أضف عنوان جديد"},
- "selectedService": {"en": "Selected Service : ", "ar": " الخدمات المختارة : "},
- "cancelOrderMsg": {"en": "Are you sure!! want to cancel this order", "ar": "هل أنت واثق!! تريد إلغاء هذا الطلب"},
- "processDoneSuccessfully": {"en": "Process Done Successfully", "ar": "تمت العملية بنجاح"},
- "selectHomeHealthCareServices": {"en": "Select Home Health Care Services", "ar": " حدد خدمات الرعاية الصحية المنزلية"},
+ "failedToAccessHmgServices": {"en": "Connected with HMG Network,\n\nBut failed to access HMG services", "ar": "Connected with HMG Network,\n\nBut failed to access HMG services"},
+ "offerAndPackages": {"en": "Offers And Packages", "ar": "العروض والباقات"},
};
diff --git a/lib/config/shared_pref_kay.dart b/lib/config/shared_pref_kay.dart
index e5c5c965..30d866de 100644
--- a/lib/config/shared_pref_kay.dart
+++ b/lib/config/shared_pref_kay.dart
@@ -19,5 +19,5 @@ const IS_LIVECARE_APPOINTMENT = 'is_livecare_appointment';
const IS_VIBRATION = 'is_vibration';
const THEME_VALUE = 'is_vibration';
const MAIN_USER = 'main-user';
-const WEATHER = 'weather';
const PHARMACY_LAST_VISITED_PRODUCTS = 'last-visited';
+const HMG_GEOFENCES = 'hmg-geo-fences';
diff --git a/lib/core/model/AlHabibMedicalService/EReferral/get_all_projects_response_model.dart b/lib/core/model/AlHabibMedicalService/EReferral/get_all_projects_response_model.dart
deleted file mode 100644
index 438f1630..00000000
--- a/lib/core/model/AlHabibMedicalService/EReferral/get_all_projects_response_model.dart
+++ /dev/null
@@ -1,76 +0,0 @@
-class GetAllProjectsResponseModel {
- String desciption;
- Null desciptionN;
- int iD;
- String legalName;
- String legalNameN;
- String name;
- Null nameN;
- String phoneNumber;
- String setupID;
- int distanceInKilometers;
- bool isActive;
- String latitude;
- String longitude;
- int mainProjectID;
- Null projectOutSA;
- bool usingInDoctorApp;
-
- GetAllProjectsResponseModel(
- {this.desciption,
- this.desciptionN,
- this.iD,
- this.legalName,
- this.legalNameN,
- this.name,
- this.nameN,
- this.phoneNumber,
- this.setupID,
- this.distanceInKilometers,
- this.isActive,
- this.latitude,
- this.longitude,
- this.mainProjectID,
- this.projectOutSA,
- this.usingInDoctorApp});
-
- GetAllProjectsResponseModel.fromJson(Map json) {
- desciption = json['Desciption'];
- desciptionN = json['DesciptionN'];
- iD = json['ID'];
- legalName = json['LegalName'];
- legalNameN = json['LegalNameN'];
- name = json['Name'];
- nameN = json['NameN'];
- phoneNumber = json['PhoneNumber'];
- setupID = json['SetupID'];
- distanceInKilometers = json['DistanceInKilometers'];
- isActive = json['IsActive'];
- latitude = json['Latitude'];
- longitude = json['Longitude'];
- mainProjectID = json['MainProjectID'];
- projectOutSA = json['ProjectOutSA'];
- usingInDoctorApp = json['UsingInDoctorApp'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['Desciption'] = this.desciption;
- data['DesciptionN'] = this.desciptionN;
- data['ID'] = this.iD;
- data['LegalName'] = this.legalName;
- data['LegalNameN'] = this.legalNameN;
- data['Name'] = this.name;
- data['NameN'] = this.nameN;
- data['PhoneNumber'] = this.phoneNumber;
- data['SetupID'] = this.setupID;
- data['DistanceInKilometers'] = this.distanceInKilometers;
- data['IsActive'] = this.isActive;
- data['Latitude'] = this.latitude;
- data['Longitude'] = this.longitude;
- data['MainProjectID'] = this.mainProjectID;
- data['ProjectOutSA'] = this.projectOutSA;
- data['UsingInDoctorApp'] = this.usingInDoctorApp;
- return data;
- }
-}
diff --git a/lib/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart b/lib/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart
deleted file mode 100644
index e873261d..00000000
--- a/lib/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart
+++ /dev/null
@@ -1,128 +0,0 @@
-class GetEReferralResponseModel {
- dynamic acceptedBrachCode;
- dynamic acceptedBranchName;
- dynamic acceptedBranchNameAr;
- Channel channel;
- dynamic identityCardAttachment;
- String identityNumber;
- dynamic insuranceCardAttachment;
- bool isInsuredPatient;
- String otherRelationship;
- String patientContactNo;
- int patientId;
- String patientName;
- int preferredBranchCode;
- String preferredBranchName;
- String referralDate;
- int referralNumber;
- Channel relationshipType;
- String requesterContactNo;
- String requesterName;
- String status;
- String statusAr;
-
- GetEReferralResponseModel(
- {this.acceptedBrachCode,
- this.acceptedBranchName,
- this.acceptedBranchNameAr,
- this.channel,
- this.identityCardAttachment,
- this.identityNumber,
- this.insuranceCardAttachment,
- this.isInsuredPatient,
- this.otherRelationship,
- this.patientContactNo,
- this.patientId,
- this.patientName,
- this.preferredBranchCode,
- this.preferredBranchName,
- this.referralDate,
- this.referralNumber,
- this.relationshipType,
- this.requesterContactNo,
- this.requesterName,
- this.status,
- this.statusAr});
-
- GetEReferralResponseModel.fromJson(Map json) {
- acceptedBrachCode = json['AcceptedBrachCode'];
- acceptedBranchName = json['AcceptedBranchName'];
- acceptedBranchNameAr = json['AcceptedBranchNameAr'];
- channel =
- json['Channel'] != null ? new Channel.fromJson(json['Channel']) : null;
- identityCardAttachment = json['IdentityCardAttachment'];
- identityNumber = json['IdentityNumber'];
- insuranceCardAttachment = json['InsuranceCardAttachment'];
- isInsuredPatient = json['IsInsuredPatient'];
- otherRelationship = json['OtherRelationship'];
- patientContactNo = json['PatientContactNo'];
- patientId = json['PatientId'];
- patientName = json['PatientName'];
- preferredBranchCode = json['PreferredBranchCode'];
- preferredBranchName = json['PreferredBranchName'];
- referralDate = json['ReferralDate'];
- referralNumber = json['ReferralNumber'];
- relationshipType = json['RelationshipType'] != null
- ? new Channel.fromJson(json['RelationshipType'])
- : null;
- requesterContactNo = json['RequesterContactNo'];
- requesterName = json['RequesterName'];
- status = json['Status'];
- statusAr = json['StatusAr'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['AcceptedBrachCode'] = this.acceptedBrachCode;
- data['AcceptedBranchName'] = this.acceptedBranchName;
- data['AcceptedBranchNameAr'] = this.acceptedBranchNameAr;
- if (this.channel != null) {
- data['Channel'] = this.channel.toJson();
- }
- data['IdentityCardAttachment'] = this.identityCardAttachment;
- data['IdentityNumber'] = this.identityNumber;
- data['InsuranceCardAttachment'] = this.insuranceCardAttachment;
- data['IsInsuredPatient'] = this.isInsuredPatient;
- data['OtherRelationship'] = this.otherRelationship;
- data['PatientContactNo'] = this.patientContactNo;
- data['PatientId'] = this.patientId;
- data['PatientName'] = this.patientName;
- data['PreferredBranchCode'] = this.preferredBranchCode;
- data['PreferredBranchName'] = this.preferredBranchName;
- data['ReferralDate'] = this.referralDate;
- data['ReferralNumber'] = this.referralNumber;
- if (this.relationshipType != null) {
- data['RelationshipType'] = this.relationshipType.toJson();
- }
- data['RequesterContactNo'] = this.requesterContactNo;
- data['RequesterName'] = this.requesterName;
- data['Status'] = this.status;
- data['StatusAr'] = this.statusAr;
- return data;
- }
-}
-
-class Channel {
- int iD;
- String text;
- String textAr;
- String textEn;
-
- Channel({this.iD, this.text, this.textAr, this.textEn});
-
- Channel.fromJson(Map json) {
- iD = json['ID'];
- text = json['Text'];
- textAr = json['Text_Ar'];
- textEn = json['Text_En'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['ID'] = this.iD;
- data['Text'] = this.text;
- data['Text_Ar'] = this.textAr;
- data['Text_En'] = this.textEn;
- return data;
- }
-}
diff --git a/lib/core/model/ImagesInfo.dart b/lib/core/model/ImagesInfo.dart
deleted file mode 100644
index 5ab48fb3..00000000
--- a/lib/core/model/ImagesInfo.dart
+++ /dev/null
@@ -1,6 +0,0 @@
-class ImagesInfo {
- final String imageAr;
- final String imageEn;
-
- ImagesInfo({this.imageAr, this.imageEn});
-}
diff --git a/lib/core/model/geofencing/requests/GeoZonesRequestModel.dart b/lib/core/model/geofencing/requests/GeoZonesRequestModel.dart
new file mode 100644
index 00000000..219c46ae
--- /dev/null
+++ b/lib/core/model/geofencing/requests/GeoZonesRequestModel.dart
@@ -0,0 +1,11 @@
+class GeoZonesRequestModel {
+ final String PatientID;
+
+ GeoZonesRequestModel({this.PatientID});
+
+ Map toFlatMap() {
+ if (PatientID == null) return {};
+
+ return {"PatientID": PatientID.toString()};
+ }
+}
diff --git a/lib/core/model/geofencing/requests/LogGeoZoneRequestModel.dart b/lib/core/model/geofencing/requests/LogGeoZoneRequestModel.dart
new file mode 100644
index 00000000..e21a7d69
--- /dev/null
+++ b/lib/core/model/geofencing/requests/LogGeoZoneRequestModel.dart
@@ -0,0 +1,12 @@
+import 'package:flutter/cupertino.dart';
+
+class LogGeoZoneRequestModel {
+ final int PointsID;
+ final int GeoType;
+
+ LogGeoZoneRequestModel({@required this.PointsID, @required this.GeoType});
+
+ Map toFlatMap() {
+ return {"PointsID": PointsID.toString(), "GeoType": GeoType.toString()};
+ }
+}
diff --git a/lib/core/model/geofencing/responses/GeoZonesResponseModel.dart b/lib/core/model/geofencing/responses/GeoZonesResponseModel.dart
new file mode 100644
index 00000000..58771fab
--- /dev/null
+++ b/lib/core/model/geofencing/responses/GeoZonesResponseModel.dart
@@ -0,0 +1,62 @@
+import 'package:diplomaticquarterapp/generated/json/base/json_convert_content.dart';
+import 'package:diplomaticquarterapp/generated/json/base/json_field.dart';
+
+class GeoZonesResponseModel with JsonConvert {
+ @JSONField(name: "GEOF_ID")
+ int geofId;
+ @JSONField(name: "Description")
+ String description;
+ @JSONField(name: "DescriptionN")
+ String descriptionN;
+ @JSONField(name: "Latitude")
+ String latitude;
+ @JSONField(name: "Longitude")
+ String longitude;
+ @JSONField(name: "Radius")
+ int radius;
+ @JSONField(name: "Type")
+ int type;
+ @JSONField(name: "ProjectID")
+ int projectID;
+ @JSONField(name: "ImageURL")
+ String imageURL;
+ @JSONField(name: "IsCity")
+ bool isCity;
+
+ // Outside Server Response
+ bool isRegistered = false;
+ bool onEntry = true;
+ bool onExit = true;
+
+ String geofenceId() {
+ return "$geofId\_${description.replaceAll(" ", "")}";
+ }
+
+ static get(String coordinates, int radius, String name) {
+ coordinates = coordinates.replaceAll(" ", "");
+ var geo = GeoZonesResponseModel();
+ geo.latitude = coordinates.split(",").first;
+ geo.longitude = coordinates.split(",").last;
+ geo.radius = radius;
+ geo.description = name;
+ return geo;
+ }
+
+ static GeoZonesResponseModel zkH() {
+ var geo = GeoZonesResponseModel();
+ geo.latitude = "24.691136";
+ geo.longitude = "46.650116";
+ geo.radius = 150;
+ geo.description = "zkH";
+ return geo;
+ }
+
+ static GeoZonesResponseModel csO() {
+ var geo = GeoZonesResponseModel();
+ geo.latitude = "24.7087913";
+ geo.longitude = "46.6656461";
+ geo.radius = 150;
+ geo.description = "csO";
+ return geo;
+ }
+}
diff --git a/lib/core/model/geofencing/responses/LogGeoZoneResponseModel.dart b/lib/core/model/geofencing/responses/LogGeoZoneResponseModel.dart
new file mode 100644
index 00000000..2242755f
--- /dev/null
+++ b/lib/core/model/geofencing/responses/LogGeoZoneResponseModel.dart
@@ -0,0 +1,26 @@
+import 'package:diplomaticquarterapp/generated/json/base/json_convert_content.dart';
+import 'package:diplomaticquarterapp/generated/json/base/json_field.dart';
+
+class LogGeoZoneResponseModel with JsonConvert {
+ @JSONField(name: "LanguageID")
+ int languageID;
+ @JSONField(name: "ErrorCode")
+ dynamic errorCode;
+ @JSONField(name: "ErrorEndUserMessage")
+ String errorEndUserMessage;
+ @JSONField(name: "ErrorEndUserMessageN")
+ dynamic errorEndUserMessageN;
+ @JSONField(name: "ErrorMessage")
+ dynamic errorMessage;
+ @JSONField(name: "ErrorType")
+ int errorType;
+ @JSONField(name: "IsAuthenticated")
+ bool isAuthenticated;
+ @JSONField(name: "SuccessMsg")
+ dynamic successMsg;
+ @JSONField(name: "SuccessMsgN")
+ dynamic successMsgN;
+ int statusCode;
+ @JSONField(name: "MessageStatus")
+ int messageStatus;
+}
diff --git a/lib/core/model/packages_offers/requests/OffersCategoriesRequestModel.dart b/lib/core/model/packages_offers/requests/OffersCategoriesRequestModel.dart
new file mode 100644
index 00000000..f2f4af11
--- /dev/null
+++ b/lib/core/model/packages_offers/requests/OffersCategoriesRequestModel.dart
@@ -0,0 +1,11 @@
+class OffersCategoriesRequestModel {
+ final int limit;
+ final int page;
+ final int sinceId;
+
+ OffersCategoriesRequestModel({this.limit, this.page, this.sinceId});
+
+ Map toFlatMap() {
+ return {"limit": limit.toString(), "page": page.toString(), "sinceId": sinceId.toString()};
+ }
+}
diff --git a/lib/core/model/packages_offers/requests/OffersProductsRequestModel.dart b/lib/core/model/packages_offers/requests/OffersProductsRequestModel.dart
new file mode 100644
index 00000000..84862568
--- /dev/null
+++ b/lib/core/model/packages_offers/requests/OffersProductsRequestModel.dart
@@ -0,0 +1,12 @@
+class OffersProductsRequestModel {
+ final int categoryId;
+ final int limit;
+ final int page;
+ final int sinceId;
+
+ OffersProductsRequestModel({this.categoryId, this.limit, this.page, this.sinceId});
+
+ Map toFlatMap() {
+ return {"limit": limit.toString(), "page": page.toString(), "sinceId": sinceId.toString(), "categoryId": categoryId.toString()};
+ }
+}
diff --git a/lib/core/model/packages_offers/responses/OfferCategoriesResponseModel.dart b/lib/core/model/packages_offers/responses/OfferCategoriesResponseModel.dart
new file mode 100644
index 00000000..087f1961
--- /dev/null
+++ b/lib/core/model/packages_offers/responses/OfferCategoriesResponseModel.dart
@@ -0,0 +1,65 @@
+import 'package:diplomaticquarterapp/generated/json/base/json_convert_content.dart';
+import 'package:diplomaticquarterapp/generated/json/base/json_field.dart';
+
+class OfferCategoriesResponseModel with JsonConvert {
+ String id;
+ String name;
+ String namen;
+ @JSONField(name: "localized_names")
+ List localizedNames;
+ dynamic description;
+ @JSONField(name: "category_template_id")
+ int categoryTemplateId;
+ @JSONField(name: "meta_keywords")
+ String metaKeywords;
+ @JSONField(name: "meta_description")
+ String metaDescription;
+ @JSONField(name: "meta_title")
+ String metaTitle;
+ @JSONField(name: "parent_category_id")
+ int parentCategoryId;
+ @JSONField(name: "page_size")
+ int pageSize;
+ @JSONField(name: "page_size_options")
+ String pageSizeOptions;
+ @JSONField(name: "price_ranges")
+ dynamic priceRanges;
+ @JSONField(name: "show_on_home_page")
+ bool showOnHomePage;
+ @JSONField(name: "include_in_top_menu")
+ bool includeInTopMenu;
+ @JSONField(name: "has_discounts_applied")
+ dynamic hasDiscountsApplied;
+ bool published;
+ bool deleted;
+ @JSONField(name: "display_order")
+ int displayOrder;
+ @JSONField(name: "created_on_utc")
+ String createdOnUtc;
+ @JSONField(name: "updated_on_utc")
+ String updatedOnUtc;
+ @JSONField(name: "role_ids")
+ List roleIds;
+ @JSONField(name: "discount_ids")
+ List discountIds;
+ @JSONField(name: "store_ids")
+ List storeIds;
+ OfferCategoriesResponseModelImage image;
+ @JSONField(name: "se_name")
+ String seName;
+ @JSONField(name: "is_leaf")
+ bool isLeaf;
+}
+
+class OfferCategoriesResponseModelLocalizedName with JsonConvert {
+ @JSONField(name: "language_id")
+ int languageId;
+ @JSONField(name: "localized_name")
+ String localizedName;
+}
+
+class OfferCategoriesResponseModelImage with JsonConvert {
+ String src;
+ dynamic thumb;
+ dynamic attachment;
+}
diff --git a/lib/core/model/packages_offers/responses/OfferProductsResponseModel.dart b/lib/core/model/packages_offers/responses/OfferProductsResponseModel.dart
new file mode 100644
index 00000000..58481a8b
--- /dev/null
+++ b/lib/core/model/packages_offers/responses/OfferProductsResponseModel.dart
@@ -0,0 +1,235 @@
+import 'package:diplomaticquarterapp/generated/json/base/json_convert_content.dart';
+import 'package:diplomaticquarterapp/generated/json/base/json_field.dart';
+
+class OfferProductsResponseModel with JsonConvert {
+ String id;
+ @JSONField(name: "visible_individually")
+ bool visibleIndividually;
+ String name;
+ String namen;
+ @JSONField(name: "localized_names")
+ List localizedNames;
+ @JSONField(name: "short_description")
+ String shortDescription;
+ @JSONField(name: "short_descriptionn")
+ String shortDescriptionn;
+ @JSONField(name: "full_description")
+ String fullDescription;
+ @JSONField(name: "full_descriptionn")
+ String fullDescriptionn;
+ @JSONField(name: "markas_new")
+ bool markasNew;
+ @JSONField(name: "show_on_home_page")
+ bool showOnHomePage;
+ @JSONField(name: "meta_keywords")
+ dynamic metaKeywords;
+ @JSONField(name: "meta_description")
+ dynamic metaDescription;
+ @JSONField(name: "meta_title")
+ dynamic metaTitle;
+ @JSONField(name: "allow_customer_reviews")
+ bool allowCustomerReviews;
+ @JSONField(name: "approved_rating_sum")
+ int approvedRatingSum;
+ @JSONField(name: "not_approved_rating_sum")
+ int notApprovedRatingSum;
+ @JSONField(name: "approved_total_reviews")
+ int approvedTotalReviews;
+ @JSONField(name: "not_approved_total_reviews")
+ int notApprovedTotalReviews;
+ String sku;
+ @JSONField(name: "is_rx")
+ bool isRx;
+ @JSONField(name: "prescription_required")
+ bool prescriptionRequired;
+ @JSONField(name: "rx_message")
+ dynamic rxMessage;
+ @JSONField(name: "rx_messagen")
+ dynamic rxMessagen;
+ @JSONField(name: "manufacturer_part_number")
+ dynamic manufacturerPartNumber;
+ dynamic gtin;
+ @JSONField(name: "is_gift_card")
+ bool isGiftCard;
+ @JSONField(name: "require_other_products")
+ bool requireOtherProducts;
+ @JSONField(name: "automatically_add_required_products")
+ bool automaticallyAddRequiredProducts;
+ @JSONField(name: "is_download")
+ bool isDownload;
+ @JSONField(name: "unlimited_downloads")
+ bool unlimitedDownloads;
+ @JSONField(name: "max_number_of_downloads")
+ int maxNumberOfDownloads;
+ @JSONField(name: "download_expiration_days")
+ dynamic downloadExpirationDays;
+ @JSONField(name: "has_sample_download")
+ bool hasSampleDownload;
+ @JSONField(name: "has_user_agreement")
+ bool hasUserAgreement;
+ @JSONField(name: "is_recurring")
+ bool isRecurring;
+ @JSONField(name: "recurring_cycle_length")
+ int recurringCycleLength;
+ @JSONField(name: "recurring_total_cycles")
+ int recurringTotalCycles;
+ @JSONField(name: "is_rental")
+ bool isRental;
+ @JSONField(name: "rental_price_length")
+ int rentalPriceLength;
+ @JSONField(name: "is_ship_enabled")
+ bool isShipEnabled;
+ @JSONField(name: "is_free_shipping")
+ bool isFreeShipping;
+ @JSONField(name: "ship_separately")
+ bool shipSeparately;
+ @JSONField(name: "additional_shipping_charge")
+ double additionalShippingCharge;
+ @JSONField(name: "is_tax_exempt")
+ bool isTaxExempt;
+ @JSONField(name: "is_telecommunications_or_broadcasting_or_electronic_services")
+ bool isTelecommunicationsOrBroadcastingOrElectronicServices;
+ @JSONField(name: "use_multiple_warehouses")
+ bool useMultipleWarehouses;
+ @JSONField(name: "manage_inventory_method_id")
+ int manageInventoryMethodId;
+ @JSONField(name: "stock_quantity")
+ int stockQuantity;
+ @JSONField(name: "stock_availability")
+ String stockAvailability;
+ @JSONField(name: "stock_availabilityn")
+ String stockAvailabilityn;
+ @JSONField(name: "display_stock_availability")
+ bool displayStockAvailability;
+ @JSONField(name: "display_stock_quantity")
+ bool displayStockQuantity;
+ @JSONField(name: "min_stock_quantity")
+ int minStockQuantity;
+ @JSONField(name: "notify_admin_for_quantity_below")
+ int notifyAdminForQuantityBelow;
+ @JSONField(name: "allow_back_in_stock_subscriptions")
+ bool allowBackInStockSubscriptions;
+ @JSONField(name: "order_minimum_quantity")
+ int orderMinimumQuantity;
+ @JSONField(name: "order_maximum_quantity")
+ int orderMaximumQuantity;
+ @JSONField(name: "allowed_quantities")
+ dynamic allowedQuantities;
+ @JSONField(name: "allow_adding_only_existing_attribute_combinations")
+ bool allowAddingOnlyExistingAttributeCombinations;
+ @JSONField(name: "disable_buy_button")
+ bool disableBuyButton;
+ @JSONField(name: "disable_wishlist_button")
+ bool disableWishlistButton;
+ @JSONField(name: "available_for_pre_order")
+ bool availableForPreOrder;
+ @JSONField(name: "pre_order_availability_start_date_time_utc")
+ dynamic preOrderAvailabilityStartDateTimeUtc;
+ @JSONField(name: "call_for_price")
+ bool callForPrice;
+ double price;
+ @JSONField(name: "old_price")
+ double oldPrice;
+ @JSONField(name: "product_cost")
+ double productCost;
+ @JSONField(name: "special_price")
+ dynamic specialPrice;
+ @JSONField(name: "special_price_start_date_time_utc")
+ dynamic specialPriceStartDateTimeUtc;
+ @JSONField(name: "special_price_end_date_time_utc")
+ dynamic specialPriceEndDateTimeUtc;
+ @JSONField(name: "customer_enters_price")
+ bool customerEntersPrice;
+ @JSONField(name: "minimum_customer_entered_price")
+ double minimumCustomerEnteredPrice;
+ @JSONField(name: "maximum_customer_entered_price")
+ double maximumCustomerEnteredPrice;
+ @JSONField(name: "baseprice_enabled")
+ bool basepriceEnabled;
+ @JSONField(name: "baseprice_amount")
+ double basepriceAmount;
+ @JSONField(name: "baseprice_base_amount")
+ double basepriceBaseAmount;
+ @JSONField(name: "has_tier_prices")
+ bool hasTierPrices;
+ @JSONField(name: "has_discounts_applied")
+ bool hasDiscountsApplied;
+ @JSONField(name: "discount_name")
+ dynamic discountName;
+ @JSONField(name: "discount_namen")
+ dynamic discountNamen;
+ @JSONField(name: "discount_description")
+ dynamic discountDescription;
+ @JSONField(name: "discount_Descriptionn")
+ dynamic discountDescriptionn;
+ @JSONField(name: "discount_percentage")
+ dynamic discountPercentage;
+ String currency;
+ String currencyn;
+ double weight;
+ double length;
+ double width;
+ double height;
+ @JSONField(name: "available_start_date_time_utc")
+ dynamic availableStartDateTimeUtc;
+ @JSONField(name: "available_end_date_time_utc")
+ dynamic availableEndDateTimeUtc;
+ @JSONField(name: "display_order")
+ int displayOrder;
+ bool published;
+ bool deleted;
+ @JSONField(name: "created_on_utc")
+ String createdOnUtc;
+ @JSONField(name: "updated_on_utc")
+ String updatedOnUtc;
+ @JSONField(name: "product_type")
+ String productType;
+ @JSONField(name: "parent_grouped_product_id")
+ int parentGroupedProductId;
+ @JSONField(name: "role_ids")
+ List roleIds;
+ @JSONField(name: "discount_ids")
+ List discountIds;
+ @JSONField(name: "store_ids")
+ List storeIds;
+ @JSONField(name: "manufacturer_ids")
+ List manufacturerIds;
+ List reviews;
+ List images;
+ List attributes;
+ List specifications;
+ @JSONField(name: "associated_product_ids")
+ List associatedProductIds;
+ List tags;
+ @JSONField(name: "vendor_id")
+ int vendorId;
+ @JSONField(name: "se_name")
+ String seName;
+}
+
+class OfferProductsResponseModelLocalizedName with JsonConvert {
+ @JSONField(name: "language_id")
+ int languageId;
+ @JSONField(name: "localized_name")
+ String localizedName;
+}
+
+class OfferProductsResponseModelImage with JsonConvert {
+ int id;
+ int position;
+ String src;
+ String thumb;
+ String attachment;
+}
+
+class OfferProductsResponseModelSpecification with JsonConvert {
+ int id;
+ @JSONField(name: "display_order")
+ int displayOrder;
+ @JSONField(name: "default_value")
+ String defaultValue;
+ @JSONField(name: "default_valuen")
+ String defaultValuen;
+ String name;
+ String nameN;
+}
diff --git a/lib/core/model/pharmacies/pharmacies_list_model.dart b/lib/core/model/pharmacies/pharmacies_list_model.dart
index a10389b5..01a43a0a 100644
--- a/lib/core/model/pharmacies/pharmacies_list_model.dart
+++ b/lib/core/model/pharmacies/pharmacies_list_model.dart
@@ -4,7 +4,7 @@ class PharmaciesListModel {
int languageID;
String stamp;
String iPAdress;
- dynamic versionID;
+ double versionID;
String tokenID;
String sessionID;
bool isLoginForDoctorApp;
@@ -14,7 +14,7 @@ class PharmaciesListModel {
int editedBy;
int projectID;
int clinicID;
- dynamic price;
+ double price;
String imageLocation;
String desLocation;
String itemDes;
diff --git a/lib/core/model/prescriptions/request_prescription_report.dart b/lib/core/model/prescriptions/request_prescription_report.dart
index df901a99..c8323740 100644
--- a/lib/core/model/prescriptions/request_prescription_report.dart
+++ b/lib/core/model/prescriptions/request_prescription_report.dart
@@ -82,7 +82,7 @@ class RequestPrescriptionReport {
data['EpisodeID'] = this.episodeID;
data['ClinicID'] = this.clinicID;
data['ProjectID'] = this.projectID;
- // data['DischargeNo'] = this.dischargeNo;
+ data['DischargeNo'] = this.dischargeNo;
return data;
}
}
diff --git a/lib/core/model/privilege/PrivilegeModel.dart b/lib/core/model/privilege/PrivilegeModel.dart
deleted file mode 100644
index 3b629fde..00000000
--- a/lib/core/model/privilege/PrivilegeModel.dart
+++ /dev/null
@@ -1,24 +0,0 @@
-class PrivilegeModel {
- int iD;
- String serviceName;
- bool privilege;
- dynamic region;
-
- PrivilegeModel({this.iD, this.serviceName, this.privilege, this.region});
-
- PrivilegeModel.fromJson(Map json) {
- iD = json['ID'];
- serviceName = json['ServiceName'];
- privilege = json['Previlege'];
- region = json['Region'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['ID'] = this.iD;
- data['ServiceName'] = this.serviceName;
- data['Previlege'] = this.privilege;
- data['Region'] = this.region;
- return data;
- }
-}
diff --git a/lib/core/model/weahter/weather_model.dart b/lib/core/model/weahter/weather_model.dart
deleted file mode 100644
index 7ee84bac..00000000
--- a/lib/core/model/weahter/weather_model.dart
+++ /dev/null
@@ -1,266 +0,0 @@
-class WeatherIndicatorModel {
- Null date;
- int languageID;
- int serviceName;
- Null time;
- Null androidLink;
- Null authenticationTokenID;
- Null data;
- bool dataw;
- int dietType;
- Null errorCode;
- Null errorEndUserMessage;
- Null errorEndUserMessageN;
- Null errorMessage;
- int errorType;
- int foodCategory;
- Null iOSLink;
- bool isAuthenticated;
- int mealOrderStatus;
- int mealType;
- int messageStatus;
- int numberOfResultRecords;
- Null patientBlodType;
- Null successMsg;
- Null successMsgN;
- Null citiesList;
- Null cityName;
- Null get5DaysWeatherForecastList;
- List getCityInfoList;
- Null getTodayWeatherForecastList;
- Null iniciesList;
-
- WeatherIndicatorModel(
- {this.date,
- this.languageID,
- this.serviceName,
- this.time,
- this.androidLink,
- this.authenticationTokenID,
- this.data,
- this.dataw,
- this.dietType,
- this.errorCode,
- this.errorEndUserMessage,
- this.errorEndUserMessageN,
- this.errorMessage,
- this.errorType,
- this.foodCategory,
- this.iOSLink,
- this.isAuthenticated,
- this.mealOrderStatus,
- this.mealType,
- this.messageStatus,
- this.numberOfResultRecords,
- this.patientBlodType,
- this.successMsg,
- this.successMsgN,
- this.citiesList,
- this.cityName,
- this.get5DaysWeatherForecastList,
- this.getCityInfoList,
- this.getTodayWeatherForecastList,
- this.iniciesList});
-
- WeatherIndicatorModel.fromJson(Map json) {
- date = json['Date'];
- languageID = json['LanguageID'];
- serviceName = json['ServiceName'];
- time = json['Time'];
- androidLink = json['AndroidLink'];
- authenticationTokenID = json['AuthenticationTokenID'];
- data = json['Data'];
- dataw = json['Dataw'];
- dietType = json['DietType'];
- errorCode = json['ErrorCode'];
- errorEndUserMessage = json['ErrorEndUserMessage'];
- errorEndUserMessageN = json['ErrorEndUserMessageN'];
- errorMessage = json['ErrorMessage'];
- errorType = json['ErrorType'];
- foodCategory = json['FoodCategory'];
- iOSLink = json['IOSLink'];
- isAuthenticated = json['IsAuthenticated'];
- mealOrderStatus = json['MealOrderStatus'];
- mealType = json['MealType'];
- messageStatus = json['MessageStatus'];
- numberOfResultRecords = json['NumberOfResultRecords'];
- patientBlodType = json['PatientBlodType'];
- successMsg = json['SuccessMsg'];
- successMsgN = json['SuccessMsgN'];
- citiesList = json['CitiesList'];
- cityName = json['CityName'];
- get5DaysWeatherForecastList = json['Get5DaysWeatherForecastList'];
- if (json['GetCityInfo_List'] != null) {
- getCityInfoList = new List();
- json['GetCityInfo_List'].forEach((v) {
- getCityInfoList.add(new GetCityInfoList.fromJson(v));
- });
- }
- getTodayWeatherForecastList = json['GetTodayWeatherForecastList'];
- iniciesList = json['IniciesList'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['Date'] = this.date;
- data['LanguageID'] = this.languageID;
- data['ServiceName'] = this.serviceName;
- data['Time'] = this.time;
- data['AndroidLink'] = this.androidLink;
- data['AuthenticationTokenID'] = this.authenticationTokenID;
- data['Data'] = this.data;
- data['Dataw'] = this.dataw;
- data['DietType'] = this.dietType;
- data['ErrorCode'] = this.errorCode;
- data['ErrorEndUserMessage'] = this.errorEndUserMessage;
- data['ErrorEndUserMessageN'] = this.errorEndUserMessageN;
- data['ErrorMessage'] = this.errorMessage;
- data['ErrorType'] = this.errorType;
- data['FoodCategory'] = this.foodCategory;
- data['IOSLink'] = this.iOSLink;
- data['IsAuthenticated'] = this.isAuthenticated;
- data['MealOrderStatus'] = this.mealOrderStatus;
- data['MealType'] = this.mealType;
- data['MessageStatus'] = this.messageStatus;
- data['NumberOfResultRecords'] = this.numberOfResultRecords;
- data['PatientBlodType'] = this.patientBlodType;
- data['SuccessMsg'] = this.successMsg;
- data['SuccessMsgN'] = this.successMsgN;
- data['CitiesList'] = this.citiesList;
- data['CityName'] = this.cityName;
- data['Get5DaysWeatherForecastList'] = this.get5DaysWeatherForecastList;
- if (this.getCityInfoList != null) {
- data['GetCityInfo_List'] =
- this.getCityInfoList.map((v) => v.toJson()).toList();
- }
- data['GetTodayWeatherForecastList'] = this.getTodayWeatherForecastList;
- data['IniciesList'] = this.iniciesList;
- return data;
- }
-}
-
-class GetCityInfoList {
- CategoriesNames categoriesNames;
- String category;
- String categoryValue;
- int cityID;
- String cityName;
- String cityNameN;
- String colorName;
- String createdOn;
- String iD;
- int iniceID;
- bool isOrderEmpty;
- bool isValuesReversed;
- bool language;
- double latitude;
- double longitude;
- String name;
- int orderNum;
- double temperature;
- String value;
-
- GetCityInfoList(
- {this.categoriesNames,
- this.category,
- this.categoryValue,
- this.cityID,
- this.cityName,
- this.cityNameN,
- this.colorName,
- this.createdOn,
- this.iD,
- this.iniceID,
- this.isOrderEmpty,
- this.isValuesReversed,
- this.language,
- this.latitude,
- this.longitude,
- this.name,
- this.orderNum,
- this.temperature,
- this.value});
-
- GetCityInfoList.fromJson(Map json) {
- categoriesNames = json['CategoriesNames'] != null
- ? new CategoriesNames.fromJson(json['CategoriesNames'])
- : null;
- category = json['Category'];
- categoryValue = json['CategoryValue'];
- cityID = json['CityID'];
- cityName = json['CityName'];
- cityNameN = json['CityNameN'];
- colorName = json['ColorName'];
- createdOn = json['CreatedOn'];
- iD = json['ID'];
- iniceID = json['IniceID'];
- isOrderEmpty = json['IsOrderEmpty'];
- isValuesReversed = json['IsValuesReversed'];
- language = json['Language'];
- latitude = json['Latitude'];
- longitude = json['Longitude'];
- name = json['Name'];
- orderNum = json['OrderNum'];
- temperature = json['Temperature'];
- value = json['Value'];
- }
-
- Map toJson() {
- final Map data = new Map();
- if (this.categoriesNames != null) {
- data['CategoriesNames'] = this.categoriesNames.toJson();
- }
- data['Category'] = this.category;
- data['CategoryValue'] = this.categoryValue;
- data['CityID'] = this.cityID;
- data['CityName'] = this.cityName;
- data['CityNameN'] = this.cityNameN;
- data['ColorName'] = this.colorName;
- data['CreatedOn'] = this.createdOn;
- data['ID'] = this.iD;
- data['IniceID'] = this.iniceID;
- data['IsOrderEmpty'] = this.isOrderEmpty;
- data['IsValuesReversed'] = this.isValuesReversed;
- data['Language'] = this.language;
- data['Latitude'] = this.latitude;
- data['Longitude'] = this.longitude;
- data['Name'] = this.name;
- data['OrderNum'] = this.orderNum;
- data['Temperature'] = this.temperature;
- data['Value'] = this.value;
- return data;
- }
-}
-
-class CategoriesNames {
- String category1;
- String category2;
- String category3;
- String category4;
- String category5;
-
- CategoriesNames(
- {this.category1,
- this.category2,
- this.category3,
- this.category4,
- this.category5});
-
- CategoriesNames.fromJson(Map json) {
- category1 = json['Category1'];
- category2 = json['Category2'];
- category3 = json['Category3'];
- category4 = json['Category4'];
- category5 = json['Category5'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['Category1'] = this.category1;
- data['Category2'] = this.category2;
- data['Category3'] = this.category3;
- data['Category4'] = this.category4;
- data['Category5'] = this.category5;
- return data;
- }
-}
diff --git a/lib/core/service/AlHabibMedicalService/cmc_service.dart b/lib/core/service/AlHabibMedicalService/cmc_service.dart
index 9e99f3ad..dffa6683 100644
--- a/lib/core/service/AlHabibMedicalService/cmc_service.dart
+++ b/lib/core/service/AlHabibMedicalService/cmc_service.dart
@@ -1,5 +1,4 @@
import 'package:diplomaticquarterapp/config/config.dart';
-import 'package:diplomaticquarterapp/core/enum/OrderService.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_get_items_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/ComprehensiveMedicalCheckup/cmc_insert_pres_order_request_model.dart';
@@ -48,9 +47,8 @@ class CMCService extends BaseService {
await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS,
onSuccess: (dynamic response, int statusCode) {
cmcAllPresOrdersList.clear();
- cmcAllOrderDetail.clear();
response['PatientER_GetPatientAllPresOrdersList'].forEach((data) {
- if (data['ServiceID'] == OrderService.Comprehensive_Medical_Checkup.getIdOrderService())
+ if (data['ServiceID'] == 3)
cmcAllPresOrdersList
.add(GetHHCAllPresOrdersResponseModel.fromJson(data));
});
@@ -106,7 +104,7 @@ class CMCService extends BaseService {
Future insertPresPresOrder({CMCInsertPresOrderRequestModel order}) async {
hasError = false;
- await baseAppClient.post(PATIENT_ER_INSERT_PRES_ORDER,
+ await baseAppClient.post(PATIENT_ER_UPDATE_PRES_ORDER,
onSuccess: (dynamic response, int statusCode) {
isOrderUpdated = true;
}, onFailure: (String error, int statusCode) {
diff --git a/lib/core/service/AlHabibMedicalService/customer_addresses_service.dart b/lib/core/service/AlHabibMedicalService/customer_addresses_service.dart
deleted file mode 100644
index cb457735..00000000
--- a/lib/core/service/AlHabibMedicalService/customer_addresses_service.dart
+++ /dev/null
@@ -1,211 +0,0 @@
-import 'package:diplomaticquarterapp/config/config.dart';
-import 'package:diplomaticquarterapp/core/enum/OrderService.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart';
-import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart';
-import 'package:intl/intl.dart';
-
-import '../base_service.dart';
-
-class CustomerAddressesService extends BaseService {
-
- List addressesList = List();
- CustomerInfo customerInfo;
-
- Future addAddressInfo({ AddNewAddressRequestModel
- addNewAddressRequestModel }) async {
-
- addNewAddressRequestModel.customer.email = customerInfo.email;
- addNewAddressRequestModel.customer.id = customerInfo.customerId;
- addNewAddressRequestModel.customer.roleIds = [3];
- addNewAddressRequestModel.customer.addresses[0].email = customerInfo.email;
- addNewAddressRequestModel.customer.addresses[0].phoneNumber = customerInfo.mobileNumber;
- addNewAddressRequestModel.customer.addresses[0].firstName = user.firstName;
- addNewAddressRequestModel.customer.addresses[0].lastName = user.lastName;
- addNewAddressRequestModel.customer.addresses[0].countryId = 69;
-
- var f = DateFormat('E, d MMM yyyy HH:mm:ss');
- var date = f.format(DateTime.now().toUtc()) + " GMT";
- addNewAddressRequestModel.customer.addresses[0].createdOnUtc = date;
- hasError = false;
- await baseAppClient.post(ADD_ADDRESS_INFO,
- onSuccess: (dynamic response, int statusCode) {
- addressesList.clear();
- response["customers"][0]["addresses"].forEach((data) {
- addressesList
- .add(AddressInfo.fromJson(data));
- });
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: addNewAddressRequestModel.toJson(), isExternal: true, isAllowAny: true);
- }
-
- Future getCustomerAddresses() async {
- Map queryParams = {
- 'fields':'addresses'
- };
- hasError = false;
- await baseAppClient.get("$GET_CUSTOMER_ADDRESSES${customerInfo.customerId}",
- onSuccess: (dynamic response, int statusCode) {
- addressesList.clear();
- response["customers"][0]["addresses"].forEach((data) {
- addressesList
- .add(AddressInfo.fromJson(data));
- });
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, queryParams: queryParams, isExternal: true);
- }
-
-
- Future getCustomerInfo() async {
- Map queryParams = {
- 'FileNumber':'${user.patientID}'
- };
-
- hasError = false;
- await baseAppClient.get(GET_CUSTOMER_INFO,
- onSuccess: (dynamic response, int statusCode) {
- customerInfo= CustomerInfo.fromJson(response);
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, queryParams: queryParams, isExternal: true);
- }
-}
-
-
-class CustomerInfo {
- bool isRegistered;
- String userName;
- Null password;
- String email;
- Null errorMessage;
- String mobileNumber;
- int customerId;
-
- CustomerInfo(
- {this.isRegistered,
- this.userName,
- this.password,
- this.email,
- this.errorMessage,
- this.mobileNumber,
- this.customerId});
-
- CustomerInfo.fromJson(Map json) {
- isRegistered = json['IsRegistered'];
- userName = json['UserName'];
- password = json['Password'];
- email = json['Email'];
- errorMessage = json['ErrorMessage'];
- mobileNumber = json['MobileNumber'];
- customerId = json['CustomerId'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['IsRegistered'] = this.isRegistered;
- data['UserName'] = this.userName;
- data['Password'] = this.password;
- data['Email'] = this.email;
- data['ErrorMessage'] = this.errorMessage;
- data['MobileNumber'] = this.mobileNumber;
- data['CustomerId'] = this.customerId;
- return data;
- }
-}
-
-
-class AddressInfo {
- String id;
- String firstName;
- String lastName;
- String email;
- Null company;
- int countryId;
- String country;
- Null stateProvinceId;
- String city;
- String address1;
- String address2;
- String zipPostalCode;
- String phoneNumber;
- Null faxNumber;
- String customerAttributes;
- String createdOnUtc;
- Null province;
- String latLong;
-
- AddressInfo(
- {this.id,
- this.firstName,
- this.lastName,
- this.email,
- this.company,
- this.countryId,
- this.country,
- this.stateProvinceId,
- this.city,
- this.address1,
- this.address2,
- this.zipPostalCode,
- this.phoneNumber,
- this.faxNumber,
- this.customerAttributes,
- this.createdOnUtc,
- this.province,
- this.latLong});
-
- AddressInfo.fromJson(Map json) {
- id = json['id'];
- firstName = json['first_name'];
- lastName = json['last_name'];
- email = json['email'];
- company = json['company'];
- countryId = json['country_id'];
- country = json['country'];
- stateProvinceId = json['state_province_id'];
- city = json['city'];
- address1 = json['address1'];
- address2 = json['address2'];
- zipPostalCode = json['zip_postal_code'];
- phoneNumber = json['phone_number'];
- faxNumber = json['fax_number'];
- customerAttributes = json['customer_attributes'];
- createdOnUtc = json['created_on_utc'];
- province = json['province'];
- latLong = json['lat_long'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['id'] = this.id;
- data['first_name'] = this.firstName;
- data['last_name'] = this.lastName;
- data['email'] = this.email;
- data['company'] = this.company;
- data['country_id'] = this.countryId;
- data['country'] = this.country;
- data['state_province_id'] = this.stateProvinceId;
- data['city'] = this.city;
- data['address1'] = this.address1;
- data['address2'] = this.address2;
- data['zip_postal_code'] = this.zipPostalCode;
- data['phone_number'] = this.phoneNumber;
- data['fax_number'] = this.faxNumber;
- data['customer_attributes'] = this.customerAttributes;
- data['created_on_utc'] = this.createdOnUtc;
- data['province'] = this.province;
- data['lat_long'] = this.latLong;
- return data;
- }
-}
diff --git a/lib/core/service/AlHabibMedicalService/e_referral_service.dart b/lib/core/service/AlHabibMedicalService/e_referral_service.dart
index 3670e965..6c356f5c 100644
--- a/lib/core/service/AlHabibMedicalService/e_referral_service.dart
+++ b/lib/core/service/AlHabibMedicalService/e_referral_service.dart
@@ -2,7 +2,6 @@ import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/check_activation_code_for_e_referral_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/create_e_referral_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_all_cities_response_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_all_projects_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_all_relationship_types_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_e_referral_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_e_referral_response_model.dart';
@@ -11,18 +10,11 @@ import 'package:diplomaticquarterapp/core/service/base_service.dart';
class EReferralService extends BaseService {
List _relationTypes = List();
-
List get relationTypes => _relationTypes;
List _allCities = List();
-
List get allCities => _allCities;
- List _allProjects = List();
-
- List get allProjects => _allProjects;
-
List _allReferral = List();
-
List get allReferral => _allReferral;
String _activationCode;
String _logInTokenID;
@@ -50,106 +42,84 @@ class EReferralService extends BaseService {
Future getAllCities() async {
await baseAppClient.post(GET_ALL_CITIES,
onSuccess: (dynamic response, int statusCode) {
- _allCities.clear();
- response['ListCities'].forEach((city) {
- _allCities.add(GetAllCitiesResponseModel.fromJson(city));
- });
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: {});
- }
-
- Future getAllProjects() async {
- await baseAppClient.post(GET_PROJECT,
- onSuccess: (dynamic response, int statusCode) {
- _allProjects.clear();
- response['ListProject'].forEach((city) {
- _allProjects.add(GetAllProjectsResponseModel.fromJson(city));
- });
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: {});
+ _allCities.clear();
+ response['ListCities'].forEach((city) {
+ _allCities
+ .add(GetAllCitiesResponseModel.fromJson(city));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: {});
}
Future sendActivationCodeForEReferral(
+
SendActivationCodeForEReferralRequestModel
sendActivationCodeForEReferralRequestModel) async {
hasError = false;
await baseAppClient.post(SEND_ACTIVATION_CODE_FOR_E_REFERRAL,
onSuccess: (dynamic response, int statusCode) {
- print(response["VerificationCode"]);
_activationCode = response["VerificationCode"];
_logInTokenID = response["LogInTokenID"];
+
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: sendActivationCodeForEReferralRequestModel.toJson());
}
+
+
Future checkActivationCodeForEReferral(
CheckActivationCodeForEReferralResponseModel
checkActivationCodeForEReferralRequestModel) async {
checkActivationCodeForEReferralRequestModel.isDentalAllowedBackend = false;
- checkActivationCodeForEReferralRequestModel.logInTokenID = _logInTokenID;
- hasError = false;
+ checkActivationCodeForEReferralRequestModel.logInTokenID= _logInTokenID;
+ hasError =false;
await baseAppClient.post(CHECK_ACTIVATION_CODE_FOR_E_REFERRAL,
onSuccess: (dynamic response, int statusCode) {
- _isActivationCodeValid = true;
+ _isActivationCodeValid = true;
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: checkActivationCodeForEReferralRequestModel.toJson());
}
- Future createEReferral(
- CreateEReferralRequestModel createEReferralRequestModel) async {
- hasError = false;
- dynamic localRes;
- await baseAppClient.post(
- CREATE_E_REFERRAL /*'Services/Patients.svc/REST/CreateEReferral'*/,
- onSuccess: (dynamic response, int statusCode) {
- // TODO Waiting for fix service
- localRes = response;
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: createEReferralRequestModel.toJson());
- return Future.value(localRes);
- }
-
- Future getEReferrals(
- SearchEReferralRequestModel searchEReferralRequestModel) async {
- hasError = false;
- dynamic localRes;
- await baseAppClient.post(GET_E_REFERRALS,
+ Future createEReferral(
+ CreateEReferralRequestModel createEReferralRequestModel
+ ) async {
+ hasError = false;
+ await baseAppClient.post(CREATE_E_REFERRAL/*'Services/Patients.svc/REST/CreateEReferral'*/,
onSuccess: (dynamic response, int statusCode) {
- print("EEEEEE");
- _allReferral.clear();
- localRes = response;
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: searchEReferralRequestModel.toJson());
- return Future.value(localRes);
- }
+ // TODO Waiting for fix service
+ var asd= ("EEEEEE");
- Future getEReferralsIfLogin(String mobileNo) async {
- hasError = false;
- dynamic localRes;
- Map request = {};
- request['PatientMobileNumber'] = mobileNo;
- await baseAppClient.post(GET_E_REFERRALS,
- onSuccess: (dynamic response, int statusCode) {
- print("EEEEEE");
- _allReferral.clear();
- localRes = response;
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
- }, body: request);
- return Future.value(localRes);
+ }, body: createEReferralRequestModel.toJson());
}
+ Future getEReferrals(
+ SearchEReferralRequestModel searchEReferralRequestModel
+ ) async {
+ hasError = false;
+ // TODO return this code when the fix the server
+ // await baseAppClient.post(GET_E_REFERRALS,
+ // onSuccess: (dynamic response, int statusCode) {
+ // print("EEEEEE");
+ // // TODO Waiting for fix service
+ // // ToDo change this one when you have data
+ // _allReferral.clear();
+ // // response['ListCities'].forEach((city) {
+ // // _allReferral
+ // // .add(SearchEReferralResponseModel.fromJson(city));
+ // // });
+ //
+ // }, onFailure: (String error, int statusCode) {
+ // hasError = true;
+ // super.error = error;
+ // }, body: searchEReferralRequestModel.toJson());
+ }
}
diff --git a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart
index 2ec1e310..e636321b 100644
--- a/lib/core/service/AlHabibMedicalService/home_health_care_service.dart
+++ b/lib/core/service/AlHabibMedicalService/home_health_care_service.dart
@@ -1,5 +1,4 @@
import 'package:diplomaticquarterapp/config/config.dart';
-import 'package:diplomaticquarterapp/core/enum/OrderService.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart';
@@ -8,8 +7,6 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealth
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart';
-import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart';
-import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart';
import '../base_service.dart';
@@ -18,10 +15,9 @@ class HomeHealthCareService extends BaseService {
List hhcAllPresOrdersList = List();
List hhcAllOrderDetail = List();
- List addressesList = List();
bool isOrderUpdated;
- CustomerInfo customerInfo;
+
Future getHHCAllServices(
HHCGetAllServicesRequestModel hHCGetAllServicesRequestModel) async {
hasError = false;
@@ -41,11 +37,11 @@ class HomeHealthCareService extends BaseService {
GetHHCAllPresOrdersRequestModel getHHCAllPresOrdersRequestModel =
GetHHCAllPresOrdersRequestModel();
hasError = false;
- await baseAppClient.post(GET_PATIENT_ALL_PRES_ORD,
+ await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS,
onSuccess: (dynamic response, int statusCode) {
hhcAllPresOrdersList.clear();
response['PatientER_GetPatientAllPresOrdersList'].forEach((data) {
- if (data['ServiceID'] == OrderService.HOME_HEALTH_CARE.getIdOrderService())
+ if (data['ServiceID'] == 2)
hhcAllPresOrdersList
.add(GetHHCAllPresOrdersResponseModel.fromJson(data));
});
@@ -95,5 +91,3 @@ class HomeHealthCareService extends BaseService {
}, body: order.toJson());
}
}
-
-
diff --git a/lib/core/service/childvaccines/add_new_child_service.dart b/lib/core/service/childvaccines/add_new_child_service.dart
index 98e87100..5e4a4d86 100644
--- a/lib/core/service/childvaccines/add_new_child_service.dart
+++ b/lib/core/service/childvaccines/add_new_child_service.dart
@@ -14,12 +14,19 @@ class CreteNewBabyService extends BaseService {
Future getCreateNewBabyOrders({CreateNewBaby newChild,int userID}) async {
hasError = false;
+ await getUser();
Map body = Map.from(newChild.toJson());
body['CreatedBy'] = 102;
body['EditedBy'] = 102;
body['UserID'] = userID;
body['AlertBy'] = 2;
+ body['EmailAddress'] = user.emailAddress;
body['IsLogin'] = true;
+ body['LogInTokenID'] = await sharedPref.getString(TOKEN);
+ body['MobileNumber'] = user.mobileNumber;
+ body['NationalID'] = user.nationalityID;
+ body['ZipCode'] = user.zipCode;
+
body['isDentalAllowedBackend'] = false;
await baseAppClient.post(GET_NEWCHILD_REQUEST,
diff --git a/lib/core/service/childvaccines/delete_baby_service.dart b/lib/core/service/childvaccines/delete_baby_service.dart
index 49cbd29e..115d13c5 100644
--- a/lib/core/service/childvaccines/delete_baby_service.dart
+++ b/lib/core/service/childvaccines/delete_baby_service.dart
@@ -1,5 +1,4 @@
import 'package:diplomaticquarterapp/config/config.dart';
-import 'package:diplomaticquarterapp/core/model/childvaccines/List_BabyInformationModel.dart';
import 'package:diplomaticquarterapp/core/model/childvaccines/add_newchild_model.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/childvaccines/create_new_user_model.dart';
@@ -18,13 +17,22 @@ class DeleteBabyService extends BaseService{
List deleteBabyModelList= List();
- Future getDeleteBabyOrder({List_BabyInformationModel babyInfo}) async {
+ Future getDeleteBabyOrder({DeleteBaby deleteChild,int babyID}) async {
hasError = false;
await getUser();
- Map body = Map();
+ Map body = Map.from(deleteChild.toJson());
+ // body['CreatedBy'] = 102;
body['EditedBy'] = 102;
+ //body['BabyID'] = babyID;
+ //body['BabyID'] = createNewBabyModelList ;
+ // body['AlertBy'] = 2;
+ // body['EmailAddress'] = user.emailAddress;
body['IsLogin'] = true;
- body['BabyID'] = babyInfo.babyID;
+ body['LogInTokenID'] = await sharedPref.getString(TOKEN);
+ body['MobileNumber'] = user.mobileNumber;
+ body['NationalID'] = user.nationalityID;
+ body['ZipCode'] = user.zipCode;
+
body['isDentalAllowedBackend'] = false;
await baseAppClient.post(DELETE_CHILD_REQUEST,
@@ -37,6 +45,31 @@ class DeleteBabyService extends BaseService{
}, body: body);
}
-
+ // Future getCreateNewBabyOrders({CreateNewBaby newChild,int userID}) async {
+ // hasError = false;
+ // await getUser();
+ // Map body = Map.from(newChild.toJson());
+ // body['CreatedBy'] = 102;
+ // body['EditedBy'] = 102;
+ // body['UserID'] = userID;
+ // body['AlertBy'] = 2;
+ // body['EmailAddress'] = user.emailAddress;
+ // body['IsLogin'] = true;
+ // body['LogInTokenID'] = await sharedPref.getString(TOKEN);
+ // body['MobileNumber'] = user.mobileNumber;
+ // body['NationalID'] = user.nationalityID;
+ // body['ZipCode'] = user.zipCode;
+ //
+ // body['isDentalAllowedBackend'] = false;
+ //
+ // await baseAppClient.post(GET_NEWCHILD_REQUEST,
+ // onSuccess: (dynamic response, int statusCode) {
+ // var asd ="";
+ // },
+ // onFailure: (String error, int statusCode) {
+ // hasError = true;
+ // super.error = error;
+ // }, body: body);
+ // }
}
\ No newline at end of file
diff --git a/lib/core/service/childvaccines/get_vaccinations_item_services.dart b/lib/core/service/childvaccines/get_vaccinations_item_services.dart
new file mode 100644
index 00000000..5ff936af
--- /dev/null
+++ b/lib/core/service/childvaccines/get_vaccinations_item_services.dart
@@ -0,0 +1,27 @@
+import 'package:diplomaticquarterapp/config/config.dart';
+import 'package:diplomaticquarterapp/core/model/childvaccines/get_vacainations_itemsmodel.dart';
+
+import '../base_service.dart';
+
+class GetVccinationsItemsService extends BaseService {
+ List getVaccinationsItemModelList = List();
+ Map body = Map();
+
+
+
+ Future getaccinationsitemOrders() async {
+ hasError = false;
+ await baseAppClient.post(GET_TABLE_REQUEST,
+ onSuccess: (dynamic response, int statusCode) {
+ getVaccinationsItemModelList.clear();
+ response['List_CreateVaccinationTableModel'].forEach((vital) {
+ getVaccinationsItemModelList.add(
+ GET_VACCINATIONS_ITEMSMODEL.fromJson(vital));
+ });
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ super.error = error;
+ }, body: body);
+ }
+
+}
\ No newline at end of file
diff --git a/lib/core/service/childvaccines/user_information_service.dart b/lib/core/service/childvaccines/user_information_service.dart
index 55ddc259..0628920c 100644
--- a/lib/core/service/childvaccines/user_information_service.dart
+++ b/lib/core/service/childvaccines/user_information_service.dart
@@ -4,11 +4,11 @@ import 'package:diplomaticquarterapp/core/model/childvaccines/user_information_m
import '../base_service.dart';
class UserInformationService extends BaseService {
- List_UserInformationModel userInformationModel = List_UserInformationModel();
+ List userInformationModelList = List();
+ Map body = Map();
Future getUserInformationOrders() async {
hasError = false;
- Map body = Map();
await getUser();
body['CreatedBy'] = 102;
body['EditedBy'] = 102;
@@ -22,44 +22,14 @@ class UserInformationService extends BaseService {
await baseAppClient.post(GET_USERINFORMATION_REQUEST,
onSuccess: (dynamic response, int statusCode) {
+ userInformationModelList.clear();
+
response['List_UserInformationModel_New'].forEach((vital) {
- userInformationModel = List_UserInformationModel.fromJson(vital);
+ userInformationModelList.add(List_UserInformationModel.fromJson(vital));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
-
- Future updateEmail(String email) async {
- hasError = false;
- Map body = Map();
- body['IsInternalRequest'] = true;
- body['EmailAddress'] = email;
- body['IsLogin'] = true;
- body['isDentalAllowedBackend'] = false;
- await baseAppClient.post(UPDATE_PATENT_EMAIL,
- onSuccess: (dynamic response, int statusCode) {
- var asd = "";
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: body);
- }
-
- Future updateUserInfo(String email) async {
- hasError = false;
- Map body = Map();
- body['IsInternalRequest'] = true;
- body['EmailAddress'] = email;
- body['IsLogin'] = true;
- body['isDentalAllowedBackend'] = false;
- await baseAppClient.post(UPDATE_PATENT_INFO,
- onSuccess: (dynamic response, int statusCode) {
- var asd = "";
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: body);
- }
}
diff --git a/lib/core/service/childvaccines/vaccination_table_service.dart b/lib/core/service/childvaccines/vaccination_table_service.dart
index da3c8518..7f987b76 100644
--- a/lib/core/service/childvaccines/vaccination_table_service.dart
+++ b/lib/core/service/childvaccines/vaccination_table_service.dart
@@ -1,9 +1,7 @@
import 'package:diplomaticquarterapp/config/config.dart';
-import 'package:diplomaticquarterapp/core/model/childvaccines/List_BabyInformationModel.dart';
import 'package:diplomaticquarterapp/core/model/childvaccines/add_newchild_model.dart';
import 'package:diplomaticquarterapp/core/model/childvaccines/create_vaccination_table.dart';
import 'package:diplomaticquarterapp/core/model/childvaccines/user_information_model.dart';
-import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import '../base_service.dart';
class VaccinationTableService extends BaseService {
@@ -12,16 +10,19 @@ class VaccinationTableService extends BaseService {
- Future getCreateVaccinationTableOrders({List_BabyInformationModel babyInfo, List_UserInformationModel informationModel, bool isSendEmail=false}) async {
+ Future getCreateVaccinationTableOrders() async {
hasError = false;
await getUser();
- body['BabyName']=babyInfo.babyName;
- body['DOB'] = DateUtil.convertDateToString(babyInfo.dOB);
- body['EmailAddress'] = informationModel.emailAddress;
+ body['BabyName']="fffffffffff eeeeeeeeeeeeee";
+ body['DOB'] = "/Date(1585774800000+0300)/";
+ body['EmailAddress'] = user.emailAddress;
body['isDentalAllowedBackend'] = false;
- body['SendEmail'] = isSendEmail;
+ body['SendEmail'] = false;
body['IsLogin'] =true;
+
+
+
await baseAppClient.post(GET_TABLE_REQUEST,
onSuccess: (dynamic response, int statusCode) {
createVaccinationTableModelList.clear();
diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart
index e7d69a31..54be167f 100644
--- a/lib/core/service/client/base_app_client.dart
+++ b/lib/core/service/client/base_app_client.dart
@@ -2,13 +2,10 @@ import 'dart:convert';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
-import 'package:diplomaticquarterapp/core/service/medical/vital_sign_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
-import 'package:diplomaticquarterapp/pages/appUpdatePage/app_update_page.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:provider/provider.dart';
@@ -24,92 +21,74 @@ AppSharedPreferences sharedPref = new AppSharedPreferences();
/// onFailure: (String error, int statusCode) {},
/// body: Map();
///
-AuthenticatedUserObject authenticatedUserObject =
- locator();
-VitalSignService _vitalSignService = locator();
+AuthenticatedUserObject authenticatedUserObject = locator();
class BaseAppClient {
- post(String endPoint,
- {Map body,
- Function(dynamic response, int statusCode) onSuccess,
- Function(String error, int statusCode) onFailure,
- bool isAllowAny = false,
- bool isExternal = false}) async {
- String url;
- if (isExternal) {
- url = endPoint;
- } else {
- url = BASE_URL + endPoint;
- }
+ post(String endPoint, {Map body, Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, bool isAllowAny = false}) async {
+ String url = BASE_URL + endPoint;
try {
//Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
- if (!isExternal) {
- String token = await sharedPref.getString(TOKEN);
- var languageID = await sharedPref.getString(APP_LANGUAGE)?? 'ar';
- var user = await sharedPref.getObject(USER_PROFILE);
- if (body.containsKey('SetupID')) {
- body['SetupID'] = body.containsKey('SetupID')
- ? body['SetupID'] != null
- ? body['SetupID']
- : SETUP_ID
- : SETUP_ID;
- }
-
- body['VersionID'] = VERSION_ID;
- body['Channel'] = CHANNEL;
- body['LanguageID'] = body.containsKey('LanguageID')
- ? body['LanguageID'] != null
- ? body['LanguageID']
- : languageID == 'ar'
- ? 1
- : 2
- : languageID == 'en'
- ? 2
- : 1;
-
- body['IPAdress'] = IP_ADDRESS;
- body['generalid'] = GENERAL_ID;
- body['PatientOutSA'] = body.containsKey('PatientOutSA')
- ? body['PatientOutSA'] != null
- ? body['PatientOutSA']
- : PATIENT_OUT_SA
- : PATIENT_OUT_SA;
-
- if (body.containsKey('isDentalAllowedBackend')) {
- body['isDentalAllowedBackend'] =
- body.containsKey('isDentalAllowedBackend')
- ? body['isDentalAllowedBackend'] != null
- ? body['isDentalAllowedBackend']
- : IS_DENTAL_ALLOWED_BACKEND
- : IS_DENTAL_ALLOWED_BACKEND;
- }
+ String token = await sharedPref.getString(TOKEN);
+ var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
+ var user = await sharedPref.getObject(USER_PROFILE);
+ if (body.containsKey('SetupID')) {
+ body['SetupID'] = body.containsKey('SetupID')
+ ? body['SetupID'] != null
+ ? body['SetupID']
+ : SETUP_ID
+ : SETUP_ID;
+ }
+ body['VersionID'] = VERSION_ID;
+ body['Channel'] = CHANNEL;
+ body['LanguageID'] = body.containsKey('LanguageID')
+ ? body['LanguageID'] != null
+ ? body['LanguageID']
+ : languageID == 'ar'
+ ? 1
+ : 2
+ : languageID == 'ar'
+ ? 1
+ : 2;
+
+ body['IPAdress'] = IP_ADDRESS;
+ body['generalid'] = GENERAL_ID;
+ body['PatientOutSA'] = body.containsKey('PatientOutSA')
+ ? body['PatientOutSA'] != null
+ ? body['PatientOutSA']
+ : PATIENT_OUT_SA
+ : PATIENT_OUT_SA;
+
+ if (body.containsKey('isDentalAllowedBackend')) {
+ body['isDentalAllowedBackend'] = body.containsKey('isDentalAllowedBackend')
+ ? body['isDentalAllowedBackend'] != null
+ ? body['isDentalAllowedBackend']
+ : IS_DENTAL_ALLOWED_BACKEND
+ : IS_DENTAL_ALLOWED_BACKEND;
+ }
- body['DeviceTypeID'] = DeviceTypeID;
-
- if (!body.containsKey('IsPublicRequest')) {
- body['PatientType'] = body.containsKey('PatientType')
- ? body['PatientType'] != null
- ? body['PatientType']
- : user['PatientType'] != null
- ? user['PatientType']
- : PATIENT_TYPE
- : PATIENT_TYPE;
-
- body['PatientTypeID'] = body.containsKey('PatientTypeID')
- ? body['PatientTypeID'] != null
- ? body['PatientTypeID']
- : user['PatientType'] != null
- ? user['PatientType']
- : PATIENT_TYPE_ID
- : PATIENT_TYPE_ID;
- if (user != null) {
- body['TokenID'] = token;
- body['PatientID'] = body['PatientID'] != null
- ? body['PatientID']
- : user['PatientID'];
- body['PatientOutSA'] = user['OutSA'];
- body['SessionID'] = SESSION_ID; //getSessionId(token);
- }
+ body['DeviceTypeID'] = DeviceTypeID;
+
+ if (!body.containsKey('IsPublicRequest')) {
+ body['PatientType'] = body.containsKey('PatientType')
+ ? body['PatientType'] != null
+ ? body['PatientType']
+ : user['PatientType'] != null
+ ? user['PatientType']
+ : PATIENT_TYPE
+ : PATIENT_TYPE;
+
+ body['PatientTypeID'] = body.containsKey('PatientTypeID')
+ ? body['PatientTypeID'] != null
+ ? body['PatientTypeID']
+ : user['PatientTypeID'] != null
+ ? user['PatientTypeID']
+ : PATIENT_TYPE_ID
+ : PATIENT_TYPE_ID;
+ if (user != null) {
+ body['TokenID'] = token;
+ body['PatientID'] = body['PatientID'] != null ? body['PatientID'] : user['PatientID'];
+ body['PatientOutSA'] = user['OutSA'];
+ body['SessionID'] = SESSION_ID; //getSessionId(token);
}
}
@@ -118,12 +97,7 @@ class BaseAppClient {
var ss = json.encode(body);
if (await Utils.checkConnection()) {
- final response = await http.post(url.trim(),
- body: json.encode(body),
- headers: {
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'
- });
+ final response = await http.post(url.trim(), body: json.encode(body), headers: {'Content-Type': 'application/json', 'Accept': 'application/json'});
final int statusCode = response.statusCode;
print("statusCode :$statusCode");
if (statusCode < 200 || statusCode >= 400 || json == null) {
@@ -133,10 +107,6 @@ class BaseAppClient {
if (parsed['Response_Message'] != null) {
onSuccess(parsed, statusCode);
} else {
- if (parsed['ErrorType'] == 4) {
- navigateToAppUpdate(
- AppGlobal.context, parsed['ErrorEndUserMessage']);
- }
if (isAllowAny) {
onSuccess(parsed, statusCode);
} else if (parsed['IsAuthenticated'] == null) {
@@ -147,12 +117,9 @@ class BaseAppClient {
} else if (parsed['Result'] == 'OK') {
onSuccess(parsed, statusCode);
} else {
- onFailure(
- parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'],
- statusCode);
+ onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode);
}
- } else if (parsed['MessageStatus'] == 1 ||
- parsed['SMSLoginRequired'] == true) {
+ } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) {
onSuccess(parsed, statusCode);
} else if (!parsed['IsAuthenticated']) {
await logout();
@@ -162,9 +129,7 @@ class BaseAppClient {
if (parsed['SameClinicApptList'] != null) {
onSuccess(parsed, statusCode);
} else {
- onFailure(
- parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'],
- statusCode);
+ onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode);
}
}
}
@@ -174,29 +139,12 @@ class BaseAppClient {
}
} catch (e) {
print(e);
- onFailure('Failed to connect to the server', -1);
- // onFailure(e.toString(), -1);
+ onFailure(e.toString(), -1);
}
}
- Future navigateToAppUpdate(context, String text) async {
- Navigator.pushReplacement(
- context,
- MaterialPageRoute(
- builder: (context) => AppUpdatePage(appUpdateText: text)));
- }
-
- get(String endPoint,
- {Function(dynamic response, int statusCode) onSuccess,
- Function(String error, int statusCode) onFailure,
- Map queryParams,
- bool isExternal = false}) async {
- String url;
- if (isExternal) {
- url = endPoint;
- } else {
- url = BASE_URL + endPoint;
- }
+ get(String endPoint, {Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, Map queryParams}) async {
+ String url = BASE_URL + endPoint;
if (queryParams != null) {
String queryString = Uri(queryParameters: queryParams).query;
url += '?' + queryString;
@@ -207,10 +155,7 @@ class BaseAppClient {
if (await Utils.checkConnection()) {
final response = await http.get(
url.trim(),
- headers: {
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'
- },
+ headers: {'Content-Type': 'application/json', 'Accept': 'application/json'},
);
final int statusCode = response.statusCode;
print("statusCode :$statusCode");
@@ -226,13 +171,38 @@ class BaseAppClient {
}
}
+ simpleGet(String fullUrl, {Function(dynamic response, int statusCode) onSuccess, Function(String error, int statusCode) onFailure, Map queryParams}) async {
+ String url = fullUrl;
+ var haveParams = (queryParams != null);
+ if (haveParams) {
+ String queryString = Uri(queryParameters: queryParams).query;
+ url += '?' + queryString;
+ print("URL Query String: $url");
+ }
+
+ if (await Utils.checkConnection()) {
+ final response = await http.get(
+ url.trim(),
+ headers: {'Content-Type': 'application/json', 'Accept': 'application/json'},
+ );
+
+ final int statusCode = response.statusCode;
+ print("statusCode :$statusCode");
+
+ if (statusCode < 200 || statusCode >= 400 || json == null) {
+ onFailure('Error While Fetching data', statusCode);
+ } else {
+ onSuccess(response.body.toString(), statusCode);
+ }
+ } else {
+ onFailure('Please Check The Internet Connection', -1);
+ }
+ }
+
logout() async {
await sharedPref.remove(LOGIN_TOKEN_ID);
await authenticatedUserObject.getUser();
- Provider.of(AppGlobal.context, listen: false).isLogin =
- false;
- _vitalSignService.weightKg = "";
- _vitalSignService.heightCm = "";
+ Provider.of(AppGlobal.context, listen: false).isLogin = false;
Navigator.of(AppGlobal.context).pushReplacementNamed(HOME);
}
@@ -240,4 +210,25 @@ class BaseAppClient {
///return id.replaceAll(RegExp('/[^\w\s]/'), '');
// return id.replaceAll(RegExp('/[^a-zA-Z ]'), '');
}
+
+ static defaultHttpParameters() async {
+ String token = await sharedPref.getString(TOKEN);
+ var languageID = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
+ var user = await sharedPref.getObject(USER_PROFILE);
+ var params = {};
+ if (user != null) {
+ params['TokenID'] = token;
+ params['PatientID'] = user['PatientID'];
+ params['PatientOutSA'] = user['OutSA'];
+ params['SessionID'] = SESSION_ID; //getSessionId(token);
+ }
+
+ params['IPAdress'] = IP_ADDRESS;
+ params['generalid'] = GENERAL_ID;
+ params['VersionID'] = VERSION_ID;
+ params['Channel'] = CHANNEL;
+ params['LanguageID'] = languageID == 'ar' ? 1 : 2;
+
+ return params;
+ }
}
diff --git a/lib/core/service/geofencing/GeofencingServices.dart b/lib/core/service/geofencing/GeofencingServices.dart
new file mode 100644
index 00000000..a186b4c4
--- /dev/null
+++ b/lib/core/service/geofencing/GeofencingServices.dart
@@ -0,0 +1,65 @@
+import 'dart:convert';
+import 'dart:developer';
+
+import 'package:diplomaticquarterapp/config/config.dart';
+import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
+import 'package:diplomaticquarterapp/core/model/geofencing/requests/GeoZonesRequestModel.dart';
+import 'package:diplomaticquarterapp/core/model/geofencing/requests/LogGeoZoneRequestModel.dart';
+import 'package:diplomaticquarterapp/core/model/geofencing/responses/GeoZonesResponseModel.dart';
+import 'package:diplomaticquarterapp/core/model/geofencing/responses/LogGeoZoneResponseModel.dart';
+import 'package:diplomaticquarterapp/core/service/base_service.dart';
+import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/foundation.dart';
+
+import '../../../locator.dart';
+
+class GeofencingServices extends BaseService {
+ List geoZones = List();
+ bool testZones = true;
+
+ Future> getAllGeoZones(GeoZonesRequestModel request) async {
+ hasError = false;
+
+ var _zonesJsonString;
+ await baseAppClient.post(GET_GEO_ZONES, onSuccess: (dynamic response, int statusCode) {
+ var zones = response['GeoF_PointsList'];
+ zones.forEach((json) {
+ geoZones.add(GeoZonesResponseModel().fromJson(json));
+ });
+
+ if (kDebugMode || testZones) addTestingGeoZones(zones);
+
+ _zonesJsonString = json.encode(zones);
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ return Future.error(error);
+ }, body: request.toFlatMap());
+
+ AppSharedPreferences pref = AppSharedPreferences();
+ await pref.setString(HMG_GEOFENCES, _zonesJsonString);
+ debugPrint("GEO ZONES saved to AppPreferences with key '$HMG_GEOFENCES'");
+
+ return geoZones;
+ }
+
+ LogGeoZoneResponseModel logResponse;
+ Future logGeoZone(LogGeoZoneRequestModel request) async {
+ hasError = false;
+ await baseAppClient.post(LOG_GEO_ZONES, onSuccess: (dynamic response, int statusCode) {
+ logResponse = LogGeoZoneResponseModel().fromJson(response);
+ }, onFailure: (String error, int statusCode) {
+ hasError = true;
+ return Future.error(error);
+ }, body: request.toFlatMap());
+ return logResponse;
+ }
+
+ addTestingGeoZones(List zones) {
+ zones.add({"GEOF_ID": -1, "Description": "ZiK Home", "Latitude": "24.691136", "Longitude": "46.650116", "Radius": 100, "Type": 1});
+ zones.add({"GEOF_ID": -2, "Description": "CS Office", "Latitude": "24.7087913", "Longitude": "46.6656461", "Radius": 100, "Type": 1});
+ zones.add({"GEOF_ID": -3, "Description": "Mahmoud Shrouf Home", "Latitude": "24.777577", "Longitude": "46.652675", "Radius": 100, "Type": 1});
+ zones.add({"GEOF_ID": -4, "Description": "Panorama Mall", "Latitude": "24.692453", "Longitude": "46.669168", "Radius": 450, "Type": 1});
+ zones.add({"GEOF_ID": -5, "Description": "Saudi Architects Crossing", "Latitude": "24.698375", "Longitude": "46.668567", "Radius": 140, "Type": 1});
+ }
+}
diff --git a/lib/core/service/medical/my_balance_service.dart b/lib/core/service/medical/my_balance_service.dart
index e3be9bcf..c456b38c 100644
--- a/lib/core/service/medical/my_balance_service.dart
+++ b/lib/core/service/medical/my_balance_service.dart
@@ -1,3 +1,5 @@
+import 'dart:convert';
+
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
@@ -22,8 +24,7 @@ class MyBalanceService extends BaseService {
String logInTokenID;
String verificationCode;
- AuthenticatedUserObject authenticatedUserObject =
- locator();
+ AuthenticatedUserObject authenticatedUserObject = locator();
getPatientAdvanceBalanceAmount() async {
hasError = false;
@@ -60,14 +61,13 @@ class MyBalanceService extends BaseService {
}, body: body);
}
- getPatientInfoByPatientIDAndMobileNumber(AdvanceModel advanceModel) async {
+ getPatientInfoByPatientIDAndMobileNumber() async {
hasError = false;
super.error = "";
Map body = Map();
body['isDentalAllowedBackend'] = false;
- body['MobileNo'] = advanceModel.mobileNumber;
- body['ProjectID'] = advanceModel.hospitalsModel.iD;
- body['PatientID'] = advanceModel.fileNumber;
+ body['MobileNo'] = authenticatedUserObject.user.mobileNumber;
+ body['ProjectID'] = authenticatedUserObject.user.projectID;
await baseAppClient.post(GET_PATIENT_INFO_BY_ID_AND_MOBILE_NUMBER,
onSuccess: (response, statusCode) async {
@@ -81,7 +81,7 @@ class MyBalanceService extends BaseService {
}, body: body);
}
- sendActivationCodeForAdvancePayment({int patientID, int projectID}) async {
+ sendActivationCodeForAdvancePayment({int patientID,int projectID}) async {
hasError = false;
super.error = "";
Map body = Map();
@@ -111,8 +111,9 @@ class MyBalanceService extends BaseService {
body['LogInTokenID'] = logInTokenID;
await baseAppClient.post(CHECK_ACTIVATION_CODE_FOR_ADVANCE_PAYMENT,
- onSuccess: (response, statusCode) async {},
- onFailure: (String error, int statusCode) {
+ onSuccess: (response, statusCode) async {
+
+ }, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
super.error = error;
diff --git a/lib/core/service/medical/prescriptions_service.dart b/lib/core/service/medical/prescriptions_service.dart
index d6ad3732..b920499c 100644
--- a/lib/core/service/medical/prescriptions_service.dart
+++ b/lib/core/service/medical/prescriptions_service.dart
@@ -57,30 +57,20 @@ class PrescriptionsService extends BaseService {
List prescriptionReportList = List();
Future getPrescriptionReport(
- {Prescriptions prescriptions}) async {
+ {int dischargeNo, int projectId, int clinicID, String setupID,int episodeID}) async {
hasError = false;
- _requestPrescriptionReport.dischargeNo = prescriptions.dischargeNo;
- _requestPrescriptionReport.projectID = prescriptions.projectID;
- _requestPrescriptionReport.clinicID = prescriptions.clinicID;
- _requestPrescriptionReport.setupID = prescriptions.setupID;
- _requestPrescriptionReport.episodeID = prescriptions.episodeID;
- _requestPrescriptionReport.appointmentNo = prescriptions.appointmentNo;
-
- await baseAppClient.post(prescriptions.isInOutPatient? GET_PRESCRIPTION_REPORT_ENH : GET_PRESCRIPTION_REPORT,
+ _requestPrescriptionReport.dischargeNo = dischargeNo;
+ _requestPrescriptionReport.projectID = projectId;
+ _requestPrescriptionReport.clinicID = clinicID;
+ _requestPrescriptionReport.setupID = setupID;
+ _requestPrescriptionReport.episodeID = episodeID;
+
+ await baseAppClient.post(GET_PRESCRIPTION_REPORT,
onSuccess: (dynamic response, int statusCode) {
prescriptionReportList.clear();
- prescriptionReportEnhList.clear();
- if(prescriptions.isInOutPatient){
- response['ListPRM'].forEach((prescriptions) {
- prescriptionReportEnhList.add(PrescriptionReportEnh.fromJson(prescriptions));
- });
- }else{
- response['INP_GetPrescriptionReport_List'].forEach((prescriptions) {
- prescriptionReportList.add(PrescriptionReport.fromJson(prescriptions));
- });
- }
-
-
+ response['INP_GetPrescriptionReport_List'].forEach((prescriptions) {
+ prescriptionReportList.add(PrescriptionReport.fromJson(prescriptions));
+ });
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
diff --git a/lib/core/service/packages_offers/PackagesOffersServices.dart b/lib/core/service/packages_offers/PackagesOffersServices.dart
new file mode 100644
index 00000000..e58c3fa3
--- /dev/null
+++ b/lib/core/service/packages_offers/PackagesOffersServices.dart
@@ -0,0 +1,51 @@
+import 'dart:convert';
+import 'dart:developer';
+
+import 'package:diplomaticquarterapp/config/config.dart';
+import 'package:diplomaticquarterapp/core/model/packages_offers/requests/OffersCategoriesRequestModel.dart';
+import 'package:diplomaticquarterapp/core/model/packages_offers/requests/OffersProductsRequestModel.dart';
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferCategoriesResponseModel.dart';
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferProductsResponseModel.dart';
+import 'package:diplomaticquarterapp/core/service/base_service.dart';
+import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
+
+import '../../../locator.dart';
+
+class OffersAndPackagesServices extends BaseService {
+ List categoryList = List();
+
+ Future> getAllCategories(OffersCategoriesRequestModel request) async {
+ hasError = false;
+ var url = EXA_CART_API_BASE_URL + PACKAGES_CATEGORIES;
+ await baseAppClient.simpleGet(url, onSuccess: (dynamic stringResponse, int statusCode) {
+ if (statusCode == 200) {
+ var jsonResponse = json.decode(stringResponse);
+ jsonResponse['categories'].forEach((json) {
+ categoryList.add(OfferCategoriesResponseModel().fromJson(json));
+ });
+ }
+ }, onFailure: (String error, int statusCode) {
+ log(error);
+ }, queryParams: request.toFlatMap());
+
+ return categoryList;
+ }
+
+ List productList = List();
+ Future> getAllProducts(OffersProductsRequestModel request) async {
+ hasError = false;
+ var url = EXA_CART_API_BASE_URL + PACKAGES_PRODUCTS;
+ await baseAppClient.simpleGet(url, onSuccess: (dynamic stringResponse, int statusCode) {
+ if (statusCode == 200) {
+ var jsonResponse = json.decode(stringResponse);
+ jsonResponse['products'].forEach((json) {
+ productList.add(OfferProductsResponseModel().fromJson(json));
+ });
+ }
+ }, onFailure: (String error, int statusCode) {
+ log(error);
+ }, queryParams: request.toFlatMap());
+
+ return productList;
+ }
+}
diff --git a/lib/core/service/privilege_service.dart b/lib/core/service/privilege_service.dart
deleted file mode 100644
index 5beef992..00000000
--- a/lib/core/service/privilege_service.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-import 'package:diplomaticquarterapp/config/config.dart';
-import 'package:diplomaticquarterapp/core/model/privilege/PrivilegeModel.dart';
-import 'package:diplomaticquarterapp/core/service/base_service.dart';
-
-class PrivilegeService extends BaseService {
-
- List privilegeModelList = List();
-
- Future getPrivilege() async {
- Map body = Map();
- body['PatientType'] = 4;
- await baseAppClient.post(GET_PRIVILEGE,
- onSuccess: (dynamic response, int statusCode) {
- response['ServicePrivilegeList'].forEach((item) {
- privilegeModelList.add(PrivilegeModel.fromJson(item));
- });
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: body);
- }
-}
diff --git a/lib/core/service/weather_service.dart b/lib/core/service/weather_service.dart
deleted file mode 100644
index b2dcf0ef..00000000
--- a/lib/core/service/weather_service.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-import 'package:diplomaticquarterapp/config/config.dart';
-import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
-import 'package:diplomaticquarterapp/core/model/weahter/weather_model.dart';
-import 'package:diplomaticquarterapp/core/service/base_service.dart';
-
-class WeatherService extends BaseService {
- List weatherIndicatorData = List();
-
- Map body = Map();
- String Latitude = "";
- String Longitude = "";
- String PhoneNumber = "";
-
- Future getWeatherData() async {
- hasError = false;
-
- var lat = await sharedPref.getDouble(USER_LAT);
- var long = await sharedPref.getDouble(USER_LONG);
- body['Latitude'] = lat ?? 0;
- body['Longitude'] = long ?? 0;
-
- await baseAppClient.post(WEATHER_INDICATOR,
- onSuccess: (dynamic response, int statusCode) {
-
-
- response['GetCityInfo_List'].forEach((data) {
- weatherIndicatorData.add(GetCityInfoList.fromJson(data));
- });
- print(weatherIndicatorData);
-
- }, onFailure: (String error, int statusCode) {
- hasError = true;
- super.error = error;
- }, body: body);
- await this.sharedPref.setObject(WEATHER,weatherIndicatorData[0]);
- }
-}
diff --git a/lib/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart b/lib/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart
deleted file mode 100644
index 5bde5a5f..00000000
--- a/lib/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart
+++ /dev/null
@@ -1,136 +0,0 @@
-class AddNewAddressRequestModel {
- Customer customer;
-
- AddNewAddressRequestModel({this.customer});
-
- AddNewAddressRequestModel.fromJson(Map json) {
- customer = json['customer'] != null
- ? new Customer.fromJson(json['customer'])
- : null;
- }
-
- Map toJson() {
- final Map data = new Map();
- if (this.customer != null) {
- data['customer'] = this.customer.toJson();
- }
- return data;
- }
-}
-
-class Customer {
- List addresses;
- int id;
- String email;
- List roleIds;
-
- Customer({this.addresses, this.id, this.email, this.roleIds});
-
- Customer.fromJson(Map json) {
- if (json['addresses'] != null) {
- addresses = new List();
- json['addresses'].forEach((v) {
- addresses.add(new Addresses.fromJson(v));
- });
- }
- id = json['id'];
- email = json['email'];
- roleIds = json['role_ids'].cast();
- }
-
- Map toJson() {
- final Map data = new Map();
- if (this.addresses != null) {
- data['addresses'] = this.addresses.map((v) => v.toJson()).toList();
- }
- data['id'] = this.id;
- data['email'] = this.email;
- data['role_ids'] = this.roleIds;
- return data;
- }
-}
-
-class Addresses {
- int id;
- String firstName;
- String lastName;
- String email;
- Null company;
- int countryId;
- String country;
- Null stateProvinceId;
- String city;
- String address1;
- String address2;
- String zipPostalCode;
- String phoneNumber;
- Null faxNumber;
- String customerAttributes;
- String createdOnUtc;
- Null province;
- String latLong;
-
- Addresses(
- {this.id,
- this.firstName,
- this.lastName,
- this.email,
- this.company,
- this.countryId,
- this.country,
- this.stateProvinceId,
- this.city,
- this.address1,
- this.address2,
- this.zipPostalCode,
- this.phoneNumber,
- this.faxNumber,
- this.customerAttributes,
- this.createdOnUtc,
- this.province,
- this.latLong});
-
- Addresses.fromJson(Map json) {
- id = json['id'];
- firstName = json['first_name'];
- lastName = json['last_name'];
- email = json['email'];
- company = json['company'];
- countryId = json['country_id'];
- country = json['country'];
- stateProvinceId = json['state_province_id'];
- city = json['city'];
- address1 = json['address1'];
- address2 = json['address2'];
- zipPostalCode = json['zip_postal_code'];
- phoneNumber = json['phone_number'];
- faxNumber = json['fax_number'];
- customerAttributes = json['customer_attributes'];
- createdOnUtc = json['created_on_utc'];
- province = json['province'];
- latLong = json['lat_long'];
- }
-
- Map toJson() {
- final Map data = new Map();
- data['id'] = this.id;
- data['first_name'] = this.firstName;
- data['last_name'] = this.lastName;
- data['email'] = this.email;
- data['company'] = this.company;
- data['country_id'] = this.countryId;
- data['country'] = this.country;
- data['state_province_id'] = this.stateProvinceId;
- data['city'] = this.city;
- data['address1'] = this.address1;
- data['address2'] = this.address2;
- data['zip_postal_code'] = this.zipPostalCode;
- data['phone_number'] = this.phoneNumber;
- data['fax_number'] = this.faxNumber;
- data['customer_attributes'] = this.customerAttributes;
- data['created_on_utc'] = this.createdOnUtc;
- data['province'] = this.province;
- data['lat_long'] = this.latLong;
- return data;
- }
-}
diff --git a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart
index 0774e5a7..bf3404a9 100644
--- a/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart
+++ b/lib/core/viewModels/AlHabibMedicalService/cmc_view_model.dart
@@ -9,19 +9,14 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealth
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart';
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/cmc_service.dart';
-import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import '../../../locator.dart';
-import 'add_new_address_Request_Model.dart';
class CMCViewModel extends BaseViewModel {
CMCService _cMCService =
locator();
- CustomerAddressesService _customerAddressesService =
- locator();
- List get addressesList =>
- _customerAddressesService.addressesList;
+
List get cmcAllServicesList =>
_cMCService.cmcAllServicesList;
@@ -99,6 +94,7 @@ class CMCViewModel extends BaseViewModel {
await _cMCService
.getOrderDetailByOrderID(getOrderDetailByOrderIDRequestModel);
}
+ //TODO check it in uat
Future insertPresPresOrder({CMCInsertPresOrderRequestModel order}) async {
setState(ViewState.Busy);
order.createdBy = user.patientID;
@@ -111,44 +107,4 @@ class CMCViewModel extends BaseViewModel {
getCmcAllPresOrders();
}
}
-
- Future getCustomerAddresses() async {
- setState(ViewState.Busy);
- await _customerAddressesService.getCustomerAddresses(
- );
- if (_customerAddressesService.hasError) {
- error = _customerAddressesService.error;
- setState(ViewState.ErrorLocal);
- } else {
- setState(ViewState.Idle);
- }
- }
-
- Future getCustomerInfo() async {
- setState(ViewState.Busy);
- await _customerAddressesService.getCustomerInfo(
- );
- if (_customerAddressesService.hasError) {
- error = _customerAddressesService.error;
- setState(ViewState.ErrorLocal);
- } else {
- await getCustomerAddresses();
- }
- }
-
- Future addAddressInfo(
- {AddNewAddressRequestModel addNewAddressRequestModel}) async {
-
-
- setState(ViewState.Busy);
- await _customerAddressesService.addAddressInfo(
- addNewAddressRequestModel: addNewAddressRequestModel
- );
- if (_customerAddressesService.hasError) {
- error = _customerAddressesService.error;
- setState(ViewState.ErrorLocal);
- } else {
- setState(ViewState.Idle);
- }
- }
}
\ No newline at end of file
diff --git a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart
index 20a19b23..031d0a0c 100644
--- a/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart
+++ b/lib/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart
@@ -8,28 +8,18 @@ import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealth
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart';
-import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart';
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/home_health_care_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
-import 'package:intl/intl.dart';
import '../../../locator.dart';
-import 'add_new_address_Request_Model.dart';
class HomeHealthCareViewModel extends BaseViewModel {
HomeHealthCareService _homeHealthCareService =
locator();
- CustomerAddressesService _customerAddressesService =
- locator();
-
List get hhcAllServicesList =>
_homeHealthCareService.hhcAllServicesList;
-
- List get addressesList =>
- _customerAddressesService.addressesList;
-
List get hhcAllPresOrders =>
_homeHealthCareService.hhcAllPresOrdersList;
@@ -103,44 +93,5 @@ class HomeHealthCareViewModel extends BaseViewModel {
}
- Future getCustomerAddresses() async {
- setState(ViewState.Busy);
- await _customerAddressesService.getCustomerAddresses(
- );
- if (_customerAddressesService.hasError) {
- error = _customerAddressesService.error;
- setState(ViewState.ErrorLocal);
- } else {
- setState(ViewState.Idle);
- }
- }
-
- Future getCustomerInfo() async {
- setState(ViewState.Busy);
- await _customerAddressesService.getCustomerInfo(
- );
- if (_customerAddressesService.hasError) {
- error = _customerAddressesService.error;
- setState(ViewState.ErrorLocal);
- } else {
- await getCustomerAddresses();
- }
- }
-
- Future addAddressInfo(
- {AddNewAddressRequestModel addNewAddressRequestModel}) async {
-
- setState(ViewState.Busy);
- await _customerAddressesService.addAddressInfo(
- addNewAddressRequestModel: addNewAddressRequestModel
- );
- if (_customerAddressesService.hasError) {
- error = _customerAddressesService.error;
- setState(ViewState.ErrorLocal);
- } else {
- setState(ViewState.Idle);
- }
- }
-
}
\ No newline at end of file
diff --git a/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart b/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart
index 047e06f2..1972e08f 100644
--- a/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart
+++ b/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart
@@ -4,7 +4,6 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/check_activation_code_for_e_referral_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/create_e_referral_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_all_cities_response_model.dart';
-import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_all_projects_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_all_relationship_types_response_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_e_referral_request_model.dart';
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_e_referral_response_model.dart';
@@ -19,108 +18,74 @@ class EReferralViewModel extends BaseViewModel {
List get relationTypes =>
_eReferralService.relationTypes;
-
List get allCities => _eReferralService.allCities;
+ List get allReferral => _eReferralService.allReferral;
- List get allHospitals =>
- _eReferralService.allProjects;
- List get allReferral =>
- _eReferralService.allReferral;
- void getRelationTypes() async {
+ void getRelationTypes() async {
setState(ViewState.Busy);
await _eReferralService.getRelationTypes();
if (_eReferralService.hasError) {
error = _eReferralService.error;
setState(ViewState.Error);
- } else {
+ } else{
setState(ViewState.Idle);
}
}
-
- void getAllCities() async {
+ void getAllCities() async {
setState(ViewState.Busy);
await _eReferralService.getAllCities();
if (_eReferralService.hasError) {
error = _eReferralService.error;
setState(ViewState.Error);
- } else {
+ } else{
setState(ViewState.Idle);
}
}
- void getAllProjects() async {
- setState(ViewState.Busy);
- await _eReferralService.getAllProjects();
- if (_eReferralService.hasError) {
- error = _eReferralService.error;
- setState(ViewState.Error);
- } else {
- setState(ViewState.Idle);
- }
- }
-
- void sendActivationCodeForEReferral(
- SendActivationCodeForEReferralRequestModel
- sendActivationCodeForEReferralRequestModel) async {
+ void sendActivationCodeForEReferral(SendActivationCodeForEReferralRequestModel sendActivationCodeForEReferralRequestModel) async {
setState(ViewState.BusyLocal);
- await _eReferralService.sendActivationCodeForEReferral(
- sendActivationCodeForEReferralRequestModel);
+ await _eReferralService.sendActivationCodeForEReferral(sendActivationCodeForEReferralRequestModel);
if (_eReferralService.hasError) {
error = _eReferralService.error;
setState(ViewState.ErrorLocal);
- } else {
+ } else{
setState(ViewState.Idle);
}
}
- checkActivationCodeForEReferral(
- CheckActivationCodeForEReferralResponseModel
- checkActivationCodeForEReferralRequestModel) async {
+ checkActivationCodeForEReferral(CheckActivationCodeForEReferralResponseModel checkActivationCodeForEReferralRequestModel) async {
setState(ViewState.BusyLocal);
- await _eReferralService.checkActivationCodeForEReferral(
- checkActivationCodeForEReferralRequestModel);
+ await _eReferralService.checkActivationCodeForEReferral(checkActivationCodeForEReferralRequestModel);
if (_eReferralService.hasError) {
error = _eReferralService.error;
setState(ViewState.ErrorLocal);
- } else {
+ } else{
setState(ViewState.Idle);
}
}
- Future createEReferral(
+ void createEReferral(
CreateEReferralRequestModel createEReferralRequestModel) async {
- dynamic localRes;
setState(ViewState.BusyLocal);
- await _eReferralService
- .createEReferral(createEReferralRequestModel)
- .then((response) {
- localRes = response;
- });
+ await _eReferralService.createEReferral(createEReferralRequestModel);
if (_eReferralService.hasError) {
error = _eReferralService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
- return Future.value(localRes);
}
- Future getEReferrals(SearchEReferralRequestModel searchEReferralRequestModel) async {
+ getEReferrals(SearchEReferralRequestModel searchEReferralRequestModel) async {
setState(ViewState.BusyLocal);
- dynamic localRes;
- await _eReferralService.getEReferrals(searchEReferralRequestModel).then((response) {
- localRes = response;
- });
+ await _eReferralService.getEReferrals(searchEReferralRequestModel);
if (_eReferralService.hasError) {
error = _eReferralService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
-
- return Future.value(localRes);
-
}
}
diff --git a/lib/core/viewModels/child_vaccines/add_new_child_view_model.dart b/lib/core/viewModels/child_vaccines/add_new_child_view_model.dart
index 2559c074..eebaca02 100644
--- a/lib/core/viewModels/child_vaccines/add_new_child_view_model.dart
+++ b/lib/core/viewModels/child_vaccines/add_new_child_view_model.dart
@@ -13,6 +13,7 @@ class AddNewChildViewModel extends BaseViewModel {
CreteNewBabyService _creteNewBabyService = locator();
ChildVaccinesService _childVaccinesService = locator();
+ // DeleteBabyService _deleteBabyService = locator();
bool isAdded = false;
///create new baby
createNewBabyOrders({ CreateNewBaby newChild}) async {
@@ -24,7 +25,13 @@ class AddNewChildViewModel extends BaseViewModel {
} else {
isAdded = true;
setState(ViewState.Idle);
+ await _childVaccinesService.getAllBabyInformationOrders();
+ if (_childVaccinesService.hasError) {
+ error = _childVaccinesService.error;
+ setState(ViewState.Error);
+ } else{
+ }
}
}
diff --git a/lib/core/viewModels/child_vaccines/child_vaccines_view_model.dart b/lib/core/viewModels/child_vaccines/child_vaccines_view_model.dart
index a713b6ec..7c4af285 100644
--- a/lib/core/viewModels/child_vaccines/child_vaccines_view_model.dart
+++ b/lib/core/viewModels/child_vaccines/child_vaccines_view_model.dart
@@ -16,11 +16,14 @@ class ChildVaccinesViewModel extends BaseViewModel{
List get babyInformationModelList=> _childVaccinesService.babyInformationModelList;
+
+//===========
CreteNewBabyService _creteNewBabyService = locator();
DeleteBabyService _deleteBabyService = locator();
bool isAdded = false;
bool isDeleted = false;
+ //============
getNewUserOrders() async {
@@ -45,15 +48,25 @@ class ChildVaccinesViewModel extends BaseViewModel{
///delete baby
- deleteBabyOrders({ List_BabyInformationModel babyInfo}) async {
+ deleteBabyOrders({ DeleteBaby newChild}) async {
setState(ViewState.Busy);
- await _deleteBabyService.getDeleteBabyOrder(babyInfo: babyInfo);
- if (_deleteBabyService.hasError) {
- error = _deleteBabyService.error;
+ //await _creteNewBabyService.getCreateNewBabyOrders(newChild: newChild, userID: _childVaccinesService.userID);
+ await _deleteBabyService.getDeleteBabyOrder(deleteChild: newChild,babyID: newChild.babyID);
+ //getDeleteBabyOrder(deleteChild: newChild,);
+ // getDeleteBabyOrder
+ if (_creteNewBabyService.hasError) {
+ error = _creteNewBabyService.error;
setState(ViewState.Error);
} else {
isDeleted = true;
- getBabyInformatioRequestOrders();
+ setState(ViewState.Idle);
+ await _childVaccinesService.getAllBabyInformationOrders();
+ if (_childVaccinesService.hasError) {
+ error = _childVaccinesService.error;
+ setState(ViewState.Error);
+ } else{
+
+ }
}
}
diff --git a/lib/core/viewModels/child_vaccines/user_information_view_model.dart b/lib/core/viewModels/child_vaccines/user_information_view_model.dart
index e183ee42..43269f42 100644
--- a/lib/core/viewModels/child_vaccines/user_information_view_model.dart
+++ b/lib/core/viewModels/child_vaccines/user_information_view_model.dart
@@ -8,7 +8,8 @@ class UserInformationViewModel extends BaseViewModel {
UserInformationService _userInformationService =
locator();
- List_UserInformationModel get userInformationModelList => _userInformationService.userInformationModel;
+ List get userInformationModelList =>
+ _userInformationService.userInformationModelList;
getUserInformationRequestOrders() async {
setState(ViewState.Busy);
@@ -19,15 +20,4 @@ class UserInformationViewModel extends BaseViewModel {
} else
setState(ViewState.Idle);
}
-
- updateEmail(String email)async{
- setState(ViewState.Busy);
- await _userInformationService.updateEmail(email);
- await _userInformationService.updateUserInfo(email);
- if (_userInformationService.hasError) {
- error = _userInformationService.error;
- setState(ViewState.Error);
- } else
- await getUserInformationRequestOrders();
- }
}
diff --git a/lib/core/viewModels/child_vaccines/vaccination_table_view_model.dart b/lib/core/viewModels/child_vaccines/vaccination_table_view_model.dart
index 25559b81..3b72dd50 100644
--- a/lib/core/viewModels/child_vaccines/vaccination_table_view_model.dart
+++ b/lib/core/viewModels/child_vaccines/vaccination_table_view_model.dart
@@ -1,27 +1,30 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
-import 'package:diplomaticquarterapp/core/model/childvaccines/List_BabyInformationModel.dart';
+import 'package:diplomaticquarterapp/core/model/childvaccines/add_newchild_model.dart';
import 'package:diplomaticquarterapp/core/model/childvaccines/create_vaccination_table.dart';
-import 'package:diplomaticquarterapp/core/model/childvaccines/user_information_model.dart';
+import 'package:diplomaticquarterapp/core/service/childvaccines/add_new_child_service.dart';
import 'package:diplomaticquarterapp/core/service/childvaccines/vaccination_table_service.dart';
import '../../../locator.dart';
import '../base_view_model.dart';
-class VaccinationTableViewModel extends BaseViewModel {
- VaccinationTableService _creteVaccinationTableService =
- locator();
- List get creteVaccinationTableModelList =>
- _creteVaccinationTableService.createVaccinationTableModelList;
+class VaccinationTableViewModel extends BaseViewModel{
- getCreateVaccinationTable({List_BabyInformationModel babyInfo, List_UserInformationModel informationModel, bool isSendEmail =false}) async {
+ VaccinationTableService _creteVaccinationTableService = locator();
+
+ // String get creteVaccinationTableContent => _creteVaccinationTableService.userAgreementContent;
+ //String get userAgreementContent => _creteNewBabyService.v//_reportsService.userAgreementContent;
+ List get creteVaccinationTableModelList=> _creteVaccinationTableService.createVaccinationTableModelList;//.createNewBabyModelList;
+ getCreateVaccinationTable() async {
setState(ViewState.Busy);
- await _creteVaccinationTableService.getCreateVaccinationTableOrders(babyInfo: babyInfo,informationModel: informationModel,isSendEmail: isSendEmail);
- if (_creteVaccinationTableService.hasError) {
- error = _creteVaccinationTableService.error;
+ await _creteVaccinationTableService.getCreateVaccinationTableOrders();//getCreateNewBabyOrders();
+
+ if ( _creteVaccinationTableService.hasError) {
+ error = _creteVaccinationTableService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
+
}
diff --git a/lib/core/viewModels/dashboard_view_model.dart b/lib/core/viewModels/dashboard_view_model.dart
index e98ca341..4cf22b23 100644
--- a/lib/core/viewModels/dashboard_view_model.dart
+++ b/lib/core/viewModels/dashboard_view_model.dart
@@ -1,20 +1,14 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/service/medical/vital_sign_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
-
import '../../locator.dart';
class DashboardViewModel extends BaseViewModel {
VitalSignService _vitalSignService = locator();
-
- String get weightKg => _vitalSignService.weightKg;
-
- String get heightCm => _vitalSignService.heightCm;
+ String get weightKg => _vitalSignService.weightKg;
+ String get heightCm => _vitalSignService.heightCm;
String bloadType = "";
- // ToDoCountProviderModel toDoProvider =
- // Provider.of(AppGlobal.context);
-
getPatientRadOrders() async {
if (isLogin && _vitalSignService.weightKg.isEmpty) {
setState(ViewState.Busy);
@@ -23,21 +17,7 @@ class DashboardViewModel extends BaseViewModel {
error = _vitalSignService.error;
setState(ViewState.Error);
} else
- setState(ViewState.Idle);
- // getToDoCount();
+ setState(ViewState.Idle);
}
}
-
-// getToDoCount() {
-// toDoProvider.setState(0);
-// ClinicListService service = new ClinicListService();
-// service.getActiveAppointmentNo(AppGlobal.context).then((res) {
-// print(res['AppointmentActiveNumber']);
-// if (res['MessageStatus'] == 1) {
-// toDoProvider.setState(res['AppointmentActiveNumber']);
-// } else {}
-// }).catchError((err) {
-// print(err);
-// });
-// }
}
diff --git a/lib/core/viewModels/medical/my_balance_view_model.dart b/lib/core/viewModels/medical/my_balance_view_model.dart
index 62b7868b..af4e126e 100644
--- a/lib/core/viewModels/medical/my_balance_view_model.dart
+++ b/lib/core/viewModels/medical/my_balance_view_model.dart
@@ -112,10 +112,10 @@ class MyBalanceViewModel extends BaseViewModel {
}
}
- Future getPatientInfoByPatientIDAndMobileNumber(AdvanceModel advanceModel) async {
+ Future getPatientInfoByPatientIDAndMobileNumber() async {
setState(ViewState.Busy);
await _myBalanceService
- .getPatientInfoByPatientIDAndMobileNumber(advanceModel);
+ .getPatientInfoByPatientIDAndMobileNumber();
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.ErrorLocal);
@@ -154,7 +154,7 @@ class MyBalanceViewModel extends BaseViewModel {
Future getFamilyFiles() async {
setState(ViewState.Busy);
- await _myBalanceService.getSharedRecordByStatus();
+ await _myBalanceService.getFamilyFiles();
if (_myBalanceService.hasError) {
error = _myBalanceService.error;
setState(ViewState.ErrorLocal);
diff --git a/lib/core/viewModels/medical/prescriptions_view_model.dart b/lib/core/viewModels/medical/prescriptions_view_model.dart
index 1cd934e2..054dc4ef 100644
--- a/lib/core/viewModels/medical/prescriptions_view_model.dart
+++ b/lib/core/viewModels/medical/prescriptions_view_model.dart
@@ -103,9 +103,9 @@ class PrescriptionsViewModel extends BaseViewModel {
notifyListeners();
}
- getPrescriptionReport({Prescriptions prescriptions}) async {
+ getPrescriptionReport({int dischargeNo,int projectId,int clinicID,String setupID,int episodeID}) async {
setState(ViewState.Busy);
- await _prescriptionsService.getPrescriptionReport(prescriptions: prescriptions);
+ await _prescriptionsService.getPrescriptionReport(dischargeNo: dischargeNo,projectId: projectId,clinicID: clinicID,setupID: setupID,episodeID: episodeID);
if (_prescriptionsService.hasError) {
error = _prescriptionsService.error;
setState(ViewState.ErrorLocal);
diff --git a/lib/core/viewModels/packages_offers/PackagesOffersViewModel.dart b/lib/core/viewModels/packages_offers/PackagesOffersViewModel.dart
new file mode 100644
index 00000000..21df52bc
--- /dev/null
+++ b/lib/core/viewModels/packages_offers/PackagesOffersViewModel.dart
@@ -0,0 +1,19 @@
+import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferCategoriesResponseModel.dart';
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferProductsResponseModel.dart';
+import 'package:diplomaticquarterapp/core/service/base_service.dart';
+import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
+import 'package:diplomaticquarterapp/core/service/packages_offers/PackagesOffersServices.dart';
+import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:diplomaticquarterapp/locator.dart';
+
+class OfferCategoriesViewModel extends BaseViewModel {
+ OffersAndPackagesServices service = locator();
+ List get list => service.categoryList;
+}
+
+class OfferProductsViewModel extends BaseViewModel {
+ OffersAndPackagesServices service = locator();
+ List get list => service.productList;
+}
diff --git a/lib/core/viewModels/project_view_model.dart b/lib/core/viewModels/project_view_model.dart
index 700ab2a4..e65a70f7 100644
--- a/lib/core/viewModels/project_view_model.dart
+++ b/lib/core/viewModels/project_view_model.dart
@@ -2,15 +2,19 @@ import 'dart:async';
import 'package:connectivity/connectivity.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
-import 'package:diplomaticquarterapp/core/model/privilege/PrivilegeModel.dart';
-import 'package:diplomaticquarterapp/core/service/privilege_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/locator.dart';
+import 'package:diplomaticquarterapp/uitl/PlatformBridge.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
class ProjectViewModel extends BaseViewModel {
+ // Platform Bridge
+ PlatformBridge platformBridge() {
+ return PlatformBridge.shared();
+ }
+
AppSharedPreferences sharedPref = AppSharedPreferences();
Locale _appLocale = Locale('ar');
String currentLanguage = 'ar';
@@ -30,21 +34,14 @@ class ProjectViewModel extends BaseViewModel {
bool get isArabic => _isArabic;
-
- bool isLoginChild = false;
- List privilegeRootUser = List();
- List privilegeChildUser = List();
-
- List get privileges =>
- isLoginChild ? privilegeChildUser : privilegeChildUser;
-
+ // BaseViewModel baseViewModel = locator()
StreamSubscription subscription;
ProjectViewModel() {
+ // PlatformBridge.init(context); // Moved to 'main.dart' due to context availability
loadSharedPrefLanguage();
- subscription = Connectivity()
- .onConnectivityChanged
- .listen((ConnectivityResult result) {
+
+ subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
switch (result) {
case ConnectivityResult.wifi:
isInternetConnection = true;
@@ -61,8 +58,7 @@ class ProjectViewModel extends BaseViewModel {
}
void loadSharedPrefLanguage() async {
- currentLanguage =
- await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
+ currentLanguage = await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
_appLocale = Locale(currentLanguage);
_isArabic = currentLanguage == 'ar';
notifyListeners();
@@ -84,49 +80,6 @@ class ProjectViewModel extends BaseViewModel {
notifyListeners();
}
- setPrivilegeModelList(
- {List privilege}) {
- this.isLoginChild = isLoginChild;
- privilegeRootUser = privilege;
-
- notifyListeners();
- }
-
- setPrivilege({privilegeList, bool isLoginChild = false}) {
- List privilege = List();
-
- privilegeList['List'][0]['ListPrivilege'].forEach((item) {
- privilege.add(PrivilegeModel.fromJson(item));
- });
-
- this.isLoginChild = isLoginChild;
- if (isLoginChild)
- privilegeChildUser = privilege;
- else
- privilegeRootUser = privilege;
-
- notifyListeners();
- }
-
- setIsLoginChild({@required bool isLoginChild}){
- this.isLoginChild = isLoginChild;
- notifyListeners();
- }
-
- bool havePrivilege(int id) {
- bool isHavePrivilege = false;
- if(isLoginChild)
- privilegeChildUser.forEach((element) {
- if (element.iD == id) isHavePrivilege = element.privilege;
- });
- else{
- privilegeRootUser.forEach((element) {
- if (element.iD == id) isHavePrivilege = element.privilege;
- });
- }
- return isHavePrivilege;
- }
-
@override
void dispose() {
if (subscription != null) subscription.cancel();
diff --git a/lib/core/viewModels/weather/weather_view_model.dart b/lib/core/viewModels/weather/weather_view_model.dart
deleted file mode 100644
index bb201843..00000000
--- a/lib/core/viewModels/weather/weather_view_model.dart
+++ /dev/null
@@ -1,31 +0,0 @@
-import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
-import 'package:diplomaticquarterapp/core/model/er/projectavgerwaitingtime.dart';
-import 'package:diplomaticquarterapp/core/model/weahter/weather_model.dart';
-
-import 'package:diplomaticquarterapp/core/service/er/er_service.dart';
-import 'package:diplomaticquarterapp/core/service/weather_service.dart';
-import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
-import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/BranchView.dart';
-
-import '../../../locator.dart';
-
-class WeatherViewModel extends BaseViewModel {
- WeatherService _weatherService = locator();
- List get weatherIndicatorData =>
- _weatherService.weatherIndicatorData;
- getWeatherData() async {
- setState(ViewState.Busy);
-
- // if (id != null && projectID != null) {
- // await _erService.getProjectAvgERWaitingTimeOrders(
- // id: id, projectID: projectID);
- // } else {
- await _weatherService.getWeatherData();
- // }
- if (_weatherService.hasError) {
- error = _weatherService.error;
- setState(ViewState.Error);
- } else
- setState(ViewState.Idle);
- }
-}
diff --git a/lib/generated/json/GeoZonesResponseModel_helper.dart b/lib/generated/json/GeoZonesResponseModel_helper.dart
new file mode 100644
index 00000000..7cf3cc5f
--- /dev/null
+++ b/lib/generated/json/GeoZonesResponseModel_helper.dart
@@ -0,0 +1,50 @@
+import 'package:diplomaticquarterapp/core/model/geofencing/responses/GeoZonesResponseModel.dart';
+
+geoZonesResponseModelEntityFromJson(GeoZonesResponseModel data, Map json) {
+ if (json['GEOF_ID'] != null) {
+ data.geofId = json['GEOF_ID']?.toInt();
+ }
+ if (json['Description'] != null) {
+ data.description = json['Description']?.toString();
+ }
+ if (json['DescriptionN'] != null) {
+ data.descriptionN = json['DescriptionN']?.toString();
+ }
+ if (json['Latitude'] != null) {
+ data.latitude = json['Latitude']?.toString();
+ }
+ if (json['Longitude'] != null) {
+ data.longitude = json['Longitude']?.toString();
+ }
+ if (json['Radius'] != null) {
+ data.radius = json['Radius']?.toInt();
+ }
+ if (json['Type'] != null) {
+ data.type = json['Type']?.toInt();
+ }
+ if (json['ProjectID'] != null) {
+ data.projectID = json['ProjectID']?.toInt();
+ }
+ if (json['ImageURL'] != null) {
+ data.imageURL = json['ImageURL']?.toString();
+ }
+ if (json['IsCity'] != null) {
+ data.isCity = json['IsCity'];
+ }
+ return data;
+}
+
+Map geoZonesResponseModelEntityToJson(GeoZonesResponseModel entity) {
+ final Map data = new Map();
+ data['GEOF_ID'] = entity.geofId;
+ data['Description'] = entity.description;
+ data['DescriptionN'] = entity.descriptionN;
+ data['Latitude'] = entity.latitude;
+ data['Longitude'] = entity.longitude;
+ data['Radius'] = entity.radius;
+ data['Type'] = entity.type;
+ data['ProjectID'] = entity.projectID;
+ data['ImageURL'] = entity.imageURL;
+ data['IsCity'] = entity.isCity;
+ return data;
+}
diff --git a/lib/generated/json/OfferCategoriesResponseModel_helper.dart b/lib/generated/json/OfferCategoriesResponseModel_helper.dart
new file mode 100644
index 00000000..e5ebc914
--- /dev/null
+++ b/lib/generated/json/OfferCategoriesResponseModel_helper.dart
@@ -0,0 +1,172 @@
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferCategoriesResponseModel.dart';
+
+offerCategoriesResponseModelFromJson(OfferCategoriesResponseModel data, Map json) {
+ if (json['id'] != null) {
+ data.id = json['id']?.toString();
+ }
+ if (json['name'] != null) {
+ data.name = json['name']?.toString();
+ }
+ if (json['namen'] != null) {
+ data.namen = json['namen']?.toString();
+ }
+ if (json['localized_names'] != null) {
+ data.localizedNames = new List();
+ (json['localized_names'] as List).forEach((v) {
+ data.localizedNames.add(new OfferCategoriesResponseModelLocalizedName().fromJson(v));
+ });
+ }
+ if (json['description'] != null) {
+ data.description = json['description'];
+ }
+ if (json['category_template_id'] != null) {
+ data.categoryTemplateId = json['category_template_id']?.toInt();
+ }
+ if (json['meta_keywords'] != null) {
+ data.metaKeywords = json['meta_keywords']?.toString();
+ }
+ if (json['meta_description'] != null) {
+ data.metaDescription = json['meta_description']?.toString();
+ }
+ if (json['meta_title'] != null) {
+ data.metaTitle = json['meta_title']?.toString();
+ }
+ if (json['parent_category_id'] != null) {
+ data.parentCategoryId = json['parent_category_id']?.toInt();
+ }
+ if (json['page_size'] != null) {
+ data.pageSize = json['page_size']?.toInt();
+ }
+ if (json['page_size_options'] != null) {
+ data.pageSizeOptions = json['page_size_options']?.toString();
+ }
+ if (json['price_ranges'] != null) {
+ data.priceRanges = json['price_ranges'];
+ }
+ if (json['show_on_home_page'] != null) {
+ data.showOnHomePage = json['show_on_home_page'];
+ }
+ if (json['include_in_top_menu'] != null) {
+ data.includeInTopMenu = json['include_in_top_menu'];
+ }
+ if (json['has_discounts_applied'] != null) {
+ data.hasDiscountsApplied = json['has_discounts_applied'];
+ }
+ if (json['published'] != null) {
+ data.published = json['published'];
+ }
+ if (json['deleted'] != null) {
+ data.deleted = json['deleted'];
+ }
+ if (json['display_order'] != null) {
+ data.displayOrder = json['display_order']?.toInt();
+ }
+ if (json['created_on_utc'] != null) {
+ data.createdOnUtc = json['created_on_utc']?.toString();
+ }
+ if (json['updated_on_utc'] != null) {
+ data.updatedOnUtc = json['updated_on_utc']?.toString();
+ }
+ if (json['role_ids'] != null) {
+ data.roleIds = new List();
+ data.roleIds.addAll(json['role_ids']);
+ }
+ if (json['discount_ids'] != null) {
+ data.discountIds = new List();
+ data.discountIds.addAll(json['discount_ids']);
+ }
+ if (json['store_ids'] != null) {
+ data.storeIds = new List();
+ data.storeIds.addAll(json['store_ids']);
+ }
+ if (json['image'] != null) {
+ data.image = new OfferCategoriesResponseModelImage().fromJson(json['image']);
+ }
+ if (json['se_name'] != null) {
+ data.seName = json['se_name']?.toString();
+ }
+ if (json['is_leaf'] != null) {
+ data.isLeaf = json['is_leaf'];
+ }
+ return data;
+}
+
+Map offerCategoriesResponseModelToJson(OfferCategoriesResponseModel entity) {
+ final Map data = new Map();
+ data['id'] = entity.id;
+ data['name'] = entity.name;
+ data['namen'] = entity.namen;
+ if (entity.localizedNames != null) {
+ data['localized_names'] = entity.localizedNames.map((v) => v.toJson()).toList();
+ }
+ data['description'] = entity.description;
+ data['category_template_id'] = entity.categoryTemplateId;
+ data['meta_keywords'] = entity.metaKeywords;
+ data['meta_description'] = entity.metaDescription;
+ data['meta_title'] = entity.metaTitle;
+ data['parent_category_id'] = entity.parentCategoryId;
+ data['page_size'] = entity.pageSize;
+ data['page_size_options'] = entity.pageSizeOptions;
+ data['price_ranges'] = entity.priceRanges;
+ data['show_on_home_page'] = entity.showOnHomePage;
+ data['include_in_top_menu'] = entity.includeInTopMenu;
+ data['has_discounts_applied'] = entity.hasDiscountsApplied;
+ data['published'] = entity.published;
+ data['deleted'] = entity.deleted;
+ data['display_order'] = entity.displayOrder;
+ data['created_on_utc'] = entity.createdOnUtc;
+ data['updated_on_utc'] = entity.updatedOnUtc;
+ if (entity.roleIds != null) {
+ data['role_ids'] = [];
+ }
+ if (entity.discountIds != null) {
+ data['discount_ids'] = [];
+ }
+ if (entity.storeIds != null) {
+ data['store_ids'] = [];
+ }
+ if (entity.image != null) {
+ data['image'] = entity.image.toJson();
+ }
+ data['se_name'] = entity.seName;
+ data['is_leaf'] = entity.isLeaf;
+ return data;
+}
+
+offerCategoriesResponseModelLocalizedNameFromJson(OfferCategoriesResponseModelLocalizedName data, Map json) {
+ if (json['language_id'] != null) {
+ data.languageId = json['language_id']?.toInt();
+ }
+ if (json['localized_name'] != null) {
+ data.localizedName = json['localized_name']?.toString();
+ }
+ return data;
+}
+
+Map offerCategoriesResponseModelLocalizedNameToJson(OfferCategoriesResponseModelLocalizedName entity) {
+ final Map data = new Map();
+ data['language_id'] = entity.languageId;
+ data['localized_name'] = entity.localizedName;
+ return data;
+}
+
+offerCategoriesResponseModelImageFromJson(OfferCategoriesResponseModelImage data, Map json) {
+ if (json['src'] != null) {
+ data.src = json['src']?.toString();
+ }
+ if (json['thumb'] != null) {
+ data.thumb = json['thumb'];
+ }
+ if (json['attachment'] != null) {
+ data.attachment = json['attachment'];
+ }
+ return data;
+}
+
+Map offerCategoriesResponseModelImageToJson(OfferCategoriesResponseModelImage entity) {
+ final Map data = new Map();
+ data['src'] = entity.src;
+ data['thumb'] = entity.thumb;
+ data['attachment'] = entity.attachment;
+ return data;
+}
diff --git a/lib/generated/json/OfferProductsResponseModel_helper.dart b/lib/generated/json/OfferProductsResponseModel_helper.dart
new file mode 100644
index 00000000..dc0edeca
--- /dev/null
+++ b/lib/generated/json/OfferProductsResponseModel_helper.dart
@@ -0,0 +1,569 @@
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferProductsResponseModel.dart';
+
+offerProductsResponseModelFromJson(OfferProductsResponseModel data, Map json) {
+ if (json['id'] != null) {
+ data.id = json['id']?.toString();
+ }
+ if (json['visible_individually'] != null) {
+ data.visibleIndividually = json['visible_individually'];
+ }
+ if (json['name'] != null) {
+ data.name = json['name']?.toString();
+ }
+ if (json['namen'] != null) {
+ data.namen = json['namen']?.toString();
+ }
+ if (json['localized_names'] != null) {
+ data.localizedNames = new List();
+ (json['localized_names'] as List).forEach((v) {
+ data.localizedNames.add(new OfferProductsResponseModelLocalizedName().fromJson(v));
+ });
+ }
+ if (json['short_description'] != null) {
+ data.shortDescription = json['short_description']?.toString();
+ }
+ if (json['short_descriptionn'] != null) {
+ data.shortDescriptionn = json['short_descriptionn']?.toString();
+ }
+ if (json['full_description'] != null) {
+ data.fullDescription = json['full_description']?.toString();
+ }
+ if (json['full_descriptionn'] != null) {
+ data.fullDescriptionn = json['full_descriptionn']?.toString();
+ }
+ if (json['markas_new'] != null) {
+ data.markasNew = json['markas_new'];
+ }
+ if (json['show_on_home_page'] != null) {
+ data.showOnHomePage = json['show_on_home_page'];
+ }
+ if (json['meta_keywords'] != null) {
+ data.metaKeywords = json['meta_keywords'];
+ }
+ if (json['meta_description'] != null) {
+ data.metaDescription = json['meta_description'];
+ }
+ if (json['meta_title'] != null) {
+ data.metaTitle = json['meta_title'];
+ }
+ if (json['allow_customer_reviews'] != null) {
+ data.allowCustomerReviews = json['allow_customer_reviews'];
+ }
+ if (json['approved_rating_sum'] != null) {
+ data.approvedRatingSum = json['approved_rating_sum']?.toInt();
+ }
+ if (json['not_approved_rating_sum'] != null) {
+ data.notApprovedRatingSum = json['not_approved_rating_sum']?.toInt();
+ }
+ if (json['approved_total_reviews'] != null) {
+ data.approvedTotalReviews = json['approved_total_reviews']?.toInt();
+ }
+ if (json['not_approved_total_reviews'] != null) {
+ data.notApprovedTotalReviews = json['not_approved_total_reviews']?.toInt();
+ }
+ if (json['sku'] != null) {
+ data.sku = json['sku']?.toString();
+ }
+ if (json['is_rx'] != null) {
+ data.isRx = json['is_rx'];
+ }
+ if (json['prescription_required'] != null) {
+ data.prescriptionRequired = json['prescription_required'];
+ }
+ if (json['rx_message'] != null) {
+ data.rxMessage = json['rx_message'];
+ }
+ if (json['rx_messagen'] != null) {
+ data.rxMessagen = json['rx_messagen'];
+ }
+ if (json['manufacturer_part_number'] != null) {
+ data.manufacturerPartNumber = json['manufacturer_part_number'];
+ }
+ if (json['gtin'] != null) {
+ data.gtin = json['gtin'];
+ }
+ if (json['is_gift_card'] != null) {
+ data.isGiftCard = json['is_gift_card'];
+ }
+ if (json['require_other_products'] != null) {
+ data.requireOtherProducts = json['require_other_products'];
+ }
+ if (json['automatically_add_required_products'] != null) {
+ data.automaticallyAddRequiredProducts = json['automatically_add_required_products'];
+ }
+ if (json['is_download'] != null) {
+ data.isDownload = json['is_download'];
+ }
+ if (json['unlimited_downloads'] != null) {
+ data.unlimitedDownloads = json['unlimited_downloads'];
+ }
+ if (json['max_number_of_downloads'] != null) {
+ data.maxNumberOfDownloads = json['max_number_of_downloads']?.toInt();
+ }
+ if (json['download_expiration_days'] != null) {
+ data.downloadExpirationDays = json['download_expiration_days'];
+ }
+ if (json['has_sample_download'] != null) {
+ data.hasSampleDownload = json['has_sample_download'];
+ }
+ if (json['has_user_agreement'] != null) {
+ data.hasUserAgreement = json['has_user_agreement'];
+ }
+ if (json['is_recurring'] != null) {
+ data.isRecurring = json['is_recurring'];
+ }
+ if (json['recurring_cycle_length'] != null) {
+ data.recurringCycleLength = json['recurring_cycle_length']?.toInt();
+ }
+ if (json['recurring_total_cycles'] != null) {
+ data.recurringTotalCycles = json['recurring_total_cycles']?.toInt();
+ }
+ if (json['is_rental'] != null) {
+ data.isRental = json['is_rental'];
+ }
+ if (json['rental_price_length'] != null) {
+ data.rentalPriceLength = json['rental_price_length']?.toInt();
+ }
+ if (json['is_ship_enabled'] != null) {
+ data.isShipEnabled = json['is_ship_enabled'];
+ }
+ if (json['is_free_shipping'] != null) {
+ data.isFreeShipping = json['is_free_shipping'];
+ }
+ if (json['ship_separately'] != null) {
+ data.shipSeparately = json['ship_separately'];
+ }
+ if (json['additional_shipping_charge'] != null) {
+ data.additionalShippingCharge = json['additional_shipping_charge']?.toDouble();
+ }
+ if (json['is_tax_exempt'] != null) {
+ data.isTaxExempt = json['is_tax_exempt'];
+ }
+ if (json['is_telecommunications_or_broadcasting_or_electronic_services'] != null) {
+ data.isTelecommunicationsOrBroadcastingOrElectronicServices = json['is_telecommunications_or_broadcasting_or_electronic_services'];
+ }
+ if (json['use_multiple_warehouses'] != null) {
+ data.useMultipleWarehouses = json['use_multiple_warehouses'];
+ }
+ if (json['manage_inventory_method_id'] != null) {
+ data.manageInventoryMethodId = json['manage_inventory_method_id']?.toInt();
+ }
+ if (json['stock_quantity'] != null) {
+ data.stockQuantity = json['stock_quantity']?.toInt();
+ }
+ if (json['stock_availability'] != null) {
+ data.stockAvailability = json['stock_availability']?.toString();
+ }
+ if (json['stock_availabilityn'] != null) {
+ data.stockAvailabilityn = json['stock_availabilityn']?.toString();
+ }
+ if (json['display_stock_availability'] != null) {
+ data.displayStockAvailability = json['display_stock_availability'];
+ }
+ if (json['display_stock_quantity'] != null) {
+ data.displayStockQuantity = json['display_stock_quantity'];
+ }
+ if (json['min_stock_quantity'] != null) {
+ data.minStockQuantity = json['min_stock_quantity']?.toInt();
+ }
+ if (json['notify_admin_for_quantity_below'] != null) {
+ data.notifyAdminForQuantityBelow = json['notify_admin_for_quantity_below']?.toInt();
+ }
+ if (json['allow_back_in_stock_subscriptions'] != null) {
+ data.allowBackInStockSubscriptions = json['allow_back_in_stock_subscriptions'];
+ }
+ if (json['order_minimum_quantity'] != null) {
+ data.orderMinimumQuantity = json['order_minimum_quantity']?.toInt();
+ }
+ if (json['order_maximum_quantity'] != null) {
+ data.orderMaximumQuantity = json['order_maximum_quantity']?.toInt();
+ }
+ if (json['allowed_quantities'] != null) {
+ data.allowedQuantities = json['allowed_quantities'];
+ }
+ if (json['allow_adding_only_existing_attribute_combinations'] != null) {
+ data.allowAddingOnlyExistingAttributeCombinations = json['allow_adding_only_existing_attribute_combinations'];
+ }
+ if (json['disable_buy_button'] != null) {
+ data.disableBuyButton = json['disable_buy_button'];
+ }
+ if (json['disable_wishlist_button'] != null) {
+ data.disableWishlistButton = json['disable_wishlist_button'];
+ }
+ if (json['available_for_pre_order'] != null) {
+ data.availableForPreOrder = json['available_for_pre_order'];
+ }
+ if (json['pre_order_availability_start_date_time_utc'] != null) {
+ data.preOrderAvailabilityStartDateTimeUtc = json['pre_order_availability_start_date_time_utc'];
+ }
+ if (json['call_for_price'] != null) {
+ data.callForPrice = json['call_for_price'];
+ }
+ if (json['price'] != null) {
+ data.price = json['price']?.toDouble();
+ }
+ if (json['old_price'] != null) {
+ data.oldPrice = json['old_price']?.toDouble();
+ }
+ if (json['product_cost'] != null) {
+ data.productCost = json['product_cost']?.toDouble();
+ }
+ if (json['special_price'] != null) {
+ data.specialPrice = json['special_price'];
+ }
+ if (json['special_price_start_date_time_utc'] != null) {
+ data.specialPriceStartDateTimeUtc = json['special_price_start_date_time_utc'];
+ }
+ if (json['special_price_end_date_time_utc'] != null) {
+ data.specialPriceEndDateTimeUtc = json['special_price_end_date_time_utc'];
+ }
+ if (json['customer_enters_price'] != null) {
+ data.customerEntersPrice = json['customer_enters_price'];
+ }
+ if (json['minimum_customer_entered_price'] != null) {
+ data.minimumCustomerEnteredPrice = json['minimum_customer_entered_price']?.toDouble();
+ }
+ if (json['maximum_customer_entered_price'] != null) {
+ data.maximumCustomerEnteredPrice = json['maximum_customer_entered_price']?.toDouble();
+ }
+ if (json['baseprice_enabled'] != null) {
+ data.basepriceEnabled = json['baseprice_enabled'];
+ }
+ if (json['baseprice_amount'] != null) {
+ data.basepriceAmount = json['baseprice_amount']?.toDouble();
+ }
+ if (json['baseprice_base_amount'] != null) {
+ data.basepriceBaseAmount = json['baseprice_base_amount']?.toDouble();
+ }
+ if (json['has_tier_prices'] != null) {
+ data.hasTierPrices = json['has_tier_prices'];
+ }
+ if (json['has_discounts_applied'] != null) {
+ data.hasDiscountsApplied = json['has_discounts_applied'];
+ }
+ if (json['discount_name'] != null) {
+ data.discountName = json['discount_name'];
+ }
+ if (json['discount_namen'] != null) {
+ data.discountNamen = json['discount_namen'];
+ }
+ if (json['discount_description'] != null) {
+ data.discountDescription = json['discount_description'];
+ }
+ if (json['discount_Descriptionn'] != null) {
+ data.discountDescriptionn = json['discount_Descriptionn'];
+ }
+ if (json['discount_percentage'] != null) {
+ data.discountPercentage = json['discount_percentage'];
+ }
+ if (json['currency'] != null) {
+ data.currency = json['currency']?.toString();
+ }
+ if (json['currencyn'] != null) {
+ data.currencyn = json['currencyn']?.toString();
+ }
+ if (json['weight'] != null) {
+ data.weight = json['weight']?.toDouble();
+ }
+ if (json['length'] != null) {
+ data.length = json['length']?.toDouble();
+ }
+ if (json['width'] != null) {
+ data.width = json['width']?.toDouble();
+ }
+ if (json['height'] != null) {
+ data.height = json['height']?.toDouble();
+ }
+ if (json['available_start_date_time_utc'] != null) {
+ data.availableStartDateTimeUtc = json['available_start_date_time_utc'];
+ }
+ if (json['available_end_date_time_utc'] != null) {
+ data.availableEndDateTimeUtc = json['available_end_date_time_utc'];
+ }
+ if (json['display_order'] != null) {
+ data.displayOrder = json['display_order']?.toInt();
+ }
+ if (json['published'] != null) {
+ data.published = json['published'];
+ }
+ if (json['deleted'] != null) {
+ data.deleted = json['deleted'];
+ }
+ if (json['created_on_utc'] != null) {
+ data.createdOnUtc = json['created_on_utc']?.toString();
+ }
+ if (json['updated_on_utc'] != null) {
+ data.updatedOnUtc = json['updated_on_utc']?.toString();
+ }
+ if (json['product_type'] != null) {
+ data.productType = json['product_type']?.toString();
+ }
+ if (json['parent_grouped_product_id'] != null) {
+ data.parentGroupedProductId = json['parent_grouped_product_id']?.toInt();
+ }
+ if (json['role_ids'] != null) {
+ data.roleIds = new List();
+ data.roleIds.addAll(json['role_ids']);
+ }
+ if (json['discount_ids'] != null) {
+ data.discountIds = new List();
+ data.discountIds.addAll(json['discount_ids']);
+ }
+ if (json['store_ids'] != null) {
+ data.storeIds = new List();
+ data.storeIds.addAll(json['store_ids']);
+ }
+ if (json['manufacturer_ids'] != null) {
+ data.manufacturerIds = json['manufacturer_ids']?.map((v) => v?.toInt())?.toList()?.cast();
+ }
+ if (json['reviews'] != null) {
+ data.reviews = new List();
+ data.reviews.addAll(json['reviews']);
+ }
+ if (json['images'] != null) {
+ data.images = new List();
+ (json['images'] as List).forEach((v) {
+ data.images.add(new OfferProductsResponseModelImage().fromJson(v));
+ });
+ }
+ if (json['attributes'] != null) {
+ data.attributes = new List();
+ data.attributes.addAll(json['attributes']);
+ }
+ if (json['specifications'] != null) {
+ data.specifications = new List();
+ (json['specifications'] as List).forEach((v) {
+ data.specifications.add(new OfferProductsResponseModelSpecification().fromJson(v));
+ });
+ }
+ if (json['associated_product_ids'] != null) {
+ data.associatedProductIds = new List();
+ data.associatedProductIds.addAll(json['associated_product_ids']);
+ }
+ if (json['tags'] != null) {
+ data.tags = new List();
+ data.tags.addAll(json['tags']);
+ }
+ if (json['vendor_id'] != null) {
+ data.vendorId = json['vendor_id']?.toInt();
+ }
+ if (json['se_name'] != null) {
+ data.seName = json['se_name']?.toString();
+ }
+ return data;
+}
+
+Map offerProductsResponseModelToJson(OfferProductsResponseModel entity) {
+ final Map data = new Map();
+ data['id'] = entity.id;
+ data['visible_individually'] = entity.visibleIndividually;
+ data['name'] = entity.name;
+ data['namen'] = entity.namen;
+ if (entity.localizedNames != null) {
+ data['localized_names'] = entity.localizedNames.map((v) => v.toJson()).toList();
+ }
+ data['short_description'] = entity.shortDescription;
+ data['short_descriptionn'] = entity.shortDescriptionn;
+ data['full_description'] = entity.fullDescription;
+ data['full_descriptionn'] = entity.fullDescriptionn;
+ data['markas_new'] = entity.markasNew;
+ data['show_on_home_page'] = entity.showOnHomePage;
+ data['meta_keywords'] = entity.metaKeywords;
+ data['meta_description'] = entity.metaDescription;
+ data['meta_title'] = entity.metaTitle;
+ data['allow_customer_reviews'] = entity.allowCustomerReviews;
+ data['approved_rating_sum'] = entity.approvedRatingSum;
+ data['not_approved_rating_sum'] = entity.notApprovedRatingSum;
+ data['approved_total_reviews'] = entity.approvedTotalReviews;
+ data['not_approved_total_reviews'] = entity.notApprovedTotalReviews;
+ data['sku'] = entity.sku;
+ data['is_rx'] = entity.isRx;
+ data['prescription_required'] = entity.prescriptionRequired;
+ data['rx_message'] = entity.rxMessage;
+ data['rx_messagen'] = entity.rxMessagen;
+ data['manufacturer_part_number'] = entity.manufacturerPartNumber;
+ data['gtin'] = entity.gtin;
+ data['is_gift_card'] = entity.isGiftCard;
+ data['require_other_products'] = entity.requireOtherProducts;
+ data['automatically_add_required_products'] = entity.automaticallyAddRequiredProducts;
+ data['is_download'] = entity.isDownload;
+ data['unlimited_downloads'] = entity.unlimitedDownloads;
+ data['max_number_of_downloads'] = entity.maxNumberOfDownloads;
+ data['download_expiration_days'] = entity.downloadExpirationDays;
+ data['has_sample_download'] = entity.hasSampleDownload;
+ data['has_user_agreement'] = entity.hasUserAgreement;
+ data['is_recurring'] = entity.isRecurring;
+ data['recurring_cycle_length'] = entity.recurringCycleLength;
+ data['recurring_total_cycles'] = entity.recurringTotalCycles;
+ data['is_rental'] = entity.isRental;
+ data['rental_price_length'] = entity.rentalPriceLength;
+ data['is_ship_enabled'] = entity.isShipEnabled;
+ data['is_free_shipping'] = entity.isFreeShipping;
+ data['ship_separately'] = entity.shipSeparately;
+ data['additional_shipping_charge'] = entity.additionalShippingCharge;
+ data['is_tax_exempt'] = entity.isTaxExempt;
+ data['is_telecommunications_or_broadcasting_or_electronic_services'] = entity.isTelecommunicationsOrBroadcastingOrElectronicServices;
+ data['use_multiple_warehouses'] = entity.useMultipleWarehouses;
+ data['manage_inventory_method_id'] = entity.manageInventoryMethodId;
+ data['stock_quantity'] = entity.stockQuantity;
+ data['stock_availability'] = entity.stockAvailability;
+ data['stock_availabilityn'] = entity.stockAvailabilityn;
+ data['display_stock_availability'] = entity.displayStockAvailability;
+ data['display_stock_quantity'] = entity.displayStockQuantity;
+ data['min_stock_quantity'] = entity.minStockQuantity;
+ data['notify_admin_for_quantity_below'] = entity.notifyAdminForQuantityBelow;
+ data['allow_back_in_stock_subscriptions'] = entity.allowBackInStockSubscriptions;
+ data['order_minimum_quantity'] = entity.orderMinimumQuantity;
+ data['order_maximum_quantity'] = entity.orderMaximumQuantity;
+ data['allowed_quantities'] = entity.allowedQuantities;
+ data['allow_adding_only_existing_attribute_combinations'] = entity.allowAddingOnlyExistingAttributeCombinations;
+ data['disable_buy_button'] = entity.disableBuyButton;
+ data['disable_wishlist_button'] = entity.disableWishlistButton;
+ data['available_for_pre_order'] = entity.availableForPreOrder;
+ data['pre_order_availability_start_date_time_utc'] = entity.preOrderAvailabilityStartDateTimeUtc;
+ data['call_for_price'] = entity.callForPrice;
+ data['price'] = entity.price;
+ data['old_price'] = entity.oldPrice;
+ data['product_cost'] = entity.productCost;
+ data['special_price'] = entity.specialPrice;
+ data['special_price_start_date_time_utc'] = entity.specialPriceStartDateTimeUtc;
+ data['special_price_end_date_time_utc'] = entity.specialPriceEndDateTimeUtc;
+ data['customer_enters_price'] = entity.customerEntersPrice;
+ data['minimum_customer_entered_price'] = entity.minimumCustomerEnteredPrice;
+ data['maximum_customer_entered_price'] = entity.maximumCustomerEnteredPrice;
+ data['baseprice_enabled'] = entity.basepriceEnabled;
+ data['baseprice_amount'] = entity.basepriceAmount;
+ data['baseprice_base_amount'] = entity.basepriceBaseAmount;
+ data['has_tier_prices'] = entity.hasTierPrices;
+ data['has_discounts_applied'] = entity.hasDiscountsApplied;
+ data['discount_name'] = entity.discountName;
+ data['discount_namen'] = entity.discountNamen;
+ data['discount_description'] = entity.discountDescription;
+ data['discount_Descriptionn'] = entity.discountDescriptionn;
+ data['discount_percentage'] = entity.discountPercentage;
+ data['currency'] = entity.currency;
+ data['currencyn'] = entity.currencyn;
+ data['weight'] = entity.weight;
+ data['length'] = entity.length;
+ data['width'] = entity.width;
+ data['height'] = entity.height;
+ data['available_start_date_time_utc'] = entity.availableStartDateTimeUtc;
+ data['available_end_date_time_utc'] = entity.availableEndDateTimeUtc;
+ data['display_order'] = entity.displayOrder;
+ data['published'] = entity.published;
+ data['deleted'] = entity.deleted;
+ data['created_on_utc'] = entity.createdOnUtc;
+ data['updated_on_utc'] = entity.updatedOnUtc;
+ data['product_type'] = entity.productType;
+ data['parent_grouped_product_id'] = entity.parentGroupedProductId;
+ if (entity.roleIds != null) {
+ data['role_ids'] = [];
+ }
+ if (entity.discountIds != null) {
+ data['discount_ids'] = [];
+ }
+ if (entity.storeIds != null) {
+ data['store_ids'] = [];
+ }
+ data['manufacturer_ids'] = entity.manufacturerIds;
+ if (entity.reviews != null) {
+ data['reviews'] = [];
+ }
+ if (entity.images != null) {
+ data['images'] = entity.images.map((v) => v.toJson()).toList();
+ }
+ if (entity.attributes != null) {
+ data['attributes'] = [];
+ }
+ if (entity.specifications != null) {
+ data['specifications'] = entity.specifications.map((v) => v.toJson()).toList();
+ }
+ if (entity.associatedProductIds != null) {
+ data['associated_product_ids'] = [];
+ }
+ if (entity.tags != null) {
+ data['tags'] = [];
+ }
+ data['vendor_id'] = entity.vendorId;
+ data['se_name'] = entity.seName;
+ return data;
+}
+
+offerProductsResponseModelLocalizedNameFromJson(OfferProductsResponseModelLocalizedName data, Map json) {
+ if (json['language_id'] != null) {
+ data.languageId = json['language_id']?.toInt();
+ }
+ if (json['localized_name'] != null) {
+ data.localizedName = json['localized_name']?.toString();
+ }
+ return data;
+}
+
+Map offerProductsResponseModelLocalizedNameToJson(OfferProductsResponseModelLocalizedName entity) {
+ final Map data = new Map();
+ data['language_id'] = entity.languageId;
+ data['localized_name'] = entity.localizedName;
+ return data;
+}
+
+offerProductsResponseModelImageFromJson(OfferProductsResponseModelImage data, Map json) {
+ if (json['id'] != null) {
+ data.id = json['id']?.toInt();
+ }
+ if (json['position'] != null) {
+ data.position = json['position']?.toInt();
+ }
+ if (json['src'] != null) {
+ data.src = json['src']?.toString();
+ }
+ if (json['thumb'] != null) {
+ data.thumb = json['thumb']?.toString();
+ }
+ if (json['attachment'] != null) {
+ data.attachment = json['attachment']?.toString();
+ }
+ return data;
+}
+
+Map offerProductsResponseModelImageToJson(OfferProductsResponseModelImage entity) {
+ final Map data = new Map();
+ data['id'] = entity.id;
+ data['position'] = entity.position;
+ data['src'] = entity.src;
+ data['thumb'] = entity.thumb;
+ data['attachment'] = entity.attachment;
+ return data;
+}
+
+offerProductsResponseModelSpecificationFromJson(OfferProductsResponseModelSpecification data, Map json) {
+ if (json['id'] != null) {
+ data.id = json['id']?.toInt();
+ }
+ if (json['display_order'] != null) {
+ data.displayOrder = json['display_order']?.toInt();
+ }
+ if (json['default_value'] != null) {
+ data.defaultValue = json['default_value']?.toString();
+ }
+ if (json['default_valuen'] != null) {
+ data.defaultValuen = json['default_valuen']?.toString();
+ }
+ if (json['name'] != null) {
+ data.name = json['name']?.toString();
+ }
+ if (json['nameN'] != null) {
+ data.nameN = json['nameN']?.toString();
+ }
+ return data;
+}
+
+Map offerProductsResponseModelSpecificationToJson(OfferProductsResponseModelSpecification entity) {
+ final Map data = new Map();
+ data['id'] = entity.id;
+ data['display_order'] = entity.displayOrder;
+ data['default_value'] = entity.defaultValue;
+ data['default_valuen'] = entity.defaultValuen;
+ data['name'] = entity.name;
+ data['nameN'] = entity.nameN;
+ return data;
+}
diff --git a/lib/generated/json/base/json_convert_content.dart b/lib/generated/json/base/json_convert_content.dart
new file mode 100644
index 00000000..9fab946e
--- /dev/null
+++ b/lib/generated/json/base/json_convert_content.dart
@@ -0,0 +1,128 @@
+// ignore_for_file: non_constant_identifier_names
+// ignore_for_file: camel_case_types
+// ignore_for_file: prefer_single_quotes
+
+// This file is automatically generated. DO NOT EDIT, all your changes would be lost.
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferCategoriesResponseModel.dart';
+import 'package:diplomaticquarterapp/generated/json/OfferCategoriesResponseModel_helper.dart';
+import 'package:diplomaticquarterapp/core/model/geofencing/responses/LogGeoZoneResponseModel.dart';
+import 'package:diplomaticquarterapp/generated/json/log_geo_zone_response_model_entity_helper.dart';
+import 'package:diplomaticquarterapp/core/model/packages_offers/responses/OfferProductsResponseModel.dart';
+import 'package:diplomaticquarterapp/generated/json/OfferProductsResponseModel_helper.dart';
+import 'package:diplomaticquarterapp/core/model/geofencing/responses/GeoZonesResponseModel.dart';
+import 'package:diplomaticquarterapp/generated/json/GeoZonesResponseModel_helper.dart';
+
+class JsonConvert