diff --git a/ios/.gitignore b/ios/.gitignore
index 151026b..d032e39 100644
--- a/ios/.gitignore
+++ b/ios/.gitignore
@@ -31,3 +31,8 @@ Runner/GeneratedPluginRegistrant.*
!default.mode2v3
!default.pbxuser
!default.perspectivev3
+
+ios/Podfile
+ios/Runner/Runner.entitlements
+
+
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 9daee21..43841a1 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -383,7 +383,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
- DEVELOPMENT_TEAM = 3A359E86ZF;
+ DEVELOPMENT_TEAM = 99Z3UD3LJM;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Mohemm;
@@ -520,7 +520,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
- DEVELOPMENT_TEAM = 3A359E86ZF;
+ DEVELOPMENT_TEAM = 99Z3UD3LJM;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Mohemm;
@@ -549,7 +549,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
- DEVELOPMENT_TEAM = 3A359E86ZF;
+ DEVELOPMENT_TEAM = 99Z3UD3LJM;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Mohemm;
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
new file mode 100644
index 0000000..304aa00
--- /dev/null
+++ b/ios/Runner/Runner.entitlements
@@ -0,0 +1,30 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.icloud-container-identifiers
+
+ iCloud.com.cloudsolutions.mohemm
+
+ com.apple.developer.icloud-services
+
+ CloudDocuments
+
+ com.apple.developer.networking.HotspotConfiguration
+
+ com.apple.developer.networking.networkextension
+
+ com.apple.developer.networking.wifi-info
+
+ com.apple.developer.nfc.readersession.formats
+
+ TAG
+
+ com.apple.developer.ubiquity-container-identifiers
+
+ iCloud.com.cloudsolutions.mohemm
+
+
+
diff --git a/lib/api/marathon/marathon_api_client.dart b/lib/api/marathon/marathon_api_client.dart
new file mode 100644
index 0000000..1b8a435
--- /dev/null
+++ b/lib/api/marathon/marathon_api_client.dart
@@ -0,0 +1,71 @@
+import 'dart:convert';
+
+import 'package:http/http.dart';
+import 'package:mohem_flutter_app/api/api_client.dart';
+import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/models/marathon/marathon_generic_model.dart';
+import 'package:mohem_flutter_app/models/marathon/marathon_model.dart';
+
+class MarathonApiClient {
+ Future getMarathonToken() async {
+ String employeeUserName = AppState().getUserName ?? "";
+ String employeeSession = AppState().postParamsObject?.pSessionId.toString() ?? "";
+
+ Map jsonObject = {"userName": employeeUserName, "password": employeeSession};
+ Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonParticipantLoginUrl, jsonObject);
+
+ var json = jsonDecode(response.body);
+
+ MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
+
+ if (marathonModel.statusCode == 200) {
+ if (marathonModel.data != null && marathonModel.isSuccessful == true) {
+ print("bearerToken: ${marathonModel.data["token"]}");
+ AppState().setMarathonToken = marathonModel.data["token"] ?? "";
+ return marathonModel.data["token"] ?? "";
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ }
+
+ Future getProjectId() async {
+ Response response = await ApiClient().postJsonForResponse(ApiConsts.marathonProjectGetUrl, {}, token: AppState().getMarathonToken ?? await getMarathonToken());
+
+ var json = jsonDecode(response.body);
+ MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json);
+
+ if (marathonModel.statusCode == 200) {
+ if (marathonModel.data != null && marathonModel.isSuccessful == true) {
+ print("projectID: ${marathonModel.data[0]["id"]}");
+ AppState().setMarathonProjectId = marathonModel.data[0]["id"] ?? "";
+ return marathonModel.data[0]["id"] ?? "";
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ } else {
+ //TODO : DO ERROR HANDLING HERE
+ return "";
+ }
+ }
+
+ Future getMarathonDetails() async {
+ String payrollString = AppState().postParamsObject?.payrollCodeStr.toString() ?? "CS";
+
+ Response response = await ApiClient().getJsonForResponse(ApiConsts.marathonUpcomingUrl + payrollString, token: AppState().getMarathonToken ?? await getMarathonToken());
+
+ var json = jsonDecode(response.body);
+
+ MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json);
+
+ MarathonDetailModel marathonDetailModel = MarathonDetailModel.fromJson(marathonGenericModel.data);
+
+ return marathonDetailModel;
+ }
+}
diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart
index 44de36f..d0a8699 100644
--- a/lib/app_state/app_state.dart
+++ b/lib/app_state/app_state.dart
@@ -51,6 +51,18 @@ class AppState {
String? get getMohemmWifiPassword => _mohemmWifiPassword;
+ String? _marathonToken ;
+
+ set setMarathonToken(String token) => _marathonToken = token;
+
+ String? get getMarathonToken => _marathonToken;
+
+ String? _projectID ;
+
+ set setMarathonProjectId(String token) => _projectID = token;
+
+ String? get getMarathonProjectId => _projectID;
+
final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.0, mobileType: Platform.isAndroid ? "android" : "ios");
void setPostParamsInitConfig() {
diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart
index e82c30a..bcf5add 100644
--- a/lib/classes/consts.dart
+++ b/lib/classes/consts.dart
@@ -16,9 +16,17 @@ class ApiConsts {
static String chatSearchMember = "user/getUserWithStatusAndFavAsync/";
static String chatRecentUrl = "UserChatHistory/getchathistorybyuserid"; //For a Mem
static String chatSingleUserHistoryUrl = "UserChatHistory/GetUserChatHistory";
+
// 42062 is CurrentUserID and 36745 is targetUserID and 0 is For Pagination
// static String chatSearchMember = "https://apiderichat.hmg.com/api/user/getUserWithStatusAndFavAsync/aamir.muhammad/36239";
+//Brain Marathon Constants
+
+ static String marathonBaseUrl = "https://18.188.181.12/service/";
+ static String marathonParticipantLoginUrl = marathonBaseUrl + "api/auth/participantlogin";
+ static String marathonProjectGetUrl = marathonBaseUrl + "api/Project/Project_Get";
+ static String marathonUpcomingUrl = marathonBaseUrl + "api/marathon/upcoming/";
+ static String marathonHubConnectionUrl = "MarathonBroadCast";
}
class SharedPrefsConsts {
diff --git a/lib/classes/date_uitl.dart b/lib/classes/date_uitl.dart
index 73945f8..44b85c3 100644
--- a/lib/classes/date_uitl.dart
+++ b/lib/classes/date_uitl.dart
@@ -3,6 +3,26 @@ import 'package:intl/intl.dart';
class DateUtil {
/// convert String To Date function
/// [date] String we want to convert
+ ///
+ ///
+
+
+ static DateTime convertStringToDateMarathon(String date) {
+ // /Date(1585774800000+0300)/
+ if (date != null) {
+ const start = "/Date(";
+ const end = "+0300)";
+ int startIndex = date.indexOf(start);
+ int endIndex = date.indexOf(end, startIndex + start.length);
+ return DateTime.fromMillisecondsSinceEpoch(
+ int.parse(
+ date.substring(startIndex + start.length, endIndex),
+ ),
+ );
+ } else
+ return DateTime.now();
+ }
+
static DateTime convertStringToDate(String date) {
// /Date(1585774800000+0300)/
if (date != null) {
@@ -55,8 +75,9 @@ class DateUtil {
}
return DateTime.now();
- } else
+ } else {
return DateTime.now();
+ }
}
static String convertDateToString(DateTime date) {
@@ -94,7 +115,7 @@ class DateUtil {
}
static String convertDateMSToJsonDate(utc) {
- var dt = new DateTime.fromMicrosecondsSinceEpoch(utc);
+ var dt = DateTime.fromMicrosecondsSinceEpoch(utc);
return "/Date(" + (dt.millisecondsSinceEpoch * 1000).toString() + '+0300' + ")/";
}
@@ -392,7 +413,7 @@ class DateUtil {
/// get data formatted like 10:30 according to lang
static String formatDateToTimeLang(DateTime date, bool isArabic) {
- return DateFormat('HH:mm', isArabic ? "ar_SA" : "en_US").format(date);
+ return DateFormat('HH:mm a', isArabic ? "ar_SA" : "en_US").format(date);
}
/// get data formatted like 26/4/2020 10:30
@@ -431,30 +452,30 @@ class DateUtil {
return "/Date(" + DateFormat('mm-dd-yyy').parse(isoDate).millisecondsSinceEpoch.toString() + ")/";
}
- // static String getDay(DayOfWeek dayOfWeek) {
- // switch (dayOfWeek) {
- // case DayOfWeek.Monday:
- // return "Monday";
- // break;
- // case DayOfWeek.Tuesday:
- // return "Tuesday";
- // break;
- // case DayOfWeek.Wednesday:
- // return "Wednesday";
- // break;
- // case DayOfWeek.Thursday:
- // return "Thursday";
- // break;
- // case DayOfWeek.Friday:
- // return "Friday";
- // break;
- // case DayOfWeek.Saturday:
- // return "Saturday";
- // break;
- // case DayOfWeek.Sunday:
- // return "Sunday";
- // break;
- // }
- // return "";
- // }
+// static String getDay(DayOfWeek dayOfWeek) {
+// switch (dayOfWeek) {
+// case DayOfWeek.Monday:
+// return "Monday";
+// break;
+// case DayOfWeek.Tuesday:
+// return "Tuesday";
+// break;
+// case DayOfWeek.Wednesday:
+// return "Wednesday";
+// break;
+// case DayOfWeek.Thursday:
+// return "Thursday";
+// break;
+// case DayOfWeek.Friday:
+// return "Friday";
+// break;
+// case DayOfWeek.Saturday:
+// return "Saturday";
+// break;
+// case DayOfWeek.Sunday:
+// return "Sunday";
+// break;
+// }
+// return "";
+// }
}
diff --git a/lib/models/marathon/marathon_generic_model.dart b/lib/models/marathon/marathon_generic_model.dart
new file mode 100644
index 0000000..d0a0d52
--- /dev/null
+++ b/lib/models/marathon/marathon_generic_model.dart
@@ -0,0 +1,31 @@
+class MarathonGenericModel {
+ MarathonGenericModel({
+ this.data,
+ this.isSuccessful,
+ this.message,
+ this.statusCode,
+ this.errors,
+ });
+
+ dynamic data;
+ bool? isSuccessful;
+ String? message;
+ int? statusCode;
+ dynamic errors;
+
+ factory MarathonGenericModel.fromJson(Map json) => MarathonGenericModel(
+ data: json["data"],
+ isSuccessful: json["isSuccessful"],
+ message: json["message"],
+ statusCode: json["statusCode"],
+ errors: json["errors"],
+ );
+
+ Map toJson() => {
+ "data": data,
+ "isSuccessful": isSuccessful,
+ "message": message,
+ "statusCode": statusCode,
+ "errors": errors,
+ };
+}
diff --git a/lib/models/marathon/marathon_model.dart b/lib/models/marathon/marathon_model.dart
new file mode 100644
index 0000000..e2f5e4d
--- /dev/null
+++ b/lib/models/marathon/marathon_model.dart
@@ -0,0 +1,83 @@
+class MarathonDetailModel {
+ String? id;
+ String? titleEn;
+ String? titleAr;
+ String? descEn;
+ String? descAr;
+ int? winDeciderTime;
+ int? winnersCount;
+ int? questGapTime;
+ String? startTime;
+ String? endTime;
+ int? marathoneStatusId;
+ String? scheduleTime;
+ int? selectedLanguage;
+ List? projects;
+ List? sponsors;
+ List? questions;
+
+ MarathonDetailModel(
+ {id,
+ titleEn,
+ titleAr,
+ descEn,
+ descAr,
+ winDeciderTime,
+ winnersCount,
+ questGapTime,
+ startTime,
+ endTime,
+ marathoneStatusId,
+ scheduleTime,
+ selectedLanguage,
+ projects,
+ sponsors,
+ questions});
+
+ MarathonDetailModel.fromJson(Map json) {
+ id = json['id'];
+ titleEn = json['titleEn'];
+ titleAr = json['titleAr'];
+ descEn = json['descEn'];
+ descAr = json['descAr'];
+ winDeciderTime = json['winDeciderTime'];
+ winnersCount = json['winnersCount'];
+ questGapTime = json['questGapTime'];
+ startTime = json['startTime'];
+ endTime = json['endTime'];
+ marathoneStatusId = json['marathoneStatusId'];
+ scheduleTime = json['scheduleTime'];
+ selectedLanguage = json['selectedLanguage'];
+ projects = json['projects'];
+ sponsors = json['sponsors'];
+ if (json['questions'] != null) {
+ questions = [];
+ json['questions'].forEach((v) {
+ // questions!.add( Null.fromJson(v));
+ });
+ }
+ }
+
+ Map toJson() {
+ Map data = new Map();
+ data['id'] = id;
+ data['titleEn'] = titleEn;
+ data['titleAr'] = titleAr;
+ data['descEn'] = descEn;
+ data['descAr'] = descAr;
+ data['winDeciderTime'] = winDeciderTime;
+ data['winnersCount'] = winnersCount;
+ data['questGapTime'] = questGapTime;
+ data['startTime'] = startTime;
+ data['endTime'] = endTime;
+ data['marathoneStatusId'] = marathoneStatusId;
+ data['scheduleTime'] = scheduleTime;
+ data['selectedLanguage'] = selectedLanguage;
+ data['projects'] = projects;
+ data['sponsors'] = sponsors;
+ if (questions != null) {
+ data['questions'] = questions!.map((v) => v.toJson()).toList();
+ }
+ return data;
+ }
+}
diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart
index d342072..c0e82f4 100644
--- a/lib/ui/landing/dashboard_screen.dart
+++ b/lib/ui/landing/dashboard_screen.dart
@@ -18,6 +18,7 @@ import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/landing/widget/app_drawer.dart';
import 'package:mohem_flutter_app/ui/landing/widget/menus_widget.dart';
import 'package:mohem_flutter_app/ui/landing/widget/services_widget.dart';
+import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/marathon_banner.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/mark_attendance_widget.dart';
@@ -37,6 +38,7 @@ class DashboardScreen extends StatefulWidget {
class _DashboardScreenState extends State {
late DashboardProviderModel data;
+ late MarathonProvider marathonProvider;
final GlobalKey _scaffoldState = GlobalKey();
final RefreshController _refreshController = RefreshController(initialRefresh: false);
@@ -48,6 +50,7 @@ class _DashboardScreenState extends State {
super.initState();
scheduleMicrotask(() {
data = Provider.of(context, listen: false);
+ marathonProvider = Provider.of(context, listen: false);
_onRefresh();
});
}
@@ -71,6 +74,7 @@ class _DashboardScreenState extends State {
data.fetchLeaveTicketBalance(context, DateTime.now());
data.fetchMenuEntries();
data.getCategoryOffersListAPI(context);
+ marathonProvider.getMarathonDetailsFromApi();
_refreshController.refreshCompleted();
}
@@ -268,7 +272,7 @@ class _DashboardScreenState extends State {
).onPress(() {
showMyBottomSheet(
context,
- callBackFunc: (){},
+ callBackFunc: () {},
child: MarkAttendanceWidget(model, isFromDashboard: true),
);
}),
@@ -295,8 +299,8 @@ class _DashboardScreenState extends State {
],
),
],
- ).paddingOnly(left: 21, right: 21, top: 7),
- MarathonBanner().paddingAll(20),
+ ).paddingOnly(left: 21, right: 21, top : 7),
+ context.watch().isLoading ? MarathonBannerShimmer().paddingAll(20) : MarathonBanner().paddingAll(20),
ServicesWidget(),
// 8.height,
Container(
diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart
index 0c4e268..c62a7a1 100644
--- a/lib/ui/login/login_screen.dart
+++ b/lib/ui/login/login_screen.dart
@@ -142,11 +142,11 @@ class _LoginScreenState extends State {
isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool;
if (!kReleaseMode) {
// username.text = "15444"; // Maha User
- // username.text = "15153"; // Tamer User
- // password.text = "Abcd@12345";
-
- username.text = "210038"; // Hashim User
- password.text = "123";
+ username.text = "15153"; // Tamer User
+ password.text = "Abcd@12345";
+ //
+ // username.text = "210038"; // Hashim User
+ // password.text = "123";
}
if (isAppOpenBySystem!) checkFirebaseToken();
}
diff --git a/lib/ui/marathon/marathon_intro_screen.dart b/lib/ui/marathon/marathon_intro_screen.dart
index f836229..0f655ab 100644
--- a/lib/ui/marathon/marathon_intro_screen.dart
+++ b/lib/ui/marathon/marathon_intro_screen.dart
@@ -1,7 +1,9 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
+import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
+import 'package:mohem_flutter_app/classes/date_uitl.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';
@@ -15,8 +17,6 @@ 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';
-final int dummyEndTime = DateTime.now().millisecondsSinceEpoch + 1000 * 30;
-
class MarathonIntroScreen extends StatelessWidget {
const MarathonIntroScreen({Key? key}) : super(key: key);
@@ -33,7 +33,7 @@ class MarathonIntroScreen extends StatelessWidget {
MarathonDetailsCard(provider: provider).paddingAll(15),
MarathonTimerCard(
provider: provider,
- timeToMarathon: dummyEndTime,
+ timeToMarathon: DateTime.parse(provider.marathonDetailModel.startTime!).millisecondsSinceEpoch,
).paddingOnly(left: 15, right: 15, bottom: 15),
const SizedBox(
height: 100,
@@ -70,11 +70,11 @@ class MarathonDetailsCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.contestTopicAbout.tr().toText16(color: MyColors.grey77Color),
- "Saudi Arabia".toText20(color: MyColors.textMixColor, isBold: true),
+ "${AppState().isArabic(context) ? provider.marathonDetailModel.titleAr : provider.marathonDetailModel.titleEn}".toText20(color: MyColors.textMixColor, isBold: true),
Row(
children: [
Flexible(
- child: "Nam suscipit turpis in pharetra euismsdef. Duis rutrum at nulla id aliquam".toText14(color: MyColors.grey77Color),
+ child: "${AppState().isArabic(context) ? provider.marathonDetailModel.descAr : provider.marathonDetailModel.descEn}".toText14(color: MyColors.grey77Color),
)
],
),
@@ -123,6 +123,7 @@ class MarathonTimerCard extends StatelessWidget {
required this.timeToMarathon,
}) : super(key: key);
+
@override
Widget build(BuildContext context) {
return Container(
@@ -133,14 +134,14 @@ class MarathonTimerCard extends StatelessWidget {
children: [
Row(
children: [
- LocaleKeys.gameDate.tr().toText16(color: MyColors.grey77Color),
- " 10 Oct, 2022".toText16(color: MyColors.darkTextColor, isBold: true),
+ "${LocaleKeys.gameDate.tr()} ".toText16(color: MyColors.grey77Color),
+ DateUtil.getMonthDayYearDateFormatted(DateTime.parse(provider.marathonDetailModel.startTime!)).toText16(color: MyColors.darkTextColor, isBold: true),
],
),
Row(
children: [
- LocaleKeys.gameTime.tr().toText16(color: MyColors.grey77Color),
- " 3:00pm".toText16(color: MyColors.darkTextColor, isBold: true),
+ "${LocaleKeys.gameTime.tr()} ".toText16(color: MyColors.grey77Color),
+ DateUtil.formatDateToTimeLang(DateTime.parse(provider.marathonDetailModel.startTime!), AppState().isArabic(context)).toText16(color: MyColors.darkTextColor, isBold: true),
],
),
Lottie.asset(
diff --git a/lib/ui/marathon/marathon_provider.dart b/lib/ui/marathon/marathon_provider.dart
index 5a03b74..25642ee 100644
--- a/lib/ui/marathon/marathon_provider.dart
+++ b/lib/ui/marathon/marathon_provider.dart
@@ -3,10 +3,23 @@ import 'dart:async';
import 'package:appinio_swiper/appinio_swiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
+import 'package:mohem_flutter_app/api/marathon/marathon_api_client.dart';
import 'package:mohem_flutter_app/config/routes.dart';
+import 'package:mohem_flutter_app/models/marathon/marathon_model.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
class MarathonProvider extends ChangeNotifier {
+ bool _isLoading = false;
+
+ bool get isLoading => _isLoading;
+
+ set isLoading(bool value) {
+ _isLoading = value;
+ notifyListeners();
+ }
+
+ MarathonDetailModel marathonDetailModel = MarathonDetailModel();
+
final AppinioSwiperController swiperController = AppinioSwiperController();
bool _itsMarathonTime = false;
@@ -98,4 +111,21 @@ class MarathonProvider extends ChangeNotifier {
timerU.cancel();
notifyListeners();
}
+
+ Future getMarathonDetailsFromApi() async {
+ isLoading = true;
+
+ await MarathonApiClient().getMarathonToken().whenComplete(() async {
+ print("loading before : $isLoading");
+
+ marathonDetailModel = await MarathonApiClient().getMarathonDetails();
+ isLoading = false;
+ print("loading after: $isLoading");
+
+ notifyListeners();
+
+ });
+
+
+ }
}
diff --git a/lib/ui/marathon/widgets/countdown_timer.dart b/lib/ui/marathon/widgets/countdown_timer.dart
index 6ab8dba..0a2936e 100644
--- a/lib/ui/marathon/widgets/countdown_timer.dart
+++ b/lib/ui/marathon/widgets/countdown_timer.dart
@@ -29,7 +29,7 @@ class BuildCountdownTimer extends StatelessWidget {
);
final TextStyle styleDigitHome = const TextStyle(
- height: 23 / 27,
+ height: 22 / 27,
color: MyColors.white,
fontStyle: FontStyle.italic,
letterSpacing: -1.44,
diff --git a/lib/ui/marathon/widgets/marathon_banner.dart b/lib/ui/marathon/widgets/marathon_banner.dart
index 5da5ed2..ee1c087 100644
--- a/lib/ui/marathon/widgets/marathon_banner.dart
+++ b/lib/ui/marathon/widgets/marathon_banner.dart
@@ -1,3 +1,5 @@
+import 'dart:math' as math;
+
import 'package:auto_size_text/auto_size_text.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@@ -9,11 +11,9 @@ import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_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/marathon/marathon_intro_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/countdown_timer.dart';
import 'package:provider/provider.dart';
-import 'dart:math' as math;
class MarathonBanner extends StatelessWidget {
const MarathonBanner({Key? key}) : super(key: key);
@@ -88,7 +88,7 @@ class MarathonBanner extends StatelessWidget {
),
),
AutoSizeText(
- "Saudi Arabia",
+ AppState().isArabic(context) ? provider.marathonDetailModel.titleAr ?? "" : provider.marathonDetailModel.titleEn ?? "",
style: TextStyle(
fontStyle: FontStyle.italic,
fontSize: 19,
@@ -99,7 +99,7 @@ class MarathonBanner extends StatelessWidget {
),
3.height,
BuildCountdownTimer(
- timeToMarathon: dummyEndTime,
+ timeToMarathon: DateTime.parse(provider.marathonDetailModel.startTime!).millisecondsSinceEpoch,
provider: provider,
screenFlag: 0,
),
diff --git a/lib/widgets/shimmer/dashboard_shimmer_widget.dart b/lib/widgets/shimmer/dashboard_shimmer_widget.dart
index 369b808..6fe5a03 100644
--- a/lib/widgets/shimmer/dashboard_shimmer_widget.dart
+++ b/lib/widgets/shimmer/dashboard_shimmer_widget.dart
@@ -188,6 +188,53 @@ class ServicesMenuShimmer extends StatelessWidget {
}
}
+
+class MarathonBannerShimmer extends StatelessWidget {
+ const MarathonBannerShimmer({Key? key}) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(15),
+ boxShadow: [
+ BoxShadow(
+ color: const Color(0xff000000).withOpacity(.05),
+ blurRadius: 26,
+ offset: const Offset(0, -3),
+ ),
+ ],
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SvgPicture.asset("assets/images/monthly_attendance.svg").toShimmer(),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ "Attendan".toText11(isBold: false).toShimmer(),
+ 5.height,
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ Expanded(
+ child: LocaleKeys.attendance.tr().toText11(isBold: false).toShimmer(),
+ ),
+ 6.width,
+ SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4).toShimmer()
+ ],
+ ),
+ ],
+ )
+ ],
+ ).paddingOnly(left: 10, right: 10, bottom: 10, top: 12),
+ );
+ }
+}
+
class ChatHomeShimmer extends StatelessWidget {
@override
Widget build(BuildContext context) {