import 'dart:async'; import 'dart:developer'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:lottie/lottie.dart'; import 'package:mohem_flutter_app/app_state/app_state.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/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); } Widget getDemoWinnerWidget(BuildContext context, {required DisclosureProvider provider}) { return provider.isUserOutOfGame ? Column( children: [ Lottie.asset(MyLottieConsts.noWinnerLottie), Center( child: LocaleKeys.noWinner.tr().toText18(color: MyColors.grey3AColor, isCentered: true), ), ], ) : Stack( children: [ Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: 50, child: Stack( children: [ Align( alignment: Alignment.center, child: SvgPicture.asset("assets/images/winner_ribbon.svg", height: 50), ), Align( alignment: Alignment.center, child: LocaleKeys.winner.tr().toText32(color: MyColors.white, isBold: true, isCentered: true).paddingOnly(top: 07), ) ], ), ), 16.height, Column( children: [ displayLocalizedContent( isPhoneLangArabic: AppState().isArabic(context), selectedLanguage: provider.disclosureDetailsModel.selectedLanguage!, arabicContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr ?? "", englishContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn ?? "", ).toText22( color: MyColors.grey3AColor, isCentered: true, ), 8.height, AppState().memberInformationList!.eMPLOYEENUMBER!.toText22(color: MyColors.grey57Color), ], ), 60.height, if (provider.disclosureDetailsModel.sponsors != null && provider.disclosureDetailsModel.sponsors!.isNotEmpty) ...[ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ "${LocaleKeys.sponsoredBy.tr()} ".toText14(color: MyColors.grey77Color), displayLocalizedContent( isPhoneLangArabic: AppState().isArabic(context), selectedLanguage: provider.disclosureDetailsModel.selectedLanguage!, englishContent: provider.disclosureDetailsModel.sponsors!.first.nameEn!, arabicContent: provider.disclosureDetailsModel.sponsors!.first.nameAr!, ).toText14( color: MyColors.darkTextColor, isBold: true, ), ], ), 5.height, Image.network( ApiConsts.marathonBaseUrlServices + provider.disclosureDetailsModel.sponsors!.first.logo!, height: 50, width: 150, fit: BoxFit.contain, errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) { return Image.asset("assets/images/logos/main_mohemm_logo.png", height: 50, width: 150); }, ) ], ], ), Lottie.asset(MyLottieConsts.celebrate1Lottie), ], ); } @override Widget build(BuildContext context) { DisclosureProvider provider = context.watch(); 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) => DisclosureCustomStatusWidget( asset: getSuccessWidget(gapType: provider.gapTimeType, gapImage: provider.gapTimeImage, gapText: provider.gapTimeText), title: LocaleKeys.congrats.tr().toText22(color: MyColors.greenColor), subTitle: LocaleKeys.yourAnswerCorrect.tr().toText18(color: MyColors.darkTextColor, isCentered: true), ), 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( LocaleKeys.next.tr(), () {}, ).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); }, ); } }