From 5723b64234717c11a33581245b216a94b82faa88 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Tue, 26 Dec 2023 10:52:26 +0300 Subject: [PATCH] Join MarathonProviderFix --- assets/json/demo_upcoming_marathon | 5 ++-- lib/app_state/app_state.dart | 2 +- lib/classes/decorations_helper.dart | 1 - lib/models/marathon/marathon_model.dart | 5 ++++ lib/ui/marathon/marathon_provider.dart | 29 +++++++++++++++------- lib/ui/marathon/widgets/question_card.dart | 2 +- 6 files changed, 30 insertions(+), 14 deletions(-) diff --git a/assets/json/demo_upcoming_marathon b/assets/json/demo_upcoming_marathon index 2fdabf0..f08cb22 100644 --- a/assets/json/demo_upcoming_marathon +++ b/assets/json/demo_upcoming_marathon @@ -16,7 +16,7 @@ "projects": { "id": "b1cd3fa3-bb27-422e-a4c1-08dac09254df", "nameEn": "Cloud Solutions", - "nameAr": "333شركة حلول السحابة للاتصالات وتقنية المعلومات", + "nameAr": "شركة حلول السحابة للاتصالات وتقنية المعلومات", "projectCode": "CS" }, "sponsors": [ @@ -42,5 +42,6 @@ "totalQuestions": 10, "cancelReason": null, "marathonBufferTime": 30, - "currentTime": "2022-12-28T08:03:24.3671803Z" + "currentTime": "2022-12-28T08:03:24.3671803Z", + "displayCorrectAnswer": true } diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart index 2cfc751..1039b20 100644 --- a/lib/app_state/app_state.dart +++ b/lib/app_state/app_state.dart @@ -90,7 +90,7 @@ class AppState { String get getHuaweiPushToken => _huaweiPushToken; - final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.3, mobileType: Platform.isAndroid ? "android" : "ios"); + final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.4, mobileType: Platform.isAndroid ? "android" : "ios"); void setPostParamsInitConfig() { isAuthenticated = false; diff --git a/lib/classes/decorations_helper.dart b/lib/classes/decorations_helper.dart index b313673..fd6d4f7 100644 --- a/lib/classes/decorations_helper.dart +++ b/lib/classes/decorations_helper.dart @@ -30,7 +30,6 @@ class MyDecorations { return getContainersDecoration(MyColors.greenColor); case QuestionsOptionStatus.wrong: return getContainersDecoration(MyColors.redColor); - case QuestionsOptionStatus.selected: return getContainersDecoration(MyColors.yellowColorII); case QuestionsOptionStatus.unSelected: diff --git a/lib/models/marathon/marathon_model.dart b/lib/models/marathon/marathon_model.dart index d86ffc7..934b73b 100644 --- a/lib/models/marathon/marathon_model.dart +++ b/lib/models/marathon/marathon_model.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + class MarathonDetailModel { String? id; String? titleEn; @@ -17,6 +19,7 @@ class MarathonDetailModel { List? questions; int? totalQuestions; int? marathonBufferTime; + bool? displayCorrectAnswer; MarathonDetailModel({ id, @@ -37,6 +40,7 @@ class MarathonDetailModel { questions, totalQuestions, marathonBufferTime, + displayCorrectAnswer, }); MarathonDetailModel.fromJson(Map json) { @@ -68,6 +72,7 @@ class MarathonDetailModel { } totalQuestions = json["totalQuestions"]; marathonBufferTime = json["marathonBufferTime"]; + displayCorrectAnswer = json["displayCorrectAnswer"]; } Map toJson() { diff --git a/lib/ui/marathon/marathon_provider.dart b/lib/ui/marathon/marathon_provider.dart index 544aad3..ed241af 100644 --- a/lib/ui/marathon/marathon_provider.dart +++ b/lib/ui/marathon/marathon_provider.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:developer'; import 'package:appinio_swiper/appinio_swiper.dart'; import 'package:easy_localization/easy_localization.dart'; @@ -414,13 +415,16 @@ class MarathonProvider extends ChangeNotifier { notifyListeners(); } - void updateCurrentQuestionOptionStatus(QuestionsOptionStatus status, int index) { + void updateCurrentQuestionOptionStatus({required QuestionsOptionStatus status, required int selectedOptIndex, required int correctOptionIndex}) { for (int i = 0; i < currentQuestion.questionOptions!.length; i++) { currentQuestion.questionOptions![i].optionStatus = QuestionsOptionStatus.unSelected; } - currentQuestion.questionOptions![index].optionStatus = status; - selectedOptionId = currentQuestion.questionOptions![index].id; - selectedOptionIndex = index; + if (status == QuestionsOptionStatus.wrong) { + currentQuestion.questionOptions![correctOptionIndex].optionStatus = QuestionsOptionStatus.correct; // if person's answer is wrong we have to show him the actual right answer + } + currentQuestion.questionOptions![selectedOptIndex].optionStatus = status; + selectedOptionId = currentQuestion.questionOptions![selectedOptIndex].id; + selectedOptionIndex = selectedOptIndex; notifyListeners(); } @@ -435,22 +439,30 @@ class MarathonProvider extends ChangeNotifier { } void getCorrectAnswerAndUpdateAnswerColor() { + log("correctOptionIndex"); + callCountThreshold = 1; + int correctOptionIndex = -1; + if (demoMarathonDetailModel.displayCorrectAnswer ?? false) { + correctOptionIndex = currentQuestion.questionOptions!.indexWhere((QuestionOptions element) => element.isCorrectOption ?? false); + log("correctOptionIndex: $correctOptionIndex"); + } + if (selectedOptionIndex != null) { scheduleMicrotask(() async { if (AppState().getIsDemoMarathon) { if (currentQuestion.questionOptions![selectedOptionIndex!].isCorrectOption!) { - updateCurrentQuestionOptionStatus(QuestionsOptionStatus.correct, selectedOptionIndex!); + updateCurrentQuestionOptionStatus(status: QuestionsOptionStatus.correct, selectedOptIndex: selectedOptionIndex!, correctOptionIndex: correctOptionIndex); } else { - updateCurrentQuestionOptionStatus(QuestionsOptionStatus.wrong, selectedOptionIndex!); + updateCurrentQuestionOptionStatus(status: QuestionsOptionStatus.wrong, selectedOptIndex: selectedOptionIndex!, correctOptionIndex: correctOptionIndex); } } else { await callSubmitOptionApi().then((bool value) async { updateIsUserOutOfGame = !value; if (value) { - updateCurrentQuestionOptionStatus(QuestionsOptionStatus.correct, selectedOptionIndex!); + updateCurrentQuestionOptionStatus(status: QuestionsOptionStatus.correct, selectedOptIndex: selectedOptionIndex!, correctOptionIndex: correctOptionIndex); } else { - updateCurrentQuestionOptionStatus(QuestionsOptionStatus.wrong, selectedOptionIndex!); + updateCurrentQuestionOptionStatus(status: QuestionsOptionStatus.wrong, selectedOptIndex: selectedOptionIndex!, correctOptionIndex: correctOptionIndex); } }); } @@ -551,7 +563,6 @@ class MarathonProvider extends ChangeNotifier { notifyListeners(); isPrivilegedWithMarathon = checkIfPrivilegedForMarathon(); demoMarathonDetailModel = await DemoMarathonRepo().getDemoMarathonDetails(); - if (isPrivilegedWithMarathon) { marathonDetailModel = await MarathonApiClient().getMarathonDetails(); updateTotalSecondsToWaitForMarathon = marathonDetailModel.marathonBufferTime ?? 30; diff --git a/lib/ui/marathon/widgets/question_card.dart b/lib/ui/marathon/widgets/question_card.dart index 8aa76bd..0965c9d 100644 --- a/lib/ui/marathon/widgets/question_card.dart +++ b/lib/ui/marathon/widgets/question_card.dart @@ -133,7 +133,7 @@ class AnswerContent extends StatelessWidget { if (provider.totalCurrentQuestionTime - provider.currentGapTime <= 0) { null; } else { - provider.updateCurrentQuestionOptionStatus(QuestionsOptionStatus.selected, index); + provider.updateCurrentQuestionOptionStatus(status: QuestionsOptionStatus.selected, selectedOptIndex: index, correctOptionIndex: -1); // } }, );