import 'dart:async'; 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'; 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!; 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)); }, ), ); } }, 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)); }, ), ); } }, ), body: Column( children: [ ListView( 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, ], ).expanded, DefaultButton( isLastQuestion ? LocaleKeys.submit.tr() : LocaleKeys.next.tr(), isButtonDisabled ? () async { if (isLastQuestion) { provider.resetValues(); provider.getDisclosureDetails(); Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); return; } provider.updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus.unSelected); provider.updateAnswerStatusesList(DisclosureQuestionCardStatus.correctAnswer); await provider.callNextQuestionApi(); } : null, textColor: isButtonDisabled ? MyColors.whiteColor : MyColors.greyACColor, color: isLastQuestion ? MyColors.greenColor : null, ).insideContainer, ], ), ), onWillPop: () { showDialog( context: context, builder: (BuildContext context) => ConfirmDialog( message: LocaleKeys.youWantToLeaveMarathon.tr(), onTap: () { provider.resetValues(); Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard)); }, ), ); return Future.value(false); }, ); } }