Final Tweaks in Disclosure

faiz_disclosure
Faiz Hashmi 1 year ago
parent cbc6219755
commit d77ace678d

@ -1,6 +1,6 @@
{
"id": "979813be-eafa-4d3e-d27e-08dae8a08a3b",
"titleEn": "Upcoming Disclosure",
"titleEn": "Disclosure Title",
"titleAr": "undefined",
"descEn": "Submit disclosure using mobile app",
"descAr": "undefined",

@ -581,5 +581,8 @@
"approvalDate": "تاريخ الموافقة",
"versionStatus": "حالة الإصدار",
"supplierNo": "رقم المورد",
"paymentRequest": "طلب الدفع"
"paymentRequest": "طلب الدفع",
"pleaseWriteHere": "يرجى الكتابة هنا",
"disclosures": "الإفصاحات",
"areYouSureYouWantToGoBack": "هل أنت متأكد أنك تريد الرجوع؟"
}

@ -587,6 +587,9 @@
"versionStatus": "Version Status",
"supplierNo": "Supplier Number",
"paymentRequest": "Payment Request",
"pOAmount": "PO Amount"
"pOAmount": "PO Amount",
"pleaseWriteHere": "Please Write Here",
"disclosures": "Disclosures",
"areYouSureYouWantToGoBack": "Are you sure you want to go back?"
}

