Completed Disclosure Flow

faiz_disclosure
faizatflutter 1 year ago
parent 8efab84515
commit cbc6219755

@ -39,7 +39,7 @@
], ],
"questions": null, "questions": null,
"isEmailSent": false, "isEmailSent": false,
"totalQuestions": 10, "totalQuestions": 8,
"cancelReason": null, "cancelReason": null,
"marathonBufferTime": 30, "marathonBufferTime": 30,
"currentTime": "2022-12-28T08:03:24.3671803Z", "currentTime": "2022-12-28T08:03:24.3671803Z",

@ -38,7 +38,10 @@ class MyDecorations {
} }
} }
static Decoration getAnswersContainerColorForDisclosure(DisclosureQuestionsOptionStatus questionsOptionStatus) { static Decoration getAnswersContainerColorForDisclosure(DisclosureQuestionsOptionStatus questionsOptionStatus, {bool isLastQuestion = false, bool isAgreeSelected = false}) {
if (isLastQuestion && questionsOptionStatus == DisclosureQuestionsOptionStatus.selected && isAgreeSelected) {
return getContainersDecoration(MyColors.greenColor);
}
switch (questionsOptionStatus) { switch (questionsOptionStatus) {
case DisclosureQuestionsOptionStatus.correct: case DisclosureQuestionsOptionStatus.correct:
return getContainersDecoration(MyColors.greenColor); return getContainersDecoration(MyColors.greenColor);

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/models/my_documents/employee_documents_list_model.dart';
import 'package:mohem_flutter_app/ui/app_update_screen.dart'; import 'package:mohem_flutter_app/ui/app_update_screen.dart';
import 'package:mohem_flutter_app/ui/attendance/add_vacation_rule_screen.dart'; import 'package:mohem_flutter_app/ui/attendance/add_vacation_rule_screen.dart';
import 'package:mohem_flutter_app/ui/attendance/monthly_attendance_screen.dart'; import 'package:mohem_flutter_app/ui/attendance/monthly_attendance_screen.dart';
@ -11,6 +10,8 @@ import 'package:mohem_flutter_app/ui/chat/favorite_users_screen.dart';
import 'package:mohem_flutter_app/ui/chat/group_chat_detaied_screen.dart'; import 'package:mohem_flutter_app/ui/chat/group_chat_detaied_screen.dart';
import 'package:mohem_flutter_app/ui/chat/group_members.dart'; import 'package:mohem_flutter_app/ui/chat/group_members.dart';
import 'package:mohem_flutter_app/ui/chat/manage_group.dart'; import 'package:mohem_flutter_app/ui/chat/manage_group.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_intro_screen.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_screen.dart';
import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart'; import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
import 'package:mohem_flutter_app/ui/landing/itg/change_itg_ad_password_screen.dart'; import 'package:mohem_flutter_app/ui/landing/itg/change_itg_ad_password_screen.dart';
import 'package:mohem_flutter_app/ui/landing/itg/its_add_screen_video_image.dart'; import 'package:mohem_flutter_app/ui/landing/itg/its_add_screen_video_image.dart';
@ -24,9 +25,6 @@ import 'package:mohem_flutter_app/ui/login/login_screen.dart';
import 'package:mohem_flutter_app/ui/login/new_password_screen.dart'; import 'package:mohem_flutter_app/ui/login/new_password_screen.dart';
import 'package:mohem_flutter_app/ui/login/verify_last_login_screen.dart'; import 'package:mohem_flutter_app/ui/login/verify_last_login_screen.dart';
import 'package:mohem_flutter_app/ui/login/verify_login_screen.dart'; import 'package:mohem_flutter_app/ui/login/verify_login_screen.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_intro_screen.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_screen.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_waiting_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_intro_screen.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_intro_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_screen.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_sponsor_video_screen.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_sponsor_video_screen.dart';
@ -67,7 +65,6 @@ import 'package:mohem_flutter_app/ui/screens/items_for_sale/items_for_sale_home.
import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_home.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_home.dart';
import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/mowadhafhi_hr_request.dart';
import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart'; import 'package:mohem_flutter_app/ui/screens/mowadhafhi/request_details.dart';
import 'package:mohem_flutter_app/ui/screens/my_documents/my_document_detail_screen.dart';
import 'package:mohem_flutter_app/ui/screens/my_documents/my_documents_screen.dart'; import 'package:mohem_flutter_app/ui/screens/my_documents/my_documents_screen.dart';
import 'package:mohem_flutter_app/ui/screens/my_requests/my_requests.dart'; import 'package:mohem_flutter_app/ui/screens/my_requests/my_requests.dart';
import 'package:mohem_flutter_app/ui/screens/my_requests/new_request.dart'; import 'package:mohem_flutter_app/ui/screens/my_requests/new_request.dart';
@ -225,8 +222,8 @@ class AppRoutes {
verifyLogin: (BuildContext context) => VerifyLoginScreen(), verifyLogin: (BuildContext context) => VerifyLoginScreen(),
verifyLastLogin: (BuildContext context) => VerifyLastLoginScreen(), verifyLastLogin: (BuildContext context) => VerifyLastLoginScreen(),
dashboard: (BuildContext context) => DashboardScreen(), dashboard: (BuildContext context) => DashboardScreen(),
survey: (BuildContext context) => SurveyScreen(), survey: (BuildContext context) => const SurveyScreen(),
advertisement: (BuildContext context) => ITGAdsScreen(), advertisement: (BuildContext context) => const ITGAdsScreen(),
subMenuScreen: (BuildContext context) => SubMenuScreen(), subMenuScreen: (BuildContext context) => SubMenuScreen(),
newPassword: (BuildContext context) => NewPasswordScreen(), newPassword: (BuildContext context) => NewPasswordScreen(),
@ -241,7 +238,7 @@ class AppRoutes {
workListDetail: (BuildContext context) => WorkListDetailScreen(), workListDetail: (BuildContext context) => WorkListDetailScreen(),
itgDetail: (BuildContext context) => ItgDetailScreen(), itgDetail: (BuildContext context) => ItgDetailScreen(),
itemHistory: (BuildContext context) => ItemHistoryScreen(), itemHistory: (BuildContext context) => ItemHistoryScreen(),
worklistSettings: (BuildContext context) => WorklistSettings(), worklistSettings: (BuildContext context) => const WorklistSettings(),
// Leave Balance // Leave Balance
@ -251,7 +248,7 @@ class AppRoutes {
servicesMenuListScreen: (BuildContext context) => ServicesMenuListScreen(), servicesMenuListScreen: (BuildContext context) => ServicesMenuListScreen(),
// workFromHome: (BuildContext context) => WorkFromHomeScreen(), // workFromHome: (BuildContext context) => WorkFromHomeScreen(),
// addWorkFromHome: (BuildContext context) => AddWorkFromHomeScreen(), // addWorkFromHome: (BuildContext context) => AddWorkFromHomeScreen(),
profile: (BuildContext context) => ProfileScreen(), profile: (BuildContext context) => const ProfileScreen(),
//Attendance //Attendance
monthlyAttendance: (BuildContext context) => MonthlyAttendanceScreen(), monthlyAttendance: (BuildContext context) => MonthlyAttendanceScreen(),
vacationRule: (BuildContext context) => VacationRuleScreen(), vacationRule: (BuildContext context) => VacationRuleScreen(),
@ -264,9 +261,9 @@ class AppRoutes {
//profile: (BuildContext context) => Profile(), //profile: (BuildContext context) => Profile(),
//profile: (BuildContext context) => Profile(), //profile: (BuildContext context) => Profile(),
personalInfo: (BuildContext context) => PersonalInfo(), personalInfo: (BuildContext context) => PersonalInfo(),
basicDetails: (BuildContext context) => BasicDetails(), basicDetails: (BuildContext context) => const BasicDetails(),
contactDetails: (BuildContext context) => ContactDetails(), contactDetails: (BuildContext context) => const ContactDetails(),
familyMembers: (BuildContext context) => FamilyMembers(), familyMembers: (BuildContext context) => const FamilyMembers(),
dynamicScreen: (BuildContext context) => DynamicListViewScreen(), dynamicScreen: (BuildContext context) => DynamicListViewScreen(),
addDynamicInput: (BuildContext context) => DynamicInputScreen(), addDynamicInput: (BuildContext context) => DynamicInputScreen(),
addDynamicInputProfile: (BuildContext context) => DynamicInputScreenProfile(), addDynamicInputProfile: (BuildContext context) => DynamicInputScreenProfile(),
@ -274,31 +271,31 @@ class AppRoutes {
deleteFamilyMember: (BuildContext context) => DeleteFamilyMember(ModalRoute.of(context)!.settings.arguments as int), deleteFamilyMember: (BuildContext context) => DeleteFamilyMember(ModalRoute.of(context)!.settings.arguments as int),
requestSubmitScreen: (BuildContext context) => RequestSubmitScreen(), requestSubmitScreen: (BuildContext context) => RequestSubmitScreen(),
addUpdateFamilyMember: (BuildContext context) => AddUpdateFamilyMember(), addUpdateFamilyMember: (BuildContext context) => const AddUpdateFamilyMember(),
//mowadhafhi //mowadhafhi
mowadhafhi: (BuildContext context) => MowadhafhiHome(), mowadhafhi: (BuildContext context) => const MowadhafhiHome(),
mowadhafhiDetails: (BuildContext context) => MowadhafhiRequestDetails(), mowadhafhiDetails: (BuildContext context) => const MowadhafhiRequestDetails(),
mowadhafhiHRRequest: (BuildContext context) => MowadhafhiHRRequest(), mowadhafhiHRRequest: (BuildContext context) => const MowadhafhiHRRequest(),
pendingTransactions: (BuildContext context) => PendingTransactions(), pendingTransactions: (BuildContext context) => const PendingTransactions(),
pendingTransactionsDetails: (BuildContext context) => PendingTransactionsDetails(), pendingTransactionsDetails: (BuildContext context) => const PendingTransactionsDetails(),
announcements: (BuildContext context) => Announcements(), announcements: (BuildContext context) => const Announcements(),
announcementsDetails: (BuildContext context) => AnnouncementDetails(), announcementsDetails: (BuildContext context) => const AnnouncementDetails(),
//My Requests //My Requests
myRequests: (BuildContext context) => MyRequests(), myRequests: (BuildContext context) => const MyRequests(),
newRequest: (BuildContext context) => NewRequest(), newRequest: (BuildContext context) => const NewRequest(),
myDocuments: (BuildContext context) => MyDocumentsScreen(), myDocuments: (BuildContext context) => MyDocumentsScreen(),
// Items for sale // Items for sale
itemsForSale: (BuildContext context) => ItemsForSale(), itemsForSale: (BuildContext context) => const ItemsForSale(),
itemsForSaleDetail: (BuildContext context) => ItemForSaleDetailPage(), itemsForSaleDetail: (BuildContext context) => const ItemForSaleDetailPage(),
addNewItemForSale: (BuildContext context) => AddNewItemForSale(), addNewItemForSale: (BuildContext context) => AddNewItemForSale(),
// Offers & Discounts // Offers & Discounts
offersAndDiscounts: (BuildContext context) => OffersAndDiscountsHome(), offersAndDiscounts: (BuildContext context) => const OffersAndDiscountsHome(),
offersAndDiscountsDetails: (BuildContext context) => OffersAndDiscountsDetails(), offersAndDiscountsDetails: (BuildContext context) => const OffersAndDiscountsDetails(),
//pay slip //pay slip
monthlyPaySlip: (BuildContext context) => MonthlyPaySlipScreen(), monthlyPaySlip: (BuildContext context) => MonthlyPaySlipScreen(),
@ -307,36 +304,35 @@ class AppRoutes {
endEmploymentScreen: (BuildContext context) => EndEmploymentScreen(), endEmploymentScreen: (BuildContext context) => EndEmploymentScreen(),
//My Team //My Team
myTeam: (BuildContext context) => MyTeam(), myTeam: (BuildContext context) => const MyTeam(),
employeeDetails: (BuildContext context) => EmployeeDetails(), employeeDetails: (BuildContext context) => EmployeeDetails(),
profileDetails: (BuildContext context) => ProfileDetails(), profileDetails: (BuildContext context) => const ProfileDetails(),
viewAttendance: (BuildContext context) => ViewAttendance(), viewAttendance: (BuildContext context) => const ViewAttendance(),
teamMembers: (BuildContext context) => TeamMembers(), teamMembers: (BuildContext context) => const TeamMembers(),
createRequest: (BuildContext context) => CreateRequest(), createRequest: (BuildContext context) => const CreateRequest(),
subordinateLeave: (BuildContext context) => SubordinateLeave(), subordinateLeave: (BuildContext context) => const SubordinateLeave(),
changePassword: (BuildContext context) => ChangePasswordScreen(), changePassword: (BuildContext context) => ChangePasswordScreen(),
changeItgAdPasswordScreen: (BuildContext context) => ChangeItgAdPasswordScreen(), changeItgAdPasswordScreen: (BuildContext context) => ChangeItgAdPasswordScreen(),
//Chat //Chat
chat: (BuildContext context) => ChatHome(), chat: (BuildContext context) => const ChatHome(),
chatDetailed: (BuildContext context) => ChatDetailScreen(), chatDetailed: (BuildContext context) => const ChatDetailScreen(),
chatFavoriteUsers: (BuildContext context) => ChatFavoriteUsersScreen(), chatFavoriteUsers: (BuildContext context) => const ChatFavoriteUsersScreen(),
//Group Chat //Group Chat
manageGroup: (BuildContext context) => ManageGroupScreen(), manageGroup: (BuildContext context) => const ManageGroupScreen(),
groupMembers: (BuildContext context) => GroupMembersScreen(), groupMembers: (BuildContext context) => const GroupMembersScreen(),
groupChatDetailed: (BuildContext context) => GroupChatDetailScreen(), groupChatDetailed: (BuildContext context) => const GroupChatDetailScreen(),
// Marathon // Marathon
marathonIntroScreen: (BuildContext context) => MarathonIntroScreen(), marathonIntroScreen: (BuildContext context) => const MarathonIntroScreen(),
marathonScreen: (BuildContext context) => MarathonScreen(), marathonScreen: (BuildContext context) => const MarathonScreen(),
marathonSponsorVideoScreen: (BuildContext context) => const SponsorVideoScreen(), marathonSponsorVideoScreen: (BuildContext context) => const SponsorVideoScreen(),
marathonWaitingScreen: (BuildContext context) => const MarathonWaitingScreen(), marathonWaitingScreen: (BuildContext context) => const MarathonWaitingScreen(),
marathonTutorialScreen: (BuildContext context) => const MarathonTutorialViewerScreen(), marathonTutorialScreen: (BuildContext context) => const MarathonTutorialViewerScreen(),
// Disclosure // Disclosure
disclosureIntroScreen: (BuildContext context) => DisclosureIntroScreen(), disclosureIntroScreen: (BuildContext context) => const DisclosureIntroScreen(),
disclosureScreen: (BuildContext context) => DisclosureScreen(), disclosureScreen: (BuildContext context) => const DisclosureScreen(),
disclosureWaitingScreen: (BuildContext context) => const DisclosureWaitingScreen(),
unsafeDeviceScreen: (BuildContext context) => const UnsafeDeviceScreen(), unsafeDeviceScreen: (BuildContext context) => const UnsafeDeviceScreen(),
appUpdateScreen: (BuildContext context) => const AppUpdateScreen(), appUpdateScreen: (BuildContext context) => const AppUpdateScreen(),

@ -5,8 +5,8 @@ import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.dart'; import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.dart';
import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_details_card.dart'; import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_details_card.dart';
import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_footer.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class DisclosureIntroScreen extends StatelessWidget { class DisclosureIntroScreen extends StatelessWidget {
@ -34,17 +34,10 @@ class DisclosureIntroScreen extends StatelessWidget {
padding: const EdgeInsets.all(21), padding: const EdgeInsets.all(21),
children: <Widget>[ children: <Widget>[
DisclosureDetailsCard(disclosureDetailsCard: provider.disclosureDetailsModel), DisclosureDetailsCard(disclosureDetailsCard: provider.disclosureDetailsModel),
20.height,
// provider.isUpComingMarathon
// ? DisclosureTimerCard(
// provider: provider,
// timeToMarathon: DateTime.parse(provider.marathonDetailModel.startTime!).millisecondsSinceEpoch,
// )
// : const SizedBox(),
], ],
).expanded, ).expanded,
1.divider, 1.divider,
DisclosureFooter(provider: provider), DefaultButton("Start", () => provider.onStartDisclosurePressed(context)).insideContainer,
], ],
), ),
); );

@ -6,12 +6,10 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/marathon/demo_marathon_repo.dart'; import 'package:mohem_flutter_app/api/marathon/demo_marathon_repo.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/models/disclosure/disclosure_details_model.dart'; import 'package:mohem_flutter_app/models/disclosure/disclosure_details_model.dart';
import 'package:mohem_flutter_app/models/disclosure/disclosure_question_model.dart'; import 'package:mohem_flutter_app/models/disclosure/disclosure_question_model.dart';
import 'package:mohem_flutter_app/models/privilege_list_model.dart';
import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_question_card.dart'; import 'package:mohem_flutter_app/ui/disclosure/widgets/disclosure_question_card.dart';
class DisclosureProvider extends ChangeNotifier { class DisclosureProvider extends ChangeNotifier {
@ -20,7 +18,7 @@ class DisclosureProvider extends ChangeNotifier {
final AppinioSwiperController swiperController = AppinioSwiperController(); final AppinioSwiperController swiperController = AppinioSwiperController();
DisclosureQuestionsOptionStatus currentQuestionSelectionStatus = DisclosureQuestionsOptionStatus.unSelected; DisclosureQuestionsOptionStatus currentQuestionSelectionStatus = DisclosureQuestionsOptionStatus.unSelected;
DisclosureDetailsModel disclosureDetailsModel = DisclosureDetailsModel(); DisclosureDetailsModel disclosureDetailsModel = DisclosureDetailsModel();
List<DisclosureCardContent> cardContentList = <DisclosureCardContent>[]; List<DisclosureCardContent> cardContentList = <DisclosureCardContent>[const DisclosureCardContent()];
DisclosureQuestionModel currentQuestion = DisclosureQuestionModel(); DisclosureQuestionModel currentQuestion = DisclosureQuestionModel();
List<DisclosureQuestionCardStatus> answerStatusesList = <DisclosureQuestionCardStatus>[]; List<DisclosureQuestionCardStatus> answerStatusesList = <DisclosureQuestionCardStatus>[];
DisclosureQuestionCardStatus questionCardStatus = DisclosureQuestionCardStatus.question; DisclosureQuestionCardStatus questionCardStatus = DisclosureQuestionCardStatus.question;
@ -28,9 +26,6 @@ class DisclosureProvider extends ChangeNotifier {
String? selectedOptionId; String? selectedOptionId;
int? totalQualifiers; int? totalQualifiers;
Locale savedLocale = const Locale("en", "US"); Locale savedLocale = const Locale("en", "US");
String? gapTimeImage;
String? gapTimeText;
int? gapTimeType;
bool iAmWinner = false; bool iAmWinner = false;
bool isGettingQualifiers = false; bool isGettingQualifiers = false;
@ -54,31 +49,6 @@ class DisclosureProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
bool _isUserWaiting = false;
bool get isUserWaiting => _isUserWaiting;
set isUserWaiting(bool value) {
_isUserWaiting = value;
notifyListeners();
}
bool _isMarathonCompleted = false;
bool get isMarathonCompleted => _isMarathonCompleted;
set isMarathonCompleted(bool value) {
_isMarathonCompleted = value;
notifyListeners();
}
bool isUserOutOfGame = false;
set updateIsUserOutOfGame(bool value) {
isUserOutOfGame = value;
notifyListeners();
}
int _currentQuestionNumber = 0; int _currentQuestionNumber = 0;
int get currentQuestionNumber => _currentQuestionNumber; int get currentQuestionNumber => _currentQuestionNumber;
@ -88,91 +58,18 @@ class DisclosureProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
void updateCurrentQuestionSelectionStatus(DisclosureQuestionsOptionStatus value) { void updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus value) {
currentQuestionSelectionStatus = value; currentQuestionSelectionStatus = value;
notifyListeners(); notifyListeners();
} }
int _totalMarathoners = 0;
int get totalMarathoners => _totalMarathoners;
set totalMarathoners(int value) {
_totalMarathoners = value;
notifyListeners();
}
//****************SPONSOR VIDEO PLAYER**********
// 9c47d281-c5b5-4b5d-a90a-08dacb8cbdb6
// MarathonI
//************************************************ TIMERS **********************************************************
int sponsorsSecondsCounter = 0;
int totalSponsorVideoSeconds = 0;
Timer timerForSponsorVideo = Timer.periodic(const Duration(seconds: 1), (Timer timer) {});
void startTimerForSponsorVideo() {
const Duration oneSec = Duration(seconds: 1);
timerForSponsorVideo = Timer.periodic(
oneSec,
(Timer timer) async {
sponsorsSecondsCounter++;
if (totalSponsorVideoSeconds == 0) {
timer.cancel();
notifyListeners();
return;
} else {
totalSponsorVideoSeconds--;
}
notifyListeners();
},
);
}
int totalSecondsToWaitForMarathon = 30;
set updateTotalSecondsToWaitForMarathon(int value) {
totalSecondsToWaitForMarathon = value;
notifyListeners();
}
//************************************************ FUNCTIONS ********************************************************** //************************************************ FUNCTIONS **********************************************************
void updateLanguageAsPerMarathon(BuildContext context, DisclosureDetailsModel detailModel) {
savedLocale = context.locale;
if (detailModel.selectedLanguage == 1) {
context.setLocale(const Locale("en", "US"));
} else if (detailModel.selectedLanguage == 2) {
context.setLocale(const Locale("ar", "SA"));
} else if (detailModel.selectedLanguage == 3) {
} else {
context.setLocale(const Locale("en", "US"));
}
}
Future<void> callGetQualifiersApi() async {
if (AppState().getIsDemoMarathon) {
totalQualifiers = isUserOutOfGame ? 0 : 1;
}
isGettingQualifiers = false;
notifyListeners();
}
Future<void> callGetSelectedWinnersApi() async {
if (AppState().getIsDemoMarathon) {
return;
}
}
Future<void> callNextQuestionApi() async { Future<void> callNextQuestionApi() async {
log("currentQuestionNumber: $currentQuestionNumber");
if (currentQuestionNumber < (disclosureDetailsModel.totalQuestions!)) { if (currentQuestionNumber < (disclosureDetailsModel.totalQuestions!)) {
if (currentQuestionNumber == 0) { if (currentQuestionNumber == 0) {
currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber); currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber);
gapTimeImage = currentQuestion.gapImage;
gapTimeText = currentQuestion.gapText;
gapTimeType = currentQuestion.gapType;
updateCardData(); updateCardData();
if (Utils.isLoading) { if (Utils.isLoading) {
Utils.hideLoading(AppRoutes.navigatorKey.currentContext!); Utils.hideLoading(AppRoutes.navigatorKey.currentContext!);
@ -180,6 +77,7 @@ class DisclosureProvider extends ChangeNotifier {
Navigator.pushReplacementNamed(AppRoutes.navigatorKey.currentContext!, AppRoutes.disclosureScreen); Navigator.pushReplacementNamed(AppRoutes.navigatorKey.currentContext!, AppRoutes.disclosureScreen);
} else { } else {
currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber); currentQuestion = await DisclosureRepo().getDisclosureNextQuestion(currentQuestionNumber: currentQuestionNumber);
updateCardData();
} }
notifyListeners(); notifyListeners();
} }
@ -187,13 +85,14 @@ class DisclosureProvider extends ChangeNotifier {
void updateCardData() { void updateCardData() {
if (currentQuestionNumber > 0) { if (currentQuestionNumber > 0) {
// swiperController.swipeLeft(); swiperController.swipeRight();
} }
selectedOptionIndex = null; selectedOptionIndex = null;
currentQuestionNumber++; currentQuestionNumber++;
if (currentQuestionNumber < disclosureDetailsModel.totalQuestions!) {
cardContentList.add(const DisclosureCardContent()); cardContentList.add(const DisclosureCardContent());
totalMarathoners = currentQuestion.remainingParticipantCount!; cardContentList.add(const DisclosureCardContent());
}
questionCardStatus = DisclosureQuestionCardStatus.question; questionCardStatus = DisclosureQuestionCardStatus.question;
notifyListeners(); notifyListeners();
} }
@ -208,13 +107,12 @@ class DisclosureProvider extends ChangeNotifier {
} }
} }
void updateAnswerStatusesList(DisclosureQuestionCardStatus status) {
answerStatusesList[currentQuestionNumber - 1] = status;
notifyListeners();
}
void updateCurrentQuestionOptionStatus({required DisclosureQuestionsOptionStatus status, required int selectedOptIndex, required int correctOptionIndex}) { void updateCurrentQuestionOptionStatus({required DisclosureQuestionsOptionStatus status, required int selectedOptIndex, required int correctOptionIndex}) {
if (selectedOptionIndex == 0) {} if (selectedOptIndex == 0) {
updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus.correct);
} else if (selectedOptIndex == 1) {
updateCurrentSelectionYesNo(DisclosureQuestionsOptionStatus.wrong);
}
for (int i = 0; i < currentQuestion.questionOptions!.length; i++) { for (int i = 0; i < currentQuestion.questionOptions!.length; i++) {
currentQuestion.questionOptions![i].optionStatus = DisclosureQuestionsOptionStatus.unSelected; currentQuestion.questionOptions![i].optionStatus = DisclosureQuestionsOptionStatus.unSelected;
} }
@ -228,83 +126,20 @@ class DisclosureProvider extends ChangeNotifier {
} }
void updateQuestionCardStatus(DisclosureQuestionCardStatus status) { void updateQuestionCardStatus(DisclosureQuestionCardStatus status) {
if (status == DisclosureQuestionCardStatus.wrongAnswer || status == DisclosureQuestionCardStatus.skippedAnswer) {
if (AppState().getIsDemoMarathon) {
updateIsUserOutOfGame = true;
}
}
questionCardStatus = status; questionCardStatus = status;
notifyListeners(); notifyListeners();
} }
void getCorrectAnswerAndUpdateAnswerColor() { void updateAnswerStatusesList(DisclosureQuestionCardStatus status) {
log("correctOptionIndex"); answerStatusesList[currentQuestionNumber - 1] = status;
int correctOptionIndex = -1; notifyListeners();
if (disclosureDetailsModel.displayCorrectAnswer ?? false) {
correctOptionIndex = currentQuestion.questionOptions!.indexWhere((QuestionOptions element) => element.isCorrectOption ?? false);
log("correctOptionIndex: $correctOptionIndex");
}
if (selectedOptionIndex != null) {
scheduleMicrotask(() async {
if (AppState().getIsDemoMarathon) {
if (currentQuestion.questionOptions![selectedOptionIndex!].isCorrectOption!) {
updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.correct, selectedOptIndex: selectedOptionIndex!, correctOptionIndex: correctOptionIndex);
} else {
updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.wrong, selectedOptIndex: selectedOptionIndex!, correctOptionIndex: correctOptionIndex);
}
}
});
} else {
if (!AppState().getIsDemoMarathon) {}
}
}
void updateCardStatusToAnswer() {
if (currentQuestionNumber == 0) {
return;
}
scheduleMicrotask(() async {
await callNextQuestionApi();
});
if (selectedOptionIndex == null) {
updateQuestionCardStatus(DisclosureQuestionCardStatus.skippedAnswer);
updateAnswerStatusesList(DisclosureQuestionCardStatus.skippedAnswer);
return;
}
if (AppState().getIsDemoMarathon) {
if (currentQuestion.questionOptions![selectedOptionIndex!].isCorrectOption!) {
updateQuestionCardStatus(DisclosureQuestionCardStatus.correctAnswer);
updateAnswerStatusesList(DisclosureQuestionCardStatus.correctAnswer);
} else {
updateQuestionCardStatus(DisclosureQuestionCardStatus.wrongAnswer);
updateAnswerStatusesList(DisclosureQuestionCardStatus.wrongAnswer);
}
return;
}
if (!isUserOutOfGame) {
updateQuestionCardStatus(DisclosureQuestionCardStatus.correctAnswer);
updateAnswerStatusesList(DisclosureQuestionCardStatus.correctAnswer);
return;
}
updateQuestionCardStatus(DisclosureQuestionCardStatus.wrongAnswer);
updateAnswerStatusesList(DisclosureQuestionCardStatus.wrongAnswer);
} }
void resetValues() async { void resetValues() async {
_currentQuestionNumber = 0; _currentQuestionNumber = 0;
iAmWinner = false; iAmWinner = false;
cardContentList.clear(); cardContentList.clear();
timerForSponsorVideo.cancel();
_isMarathonCompleted = false;
isUserOutOfGame = false;
isButtonEnabled = false; isButtonEnabled = false;
isUserWaiting = false;
sponsorsSecondsCounter = 0;
totalSponsorVideoSeconds = 0;
totalSecondsToWaitForMarathon = 30;
AppState().setIsDemoMarathon = false;
currentQuestion = DisclosureQuestionModel(); currentQuestion = DisclosureQuestionModel();
if (answerStatusesList.isNotEmpty) { if (answerStatusesList.isNotEmpty) {
for (int i = 0; i < answerStatusesList.length; i++) { for (int i = 0; i < answerStatusesList.length; i++) {
@ -315,29 +150,16 @@ class DisclosureProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
bool checkIfPrivilegedForMarathon() {
for (PrivilegeListModel element in AppState().privilegeListModel!) {
if (element.serviceName == "Marathon") {
if (element.previlege != null) {
return element.previlege!;
}
}
}
return false;
}
Future<void> getDisclosureDetails() async { Future<void> getDisclosureDetails() async {
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
disclosureDetailsModel = await DisclosureRepo().getDisclosureDetails(); disclosureDetailsModel = await DisclosureRepo().getDisclosureDetails();
log("here: ${disclosureDetailsModel.descEn}");
populateQuestionStatusesList(); populateQuestionStatusesList();
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
} }
Future<void> onJoinDemoMarathonPressed(BuildContext context) async { Future<void> onStartDisclosurePressed(BuildContext context) async {
AppState().setIsDemoMarathon = true;
await callNextQuestionApi(); await callNextQuestionApi();
} }
} }

@ -1,11 +1,8 @@
import 'dart:async'; import 'dart:async';
import 'dart:developer';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:lottie/lottie.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/colors.dart';
import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/classes/lottie_consts.dart'; import 'package:mohem_flutter_app/classes/lottie_consts.dart';
@ -14,6 +11,7 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_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/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.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/models/marathon/question_model.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.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/custom_status_widget.dart';
@ -44,91 +42,11 @@ class DisclosureScreen extends StatelessWidget {
return Image.asset(MyLottieConsts.congratsGif, height: 200); return Image.asset(MyLottieConsts.congratsGif, height: 200);
} }
Widget getDemoWinnerWidget(BuildContext context, {required DisclosureProvider provider}) {
return provider.isUserOutOfGame
? Column(
children: <Widget>[
Lottie.asset(MyLottieConsts.noWinnerLottie),
Center(
child: LocaleKeys.noWinner.tr().toText18(color: MyColors.grey3AColor, isCentered: true),
),
],
)
: Stack(
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
height: 50,
child: Stack(
children: <Widget>[
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: <Widget>[
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) ...<Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
"${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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
DisclosureProvider provider = context.watch<DisclosureProvider>(); DisclosureProvider provider = context.watch<DisclosureProvider>();
bool isButtonDisabled = provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.correct || provider.currentQuestionSelectionStatus == DisclosureQuestionsOptionStatus.wrong;
bool isLastQuestion = provider.currentQuestionNumber == provider.disclosureDetailsModel.totalQuestions!;
return WillPopScope( return WillPopScope(
child: Scaffold( child: Scaffold(
appBar: AppBarWidget( appBar: AppBarWidget(
@ -192,11 +110,7 @@ class DisclosureScreen extends StatelessWidget {
title: LocaleKeys.congrats.tr().toText22(color: MyColors.greenColor), title: LocaleKeys.congrats.tr().toText22(color: MyColors.greenColor),
subTitle: LocaleKeys.allQuestionsCorrect.toText18(color: MyColors.darkTextColor, isCentered: true), subTitle: LocaleKeys.allQuestionsCorrect.toText18(color: MyColors.darkTextColor, isCentered: true),
), ),
onCorrectAnswer: (BuildContext context) => DisclosureCustomStatusWidget( onCorrectAnswer: (BuildContext context) => const SizedBox(),
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(), onWinner: (BuildContext context) => const SizedBox(),
onWrongAnswer: (BuildContext context) => DisclosureCustomStatusWidget( onWrongAnswer: (BuildContext context) => DisclosureCustomStatusWidget(
asset: Image.asset(MyLottieConsts.wrongAnswerGif, height: 200), asset: Image.asset(MyLottieConsts.wrongAnswerGif, height: 200),
@ -219,8 +133,22 @@ class DisclosureScreen extends StatelessWidget {
], ],
).expanded, ).expanded,
DefaultButton( DefaultButton(
LocaleKeys.next.tr(), 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, ).insideContainer,
], ],
), ),

@ -1,109 +0,0 @@
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/decorations_helper.dart';
import 'package:mohem_flutter_app/classes/lottie_consts.dart';
import 'package:mohem_flutter_app/config/routes.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/ui/disclosure/disclosure_provider.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
import 'package:provider/provider.dart';
class DisclosureWaitingScreen extends StatelessWidget {
const DisclosureWaitingScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
DisclosureProvider provider = context.watch<DisclosureProvider>();
return WillPopScope(
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);
},
child: Scaffold(
appBar: AppBarWidget(
context,
title: LocaleKeys.brainMarathon.tr(),
onHomeTapped: () {
showDialog(
context: context,
builder: (BuildContext context) => ConfirmDialog(
message: LocaleKeys.youWantToLeaveMarathon.tr(),
onTap: () {
provider.resetValues();
Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard));
},
),
);
},
onBackTapped: () {
showDialog(
context: context,
builder: (BuildContext context) => ConfirmDialog(
message: LocaleKeys.youWantToLeaveMarathon.tr(),
onTap: () {
provider.resetValues();
Navigator.of(context).popUntil(ModalRoute.withName(AppRoutes.dashboard));
},
),
);
},
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: double.infinity,
margin: const EdgeInsets.all(21),
decoration: MyDecorations.shadowDecoration,
child: Stack(
children: <Widget>[
Align(
child: Lottie.asset(MyLottieConsts.marathonWaiting, height: 200),
),
Align(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
LocaleKeys.startingIn.tr().toText16(),
(provider.totalSecondsToWaitForMarathon < 10 ? "0${provider.totalSecondsToWaitForMarathon.toString()}" : provider.totalSecondsToWaitForMarathon.toString()).toText18(color: provider.totalSecondsToWaitForMarathon < 5 ? MyColors.redColor : MyColors.black),
],
),
),
// Align(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.end,
// children: <Widget>[
// InkWell(
// onTap: () {
// provider.callNextQuestionApi();
// provider.timerToWaitForMarathon.cancel();
// },
// child: "Join Now".toText16(),
// ).paddingOnly(bottom: 20),
// ],
// ),
// ),
],
),
).expanded,
],
),
),
);
}
}

@ -6,11 +6,8 @@ import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart'; import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.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/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/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/disclosure/disclosure_details_model.dart'; import 'package:mohem_flutter_app/models/disclosure/disclosure_details_model.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.dart';
import 'package:provider/provider.dart';
class DisclosureDetailsCard extends StatelessWidget { class DisclosureDetailsCard extends StatelessWidget {
final DisclosureDetailsModel disclosureDetailsCard; final DisclosureDetailsModel disclosureDetailsCard;
@ -26,17 +23,6 @@ class DisclosureDetailsCard extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
decoration: BoxDecoration(color: MyColors.yellowColorII, borderRadius: BorderRadius.circular(100)),
child: LocaleKeys.demo.tr().toText10(color: MyColors.white).paddingAll(4),
),
],
),
7.height,
LocaleKeys.contestTopicAbout.tr().toText16(color: MyColors.grey77Color),
displayLocalizedContent( displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context), isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: disclosureDetailsCard.selectedLanguage ?? 0, selectedLanguage: disclosureDetailsCard.selectedLanguage ?? 0,
@ -58,36 +44,6 @@ class DisclosureDetailsCard extends StatelessWidget {
], ],
), ),
if (disclosureDetailsCard.sponsors != null && disclosureDetailsCard.sponsors!.isNotEmpty) ...<Widget>[ if (disclosureDetailsCard.sponsors != null && disclosureDetailsCard.sponsors!.isNotEmpty) ...<Widget>[
5.height,
disclosureDetailsCard.sponsors!.first.sponsorPrizes != null
? Row(
children: <Widget>[
"${LocaleKeys.prize.tr()} ".toText16(color: MyColors.grey77Color),
Expanded(
child: SizedBox(
height: 30,
child: ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: disclosureDetailsCard.sponsors!.first.sponsorPrizes!.length,
itemBuilder: (BuildContext context, int index) {
SponsorPrizes prizes = disclosureDetailsCard.sponsors!.first.sponsorPrizes![index];
return Container(
decoration: BoxDecoration(color: MyColors.backgroundColor, borderRadius: BorderRadius.circular(100), border: Border.all(color: MyColors.grey57Color.withOpacity(0.1))),
child: displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: disclosureDetailsCard.selectedLanguage ?? 0,
englishContent: prizes.marathonPrizeEn ?? "",
arabicContent: prizes.marathonPrizeAr ?? "",
).toText16(color: MyColors.greenColor, isBold: true).paddingOnly(left: 5, right: 5),
).paddingOnly(left: 5);
},
),
),
)
],
)
: const SizedBox(),
Row( Row(
children: <Widget>[ children: <Widget>[
"${LocaleKeys.sponsoredBy.tr()} ".toText16(color: MyColors.grey77Color), "${LocaleKeys.sponsoredBy.tr()} ".toText16(color: MyColors.grey77Color),

@ -1,51 +0,0 @@
// ignore_for_file: always_specify_types
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.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/ui/disclosure/disclosure_provider.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
class DisclosureFooter extends StatelessWidget {
final DisclosureProvider provider;
const DisclosureFooter({Key? key, required this.provider}) : super(key: key);
Widget buildNoteForDemo() {
return RichText(
text: TextSpan(
children: <InlineSpan>[
TextSpan(
text: LocaleKeys.note.tr(),
style: const TextStyle(color: MyColors.darkTextColor, fontSize: 17, letterSpacing: -0.64, fontWeight: FontWeight.bold),
),
TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP1.tr(),
style: const TextStyle(color: MyColors.grey77Color, fontSize: 17, letterSpacing: -0.64, fontWeight: FontWeight.w500),
),
TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP2.tr(),
style: const TextStyle(color: MyColors.darkTextColor, fontSize: 17, fontWeight: FontWeight.bold),
),
TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP3.tr(),
style: const TextStyle(color: MyColors.grey77Color, fontSize: 17, letterSpacing: -0.64, fontWeight: FontWeight.w500),
)
],
),
).paddingOnly(right: 21, left: 21, top: 11, bottom: 0);
}
@override
Widget build(BuildContext context) {
{
return DefaultButton(
LocaleKeys.joinDemoMarathon.tr(),
() => provider.onJoinDemoMarathonPressed(context),
color: MyColors.yellowColorII,
).insideContainer;
}
}
}

@ -39,14 +39,13 @@ class DisclosureProgressContainer extends StatelessWidget {
provider.currentQuestionNumber, provider.currentQuestionNumber,
provider.answerStatusesList, provider.answerStatusesList,
provider.disclosureDetailsModel.totalQuestions!, provider.disclosureDetailsModel.totalQuestions!,
provider.isUserOutOfGame,
), ),
8.height, 8.height,
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ 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()}"
provider.isUserOutOfGame ? LocaleKeys.youAreOutOfContest.tr().toText13(color: MyColors.redColor) : const SizedBox(), .toText14(),
], ],
), ),
], ],
@ -54,14 +53,14 @@ class DisclosureProgressContainer extends StatelessWidget {
); );
} }
Color getStepColor(DisclosureQuestionCardStatus status, bool isOutOfGame) { Color getStepColor(DisclosureQuestionCardStatus status) {
switch (status) { switch (status) {
case DisclosureQuestionCardStatus.question: case DisclosureQuestionCardStatus.question:
return MyColors.yellowColorII; return MyColors.yellowColorII;
case DisclosureQuestionCardStatus.wrongAnswer: case DisclosureQuestionCardStatus.wrongAnswer:
return MyColors.lightGreyDeColor; return MyColors.lightGreyDeColor;
case DisclosureQuestionCardStatus.correctAnswer: case DisclosureQuestionCardStatus.correctAnswer:
return MyColors.lightGreyDeColor; return MyColors.greenColor;
case DisclosureQuestionCardStatus.skippedAnswer: case DisclosureQuestionCardStatus.skippedAnswer:
return MyColors.lightGreyDeColor; return MyColors.lightGreyDeColor;
case DisclosureQuestionCardStatus.completed: case DisclosureQuestionCardStatus.completed:
@ -73,20 +72,14 @@ class DisclosureProgressContainer extends StatelessWidget {
} }
} }
Widget stepper(int value, List<DisclosureQuestionCardStatus> statusesList, int totalQuestions, bool isOutOfGame) { Widget stepper(int value, List<DisclosureQuestionCardStatus> statusesList, int totalQuestions) {
return SizedBox( return SizedBox(
width: double.infinity, width: double.infinity,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
for (int i = 0; i < totalQuestions; i++) for (int i = 0; i < totalQuestions; i++)
if (value <= i) if (value <= i) roundContainer(MyColors.lightGreyDeColor, i != 0) else roundContainer(getStepColor(statusesList[i]), i != 0)
roundContainer(MyColors.lightGreyDeColor, i != 0)
else
roundContainer(
getStepColor(statusesList[i], isOutOfGame),
i != 0,
)
], ],
), ),
); );

