Merge branch 'master' into development_aamir

# Conflicts:
#	lib/provider/chat_provider_model.dart
merge-requests/75/head
Aamir Muhammad 3 years ago
commit 46de4b88ab

@ -1,7 +1,7 @@
class ApiConsts { class ApiConsts {
// static String baseUrl = "http://10.200.204.20:2801/"; // Local server //static String baseUrl = "http://10.200.204.20:2801/"; // Local server
//static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
static String baseUrl = "https://hmgwebservices.com"; // Live server // static String baseUrl = "https://hmgwebservices.com"; // Live server
static String baseUrlServices = baseUrl + "/Services/"; // server static String baseUrlServices = baseUrl + "/Services/"; // server
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";

@ -20,7 +20,7 @@ class DateUtil {
} }
static DateTime convertSimpleStringDateToDate(String date) { static DateTime convertSimpleStringDateToDate(String date) {
return DateFormat("MM/dd/yyyy hh:mm:ss").parse(date); return DateFormat("MM/dd/yyyy hh:mm:ss a").parse(date);
} }
static DateTime convertSimpleStringDateToDateddMMyyyy(String date) { static DateTime convertSimpleStringDateToDateddMMyyyy(String date) {

@ -136,7 +136,7 @@ extension EmailValidator on String {
Widget toText21({Color? color, bool isBold = false, FontWeight? weight, int? maxlines}) => Text( Widget toText21({Color? color, bool isBold = false, FontWeight? weight, int? maxlines}) => Text(
this, this,
maxLines: maxlines, maxLines: maxlines,
style: TextStyle(color: color ?? MyColors.grey3AColor, fontSize: 21, letterSpacing: -0.31, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600)), style: TextStyle(color: color ?? MyColors.grey3AColor, fontSize: 21, letterSpacing: -0.84, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600)),
); );
Widget toText22({Color? color, bool isBold = false}) => Text( Widget toText22({Color? color, bool isBold = false}) => Text(
@ -149,6 +149,11 @@ extension EmailValidator on String {
style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
); );
Widget toText30({Color? color, bool isBold = false}) => Text(
this,
style: TextStyle(height: 20 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.2, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
);
Widget toText32({Color? color, bool isBold = false}) => Text( Widget toText32({Color? color, bool isBold = false}) => Text(
this, this,
style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),

@ -315,9 +315,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
"isSeen": isChatScreenActive ? true : false, "isSeen": isChatScreenActive ? true : false,
} }
]; ];
updateUserChatHistoryStatusAsync(list); updateUserChatHistoryStatusAsync(list);
notifyListeners(); notifyListeners();
} }
@ -458,7 +456,11 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
dynamic contain = searchedChats!.where((ChatUser element) => element.id == targetUserId); dynamic contain = searchedChats!.where((ChatUser element) => element.id == targetUserId);
if (contain.isEmpty) { if (contain.isEmpty) {
searchedChats!.add( searchedChats!.add(
ChatUser(id: targetUserId, userName: targetUserName, unreadMessageCount: 0), ChatUser(
id: targetUserId,
userName: targetUserName,
unreadMessageCount: 0
),
); );
notifyListeners(); notifyListeners();
} }
@ -673,22 +675,22 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
sFileType = ""; sFileType = "";
} }
// void scrollListener() { // void scrollListener() {
// _firstAutoscrollExecuted = true; // _firstAutoscrollExecuted = true;
// if (scrollController.hasClients && scrollController.position.pixels == scrollController.position.maxScrollExtent) { // if (scrollController.hasClients && scrollController.position.pixels == scrollController.position.maxScrollExtent) {
// _shouldAutoscroll = true; // _shouldAutoscroll = true;
// } else { // } else {
// _shouldAutoscroll = false; // _shouldAutoscroll = false;
// } // }
// } // }
// //
// void scrollToBottom() { // void scrollToBottom() {
// scrollController.animateTo( // scrollController.animateTo(
// scrollController.position.maxScrollExtent + 100, // scrollController.position.maxScrollExtent + 100,
// duration: const Duration(milliseconds: 500), // duration: const Duration(milliseconds: 500),
// curve: Curves.easeIn, // curve: Curves.easeIn,
// ); // );
// } // }
void msgScroll() { void msgScroll() {
scrollController.animateTo( scrollController.animateTo(
@ -698,10 +700,10 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
); );
} }
// Future<void> getDownLoadFile(String fileName) async { // Future<void> getDownLoadFile(String fileName) async {
// var data = await ChatApiClient().downloadURL(fileName: "data"); // var data = await ChatApiClient().downloadURL(fileName: "data");
// Image.memory(data); // Image.memory(data);
// } // }
// void getUserChatHistoryNotDeliveredAsync({required int userId}) async { // void getUserChatHistoryNotDeliveredAsync({required int userId}) async {
// try { // try {
@ -711,4 +713,12 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
// } // }
// } // }
} }