@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/services.dart';
import 'package:logger/logger.dart' as L;
@ -37,6 +38,7 @@ class DisclosureRepo {
}
Future<DisclosureQuestionModel> getDisclosureNextQuestion({required int currentQuestionNumber}) async {
log("getQuestion At Index: $currentQuestionNumber ");
String response = await rootBundle.loadString('assets/json/disclosure_questions.json');
List json = jsonDecode(response);
DisclosureQuestionModel currentQuestion = DisclosureQuestionModel.fromJson(json.elementAt(currentQuestionNumber));

@ -597,7 +597,10 @@ class CodegenLoader extends AssetLoader{
"approvalDate": "تاريخ الموافقة",
"versionStatus": "حالة الإصدار",
"supplierNo": "رقم المورد",
"paymentRequest": "طلب الدفع"
"paymentRequest": "طلب الدفع",
"pleaseWriteHere": "يرجى الكتابة هنا",
"disclosures": "الإفصاحات",
"areYouSureYouWantToGoBack": "هل أنت متأكد أنك تريد الرجوع؟"
};
static const Map<String,dynamic> en_US = {
"mohemm": "Mohemm",
@ -1188,7 +1191,10 @@ static const Map<String,dynamic> en_US = {
"versionStatus": "Version Status",
"supplierNo": "Supplier Number",
"paymentRequest": "Payment Request",
"pOAmount": "PO Amount"
"pOAmount": "PO Amount",
"pleaseWriteHere": "Please Write Here",
"disclosures": "Disclosures",
"areYouSureYouWantToGoBack": "Are you sure you want to go back?"
};
static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
}

@ -568,5 +568,8 @@ abstract class LocaleKeys {
static const versionStatus = 'versionStatus';
static const supplierNo = 'supplierNo';
static const paymentRequest = 'paymentRequest';
static const pleaseWriteHere = 'pleaseWriteHere';
static const disclosures = 'disclosures';
static const areYouSureYouWantToGoBack = 'areYouSureYouWantToGoBack';
}

@ -6,6 +6,8 @@ class DisclosureQuestionModel {
String? id;
String? titleEn;
String? titleAr;
String? descEn;
String? descAr;
String? marathonId;
int? questionTypeId;
int? questionTime;
@ -21,6 +23,8 @@ class DisclosureQuestionModel {
String? id,
String? titleEn,
String? titleAr,
String? descEn,
String? descAr,
String? marathonId,
int? questionTypeId,
int? questionTime,
@ -37,6 +41,8 @@ class DisclosureQuestionModel {
id = json['id'];
titleEn = json['titleEn'];
titleAr = json['titleAr'];
descEn = json['desEn'];
descAr = json['desAr'];
marathonId = json['marathonId'];
questionTypeId = json['questionTypeId'];
questionTime = json['questionTime'];
@ -54,26 +60,6 @@ class DisclosureQuestionModel {
questionOptions!.sort((QuestionOptions a, QuestionOptions b) => a.sequence!.compareTo(b.sequence!));
}
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['titleEn'] = titleEn;
data['titleAr'] = titleAr;
data['marathonId'] = marathonId;
data['questionTypeId'] = questionTypeId;
data['questionTime'] = questionTime;
data['nextQuestGap'] = nextQuestGap;
data['gapType'] = gapType;
data['gapText'] = gapText;
data['gapImage'] = gapImage;
data['questOptionsLimit'] = questOptionsLimit;
data['remainingParticipantCount'] = remainingParticipantCount;
if (questionOptions != null) {
data['questionOptions'] = questionOptions!.map((v) => v.toJson()).toList();
}
return data;
}
}
class QuestionOptions {

@ -18,7 +18,7 @@ class DisclosureProvider extends ChangeNotifier {
final AppinioSwiperController swiperController = AppinioSwiperController();
DisclosureQuestionsOptionStatus currentQuestionSelectionStatus = DisclosureQuestionsOptionStatus.unSelected;
DisclosureDetailsModel disclosureDetailsModel = DisclosureDetailsModel();
List<DisclosureCardContent> cardContentList = <DisclosureCardContent>[const DisclosureCardContent()];
List<DisclosureCardContent> cardContentList = <DisclosureCardContent>[];
DisclosureQuestionModel currentQuestion = DisclosureQuestionModel();
List<DisclosureQuestionCardStatus> answerStatusesList = <DisclosureQuestionCardStatus>[];
DisclosureQuestionCardStatus questionCardStatus = DisclosureQuestionCardStatus.question;
@ -58,6 +58,13 @@ class DisclosureProvider extends ChangeNotifier {
notifyListeners();
}
String currentAdditionalText = "";
void updateCurrentAdditionalText(String value) {
currentAdditionalText = value;
notifyListeners();
}
void updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus value) {
currentQuestionSelectionStatus = value;
notifyListeners();
@ -66,9 +73,11 @@ class DisclosureProvider extends ChangeNotifier {
//************************************************ FUNCTIONS **********************************************************
Future<void> callNextQuestionApi() async {
log("currentQuestionNumber: $currentQuestionNumber");
if (currentQuestionNumber < (disclosureDetailsModel.totalQuestions!)) {
if (currentQuestionNumber == 0) {
for (int i = 1; i <= disclosureDetailsModel.totalQuestions!; i++) {
cardContentList.add(const DisclosureCardContent());
}
currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber);
updateCardData();
if (Utils.isLoading) {
@ -83,16 +92,30 @@ class DisclosureProvider extends ChangeNotifier {
}
}
void updateCardData() {
Future<void> callPreviousQuestionApi() async {
currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber - 2);
updateCardData(isForPrevious: true);
notifyListeners();
}
void updateCardData({bool isForPrevious = false}) {
if (isForPrevious) {
selectedOptionIndex = null;
currentQuestionNumber--;
cardContentList.add(const DisclosureCardContent());
cardContentList.add(const DisclosureCardContent());
swiperController.swipeLeft();
questionCardStatus = DisclosureQuestionCardStatus.question;
notifyListeners();
return;
}
if (currentQuestionNumber > 0) {
swiperController.swipeRight();
}
selectedOptionIndex = null;
currentQuestionNumber++;
if (currentQuestionNumber < disclosureDetailsModel.totalQuestions!) {
cardContentList.add(const DisclosureCardContent());
cardContentList.add(const DisclosureCardContent());
}
questionCardStatus = DisclosureQuestionCardStatus.question;
notifyListeners();
}
@ -146,6 +169,7 @@ class DisclosureProvider extends ChangeNotifier {
answerStatusesList[i] = DisclosureQuestionCardStatus.question;
}
}
currentQuestionSelectionStatus = DisclosureQuestionsOptionStatus.unSelected;
AppRoutes.navigatorKey.currentContext!.setLocale(savedLocale);
notifyListeners();
}

@ -1,23 +1,16 @@
import 'dart:async';
import 'dart:developer';
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';
@ -26,68 +19,47 @@ 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!;
bool isButtonDisabled = (provider.currentQuestionSelectionStatus != DisclosureQuestionsOptionStatus.correct && provider.currentQuestionSelectionStatus != DisclosureQuestionsOptionStatus.wrong) ||
(provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct && provider.currentAdditionalText.isEmpty) && !isLastQuestion ||
(isLastQuestion && provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.wrong);
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));
},
),
);
}
showDialog(
context: context,
builder: (BuildContext context) => ConfirmDialog(
message: LocaleKeys.areYouSureYouWantToGoBack.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));
},
),
);
onBackTapped: () async {
if (provider.currentQuestionNumber > 1) {
await provider.callPreviousQuestionApi();
return;
}
showDialog(
context: context,
builder: (BuildContext context) => ConfirmDialog(
message: LocaleKeys.areYouSureYouWantToGoBack.tr(),
onTap: () {
provider.resetValues();
Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard));
},
),
);
},
),
body: Column(
@ -96,46 +68,15 @@ class DisclosureScreen extends StatelessWidget {
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,
DisclosureProgressContainer(provider: provider).paddingOnly(left: 21, right: 21),
const DisclosureQuestionCard().paddingOnly(top: 12, left: 21, right: 21),
],
).expanded,
DefaultButton(
isLastQuestion ? LocaleKeys.submit.tr() : LocaleKeys.next.tr(),
isButtonDisabled
? () async {
? null
: () async {
if (isLastQuestion) {
provider.resetValues();
provider.getDisclosureDetails();
@ -145,19 +86,22 @@ class DisclosureScreen extends StatelessWidget {
provider.updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus.unSelected);
provider.updateAnswerStatusesList(DisclosureQuestionCardStatus.correctAnswer);
await provider.callNextQuestionApi();
}
: null,
textColor: isButtonDisabled ? MyColors.whiteColor : MyColors.greyACColor,
},
textColor: !isButtonDisabled ? MyColors.whiteColor : MyColors.greyACColor,
color: isLastQuestion ? MyColors.greenColor : null,
).insideContainer,
],
),
),
onWillPop: () {
onWillPop: () async {
if (provider.currentQuestionNumber > 1) {
await provider.callPreviousQuestionApi();
return Future<bool>.value(false);
}
showDialog(
context: context,
builder: (BuildContext context) => ConfirmDialog(
message: LocaleKeys.youWantToLeaveMarathon.tr(),
message: LocaleKeys.areYouSureYouWantToGoBack.tr(),
onTap: () {
provider.resetValues();
Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard));

@ -37,9 +37,7 @@ class DisclosureDetailsCard extends StatelessWidget {
selectedLanguage: disclosureDetailsCard.selectedLanguage ?? 0,
englishContent: disclosureDetailsCard.descEn ?? "",
arabicContent: disclosureDetailsCard.descAr ?? "",
).toText14(
color: MyColors.grey77Color,
),
).toText14(color: MyColors.grey77Color),
)
],
),