@ -1,5 +1,4 @@
import 'package:appinio_swiper/appinio_swiper.dart'; import 'package:appinio_swiper/appinio_swiper.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart'; import 'package:lottie/lottie.dart';
@ -7,10 +6,8 @@ import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.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/lottie_consts.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/string_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/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/disclosure/disclosure_question_model.dart';
import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.dart'; import 'package:mohem_flutter_app/ui/disclosure/disclosure_provider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -106,27 +103,28 @@ class DisclosureAnswerContent extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
DisclosureProvider provider = context.watch<DisclosureProvider>(); DisclosureProvider provider = context.watch<DisclosureProvider>();
return Container( return Container(
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 13), padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 13),
decoration: const BoxDecoration( decoration: const BoxDecoration(
color: MyColors.kWhiteColor, color: MyColors.kWhiteColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(10), bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(10), bottomRight: Radius.circular(10),
),
), ),
child: provider.currentQuestion.questionOptions != null ),
? Row( child: provider.currentQuestion.questionOptions != null
children: List<Widget>.generate( ? Row(
provider.currentQuestion.questionOptions!.length, children: List<Widget>.generate(
(int index) => Expanded( provider.currentQuestion.questionOptions!.length,
child: DisclosureAnswerTileForText( (int index) => Expanded(
index: index, child: DisclosureAnswerTileForText(
onAnswerTapped: () => provider.updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.selected, selectedOptIndex: index, correctOptionIndex: -1), // index: index,
).paddingAll(8), onAnswerTapped: () => provider.updateCurrentQuestionOptionStatus(status: DisclosureQuestionsOptionStatus.selected, selectedOptIndex: index, correctOptionIndex: -1), //
), ).paddingAll(8),
), ),
) ),
: const SizedBox()); )
: const SizedBox(),
);
} }
} }
@ -153,19 +151,21 @@ class DisclosureAnswerTileForText extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
DisclosureProvider provider = context.watch<DisclosureProvider>(); DisclosureProvider provider = context.watch<DisclosureProvider>();
return InkWell( return InkWell(
onTap: () { onTap: () => onAnswerTapped(),
provider.isUserOutOfGame ? Utils.showToast(LocaleKeys.youAreOutOfContest.tr()) : onAnswerTapped();
},
child: Container( child: Container(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
decoration: MyDecorations.getAnswersContainerColorForDisclosure(provider.currentQuestion.questionOptions![index].optionStatus!), decoration: MyDecorations.getAnswersContainerColorForDisclosure(
provider.currentQuestion.questionOptions![index].optionStatus!,
isLastQuestion: provider.currentQuestionNumber == provider.disclosureDetailsModel.totalQuestions!,
isAgreeSelected: provider.selectedOptionIndex == 0,
),
child: Center( child: Center(
child: displayLocalizedContent( child: displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context), isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0, selectedLanguage: (provider.disclosureDetailsModel.selectedLanguage) ?? 0,
englishContent: provider.currentQuestion.questionOptions![index].titleEn ?? "", englishContent: provider.currentQuestion.questionOptions![index].titleEn ?? "",
arabicContent: provider.currentQuestion.questionOptions![index].titleAr ?? "", arabicContent: provider.currentQuestion.questionOptions![index].titleAr ?? "",
).toText16(color: provider.isUserOutOfGame ? MyColors.darkTextColor : getAnswerTextColor(provider.currentQuestion.questionOptions![index].optionStatus!)).paddingOnly(top: 13, bottom: 13), ).toText16(color: getAnswerTextColor(provider.currentQuestion.questionOptions![index].optionStatus!)).paddingOnly(top: 13, bottom: 13),
), ),
), ),
); );

@ -60,16 +60,23 @@ class DefaultButton extends StatelessWidget {
MyColors.yellowColorII, MyColors.yellowColorII,
], ],
) )
: LinearGradient( : color == MyColors.greenColor
transform: const GradientRotation(.83), ? const LinearGradient(
begin: Alignment.topRight, colors: <Color>[
end: Alignment.bottomLeft, MyColors.greenColor,
colors: colors ?? MyColors.greenColor,
<Color>[
MyColors.gradiantEndColor,
MyColors.gradiantStartColor,
], ],
), )
: LinearGradient(
transform: const GradientRotation(.83),
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: colors ??
<Color>[
MyColors.gradiantEndColor,
MyColors.gradiantStartColor,
],
),
), ),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

Loading…
Cancel
Save