@ -316,7 +316,7 @@ class _AddVacationRuleScreenState extends State<AddVacationRuleScreen> {
12.height, 12.height,
PopupMenuButton( PopupMenuButton(
child: DynamicTextFieldWidget( child: DynamicTextFieldWidget(
"Notification", LocaleKeys.notification.tr(),
selectedItemTypeNotification == null ? LocaleKeys.selectNotification.tr() : selectedItemTypeNotification!.nOTIFICATIONDISPLAYNAME!, selectedItemTypeNotification == null ? LocaleKeys.selectNotification.tr() : selectedItemTypeNotification!.nOTIFICATIONDISPLAYNAME!,
isEnable: false, isEnable: false,
isPopup: true, isPopup: true,

@ -318,7 +318,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
), ),
], ],
).paddingOnly(left: 21, right: 21, top: 7), ).paddingOnly(left: 21, right: 21, top: 7),
const MarathonBanner().paddingAll(20), const MarathonBanner().paddingAll(21),
ServicesWidget(), ServicesWidget(),
// 8.height, // 8.height,
Container( Container(

@ -128,6 +128,7 @@ class _LoginScreenState extends State<LoginScreen> {
Navigator.pushNamed(context, AppRoutes.verifyLogin, Navigator.pushNamed(context, AppRoutes.verifyLogin,
arguments: "$firebaseToken"); arguments: "$firebaseToken");
} }
Utils.saveStringFromPrefs(SharedPrefsConsts.password, password.text);
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, (msg) {

@ -25,26 +25,18 @@ class MarathonIntroScreen extends StatelessWidget {
MarathonProvider provider = context.watch<MarathonProvider>(); MarathonProvider provider = context.watch<MarathonProvider>();
return Scaffold( return Scaffold(
appBar: AppBarWidget(context, title: LocaleKeys.brainMarathon.tr()), appBar: AppBarWidget(context, title: LocaleKeys.brainMarathon.tr()),
body: Stack( body: Column(
children: <Widget>[ children: <Widget>[
SingleChildScrollView( ListView(
child: Column( padding: const EdgeInsets.all(21),
children: <Widget>[ children: <Widget>[
MarathonDetailsCard(provider: provider).paddingAll(15), MarathonDetailsCard(provider: provider),
MarathonTimerCard( 10.height,
provider: provider, MarathonTimerCard(provider: provider, timeToMarathon: dummyEndTime),
timeToMarathon: dummyEndTime, ],
).paddingOnly(left: 15, right: 15, bottom: 15), ).expanded,
const SizedBox( 1.divider,
height: 100, MarathonFooter(provider: provider),
),
],
),
),
Align(
alignment: Alignment.bottomCenter,
child: MarathonFooter(provider: provider),
),
], ],
), ),
); );
@ -61,52 +53,41 @@ class MarathonDetailsCard extends StatelessWidget {
return Container( return Container(
width: double.infinity, width: double.infinity,
decoration: MyDecorations.shadowDecoration, decoration: MyDecorations.shadowDecoration,
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 20), padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 14),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Column( LocaleKeys.contestTopicAbout.tr().toText16(color: MyColors.grey57Color),
crossAxisAlignment: CrossAxisAlignment.start, "Saudi Arabia".toText20(color: MyColors.textMixColor),
children: <Widget>[ "Nam suscipit turpis in pharetra euismsdef. Duis rutrum at nulla id aliquam".toText14(color: MyColors.grey57Color, weight: FontWeight.w500),
LocaleKeys.contestTopicAbout.tr().toText16(color: MyColors.grey77Color), if (provider.itsMarathonTime) ...<Widget>[
"Saudi Arabia".toText20(color: MyColors.textMixColor, isBold: true), 5.height,
Row( Row(
children: <Widget>[ children: <Widget>[
Flexible( LocaleKeys.prize.tr().toText16(color: MyColors.grey57Color),
child: "Nam suscipit turpis in pharetra euismsdef. Duis rutrum at nulla id aliquam".toText14(color: MyColors.grey77Color), " LED 55\" Android TV".toText16(color: MyColors.greenColor, isBold: true),
) ],
], ),
), Row(
if (provider.itsMarathonTime) ...<Widget>[ children: <Widget>[
5.height, LocaleKeys.sponsoredBy.tr().toText16(color: MyColors.grey57Color),
Row( " Extra".toText16(color: MyColors.darkTextColor),
children: <Widget>[ ],
LocaleKeys.prize.tr().toText16(color: MyColors.grey77Color, isBold: true), ),
" LED 55\" Android TV".toText16(color: MyColors.greenColor, isBold: true), 10.height,
], Row(
), mainAxisAlignment: MainAxisAlignment.center,
Row( children: <Widget>[
children: <Widget>[ Image.asset(
LocaleKeys.sponsoredBy.tr().toText16(color: MyColors.grey77Color), "assets/images/logos/main_mohemm_logo.png",
" Extra".toText16(color: MyColors.darkTextColor, isBold: true), height: 40,
], fit: BoxFit.fill,
), width: 150,
10.height, )
Row( ],
mainAxisAlignment: MainAxisAlignment.center, ),
children: <Widget>[ ]
Image.asset(
"assets/images/logos/main_mohemm_logo.png",
height: 40,
fit: BoxFit.fill,
width: 150,
)
],
),
]
],
),
], ],
), ),
); );
@ -128,30 +109,23 @@ class MarathonTimerCard extends StatelessWidget {
return Container( return Container(
width: double.infinity, width: double.infinity,
decoration: MyDecorations.shadowDecoration, decoration: MyDecorations.shadowDecoration,
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 20), padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 14),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Row( Row(
children: <Widget>[ children: <Widget>[
LocaleKeys.gameDate.tr().toText16(color: MyColors.grey77Color), LocaleKeys.gameDate.tr().toText16(color: MyColors.grey57Color),
" 10 Oct, 2022".toText16(color: MyColors.darkTextColor, isBold: true), " 10 Oct, 2022".toText16(color: MyColors.darkTextColor),
], ],
), ),
Row( Row(
children: <Widget>[ children: <Widget>[
LocaleKeys.gameTime.tr().toText16(color: MyColors.grey77Color), LocaleKeys.gameTime.tr().toText16(color: MyColors.grey57Color),
" 3:00pm".toText16(color: MyColors.darkTextColor, isBold: true), " 3:00 pm".toText16(color: MyColors.darkTextColor),
], ],
), ),
Lottie.asset( Lottie.asset(MyLottieConsts.hourGlassLottie, height: 200),
MyLottieConsts.hourGlassLottie, BuildCountdownTimer(timeToMarathon: timeToMarathon, provider: provider, screenFlag: 1),
height: 200,
),
BuildCountdownTimer(
timeToMarathon: timeToMarathon,
provider: provider,
screenFlag: 1,
),
], ],
), ),
); );
@ -172,38 +146,19 @@ class MarathonFooter extends StatelessWidget {
children: <InlineSpan>[ children: <InlineSpan>[
TextSpan( TextSpan(
text: LocaleKeys.note.tr(), text: LocaleKeys.note.tr(),
style: const TextStyle( style: const TextStyle(color: MyColors.darkTextColor, fontSize: 17, letterSpacing: -0.64, fontWeight: FontWeight.bold),
color: MyColors.darkTextColor,
fontSize: 17,
letterSpacing: -0.64,
fontWeight: FontWeight.bold,
),
), ),
TextSpan( TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP1.tr(), text: " " + LocaleKeys.demoMarathonNoteP1.tr(),
style: const TextStyle( style: const TextStyle(color: MyColors.grey77Color, fontSize: 17, letterSpacing: -0.64, fontWeight: FontWeight.w500),
color: MyColors.grey77Color,
fontSize: 17,
letterSpacing: -0.64,
fontWeight: FontWeight.w500,
),
), ),
TextSpan( TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP2.tr(), text: " " + LocaleKeys.demoMarathonNoteP2.tr(),
style: const TextStyle( style: const TextStyle(color: MyColors.darkTextColor, fontSize: 17, fontWeight: FontWeight.bold),
color: MyColors.darkTextColor,
fontSize: 17,
fontWeight: FontWeight.bold,
),
), ),
TextSpan( TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP3.tr(), text: " " + LocaleKeys.demoMarathonNoteP3.tr(),
style: const TextStyle( style: const TextStyle(color: MyColors.grey77Color, fontSize: 17, letterSpacing: -0.64, fontWeight: FontWeight.w500),
color: MyColors.grey77Color,
fontSize: 17,
letterSpacing: -0.64,
fontWeight: FontWeight.w500,
),
) )
], ],
), ),

