|  |  |  | @ -1,14 +1,19 @@ | 
		
	
		
			
				|  |  |  |  | import 'dart:convert'; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | import 'package:flutter/material.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:http/http.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:logger/logger.dart' as L; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/api/api_client.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/app_state/app_state.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/classes/consts.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/classes/utils.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/config/routes.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/models/marathon/marathon_generic_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/models/marathon/marathon_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/models/marathon/question_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/models/marathon/winner_model.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:provider/provider.dart'; | 
		
	
		
			
				|  |  |  |  | import 'package:signalr_netcore/hub_connection.dart'; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class MarathonApiClient { | 
		
	
	
		
			
				
					|  |  |  | @ -41,6 +46,17 @@ class MarathonApiClient { | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   //  Future<GenericResponseModel?> getGetMenuEntries() async { | 
		
	
		
			
				|  |  |  |  |   //     String url = "${ApiConsts.erpRest}GET_MENU_ENTRIES"; | 
		
	
		
			
				|  |  |  |  |   //     Map<String, dynamic> postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E"}; | 
		
	
		
			
				|  |  |  |  |   //     postParams.addAll(AppState().postParamsJson); | 
		
	
		
			
				|  |  |  |  |   //     return await ApiClient().postJsonForObject((json) { | 
		
	
		
			
				|  |  |  |  |   //       GenericResponseModel responseData = GenericResponseModel.fromJson(json); | 
		
	
		
			
				|  |  |  |  |   //       return responseData; | 
		
	
		
			
				|  |  |  |  |   //     }, url, postParams); | 
		
	
		
			
				|  |  |  |  |   //   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   Future<String> getProjectId() async { | 
		
	
		
			
				|  |  |  |  |     Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonProjectGetUrl, <String, dynamic>{}, token: AppState().getMarathonToken ?? await getMarathonToken()); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -123,12 +139,53 @@ class MarathonApiClient { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     var json = jsonDecode(response.body); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     logger.i("json in NextQuestion: $json"); | 
		
	
		
			
				|  |  |  |  |     var data = json["data"]; | 
		
	
		
			
				|  |  |  |  |     MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (marathonModel.statusCode == 404) { | 
		
	
		
			
				|  |  |  |  |       Utils.confirmDialog( | 
		
	
		
			
				|  |  |  |  |         AppRoutes.navigatorKey.currentContext, | 
		
	
		
			
				|  |  |  |  |         marathonModel.message!, | 
		
	
		
			
				|  |  |  |  |         onTap: () { | 
		
	
		
			
				|  |  |  |  |           AppRoutes.navigatorKey.currentContext!.read<MarathonProvider>().resetValues(); | 
		
	
		
			
				|  |  |  |  |           Navigator.of( | 
		
	
		
			
				|  |  |  |  |             AppRoutes.navigatorKey.currentContext!, | 
		
	
		
			
				|  |  |  |  |           ).popUntil(ModalRoute.withName(AppRoutes.dashboard)); | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |       ); | 
		
	
		
			
				|  |  |  |  |       return null; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (marathonModel.statusCode == 208) { | 
		
	
		
			
				|  |  |  |  |       Utils.confirmDialog( | 
		
	
		
			
				|  |  |  |  |         AppRoutes.navigatorKey.currentContext, | 
		
	
		
			
				|  |  |  |  |         marathonModel.message!, | 
		
	
		
			
				|  |  |  |  |         onTap: () { | 
		
	
		
			
				|  |  |  |  |           AppRoutes.navigatorKey.currentContext!.read<MarathonProvider>().resetValues(); | 
		
	
		
			
				|  |  |  |  |           Navigator.of( | 
		
	
		
			
				|  |  |  |  |             AppRoutes.navigatorKey.currentContext!, | 
		
	
		
			
				|  |  |  |  |           ).popUntil(ModalRoute.withName(AppRoutes.dashboard)); | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |       ); | 
		
	
		
			
				|  |  |  |  |       return null; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (marathonModel.statusCode == 204) { | 
		
	
		
			
				|  |  |  |  |       Utils.confirmDialog( | 
		
	
		
			
				|  |  |  |  |         AppRoutes.navigatorKey.currentContext, | 
		
	
		
			
				|  |  |  |  |         marathonModel.message!, | 
		
	
		
			
				|  |  |  |  |         onTap: () { | 
		
	
		
			
				|  |  |  |  |           AppRoutes.navigatorKey.currentContext!.read<MarathonProvider>().resetValues(); | 
		
	
		
			
				|  |  |  |  |           Navigator.of( | 
		
	
		
			
				|  |  |  |  |             AppRoutes.navigatorKey.currentContext!, | 
		
	
		
			
				|  |  |  |  |           ).popUntil(ModalRoute.withName(AppRoutes.dashboard)); | 
		
	
		
			
				|  |  |  |  |         }, | 
		
	
		
			
				|  |  |  |  |       ); | 
		
	
		
			
				|  |  |  |  |       return null; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (data != null) { | 
		
	
		
			
				|  |  |  |  |       QuestionModel newQuestion = QuestionModel.fromJson(data); | 
		
	
		
			
				|  |  |  |  |     if (marathonModel.data != null && marathonModel.isSuccessful == true) { | 
		
	
		
			
				|  |  |  |  |       QuestionModel newQuestion = QuestionModel.fromJson(marathonModel.data); | 
		
	
		
			
				|  |  |  |  |       return newQuestion; | 
		
	
		
			
				|  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |       return null; | 
		
	
	
		
			
				
					|  |  |  | @ -136,7 +193,7 @@ class MarathonApiClient { | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |   Future<bool> submitSelectedOption({required String marathonId, required String? questionId, required String? selectedAnswerId}) async { | 
		
	
		
			
				|  |  |  |  |     Map<String, String?> jsonObject = <String, String?>{"marathonId": marathonId, "questionId": questionId, "selectedOptionId" : selectedAnswerId}; | 
		
	
		
			
				|  |  |  |  |     Map<String, String?> jsonObject = <String, String?>{"marathonId": marathonId, "questionId": questionId, "selectedOptionId": selectedAnswerId}; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonSubmitAnswerUrl, jsonObject, token: AppState().getMarathonToken ?? await getMarathonToken()); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | 
 |