diff --git a/assets/json/disclosure_upcoming.json b/assets/json/disclosure_upcoming.json index cb507b9..5e3ff4f 100644 --- a/assets/json/disclosure_upcoming.json +++ b/assets/json/disclosure_upcoming.json @@ -1,6 +1,6 @@ { "id": "979813be-eafa-4d3e-d27e-08dae8a08a3b", - "titleEn": "Upcoming Disclosure", + "titleEn": "Disclosure Title", "titleAr": "undefined", "descEn": "Submit disclosure using mobile app", "descAr": "undefined", diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 6ecc9f2..91a3b8b 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -581,5 +581,8 @@ "approvalDate": "تاريخ الموافقة", "versionStatus": "حالة الإصدار", "supplierNo": "رقم المورد", - "paymentRequest": "طلب الدفع" + "paymentRequest": "طلب الدفع", + "pleaseWriteHere": "يرجى الكتابة هنا", + "disclosures": "الإفصاحات", + "areYouSureYouWantToGoBack": "هل أنت متأكد أنك تريد الرجوع؟" } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 11983d9..a64d269 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -587,6 +587,9 @@ "versionStatus": "Version Status", "supplierNo": "Supplier Number", "paymentRequest": "Payment Request", - "pOAmount": "PO Amount" + "pOAmount": "PO Amount", + "pleaseWriteHere": "Please Write Here", + "disclosures": "Disclosures", + "areYouSureYouWantToGoBack": "Are you sure you want to go back?" } \ No newline at end of file diff --git a/lib/api/marathon/demo_marathon_repo.dart b/lib/api/marathon/demo_marathon_repo.dart index a17cd36..693e266 100644 --- a/lib/api/marathon/demo_marathon_repo.dart +++ b/lib/api/marathon/demo_marathon_repo.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:developer'; import 'package:flutter/services.dart'; import 'package:logger/logger.dart' as L; @@ -37,6 +38,7 @@ class DisclosureRepo { } Future getDisclosureNextQuestion({required int currentQuestionNumber}) async { + log("getQuestion At Index: $currentQuestionNumber "); String response = await rootBundle.loadString('assets/json/disclosure_questions.json'); List json = jsonDecode(response); DisclosureQuestionModel currentQuestion = DisclosureQuestionModel.fromJson(json.elementAt(currentQuestionNumber)); diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index c50597f..6ccc36c 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -597,7 +597,10 @@ class CodegenLoader extends AssetLoader{ "approvalDate": "تاريخ الموافقة", "versionStatus": "حالة الإصدار", "supplierNo": "رقم المورد", - "paymentRequest": "طلب الدفع" + "paymentRequest": "طلب الدفع", + "pleaseWriteHere": "يرجى الكتابة هنا", + "disclosures": "الإفصاحات", + "areYouSureYouWantToGoBack": "هل أنت متأكد أنك تريد الرجوع؟" }; static const Map en_US = { "mohemm": "Mohemm", @@ -1188,7 +1191,10 @@ static const Map en_US = { "versionStatus": "Version Status", "supplierNo": "Supplier Number", "paymentRequest": "Payment Request", - "pOAmount": "PO Amount" + "pOAmount": "PO Amount", + "pleaseWriteHere": "Please Write Here", + "disclosures": "Disclosures", + "areYouSureYouWantToGoBack": "Are you sure you want to go back?" }; static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; } diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index a13b014..2277367 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -568,5 +568,8 @@ abstract class LocaleKeys { static const versionStatus = 'versionStatus'; static const supplierNo = 'supplierNo'; static const paymentRequest = 'paymentRequest'; + static const pleaseWriteHere = 'pleaseWriteHere'; + static const disclosures = 'disclosures'; + static const areYouSureYouWantToGoBack = 'areYouSureYouWantToGoBack'; } diff --git a/lib/models/disclosure/disclosure_question_model.dart b/lib/models/disclosure/disclosure_question_model.dart index 7098e17..23ee634 100644 --- a/lib/models/disclosure/disclosure_question_model.dart +++ b/lib/models/disclosure/disclosure_question_model.dart @@ -6,6 +6,8 @@ class DisclosureQuestionModel { String? id; String? titleEn; String? titleAr; + String? descEn; + String? descAr; String? marathonId; int? questionTypeId; int? questionTime; @@ -21,6 +23,8 @@ class DisclosureQuestionModel { String? id, String? titleEn, String? titleAr, + String? descEn, + String? descAr, String? marathonId, int? questionTypeId, int? questionTime, @@ -37,6 +41,8 @@ class DisclosureQuestionModel { id = json['id']; titleEn = json['titleEn']; titleAr = json['titleAr']; + descEn = json['desEn']; + descAr = json['desAr']; marathonId = json['marathonId']; questionTypeId = json['questionTypeId']; questionTime = json['questionTime']; @@ -54,26 +60,6 @@ class DisclosureQuestionModel { questionOptions!.sort((QuestionOptions a, QuestionOptions b) => a.sequence!.compareTo(b.sequence!)); } } - - Map toJson() { - Map data = {}; - data['id'] = id; - data['titleEn'] = titleEn; - data['titleAr'] = titleAr; - data['marathonId'] = marathonId; - data['questionTypeId'] = questionTypeId; - data['questionTime'] = questionTime; - data['nextQuestGap'] = nextQuestGap; - data['gapType'] = gapType; - data['gapText'] = gapText; - data['gapImage'] = gapImage; - data['questOptionsLimit'] = questOptionsLimit; - data['remainingParticipantCount'] = remainingParticipantCount; - if (questionOptions != null) { - data['questionOptions'] = questionOptions!.map((v) => v.toJson()).toList(); - } - return data; - } } class QuestionOptions { diff --git a/lib/ui/disclosure/disclosure_provider.dart b/lib/ui/disclosure/disclosure_provider.dart index fedf5c9..7642d70 100644 --- a/lib/ui/disclosure/disclosure_provider.dart +++ b/lib/ui/disclosure/disclosure_provider.dart @@ -18,7 +18,7 @@ class DisclosureProvider extends ChangeNotifier { final AppinioSwiperController swiperController = AppinioSwiperController(); DisclosureQuestionsOptionStatus currentQuestionSelectionStatus = DisclosureQuestionsOptionStatus.unSelected; DisclosureDetailsModel disclosureDetailsModel = DisclosureDetailsModel(); - List cardContentList = [const DisclosureCardContent()]; + List cardContentList = []; DisclosureQuestionModel currentQuestion = DisclosureQuestionModel(); List answerStatusesList = []; DisclosureQuestionCardStatus questionCardStatus = DisclosureQuestionCardStatus.question; @@ -58,6 +58,13 @@ class DisclosureProvider extends ChangeNotifier { notifyListeners(); } + String currentAdditionalText = ""; + + void updateCurrentAdditionalText(String value) { + currentAdditionalText = value; + notifyListeners(); + } + void updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus value) { currentQuestionSelectionStatus = value; notifyListeners(); @@ -66,9 +73,11 @@ class DisclosureProvider extends ChangeNotifier { //************************************************ FUNCTIONS ********************************************************** Future callNextQuestionApi() async { - log("currentQuestionNumber: $currentQuestionNumber"); if (currentQuestionNumber < (disclosureDetailsModel.totalQuestions!)) { if (currentQuestionNumber == 0) { + for (int i = 1; i <= disclosureDetailsModel.totalQuestions!; i++) { + cardContentList.add(const DisclosureCardContent()); + } currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber); updateCardData(); if (Utils.isLoading) { @@ -83,16 +92,30 @@ class DisclosureProvider extends ChangeNotifier { } } - void updateCardData() { + Future callPreviousQuestionApi() async { + currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber - 2); + updateCardData(isForPrevious: true); + notifyListeners(); + } + + void updateCardData({bool isForPrevious = false}) { + if (isForPrevious) { + selectedOptionIndex = null; + currentQuestionNumber--; + + cardContentList.add(const DisclosureCardContent()); + cardContentList.add(const DisclosureCardContent()); + swiperController.swipeLeft(); + questionCardStatus = DisclosureQuestionCardStatus.question; + notifyListeners(); + return; + } if (currentQuestionNumber > 0) { swiperController.swipeRight(); } + selectedOptionIndex = null; currentQuestionNumber++; - if (currentQuestionNumber < disclosureDetailsModel.totalQuestions!) { - cardContentList.add(const DisclosureCardContent()); - cardContentList.add(const DisclosureCardContent()); - } questionCardStatus = DisclosureQuestionCardStatus.question; notifyListeners(); } @@ -146,6 +169,7 @@ class DisclosureProvider extends ChangeNotifier { answerStatusesList[i] = DisclosureQuestionCardStatus.question; } } + currentQuestionSelectionStatus = DisclosureQuestionsOptionStatus.unSelected; AppRoutes.navigatorKey.currentContext!.setLocale(savedLocale); notifyListeners(); } diff --git a/lib/ui/disclosure/disclosure_screen.dart b/lib/ui/disclosure/disclosure_screen.dart index e03256e..94b8c29 100644 --- a/lib/ui/disclosure/disclosure_screen.dart +++ b/lib/ui/disclosure/disclosure_screen.dart @@ -1,23 +1,16 @@ import 'dart:async'; - +import 'dart:developer'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; -import 'package:lottie/lottie.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; -import 'package:mohem_flutter_app/classes/consts.dart'; -import 'package:mohem_flutter_app/classes/lottie_consts.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; -import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/disclosure/disclosure_question_model.dart'; -import 'package:mohem_flutter_app/models/marathon/question_model.dart'; import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.dart'; -import 'package:mohem_flutter_app/ui/disclosure/widgets/custom_status_widget.dart'; import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_progress_container.dart'; import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_question_card.dart'; -import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_question_card_builder.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; @@ -26,68 +19,47 @@ import 'package:provider/provider.dart'; class DisclosureScreen extends StatelessWidget { const DisclosureScreen({Key? key}) : super(key: key); - Widget getSuccessWidget({required int? gapType, required String? gapImage, required String? gapText}) { - if (gapType == 1) { - if (gapText == null) { - return Image.asset(MyLottieConsts.congratsGif, height: 200); - } - return gapText.toText18(color: MyColors.darkTextColor, isCentered: true); - } - if (gapType == 0) { - if (gapImage == null) { - return Image.asset(MyLottieConsts.congratsGif, height: 200); - } - return Image.network(ApiConsts.marathonBaseUrlServices + gapImage, height: 200); - } - return Image.asset(MyLottieConsts.congratsGif, height: 200); - } - @override Widget build(BuildContext context) { DisclosureProvider provider = context.watch(); - bool isButtonDisabled = provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct || provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.wrong; bool isLastQuestion = provider.currentQuestionNumber == provider.disclosureDetailsModel.totalQuestions!; + bool isButtonDisabled = (provider.currentQuestionSelectionStatus != DisclosureQuestionsOptionStatus.correct && provider.currentQuestionSelectionStatus != DisclosureQuestionsOptionStatus.wrong) || + (provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct && provider.currentAdditionalText.isEmpty) && !isLastQuestion || + (isLastQuestion && provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.wrong); + return WillPopScope( child: Scaffold( appBar: AppBarWidget( context, title: LocaleKeys.disclosure.tr(), onHomeTapped: () { - if (provider.questionCardStatus == QuestionCardStatus.winnerFound) { - provider.resetValues(); - provider.getDisclosureDetails(); - Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); - } else { - showDialog( - context: context, - builder: (BuildContext context) => ConfirmDialog( - message: LocaleKeys.youWantToLeaveMarathon.tr(), - onTap: () { - provider.resetValues(); - provider.getDisclosureDetails(); - Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); - }, - ), - ); - } + showDialog( + context: context, + builder: (BuildContext context) => ConfirmDialog( + message: LocaleKeys.areYouSureYouWantToGoBack.tr(), + onTap: () { + provider.resetValues(); + provider.getDisclosureDetails(); + Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); + }, + ), + ); }, - onBackTapped: () { - if (provider.questionCardStatus == QuestionCardStatus.winnerFound) { - provider.resetValues(); - provider.getDisclosureDetails(); - Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); - } else { - showDialog( - context: context, - builder: (BuildContext context) => ConfirmDialog( - message: LocaleKeys.youWantToLeaveMarathon.tr(), - onTap: () { - provider.resetValues(); - Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); - }, - ), - ); + onBackTapped: () async { + if (provider.currentQuestionNumber > 1) { + await provider.callPreviousQuestionApi(); + return; } + showDialog( + context: context, + builder: (BuildContext context) => ConfirmDialog( + message: LocaleKeys.areYouSureYouWantToGoBack.tr(), + onTap: () { + provider.resetValues(); + Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); + }, + ), + ); }, ), body: Column( @@ -96,46 +68,15 @@ class DisclosureScreen extends StatelessWidget { shrinkWrap: true, children: [ 10.height, - if (provider.questionCardStatus == QuestionCardStatus.findingWinner) - ...[] - else if (provider.questionCardStatus == QuestionCardStatus.winnerFound) - ...[] - else ...[ - DisclosureProgressContainer(provider: provider).paddingOnly(left: 21, right: 21), - ], - DisclosureQuestionCardBuilder( - onQuestion: (BuildContext context) => const DisclosureQuestionCard(), - onCompleted: (BuildContext context) => DisclosureCustomStatusWidget( - asset: Lottie.asset(MyLottieConsts.allQuestions, height: 200), - title: LocaleKeys.congrats.tr().toText22(color: MyColors.greenColor), - subTitle: LocaleKeys.allQuestionsCorrect.toText18(color: MyColors.darkTextColor, isCentered: true), - ), - onCorrectAnswer: (BuildContext context) => const SizedBox(), - onWinner: (BuildContext context) => const SizedBox(), - onWrongAnswer: (BuildContext context) => DisclosureCustomStatusWidget( - asset: Image.asset(MyLottieConsts.wrongAnswerGif, height: 200), - title: LocaleKeys.oops.tr().toText22(color: MyColors.redColor), - subTitle: LocaleKeys.wrongAnswer.tr().toText18(color: MyColors.darkTextColor, isCentered: true), - ), - onSkippedAnswer: (BuildContext context) => DisclosureCustomStatusWidget( - asset: Image.asset(MyLottieConsts.wrongAnswerGif, height: 200), - title: LocaleKeys.oops.tr().toText22(color: MyColors.redColor), - subTitle: LocaleKeys.youMissedTheQuestion.tr().toText18(color: MyColors.darkTextColor, isCentered: true), - ), - onFindingWinner: (BuildContext context) => DisclosureCustomStatusWidget( - asset: Lottie.asset(MyLottieConsts.winnerLottie, height: 168, reverse: false, repeat: true), - title: LocaleKeys.fingersCrossed.tr().toText22(color: MyColors.greenColor), - subTitle: LocaleKeys.winnerSelectedRandomly.tr().toText18(color: MyColors.darkTextColor, isCentered: true), - ), - questionCardStatus: provider.questionCardStatus, - ).paddingOnly(top: 12, left: 21, right: 21), - // 50.height, + DisclosureProgressContainer(provider: provider).paddingOnly(left: 21, right: 21), + const DisclosureQuestionCard().paddingOnly(top: 12, left: 21, right: 21), ], ).expanded, DefaultButton( isLastQuestion ? LocaleKeys.submit.tr() : LocaleKeys.next.tr(), isButtonDisabled - ? () async { + ? null + : () async { if (isLastQuestion) { provider.resetValues(); provider.getDisclosureDetails(); @@ -145,19 +86,22 @@ class DisclosureScreen extends StatelessWidget { provider.updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus.unSelected); provider.updateAnswerStatusesList(DisclosureQuestionCardStatus.correctAnswer); await provider.callNextQuestionApi(); - } - : null, - textColor: isButtonDisabled ? MyColors.whiteColor : MyColors.greyACColor, + }, + textColor: !isButtonDisabled ? MyColors.whiteColor : MyColors.greyACColor, color: isLastQuestion ? MyColors.greenColor : null, ).insideContainer, ], ), ), - onWillPop: () { + onWillPop: () async { + if (provider.currentQuestionNumber > 1) { + await provider.callPreviousQuestionApi(); + return Future.value(false); + } showDialog( context: context, builder: (BuildContext context) => ConfirmDialog( - message: LocaleKeys.youWantToLeaveMarathon.tr(), + message: LocaleKeys.areYouSureYouWantToGoBack.tr(), onTap: () { provider.resetValues(); Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); diff --git a/lib/ui/disclosure/widgets/disclosure_details_card.dart b/lib/ui/disclosure/widgets/disclosure_details_card.dart index 271c512..2d45d7e 100644 --- a/lib/ui/disclosure/widgets/disclosure_details_card.dart +++ b/lib/ui/disclosure/widgets/disclosure_details_card.dart @@ -37,9 +37,7 @@ class DisclosureDetailsCard extends StatelessWidget { selectedLanguage: disclosureDetailsCard.selectedLanguage ?? 0, englishContent: disclosureDetailsCard.descEn ?? "", arabicContent: disclosureDetailsCard.descAr ?? "", - ).toText14( - color: MyColors.grey77Color, - ), + ).toText14(color: MyColors.grey77Color), ) ], ), diff --git a/lib/ui/disclosure/widgets/disclosure_progress_container.dart b/lib/ui/disclosure/widgets/disclosure_progress_container.dart index 249d15e..1c21e7d 100644 --- a/lib/ui/disclosure/widgets/disclosure_progress_container.dart +++ b/lib/ui/disclosure/widgets/disclosure_progress_container.dart @@ -44,8 +44,7 @@ class DisclosureProgressContainer extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "${provider.currentQuestionNumber == 1 ? 0 : (((provider.currentQuestionNumber - 1) / (provider.disclosureDetailsModel.totalQuestions!)) * 100).toInt()}% ${LocaleKeys.completed.tr()}" - .toText14(), + "${provider.currentQuestionNumber == 1 ? 0 : (((provider.currentQuestionNumber - 1) / (provider.disclosureDetailsModel.totalQuestions!)) * 100).toInt()}% ${LocaleKeys.completed.tr()}".toText14(), ], ), ], @@ -89,10 +88,13 @@ class DisclosureProgressContainer extends StatelessWidget { if (isNeedLeftBorder) { return Row( children: [ - Divider( - thickness: 6, - color: color, - ).expanded, + Expanded( + child: AnimatedContainer( + duration: const Duration(milliseconds: 800), // Set animation duration + height: 6, // Change thickness if needed + color: color, + ), + ), Container( margin: EdgeInsets.zero, padding: EdgeInsets.zero, diff --git a/lib/ui/disclosure/widgets/disclosure_question_card.dart b/lib/ui/disclosure/widgets/disclosure_question_card.dart index 2f03fc0..e4af189 100644 --- a/lib/ui/disclosure/widgets/disclosure_question_card.dart +++ b/lib/ui/disclosure/widgets/disclosure_question_card.dart @@ -1,4 +1,7 @@ +import 'dart:developer'; + import 'package:appinio_swiper/appinio_swiper.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:lottie/lottie.dart'; @@ -6,10 +9,13 @@ import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/decorations_helper.dart'; import 'package:mohem_flutter_app/classes/lottie_consts.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/disclosure/disclosure_question_model.dart'; import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; import 'package:provider/provider.dart'; class DisclosureQuestionCard extends StatelessWidget { @@ -21,18 +27,25 @@ class DisclosureQuestionCard extends StatelessWidget { return CupertinoPageScaffold( child: provider.cardContentList.isEmpty ? Lottie.asset(MyLottieConsts.hourGlassLottie, height: 250).paddingOnly(top: 50) - : SizedBox( - height: MediaQuery.of(context).size.height * .45, - width: double.infinity, - child: AppinioSwiper( - duration: const Duration(milliseconds: 400), - padding: EdgeInsets.zero, - isDisabled: true, - controller: provider.swiperController, - unswipe: (int index, AppinioSwiperDirection direction) {}, - onSwipe: (int index, AppinioSwiperDirection direction) {}, - cards: provider.cardContentList, - ), + : Consumer( + builder: (BuildContext context, DisclosureProvider provider, Widget? child) { + return Container( + constraints: BoxConstraints(minHeight: MediaQuery.of(context).size.height * .43), + height: (provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct && provider.currentQuestionNumber != provider.disclosureDetailsModel.totalQuestions!) + ? MediaQuery.of(context).size.height * .6 + : MediaQuery.of(context).size.height * .43, + width: double.infinity, + child: AppinioSwiper( + duration: const Duration(milliseconds: 400), + padding: EdgeInsets.zero, + isDisabled: true, + controller: provider.swiperController, + unswipe: (int index, AppinioSwiperDirection direction) {}, + onSwipe: (int index, AppinioSwiperDirection direction) {}, + cards: provider.cardContentList, + ), + ); + }, ), ); } @@ -59,36 +72,39 @@ class DisclosureCardContent extends StatelessWidget { ), alignment: Alignment.center, child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Container( - width: double.infinity, - decoration: const BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), - topRight: Radius.circular(10), + Flexible( + child: Container( + width: double.infinity, + decoration: const BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(10), + ), ), - ), - child: Center( + constraints: BoxConstraints(minHeight: MediaQuery.of(context).size.height * .23), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 15), - child: Text( - displayLocalizedContent( - isPhoneLangArabic: AppState().isArabic(context), - selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0, - englishContent: provider.currentQuestion.titleEn ?? "", - arabicContent: provider.currentQuestion.titleAr ?? "", - ), - style: const TextStyle( - color: MyColors.darkTextColor, - fontSize: 15, - height: 21 / 14, - fontWeight: FontWeight.w500, + padding: const EdgeInsets.only(left: 15, right: 15, top: 15), + child: SingleChildScrollView( + child: Text( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0, + englishContent: provider.currentQuestion.titleEn ?? "", + arabicContent: provider.currentQuestion.titleAr ?? "", + ), + style: const TextStyle( + color: MyColors.darkTextColor, + fontSize: 15, + height: 21 / 14, + fontWeight: FontWeight.w500, + ), ), ), ), ), ), + 24.height, const DisclosureAnswerContent(), ], ), @@ -103,25 +119,52 @@ class DisclosureAnswerContent extends StatelessWidget { Widget build(BuildContext context) { DisclosureProvider provider = context.watch(); return Container( - padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 13), + padding: const EdgeInsets.only(bottom: 20, left: 8, right: 8), decoration: const BoxDecoration( color: MyColors.kWhiteColor, - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(10), - bottomRight: Radius.circular(10), - ), + borderRadius: BorderRadius.only(bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)), ), child: provider.currentQuestion.questionOptions != null - ? Row( - children: List.generate( - provider.currentQuestion.questionOptions!.length, - (int index) => Expanded( - child: DisclosureAnswerTileForText( - index: index, - onAnswerTapped: () => provider.updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.selected, selectedOptIndex: index, correctOptionIndex: -1), // - ).paddingAll(8), + ? Column( + children: [ + Row( + children: List.generate( + provider.currentQuestion.questionOptions!.length, + (int index) => Expanded( + child: DisclosureAnswerTileForText( + index: index, + onAnswerTapped: () => provider.updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.selected, selectedOptIndex: index, correctOptionIndex: -1), // + ).paddingAll(8), + ), + ), ), - ), + if (provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct && provider.currentQuestionNumber != provider.disclosureDetailsModel.totalQuestions!) ...[ + 15.height, + Text( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0, + englishContent: provider.currentQuestion.descEn ?? "", + arabicContent: provider.currentQuestion.descAr ?? "", + ), + style: const TextStyle( + color: MyColors.darkTextColor, + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w500, + ), + ).paddingOnly(left: 8, right: 8), + 8.height, + DynamicTextFieldWidget( + LocaleKeys.pleaseWriteHere.tr(), + provider.currentAdditionalText, + lines: 3, + onChange: (value) { + provider.updateCurrentAdditionalText(value); + }, + ).paddingOnly(left: 8, right: 8), + ], + ], ) : const SizedBox(), );