@ -60,7 +60,7 @@ class MarathonProvider extends ChangeNotifier {
oneSec, oneSec,
(Timer timer) async { (Timer timer) async {
if (start == 0) { if (start == 0) {
if (currentQuestionNumber == 9) { if (currentQuestionNumber == totalQuestions) {
timer.cancel(); timer.cancel();
cancelTimer(); cancelTimer();
isMarathonCompleted = true; isMarathonCompleted = true;

@ -16,8 +16,6 @@ import 'package:mohem_flutter_app/ui/marathon/widgets/custom_status_widget.dart'
import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart'; import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:sizer/sizer.dart';
import 'package:steps_indicator/steps_indicator.dart';
class MarathonScreen extends StatelessWidget { class MarathonScreen extends StatelessWidget {
const MarathonScreen({Key? key}) : super(key: key); const MarathonScreen({Key? key}) : super(key: key);
@ -100,7 +98,7 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
return Container( return Container(
width: double.infinity, width: double.infinity,
decoration: MyDecorations.shadowDecoration, decoration: MyDecorations.shadowDecoration,
padding: const EdgeInsets.all(21), padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 13),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
@ -108,10 +106,7 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(color: MyColors.greenColor, borderRadius: BorderRadius.circular(5)),
color: MyColors.greenColor,
borderRadius: BorderRadius.circular(5),
),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8), padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8),
child: "${widget.provider.currentQuestionNumber.toString()} / ${widget.provider.totalQuestions.toString()} ${LocaleKeys.question.tr()}".toText12(color: MyColors.white), child: "${widget.provider.currentQuestionNumber.toString()} / ${widget.provider.totalQuestions.toString()} ${LocaleKeys.question.tr()}".toText12(color: MyColors.white),
), ),
@ -119,36 +114,50 @@ class _MarathonProgressContainerState extends State<MarathonProgressContainer> {
"00:${widget.provider.start < 10 ? "0${widget.provider.start}" : widget.provider.start}".toText18(), "00:${widget.provider.start < 10 ? "0${widget.provider.start}" : widget.provider.start}".toText18(),
], ],
), ),
15.height,
StepsIndicator(
lineLength: SizerUtil.deviceType == DeviceType.tablet ? MediaQuery.of(context).size.width * 0.077 : MediaQuery.of(context).size.width * 0.054,
nbSteps: 10,
selectedStep: widget.provider.currentQuestionNumber,
doneLineColor: MyColors.greenColor,
doneStepColor: MyColors.greenColor,
doneLineThickness: 6,
undoneLineThickness: 6,
selectedStepSize: 10,
unselectedStepSize: 10,
doneStepSize: 10,
selectedStepBorderSize: 0,
unselectedStepBorderSize: 0,
selectedStepColorIn: MyColors.greenColor,
selectedStepColorOut: MyColors.greenColor,
unselectedStepColorIn: MyColors.lightGreyDeColor,
unselectedStepColorOut: MyColors.lightGreyDeColor,
undoneLineColor: MyColors.lightGreyDeColor,
enableLineAnimation: false,
enableStepAnimation: false,
),
12.height, 12.height,
stepper(widget.provider.currentQuestionNumber),
8.height,
Row( Row(
children: <Widget>[ children: <Widget>[
"${widget.provider.currentQuestionNumber * 10}% ${LocaleKeys.completed.tr()}".toText14(isBold: true), "${widget.provider.currentQuestionNumber * 10}% ${LocaleKeys.completed.tr()}".toText14(),
], ],
), ),
], ],
), ),
); );
} }
Widget stepper(int value) {
return SizedBox(
width: double.infinity,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
for (int i = 0; i < 10; i++)
if (value <= i) roundContainer(MyColors.lightGreyDeColor, i != 0) else roundContainer(MyColors.greenColor, i != 0)
],
),
);
}
Widget roundContainer(Color color, bool isNeedLeftBorder) {
if (isNeedLeftBorder) {
return Row(
children: [
Divider(thickness: 6, color: color).expanded,
Container(
width: 10,
height: 10,
decoration: BoxDecoration(shape: BoxShape.circle, color: color),
),
],
).expanded;
}
return Container(
width: 10,
height: 10,
decoration: BoxDecoration(shape: BoxShape.circle, color: color),
);
}
} }

