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.
172 lines
8.3 KiB
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);
|
|
},
|
|
);
|
|
}
|
|
}
|