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'; 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/classes/utils.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/marathon/marathon_provider.dart'; import 'package:provider/provider.dart'; class QuestionCard extends StatelessWidget { const QuestionCard({Key? key}) : super(key: key); @override Widget build(BuildContext context) { MarathonProvider provider = context.read(); return CupertinoPageScaffold( child: provider.cardContentList.isEmpty ? Lottie.asset(MyLottieConsts.hourGlassLottie, height: 250).paddingOnly(top: 50) : SizedBox( height: 440, 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, ), ), ); } } class CardContent extends StatelessWidget { const CardContent({Key? key}) : super(key: key); @override Widget build(BuildContext context) { MarathonProvider provider = context.watch(); return Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: CupertinoColors.white, boxShadow: [ BoxShadow( color: CupertinoColors.systemGrey.withOpacity(0.2), spreadRadius: 3, blurRadius: 7, offset: const Offset(0, 3), ) ], ), alignment: Alignment.center, child: Column( children: [ Container( width: double.infinity, decoration: const BoxDecoration( gradient: LinearGradient( transform: GradientRotation(.83), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ MyColors.gradiantEndColor, MyColors.gradiantStartColor, ], ), borderRadius: BorderRadius.only( topLeft: Radius.circular(10), topRight: Radius.circular(10), ), ), child: Center( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 15), child: Text( displayLocalizedContent( isPhoneLangArabic: AppState().isArabic(context), selectedLanguage: (AppState().getIsDemoMarathon ? provider.demoMarathonDetailModel.selectedLanguage : provider.marathonDetailModel.selectedLanguage) ?? 0, englishContent: provider.currentQuestion.titleEn ?? "", arabicContent: provider.currentQuestion.titleAr ?? "", ), style: const TextStyle( color: MyColors.white, fontSize: 16, fontWeight: FontWeight.w600, ), ), ), ), ), const AnswerContent(), ], ), ); } } class AnswerContent extends StatelessWidget { const AnswerContent({Key? key}) : super(key: key); @override Widget build(BuildContext context) { MarathonProvider provider = context.watch(); return Container( padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 13), decoration: const BoxDecoration( color: MyColors.kWhiteColor, borderRadius: BorderRadius.only( bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10), ), ), child: provider.currentQuestion.questionOptions != null ? ListView.separated( itemCount: provider.currentQuestion.questionOptions!.length, shrinkWrap: true, itemBuilder: (BuildContext context, int index) { return AnswerTileForText( index: index, onAnswerTapped: () { if (provider.totalCurrentQuestionTime - provider.currentGapTime <= 1) { null; } else { provider.updateCurrentQuestionOptionStatus(QuestionsOptionStatus.selected, index); } }, ); }, separatorBuilder: (BuildContext context, int index) => 15.height, ) : const SizedBox(), ); } } class AnswerTileForText extends StatelessWidget { final int index; final Function() onAnswerTapped; const AnswerTileForText({Key? key, required this.index, required this.onAnswerTapped}) : super(key: key); Color getAnswerTextColor(QuestionsOptionStatus status) { switch (status) { case QuestionsOptionStatus.correct: return MyColors.white; case QuestionsOptionStatus.wrong: return MyColors.white; case QuestionsOptionStatus.selected: return MyColors.white; case QuestionsOptionStatus.unSelected: return MyColors.darkTextColor; } } @override Widget build(BuildContext context) { MarathonProvider provider = context.watch(); return InkWell( onTap: () { provider.isUserOutOfGame ? Utils.showToast(LocaleKeys.youAreOutOfContest.tr()) : onAnswerTapped(); }, child: Container( alignment: Alignment.centerLeft, decoration: MyDecorations.getAnswersContainerColor(provider.currentQuestion.questionOptions![index].optionStatus!), child: Center( child: displayLocalizedContent( isPhoneLangArabic: AppState().isArabic(context), selectedLanguage: (AppState().getIsDemoMarathon ? provider.demoMarathonDetailModel.selectedLanguage : provider.marathonDetailModel.selectedLanguage) ?? 0, englishContent: provider.currentQuestion.questionOptions![index].titleEn ?? "", arabicContent: provider.currentQuestion.questionOptions![index].titleAr ?? "", ).toText16(color: provider.isUserOutOfGame ? MyColors.darkTextColor : getAnswerTextColor(provider.currentQuestion.questionOptions![index].optionStatus!)).paddingOnly(top: 13, bottom: 13), ), ), ); } }