@ -29,7 +29,7 @@ class MarathonWinnerSelection extends StatelessWidget {
children: [ children: [
20.height, 20.height,
QualifiersContainer(provider: provider).paddingOnly(left: 21, right: 21), QualifiersContainer(provider: provider).paddingOnly(left: 21, right: 21),
20.height, 12.height,
InkWell( InkWell(
onTap: () { onTap: () {
Navigator.pushNamed(context, AppRoutes.marathonWinnerScreen); Navigator.pushNamed(context, AppRoutes.marathonWinnerScreen);
@ -52,8 +52,8 @@ class MarathonWinnerSelection extends StatelessWidget {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
"Muhammad Shrouff".toText18(isBold: true, color: MyColors.white), "Muhammad Shrouff".toText17(isBold: true, color: MyColors.white),
"837436".toText18(isBold: true, color: MyColors.white), "837436".toText17(isBold: true, color: MyColors.white),
], ],
), ),
), ),
@ -67,10 +67,10 @@ class MarathonWinnerSelection extends StatelessWidget {
title: Text( title: Text(
LocaleKeys.fingersCrossed.tr(), LocaleKeys.fingersCrossed.tr(),
style: const TextStyle( style: const TextStyle(
height: 23 / 24, height: 27 / 27,
color: MyColors.greenColor, color: MyColors.greenColor,
fontSize: 27, fontSize: 27,
letterSpacing: -1, letterSpacing: -1.08,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
), ),
@ -78,9 +78,9 @@ class MarathonWinnerSelection extends StatelessWidget {
LocaleKeys.winnerSelectedRandomly.tr(), LocaleKeys.winnerSelectedRandomly.tr(),
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: const TextStyle( style: const TextStyle(
color: MyColors.grey77Color, color: MyColors.darkTextColor,
fontSize: 16, fontSize: 18,
letterSpacing: -0.64, letterSpacing: -0.72,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
)).paddingOnly(left: 21, right: 21, top: 20, bottom: 20), )).paddingOnly(left: 21, right: 21, top: 20, bottom: 20),
@ -124,22 +124,22 @@ class _QualifiersContainerState extends State<QualifiersContainer> {
return Container( return Container(
width: double.infinity, width: double.infinity,
decoration: MyDecorations.shadowDecoration, decoration: MyDecorations.shadowDecoration,
padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 20), padding: const EdgeInsets.only(top: 14,left: 18,right: 14,bottom: 18),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
LocaleKeys.winnerSelection.tr().toText18(isBold: true, color: MyColors.grey3AColor), LocaleKeys.winnerSelection.tr().toText21(color: MyColors.grey3AColor),
"00:${widget.provider.start < 10 ? "0${widget.provider.start}" : widget.provider.start}".toText18(isBold: true, color: MyColors.redColor), "00:${widget.provider.start < 10 ? "0${widget.provider.start}" : widget.provider.start}".toText18(color: MyColors.redColor),
], ],
), ),
10.height, 10.height,
Row( Row(
children: [ children: [
"18 ".toText32(color: MyColors.greenColor), "18".toText30(color: MyColors.greenColor, isBold: true),2.width,
LocaleKeys.qualifiers.tr().toText20(color: MyColors.greenColor), LocaleKeys.qualifiers.tr().toText16(color: MyColors.greenColor),
], ],
), ),
], ],