@ -44,8 +44,7 @@ class DisclosureProgressContainer extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
"${provider.currentQuestionNumber == 1 ? 0 : (((provider.currentQuestionNumber - 1) / (provider.disclosureDetailsModel.totalQuestions!)) * 100).toInt()}% ${LocaleKeys.completed.tr()}"
.toText14(),
"${provider.currentQuestionNumber == 1 ? 0 : (((provider.currentQuestionNumber - 1) / (provider.disclosureDetailsModel.totalQuestions!)) * 100).toInt()}% ${LocaleKeys.completed.tr()}".toText14(),
],
),
],
@ -89,10 +88,13 @@ class DisclosureProgressContainer extends StatelessWidget {
if (isNeedLeftBorder) {
return Row(
children: <Widget>[
Divider(
thickness: 6,
color: color,
).expanded,
Expanded(
child: AnimatedContainer(
duration: const Duration(milliseconds: 800), // Set animation duration
height: 6, // Change thickness if needed
color: color,
),
),
Container(
margin: EdgeInsets.zero,
padding: EdgeInsets.zero,

@ -1,4 +1,7 @@
import 'dart:developer';
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';
@ -6,10 +9,13 @@ 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/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/ui/disclosure/disclosure_provider.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
import 'package:provider/provider.dart';
class DisclosureQuestionCard extends StatelessWidget {
@ -21,18 +27,25 @@ class DisclosureQuestionCard extends StatelessWidget {
return CupertinoPageScaffold(
child: provider.cardContentList.isEmpty
? Lottie.asset(MyLottieConsts.hourGlassLottie, height: 250).paddingOnly(top: 50)
: SizedBox(
height: MediaQuery.of(context).size.height * .45,
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,
),
: Consumer<DisclosureProvider>(
builder: (BuildContext context, DisclosureProvider provider, Widget? child) {
return Container(
constraints: BoxConstraints(minHeight: MediaQuery.of(context).size.height * .43),
height: (provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct && provider.currentQuestionNumber != provider.disclosureDetailsModel.totalQuestions!)
? MediaQuery.of(context).size.height * .6
: MediaQuery.of(context).size.height * .43,
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,
),
);
},
),
);
}
@ -59,36 +72,39 @@ class DisclosureCardContent extends StatelessWidget {
),
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
width: double.infinity,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
Flexible(
child: Container(
width: double.infinity,
decoration: const BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
),
),
),
child: Center(
constraints: BoxConstraints(minHeight: MediaQuery.of(context).size.height * .23),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 15),
child: Text(
displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0,
englishContent: provider.currentQuestion.titleEn ?? "",
arabicContent: provider.currentQuestion.titleAr ?? "",
),
style: const TextStyle(
color: MyColors.darkTextColor,
fontSize: 15,
height: 21 / 14,
fontWeight: FontWeight.w500,
padding: const EdgeInsets.only(left: 15, right: 15, top: 15),
child: SingleChildScrollView(
child: Text(
displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0,
englishContent: provider.currentQuestion.titleEn ?? "",
arabicContent: provider.currentQuestion.titleAr ?? "",
),
style: const TextStyle(
color: MyColors.darkTextColor,
fontSize: 15,
height: 21 / 14,
fontWeight: FontWeight.w500,
),
),
),
),
),
),
24.height,
const DisclosureAnswerContent(),
],
),
@ -103,25 +119,52 @@ class DisclosureAnswerContent extends StatelessWidget {
Widget build(BuildContext context) {
DisclosureProvider provider = context.watch<DisclosureProvider>();
return Container(
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 13),
padding: const EdgeInsets.only(bottom: 20, left: 8, right: 8),
decoration: const BoxDecoration(
color: MyColors.kWhiteColor,
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10),
),
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)),
),
child: provider.currentQuestion.questionOptions != null
? Row(
children: List<Widget>.generate(
provider.currentQuestion.questionOptions!.length,
(int index) => Expanded(
child: DisclosureAnswerTileForText(
index: index,
onAnswerTapped: () => provider.updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.selected, selectedOptIndex: index, correctOptionIndex: -1), //
).paddingAll(8),
? Column(
children: [
Row(
children: List<Widget>.generate(
provider.currentQuestion.questionOptions!.length,
(int index) => Expanded(
child: DisclosureAnswerTileForText(
index: index,
onAnswerTapped: () => provider.updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.selected, selectedOptIndex: index, correctOptionIndex: -1), //
).paddingAll(8),
),
),
),
),
if (provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct && provider.currentQuestionNumber != provider.disclosureDetailsModel.totalQuestions!) ...[
15.height,
Text(
displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0,
englishContent: provider.currentQuestion.descEn ?? "",
arabicContent: provider.currentQuestion.descAr ?? "",
),
style: const TextStyle(
color: MyColors.darkTextColor,
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w500,
),
).paddingOnly(left: 8, right: 8),
8.height,
DynamicTextFieldWidget(
LocaleKeys.pleaseWriteHere.tr(),
provider.currentAdditionalText,
lines: 3,
onChange: (value) {
provider.updateCurrentAdditionalText(value);
},
).paddingOnly(left: 8, right: 8),
],
],
)
: const SizedBox(),
);

Loading…
Cancel
Save