|  |  |  | @ -1,7 +1,6 @@ | 
		
	
		
			
				|  |  |  |  | import 'dart:async'; | 
		
	
		
			
				|  |  |  |  | import 'dart:convert'; | 
		
	
		
			
				|  |  |  |  | import 'dart:developer'; | 
		
	
		
			
				|  |  |  |  | import 'dart:io' show Platform; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | import 'package:flutter/material.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/api_consts.dart'; | 
		
	
	
		
			
				
					|  |  |  | @ -9,7 +8,6 @@ import 'package:hmg_patient_app_new/core/app_state.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/dependencies.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/core/utils/utils.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/services/dialog_service.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:hmg_patient_app_new/services/logger_service.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:http/http.dart' as http; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -19,7 +17,7 @@ abstract class ApiClient { | 
		
	
		
			
				|  |  |  |  |   Future<void> post( | 
		
	
		
			
				|  |  |  |  |     String endPoint, { | 
		
	
		
			
				|  |  |  |  |     required Map<String, dynamic> body, | 
		
	
		
			
				|  |  |  |  |     required Function(dynamic response, int statusCode, {int? messageStatus}) onSuccess, | 
		
	
		
			
				|  |  |  |  |     required Function(dynamic response, int statusCode, {int? messageStatus, String? errorMessage}) onSuccess, | 
		
	
		
			
				|  |  |  |  |     required Function(String error, int statusCode, {int? messageStatus, Failure? failureType}) onFailure, | 
		
	
		
			
				|  |  |  |  |     bool isAllowAny, | 
		
	
		
			
				|  |  |  |  |     bool isExternal, | 
		
	
	
		
			
				
					|  |  |  | @ -77,29 +75,26 @@ abstract class ApiClient { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class ApiClientImp implements ApiClient { | 
		
	
		
			
				|  |  |  |  |   final _analytics = getIt<GAnalytics>(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   final LoggerService loggerService; | 
		
	
		
			
				|  |  |  |  |   final AppState appState; | 
		
	
		
			
				|  |  |  |  |   final DialogService dialogService; | 
		
	
		
			
				|  |  |  |  |   final LoggerService _loggerService; | 
		
	
		
			
				|  |  |  |  |   final AppState _appState; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   ApiClientImp({ | 
		
	
		
			
				|  |  |  |  |     required this.loggerService, | 
		
	
		
			
				|  |  |  |  |     required this.dialogService, | 
		
	
		
			
				|  |  |  |  |     required this.appState, | 
		
	
		
			
				|  |  |  |  |   }); | 
		
	
		
			
				|  |  |  |  |     required LoggerService loggerService, | 
		
	
		
			
				|  |  |  |  |     required AppState appState, | 
		
	
		
			
				|  |  |  |  |   })  : _appState = appState, | 
		
	
		
			
				|  |  |  |  |         _loggerService = loggerService; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   @override | 
		
	
		
			
				|  |  |  |  |   post( | 
		
	
		
			
				|  |  |  |  |     String endPoint, { | 
		
	
		
			
				|  |  |  |  |     required Map<String, dynamic> body, | 
		
	
		
			
				|  |  |  |  |     required Function(dynamic response, int statusCode, {int? messageStatus}) onSuccess, | 
		
	
		
			
				|  |  |  |  |     required Function(dynamic response, int statusCode, {int? messageStatus, String? errorMessage}) onSuccess, | 
		
	
		
			
				|  |  |  |  |     required Function(String error, int statusCode, {int? messageStatus, Failure? failureType}) onFailure, | 
		
	
		
			
				|  |  |  |  |     bool isAllowAny = false, | 
		
	
		
			
				|  |  |  |  |     bool isAllowAny = true, | 
		
	
		
			
				|  |  |  |  |     bool isExternal = false, | 
		
	
		
			
				|  |  |  |  |     bool isRCService = false, | 
		
	
		
			
				|  |  |  |  |     bool bypassConnectionCheck = false, | 
		
	
		
			
				|  |  |  |  |   }) async { | 
		
	
		
			
				|  |  |  |  |     AppState appState = getIt.get<AppState>(); | 
		
	
		
			
				|  |  |  |  |     String url; | 
		
	
		
			
				|  |  |  |  |     if (isExternal) { | 
		
	
		
			
				|  |  |  |  |       url = endPoint; | 
		
	
	
		
			
				
					|  |  |  | @ -111,39 +106,19 @@ class ApiClientImp implements ApiClient { | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     try { | 
		
	
		
			
				|  |  |  |  |       var user = appState.getAuthenticatedUser; | 
		
	
		
			
				|  |  |  |  |       var user = _appState.getAuthenticatedUser; | 
		
	
		
			
				|  |  |  |  |       Map<String, String> headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}; | 
		
	
		
			
				|  |  |  |  |       if (!isExternal) { | 
		
	
		
			
				|  |  |  |  |         String? token = appState.appAuthToken; | 
		
	
		
			
				|  |  |  |  |         String? languageID = (appState.postParamsObject?.languageID == 1 ? 'ar' : 'en'); | 
		
	
		
			
				|  |  |  |  |         if (endPoint == ApiConsts.sendActivationCode) { | 
		
	
		
			
				|  |  |  |  |           languageID = 'en'; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         String? token = _appState.appAuthToken; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         if (body.containsKey('SetupID')) { | 
		
	
		
			
				|  |  |  |  |           body['SetupID'] = body.containsKey('SetupID') ? body['SetupID'] ?? body[''] : SETUP_ID; | 
		
	
		
			
				|  |  |  |  |         } else {} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         if (body.containsKey('LanguageID')) { | 
		
	
		
			
				|  |  |  |  |           if (body['LanguageID'] != null) { | 
		
	
		
			
				|  |  |  |  |             body['LanguageID'] = body['LanguageID'] == 'ar' | 
		
	
		
			
				|  |  |  |  |                 ? 1 | 
		
	
		
			
				|  |  |  |  |                 : body['LanguageID'] == 'en' | 
		
	
		
			
				|  |  |  |  |                     ? 2 | 
		
	
		
			
				|  |  |  |  |                     : body['LanguageID']; | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         if (body.containsKey('isDentalAllowedBackend')) { | 
		
	
		
			
				|  |  |  |  |           body['isDentalAllowedBackend'] = body.containsKey('isDentalAllowedBackend') ? body['isDentalAllowedBackend'] ?? IS_DENTAL_ALLOWED_BACKEND : IS_DENTAL_ALLOWED_BACKEND; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         //Todo:  I have converted it to string | 
		
	
		
			
				|  |  |  |  |         body['DeviceTypeID'] = Platform.isIOS | 
		
	
		
			
				|  |  |  |  |             ? "1" | 
		
	
		
			
				|  |  |  |  |             : await Utils.isGoogleServicesAvailable() | 
		
	
		
			
				|  |  |  |  |                 ? "2" | 
		
	
		
			
				|  |  |  |  |                 : "3"; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         if (!body.containsKey('IsPublicRequest')) { | 
		
	
		
			
				|  |  |  |  |           // if (!body.containsKey('PatientType')) { | 
		
	
		
			
				|  |  |  |  |           if (user != null && user.patientType != null) { | 
		
	
	
		
			
				
					|  |  |  | @ -158,6 +133,7 @@ class ApiClientImp implements ApiClient { | 
		
	
		
			
				|  |  |  |  |             body['PatientType'] = PATIENT_TYPE_ID.toString(); | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |           // TODO : These should be from the appState | 
		
	
		
			
				|  |  |  |  |           if (user != null) { | 
		
	
		
			
				|  |  |  |  |             body['TokenID'] = body['TokenID'] ?? token; | 
		
	
		
			
				|  |  |  |  |             body['PatientID'] = body['PatientID'] ?? user.patientID; | 
		
	
	
		
			
				
					|  |  |  | @ -175,129 +151,134 @@ class ApiClientImp implements ApiClient { | 
		
	
		
			
				|  |  |  |  |       //     request.languageID = (languageID == 'ar' ? 1 : 2); | 
		
	
		
			
				|  |  |  |  |       //     request.patientOutSA = (request.zipCode == '966' || request.zipCode == '+966') ? 0 : 1; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       // TODO : we will use all these from appState | 
		
	
		
			
				|  |  |  |  |       body['LanguageID'] = body['LanguageID'] ?? "2"; | 
		
	
		
			
				|  |  |  |  |       body['VersionID'] = body['VersionID'] ?? "50.0"; | 
		
	
		
			
				|  |  |  |  |       body['Channel'] = body['Channel'] ?? "3"; | 
		
	
		
			
				|  |  |  |  |       body['IPAdress'] = body['IPAdress'] ?? "10.20.10.20"; | 
		
	
		
			
				|  |  |  |  |       body['generalid'] = body['generalid'] ?? "Cs2020@2016\$2958"; | 
		
	
		
			
				|  |  |  |  |       body['Latitude'] = body['Latitude'] ?? "0.0"; | 
		
	
		
			
				|  |  |  |  |       body['Longitude'] = body['Longitude'] ?? "0.0"; | 
		
	
		
			
				|  |  |  |  |       body['DeviceTypeID'] = body['DeviceTypeID'] ?? | 
		
	
		
			
				|  |  |  |  |           (Platform.isIOS | 
		
	
		
			
				|  |  |  |  |               ? "1" | 
		
	
		
			
				|  |  |  |  |               : await Utils.isGoogleServicesAvailable() | 
		
	
		
			
				|  |  |  |  |                   ? "2" | 
		
	
		
			
				|  |  |  |  |                   : "3"); | 
		
	
		
			
				|  |  |  |  |       body['TokenID'] = "@dm!n"; | 
		
	
		
			
				|  |  |  |  |       body['VersionID'] = ApiConsts.appVersionID.toString(); | 
		
	
		
			
				|  |  |  |  |       body['Channel'] = ApiConsts.appChannelId.toString(); | 
		
	
		
			
				|  |  |  |  |       body['IPAdress'] = ApiConsts.appIpAddress; | 
		
	
		
			
				|  |  |  |  |       body['generalid'] = ApiConsts.appGeneralId; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       body['LanguageID'] = _appState.getLanguageID().toString(); | 
		
	
		
			
				|  |  |  |  |       body['Latitude'] = _appState.userLat.toString(); | 
		
	
		
			
				|  |  |  |  |       body['Longitude'] = _appState.userLong.toString(); | 
		
	
		
			
				|  |  |  |  |       body['DeviceTypeID'] = _appState.deviceTypeID; | 
		
	
		
			
				|  |  |  |  |       if (_appState.appLoginTokenID.isNotEmpty) { | 
		
	
		
			
				|  |  |  |  |         body['LogInTokenID'] = _appState.appLoginTokenID; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       body.removeWhere((key, value) => value == null); | 
		
	
		
			
				|  |  |  |  |       log("body: ${json.encode(body)}"); | 
		
	
		
			
				|  |  |  |  |       log("uri: ${Uri.parse(url.trim())}"); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       if (await Utils.checkConnection(bypassConnectionCheck: bypassConnectionCheck)) { | 
		
	
		
			
				|  |  |  |  |         final response = await http.post(Uri.parse(url.trim()), body: json.encode(body), headers: headers); | 
		
	
		
			
				|  |  |  |  |       final bool networkStatus = await Utils.checkConnection(bypassConnectionCheck: bypassConnectionCheck); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       if (!networkStatus) { | 
		
	
		
			
				|  |  |  |  |         onFailure( | 
		
	
		
			
				|  |  |  |  |           'Please Check The Internet Connection 1', | 
		
	
		
			
				|  |  |  |  |           -1, | 
		
	
		
			
				|  |  |  |  |           failureType: ConnectivityFailure("Please Check The Internet Connection 1"), | 
		
	
		
			
				|  |  |  |  |         ); | 
		
	
		
			
				|  |  |  |  |         _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | 
		
	
		
			
				|  |  |  |  |         return; | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         final int statusCode = response.statusCode; | 
		
	
		
			
				|  |  |  |  |         if (statusCode < 200 || statusCode >= 400) { | 
		
	
		
			
				|  |  |  |  |           onFailure('Error While Fetching data', statusCode, failureType: StatusCodeFailure("Error While Fetching data")); | 
		
	
		
			
				|  |  |  |  |           logApiEndpointError(endPoint, 'Error While Fetching data', statusCode); | 
		
	
		
			
				|  |  |  |  |       final response = await http.post(Uri.parse(url.trim()), body: json.encode(body), headers: headers); | 
		
	
		
			
				|  |  |  |  |       final int statusCode = response.statusCode; | 
		
	
		
			
				|  |  |  |  |       log("response.body: ${response.body}"); | 
		
	
		
			
				|  |  |  |  |       if (statusCode < 200 || statusCode >= 400) { | 
		
	
		
			
				|  |  |  |  |         var parsed = json.decode(utf8.decode(response.bodyBytes)); | 
		
	
		
			
				|  |  |  |  |         onFailure('Error While Fetching data', statusCode, failureType: StatusCodeFailure("Error While Fetching data")); | 
		
	
		
			
				|  |  |  |  |         logApiEndpointError(endPoint, 'Error While Fetching data', statusCode); | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         var parsed = json.decode(utf8.decode(response.bodyBytes)); | 
		
	
		
			
				|  |  |  |  |         if (isAllowAny) { | 
		
	
		
			
				|  |  |  |  |           onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |         } else { | 
		
	
		
			
				|  |  |  |  |           var parsed = json.decode(utf8.decode(response.bodyBytes)); | 
		
	
		
			
				|  |  |  |  |           log("parsed: ${jsonEncode(parsed)}"); | 
		
	
		
			
				|  |  |  |  |           if (isAllowAny) { | 
		
	
		
			
				|  |  |  |  |             onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |           if (parsed['Response_Message'] != null) { | 
		
	
		
			
				|  |  |  |  |             onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |           } else { | 
		
	
		
			
				|  |  |  |  |             if (parsed['Response_Message'] != null) { | 
		
	
		
			
				|  |  |  |  |               onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
		
			
				|  |  |  |  |               if (parsed['ErrorType'] == 4) { | 
		
	
		
			
				|  |  |  |  |                 //TODO : handle app update | 
		
	
		
			
				|  |  |  |  |             if (parsed['ErrorType'] == 4) { | 
		
	
		
			
				|  |  |  |  |               //TODO : handle app update | 
		
	
		
			
				|  |  |  |  |               logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             if (parsed['ErrorType'] == 2) { | 
		
	
		
			
				|  |  |  |  |               // todo: handle Logout | 
		
	
		
			
				|  |  |  |  |               logApiEndpointError(endPoint, "session logged out", statusCode); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             if (isAllowAny) { | 
		
	
		
			
				|  |  |  |  |               onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |             } else if (parsed['IsAuthenticated'] == null) { | 
		
	
		
			
				|  |  |  |  |               if (parsed['isSMSSent'] == true) { | 
		
	
		
			
				|  |  |  |  |                 onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |               } else if (parsed['MessageStatus'] == 1) { | 
		
	
		
			
				|  |  |  |  |                 onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |               } else if (parsed['Result'] == 'OK') { | 
		
	
		
			
				|  |  |  |  |                 onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |               } else { | 
		
	
		
			
				|  |  |  |  |                 onFailure( | 
		
	
		
			
				|  |  |  |  |                   parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], | 
		
	
		
			
				|  |  |  |  |                   statusCode, | 
		
	
		
			
				|  |  |  |  |                   failureType: MessageStatusFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']), | 
		
	
		
			
				|  |  |  |  |                 ); | 
		
	
		
			
				|  |  |  |  |                 logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | 
		
	
		
			
				|  |  |  |  |               } | 
		
	
		
			
				|  |  |  |  |               if (parsed['ErrorType'] == 2) { | 
		
	
		
			
				|  |  |  |  |                 // todo: handle Logout | 
		
	
		
			
				|  |  |  |  |                 logApiEndpointError(endPoint, "session logged out", statusCode); | 
		
	
		
			
				|  |  |  |  |               } | 
		
	
		
			
				|  |  |  |  |               if (isAllowAny) { | 
		
	
		
			
				|  |  |  |  |                 onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |               } else if (parsed['IsAuthenticated'] == null) { | 
		
	
		
			
				|  |  |  |  |                 if (parsed['isSMSSent'] == true) { | 
		
	
		
			
				|  |  |  |  |                   onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |                 } else if (parsed['MessageStatus'] == 1) { | 
		
	
		
			
				|  |  |  |  |                   onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |                 } else if (parsed['Result'] == 'OK') { | 
		
	
		
			
				|  |  |  |  |                   onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |                 } else { | 
		
	
		
			
				|  |  |  |  |                   onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode, failureType: ServerFailure("Error While Fetching data")); | 
		
	
		
			
				|  |  |  |  |                   logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |               } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { | 
		
	
		
			
				|  |  |  |  |                 onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |               } else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) { | 
		
	
		
			
				|  |  |  |  |                 if (parsed['SameClinicApptList'] != null) { | 
		
	
		
			
				|  |  |  |  |                   onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |                 } else { | 
		
	
		
			
				|  |  |  |  |                   if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { | 
		
	
		
			
				|  |  |  |  |                     if (parsed['ErrorSearchMsg'] == null) { | 
		
	
		
			
				|  |  |  |  |                       onFailure( | 
		
	
		
			
				|  |  |  |  |                         "Server Error found with no available message", | 
		
	
		
			
				|  |  |  |  |                         statusCode, | 
		
	
		
			
				|  |  |  |  |                         failureType: ServerFailure("Error While Fetching data"), | 
		
	
		
			
				|  |  |  |  |                       ); | 
		
	
		
			
				|  |  |  |  |                       logApiEndpointError(endPoint, "Server Error found with no available message", statusCode); | 
		
	
		
			
				|  |  |  |  |                     } else { | 
		
	
		
			
				|  |  |  |  |                       onFailure( | 
		
	
		
			
				|  |  |  |  |                         parsed['ErrorSearchMsg'], | 
		
	
		
			
				|  |  |  |  |                         statusCode, | 
		
	
		
			
				|  |  |  |  |                         failureType: ServerFailure("Error While Fetching data"), | 
		
	
		
			
				|  |  |  |  |                       ); | 
		
	
		
			
				|  |  |  |  |                       logApiEndpointError(endPoint, parsed['ErrorSearchMsg'], statusCode); | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                   } else { | 
		
	
		
			
				|  |  |  |  |                     onFailure( | 
		
	
		
			
				|  |  |  |  |                       parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], | 
		
	
		
			
				|  |  |  |  |                       statusCode, | 
		
	
		
			
				|  |  |  |  |                       failureType: ServerFailure("Error While Fetching data"), | 
		
	
		
			
				|  |  |  |  |                     ); | 
		
	
		
			
				|  |  |  |  |                     logApiEndpointError(endPoint, parsed['message'] ?? parsed['message'], statusCode); | 
		
	
		
			
				|  |  |  |  |                   } | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { | 
		
	
		
			
				|  |  |  |  |               onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |             } else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) { | 
		
	
		
			
				|  |  |  |  |               if (parsed['SameClinicApptList'] != null) { | 
		
	
		
			
				|  |  |  |  |                 onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |               } else { | 
		
	
		
			
				|  |  |  |  |                 if (parsed['SameClinicApptList'] != null) { | 
		
	
		
			
				|  |  |  |  |                   onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus']); | 
		
	
		
			
				|  |  |  |  |                 } else { | 
		
	
		
			
				|  |  |  |  |                   if (parsed['message'] != null) { | 
		
	
		
			
				|  |  |  |  |                 if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) { | 
		
	
		
			
				|  |  |  |  |                   if (parsed['ErrorSearchMsg'] == null) { | 
		
	
		
			
				|  |  |  |  |                     onFailure( | 
		
	
		
			
				|  |  |  |  |                       parsed['message'] ?? parsed['message'], | 
		
	
		
			
				|  |  |  |  |                       "Server Error found with no available message", | 
		
	
		
			
				|  |  |  |  |                       statusCode, | 
		
	
		
			
				|  |  |  |  |                       failureType: ServerFailure("Error While Fetching data"), | 
		
	
		
			
				|  |  |  |  |                     ); | 
		
	
		
			
				|  |  |  |  |                     logApiEndpointError(endPoint, parsed['message'] ?? parsed['message'], statusCode); | 
		
	
		
			
				|  |  |  |  |                     logApiEndpointError(endPoint, "Server Error found with no available message", statusCode); | 
		
	
		
			
				|  |  |  |  |                   } else { | 
		
	
		
			
				|  |  |  |  |                     onFailure( | 
		
	
		
			
				|  |  |  |  |                       parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], | 
		
	
		
			
				|  |  |  |  |                       parsed['ErrorSearchMsg'], | 
		
	
		
			
				|  |  |  |  |                       statusCode, | 
		
	
		
			
				|  |  |  |  |                       failureType: ServerFailure("Error While Fetching data"), | 
		
	
		
			
				|  |  |  |  |                     ); | 
		
	
		
			
				|  |  |  |  |                     logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | 
		
	
		
			
				|  |  |  |  |                     logApiEndpointError(endPoint, parsed['ErrorSearchMsg'], statusCode); | 
		
	
		
			
				|  |  |  |  |                   } | 
		
	
		
			
				|  |  |  |  |                 } else { | 
		
	
		
			
				|  |  |  |  |                   onFailure( | 
		
	
		
			
				|  |  |  |  |                     parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], | 
		
	
		
			
				|  |  |  |  |                     statusCode, | 
		
	
		
			
				|  |  |  |  |                     failureType: UserIntimationFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']), | 
		
	
		
			
				|  |  |  |  |                   ); | 
		
	
		
			
				|  |  |  |  |                   logApiEndpointError(endPoint, parsed['message'] ?? parsed['message'], statusCode); | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |               } | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
		
			
				|  |  |  |  |               if (parsed['SameClinicApptList'] != null) { | 
		
	
		
			
				|  |  |  |  |                 onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); | 
		
	
		
			
				|  |  |  |  |               } else { | 
		
	
		
			
				|  |  |  |  |                 if (parsed['message'] != null) { | 
		
	
		
			
				|  |  |  |  |                   onFailure( | 
		
	
		
			
				|  |  |  |  |                     parsed['message'] ?? parsed['message'], | 
		
	
		
			
				|  |  |  |  |                     statusCode, | 
		
	
		
			
				|  |  |  |  |                     failureType: ServerFailure("Error While Fetching data"), | 
		
	
		
			
				|  |  |  |  |                   ); | 
		
	
		
			
				|  |  |  |  |                   logApiEndpointError(endPoint, parsed['message'] ?? parsed['message'], statusCode); | 
		
	
		
			
				|  |  |  |  |                 } else { | 
		
	
		
			
				|  |  |  |  |                   onFailure( | 
		
	
		
			
				|  |  |  |  |                     parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], | 
		
	
		
			
				|  |  |  |  |                     statusCode, | 
		
	
		
			
				|  |  |  |  |                     failureType: ServerFailure("Error While Fetching data"), | 
		
	
		
			
				|  |  |  |  |                   ); | 
		
	
		
			
				|  |  |  |  |                   logApiEndpointError(endPoint, parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode); | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |               } | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         onFailure( | 
		
	
		
			
				|  |  |  |  |           'Please Check The Internet Connection 1', | 
		
	
		
			
				|  |  |  |  |           -1, | 
		
	
		
			
				|  |  |  |  |           failureType: ConnectivityFailure("Please Check The Internet Connection 1"), | 
		
	
		
			
				|  |  |  |  |         ); | 
		
	
		
			
				|  |  |  |  |         _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } catch (e) { | 
		
	
		
			
				|  |  |  |  |       loggerService.errorLogs(e.toString()); | 
		
	
		
			
				|  |  |  |  |     } catch (e, stackTrace) { | 
		
	
		
			
				|  |  |  |  |       _loggerService.errorLogs(stackTrace.toString()); | 
		
	
		
			
				|  |  |  |  |       if (e.toString().contains("ClientException")) { | 
		
	
		
			
				|  |  |  |  |         onFailure('Something went wrong, plase try again', -1, failureType: InvalidCredentials('Something went wrong, plase try again')); | 
		
	
		
			
				|  |  |  |  |         onFailure('ClientException: Something went wrong, Please try again', -1, failureType: InvalidCredentials('ClientException: Something went wrong, plase try again')); | 
		
	
		
			
				|  |  |  |  |         _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         onFailure(e.toString(), -1); | 
		
	
	
		
			
				
					|  |  |  | 
 |