@ -60,6 +60,7 @@ class BuildCountdownTimer extends StatelessWidget {
children: <Widget>[ children: <Widget>[
Column( Column(
children: <Widget>[ children: <Widget>[
// todo @faiz: Make a separate method and pass string , so we can minimize code replication
AutoSizeText( AutoSizeText(
"00", "00",
maxFontSize: 24, maxFontSize: 24,
@ -155,6 +156,7 @@ class BuildCountdownTimer extends StatelessWidget {
children: <Widget>[ children: <Widget>[
Column( Column(
children: <Widget>[ children: <Widget>[
// todo @faiz: Make a separate method and pass value and string , so we can minimize code replication
time.days == null time.days == null
? AutoSizeText( ? AutoSizeText(
"00", "00",

@ -1,3 +1,5 @@
import 'dart:math' as math;
import 'package:auto_size_text/auto_size_text.dart'; import 'package:auto_size_text/auto_size_text.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -13,7 +15,6 @@ import 'package:mohem_flutter_app/ui/marathon/marathon_intro_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/countdown_timer.dart'; import 'package:mohem_flutter_app/ui/marathon/widgets/countdown_timer.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'dart:math' as math;
class MarathonBanner extends StatelessWidget { class MarathonBanner extends StatelessWidget {
const MarathonBanner({Key? key}) : super(key: key); const MarathonBanner({Key? key}) : super(key: key);

@ -84,57 +84,39 @@ class CardContent extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Column(
decoration: BoxDecoration( mainAxisSize: MainAxisSize.min,
borderRadius: BorderRadius.circular(10), children: <Widget>[
color: CupertinoColors.white, Container(
boxShadow: <BoxShadow>[ height: 78,
BoxShadow( width: double.infinity,
color: CupertinoColors.systemGrey.withOpacity(0.2), decoration: const BoxDecoration(
spreadRadius: 3, gradient: LinearGradient(
blurRadius: 7, transform: GradientRotation(.83),
offset: const Offset(0, 3), begin: Alignment.topRight,
) end: Alignment.bottomLeft,
], colors: <Color>[
), MyColors.gradiantEndColor,
alignment: Alignment.center, MyColors.gradiantStartColor,
child: Column( ],
children: <Widget>[
Container(
height: 78,
width: double.infinity,
decoration: const BoxDecoration(
gradient: LinearGradient(
transform: GradientRotation(.83),
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: <Color>[
MyColors.gradiantEndColor,
MyColors.gradiantStartColor,
],
),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
),
), ),
child: const Center( borderRadius: BorderRadius.only(
child: Padding( topLeft: Radius.circular(10),
padding: EdgeInsets.symmetric(horizontal: 13), topRight: Radius.circular(10),
child: Text(
"What is the capital of Saudi Arabia?",
style: TextStyle(
color: MyColors.white,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
),
), ),
), ),
AnswerContent(question: question, provider: provider), padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 17),
], child: Text(
), "What is the capital of Saudi Arabia?",
style: TextStyle(
color: MyColors.white,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
),
AnswerContent(question: question, provider: provider),
],
); );
} }
} }
@ -174,7 +156,7 @@ class _AnswerContentState extends State<AnswerContent> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
padding: const EdgeInsets.all(13), padding: const EdgeInsets.symmetric(vertical: 31, horizontal: 13),
decoration: const BoxDecoration( decoration: const BoxDecoration(
color: MyColors.kWhiteColor, color: MyColors.kWhiteColor,
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
@ -187,6 +169,7 @@ class _AnswerContentState extends State<AnswerContent> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
// todo @faiz: Make a separate method and pass value and string , so we can minimize code duplication
InkWell( InkWell(
onTap: () { onTap: () {
if (widget.provider.currentQuestionNumber == 9) { if (widget.provider.currentQuestionNumber == 9) {

@ -147,15 +147,15 @@ class ActionsFragment extends StatelessWidget {
if (actionHistoryList[index].aCTIONCODE == "SUBMIT") { if (actionHistoryList[index].aCTIONCODE == "SUBMIT") {
return ""; return "";
} else if (actionHistoryList[index].aCTIONCODE == "PENDING") { } else if (actionHistoryList[index].aCTIONCODE == "PENDING") {
if (actionHistoryList[++index].nOTIFICATIONDATE!.isEmpty) { if (actionHistoryList[index + 1].nOTIFICATIONDATE!.isEmpty) {
return ""; return "";
} }
DateTime dateTimeFrom = DateUtil.convertSimpleStringDateToDate(actionHistoryList[++index].nOTIFICATIONDATE!); DateTime dateTimeFrom = DateUtil.convertSimpleStringDateToDate(actionHistoryList[index + 1].nOTIFICATIONDATE!);
Duration duration = DateTime.now().difference(dateTimeFrom); Duration duration = DateTime.now().difference(dateTimeFrom);
return "Action duration: " + DateUtil.formatDuration(duration); return "Action duration: " + DateUtil.formatDuration(duration);
} else { } else {
DateTime dateTimeTo = DateUtil.convertSimpleStringDateToDate(actionHistoryList[index].nOTIFICATIONDATE!); DateTime dateTimeTo = DateUtil.convertSimpleStringDateToDate(actionHistoryList[index].nOTIFICATIONDATE!);
DateTime dateTimeFrom = DateUtil.convertSimpleStringDateToDate(actionHistoryList[++index].nOTIFICATIONDATE!); DateTime dateTimeFrom = DateUtil.convertSimpleStringDateToDate(actionHistoryList[index + 1].nOTIFICATIONDATE!);
Duration duration = dateTimeTo.difference(dateTimeFrom); Duration duration = dateTimeTo.difference(dateTimeFrom);
return "Action duration: " + DateUtil.formatDuration(duration); return "Action duration: " + DateUtil.formatDuration(duration);
} }

@ -20,7 +20,7 @@ class ImageOptions {
if (Platform.isAndroid) { if (Platform.isAndroid) {
cameraImageAndroid(image); cameraImageAndroid(image);
} else { } else {
File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 20))?.path ?? ""); File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 10))?.path ?? "");
String fileName = _image.path; String fileName = _image.path;
var bytes = File(fileName).readAsBytesSync(); var bytes = File(fileName).readAsBytesSync();
String base64Encode = base64.encode(bytes); String base64Encode = base64.encode(bytes);
@ -33,7 +33,7 @@ class ImageOptions {
if (Platform.isAndroid) { if (Platform.isAndroid) {
galleryImageAndroid(image); galleryImageAndroid(image);
} else { } else {
File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 20))?.path ?? ""); File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 10))?.path ?? "");
String fileName = _image.path; String fileName = _image.path;
var bytes = File(fileName).readAsBytesSync(); var bytes = File(fileName).readAsBytesSync();
String base64Encode = base64.encode(bytes); String base64Encode = base64.encode(bytes);
@ -74,7 +74,7 @@ class ImageOptions {
if (Platform.isAndroid) { if (Platform.isAndroid) {
galleryImageAndroid(image); galleryImageAndroid(image);
} else { } else {
File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 20))?.path ?? ""); File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 10))?.path ?? "");
String fileName = _image.path; String fileName = _image.path;
var bytes = File(fileName).readAsBytesSync(); var bytes = File(fileName).readAsBytesSync();
String base64Encode = base64.encode(bytes); String base64Encode = base64.encode(bytes);
@ -91,7 +91,7 @@ class ImageOptions {
if (Platform.isAndroid) { if (Platform.isAndroid) {
cameraImageAndroid(image); cameraImageAndroid(image);
} else { } else {
File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 20))?.path ?? ""); File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 10))?.path ?? "");
String fileName = _image.path; String fileName = _image.path;
var bytes = File(fileName).readAsBytesSync(); var bytes = File(fileName).readAsBytesSync();
String base64Encode = base64.encode(bytes); String base64Encode = base64.encode(bytes);
@ -114,7 +114,7 @@ class ImageOptions {
} }
void galleryImageAndroid(Function(String, File) image) async { void galleryImageAndroid(Function(String, File) image) async {
File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 20))?.path ?? ""); File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.gallery, imageQuality: 10))?.path ?? "");
String fileName = _image.path; String fileName = _image.path;
var bytes = File(fileName).readAsBytesSync(); var bytes = File(fileName).readAsBytesSync();
String base64Encode = base64.encode(bytes); String base64Encode = base64.encode(bytes);
@ -124,7 +124,7 @@ void galleryImageAndroid(Function(String, File) image) async {
} }
void cameraImageAndroid(Function(String, File) image) async { void cameraImageAndroid(Function(String, File) image) async {
File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 20))?.path ?? ""); File _image = File((await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 10))?.path ?? "");
String fileName = _image.path; String fileName = _image.path;
var bytes = File(fileName).readAsBytesSync(); var bytes = File(fileName).readAsBytesSync();
String base64Encode = base64.encode(bytes); String base64Encode = base64.encode(bytes);

@ -14,6 +14,7 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/dialogs/success_dialog.dart'; import 'package:mohem_flutter_app/ui/dialogs/success_dialog.dart';
import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart';
import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart'; import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart';
import 'package:mohem_flutter_app/widgets/location/Location.dart'; import 'package:mohem_flutter_app/widgets/location/Location.dart';
import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart'; import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart';
@ -144,14 +145,28 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId, isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng); GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId, isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
bool status = await model.fetchAttendanceTracking(context); if(g?.messageStatus != 1) {
Utils.hideLoading(context); Utils.hideLoading(context);
showMDialog( showDialog(
context, context: context,
backgroundColor: Colors.transparent, builder: (cxt) => ConfirmDialog(
isDismissable: false, message: g?.errorEndUserMessage ?? "Unexpected error occurred",
child: SuccessDialog(widget.isFromDashboard), onTap: () {
); Navigator.pop(context);
},
),
);
} else {
bool status = await model.fetchAttendanceTracking(context);
Utils.hideLoading(context);
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: false,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) { } catch (ex) {
print(ex); print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
@ -166,14 +181,27 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId ?? "", isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng); GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 2, nfcValue: nfcId ?? "", isGpsRequired: isNfcLocationEnabled, lat: lat, long: lng);
bool status = await model.fetchAttendanceTracking(context); if(g?.messageStatus != 1) {
Utils.hideLoading(context); Utils.hideLoading(context);
showMDialog( showDialog(
context, context: context,
backgroundColor: Colors.transparent, builder: (cxt) => ConfirmDialog(
isDismissable: false, message: g?.errorEndUserMessage ?? "Unexpected error occurred",
child: SuccessDialog(widget.isFromDashboard), onTap: () {
); Navigator.pop(context);
},
),
);
} else {
bool status = await model.fetchAttendanceTracking(context);
Utils.hideLoading(context);
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: false,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) { } catch (ex) {
print(ex); print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);

@ -79,14 +79,10 @@ dependencies:
pull_to_refresh: ^2.0.0 pull_to_refresh: ^2.0.0
# lottie json animations # lottie json animations
lottie: any lottie: any
# Steps Progress
steps_indicator: ^1.3.0
# Marathon Card Swipe # Marathon Card Swipe
appinio_swiper: ^1.1.1 appinio_swiper: ^1.1.1
expandable: ^5.0.1 expandable: ^5.0.1
#Chat #Chat
signalr_netcore: ^1.3.3 signalr_netcore: ^1.3.3
logging: ^1.0.1 logging: ^1.0.1

Loading…
Cancel
Save