You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mohemm-flutter-app/lib/ui/disclosure/disclosure_screen.dart

172 lines
8.3 KiB
Dart

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<DisclosureProvider>();
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: <Widget>[
ListView(
shrinkWrap: true,
children: <Widget>[
10.height,
if (provider.questionCardStatus == QuestionCardStatus.findingWinner)
...<Widget>[]
else if (provider.questionCardStatus == QuestionCardStatus.winnerFound)
...<Widget>[]
else ...<Widget>[
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<bool>.value(false);
},
);
}
}