import 'dart:developer'; import 'dart:math' as math; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/decorations_helper.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart'; import 'package:mohem_flutter_app/ui/marathon/widgets/countdown_timer_main_screen.dart'; import 'package:provider/provider.dart'; // It is used to pass a dummy time to test Marathon int dummyTime = DateTime.now().millisecondsSinceEpoch + 8690; class MarathonBanner extends StatelessWidget { const MarathonBanner({Key? key}) : super(key: key); Widget getUnPrivilegedMarathon(BuildContext context) { return Container( decoration: MyDecorations.shadowDecoration, height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11, clipBehavior: Clip.antiAlias, child: Stack( children: [ Transform( alignment: Alignment.center, transform: Matrix4.rotationY( AppState().isArabic(context) ? math.pi : 0, ), child: SvgPicture.asset( "assets/images/marathon_banner_bg.svg", fit: BoxFit.fill, width: double.infinity, ), ), AppState().isArabic(context) ? Positioned( right: -15, top: -10, child: Transform.rotate( angle: 10, child: Container( width: isTablet ? 70 : 65, height: isTablet ? 40 : 32, color: MyColors.darkDigitColor, ), ), ) : Positioned( left: -20, top: -10, child: Transform.rotate( angle: 15, child: Container( width: isTablet ? 70 : 65, height: isTablet ? 40 : 32, color: MyColors.darkDigitColor, ), ), ), SizedBox( width: double.infinity, height: double.infinity, child: Row( children: [ const Expanded( flex: 3, child: SizedBox( width: double.infinity, height: double.infinity, ), ), Expanded( flex: AppState().isArabic(context) ? 4 : 5, child: SizedBox( width: double.infinity, height: double.infinity, child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ AppState().isArabic(context) ? 0.height : 5.height, Text( LocaleKeys.getReadyForContest.tr(), style: TextStyle( fontSize: isTablet ? 20 : 11, fontStyle: FontStyle.italic, fontWeight: FontWeight.w600, color: MyColors.white.withOpacity(0.83), letterSpacing: -0.4, ), ), Text( LocaleKeys.brainMarathon.tr(), style: TextStyle( fontStyle: FontStyle.italic, fontSize: isTablet ? 30 : 19, fontWeight: FontWeight.bold, color: MyColors.white.withOpacity(0.83), height: 32 / 22, ), ), ], ).paddingOnly( left: AppState().isArabic(context) ? 12 : 3, right: AppState().isArabic(context) ? 3 : 12, ) ], ), ), ), ], ), ), AppState().isArabic(context) ? Align( alignment: Alignment.topRight, child: SizedBox( height: isTablet ? 30 : 20, width: isTablet ? 45 : 35, child: Transform.rotate( angle: math.pi / 4.5, child: Text( LocaleKeys.brainMarathon.tr(), textAlign: TextAlign.center, maxLines: 2, style: TextStyle( color: MyColors.white, fontWeight: FontWeight.bold, fontSize: isTablet ? 8 : 6, height: 1.2, ), ), ), ), ).paddingOnly(top: 5) : Align( alignment: Alignment.topLeft, child: SizedBox( height: isTablet ? 30 : 20, width: isTablet ? 45 : 35, child: Transform.rotate( angle: -math.pi / 4.5, child: Text( LocaleKeys.brainMarathon.tr(), textAlign: TextAlign.center, maxLines: 2, style: TextStyle( color: MyColors.kWhiteColor, fontWeight: FontWeight.bold, fontSize: isTablet ? 8 : 6, height: 1.2, ), ), ), ), ).paddingOnly(top: 5), Container( height: double.infinity, width: double.infinity, color: Colors.black.withOpacity(0.6), child: const Icon( Icons.lock_rounded, color: MyColors.lightGreyIconColor, ), ), ], ), ); } Widget getNoUpcomingMarathonWidget(BuildContext context) { return Container( decoration: MyDecorations.shadowDecoration, height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11, clipBehavior: Clip.antiAlias, child: Stack( children: [ Transform( alignment: Alignment.center, transform: Matrix4.rotationY( AppState().isArabic(context) ? math.pi : 0, ), child: SvgPicture.asset( "assets/images/marathon_banner_bg.svg", fit: BoxFit.fill, width: double.infinity, ), ), AppState().isArabic(context) ? Positioned( right: -15, top: -10, child: Transform.rotate( angle: 10, child: Container( width: isTablet ? 70 : 65, height: isTablet ? 40 : 32, color: MyColors.darkDigitColor, ), ), ) : Positioned( left: -20, top: -10, child: Transform.rotate( angle: 15, child: Container( width: isTablet ? 70 : 65, height: isTablet ? 40 : 32, color: MyColors.darkDigitColor, ), ), ), SizedBox( width: double.infinity, height: double.infinity, child: Row( children: [ const Expanded( flex: 3, child: SizedBox( width: double.infinity, height: double.infinity, ), ), Expanded( flex: AppState().isArabic(context) ? 4 : 5, child: SizedBox( width: double.infinity, height: double.infinity, child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ AppState().isArabic(context) ? 0.height : 5.height, Text( LocaleKeys.noUpcoming.tr(), style: TextStyle( fontSize: isTablet ? 20 : 11, fontStyle: FontStyle.italic, fontWeight: FontWeight.w600, color: MyColors.white.withOpacity(0.83), letterSpacing: -0.4, ), ), Text( LocaleKeys.brainMarathon.tr(), style: TextStyle( fontStyle: FontStyle.italic, fontSize: isTablet ? 30 : 19, fontWeight: FontWeight.bold, color: MyColors.white.withOpacity(0.83), height: 32 / 22, ), ), Text( LocaleKeys.youCanPlayDemo.tr(), style: TextStyle( fontSize: isTablet ? 20 : 11, fontStyle: FontStyle.italic, fontWeight: FontWeight.w600, color: MyColors.white.withOpacity(0.83), letterSpacing: -0.4, ), ), ], ).paddingOnly( left: AppState().isArabic(context) ? 12 : 3, right: AppState().isArabic(context) ? 3 : 12, ) ], ), ), ), ], ), ), AppState().isArabic(context) ? Align( alignment: Alignment.topRight, child: SizedBox( height: isTablet ? 30 : 20, width: isTablet ? 45 : 35, child: Transform.rotate( angle: math.pi / 4.5, child: Text( LocaleKeys.brainMarathon.tr(), textAlign: TextAlign.center, maxLines: 2, style: TextStyle( color: MyColors.white, fontWeight: FontWeight.bold, fontSize: isTablet ? 8 : 6, height: 1.2, ), ), ), ), ).paddingOnly(top: 5) : Align( alignment: Alignment.topLeft, child: SizedBox( height: isTablet ? 30 : 20, width: isTablet ? 45 : 35, child: Transform.rotate( angle: -math.pi / 4.5, child: Text( LocaleKeys.brainMarathon.tr(), textAlign: TextAlign.center, maxLines: 2, style: TextStyle( color: MyColors.kWhiteColor, fontWeight: FontWeight.bold, fontSize: isTablet ? 8 : 6, height: 1.2, ), ), ), ), ).paddingOnly(top: 5), ], ), ).onPress(() { Navigator.pushNamed(context, AppRoutes.marathonIntroScreen); }); } @override Widget build(BuildContext context) { MarathonProvider provider = context.read(); // if(provider.isUserWaiting) { // provider.isUserWaiting = false; // provider.getMarathonDetailsFromApi(); // } return !provider.isPrivilegedWithMarathon ? getUnPrivilegedMarathon(context) : provider.isUpComingMarathon ? Container( decoration: MyDecorations.shadowDecoration, height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11, clipBehavior: Clip.antiAlias, child: Stack( children: [ Transform( alignment: Alignment.center, transform: Matrix4.rotationY( AppState().isArabic(context) ? math.pi : 0, ), child: SvgPicture.asset( "assets/images/marathon_banner_bg.svg", fit: BoxFit.fill, width: double.infinity, ), ), AppState().isArabic(context) ? Positioned( right: -15, top: -10, child: Transform.rotate( angle: 10, child: Container( width: isTablet ? 70 : 65, height: isTablet ? 40 : 32, color: MyColors.darkDigitColor, ), ), ) : Positioned( left: -20, top: -10, child: Transform.rotate( angle: 15, child: Container( width: isTablet ? 70 : 65, height: isTablet ? 40 : 32, color: MyColors.darkDigitColor, ), ), ), SizedBox( width: double.infinity, height: double.infinity, child: Row( children: [ const Expanded( flex: 3, child: SizedBox( width: double.infinity, height: double.infinity, ), ), Expanded( flex: AppState().isArabic(context) ? 4 : 5, child: SizedBox( width: double.infinity, height: double.infinity, child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ AppState().isArabic(context) ? 0.height : 5.height, Text( LocaleKeys.getReadyForContest.tr(), style: TextStyle( fontSize: isTablet ? 20 : 11, fontStyle: FontStyle.italic, fontWeight: FontWeight.w600, color: MyColors.white.withOpacity(0.83), letterSpacing: -0.4, ), ), Flexible( child: Text( (AppState().isArabic(context) ? provider.marathonDetailModel.titleAr ?? "" : provider.marathonDetailModel.titleEn ?? "").trimString(isTablet ? 25 : 15), overflow: TextOverflow.ellipsis, style: TextStyle( fontStyle: FontStyle.italic, fontSize: isTablet ? 30 : 19, fontWeight: FontWeight.bold, color: MyColors.white.withOpacity(0.83), height: 32 / 22, ), ), ), isTablet ? 10.height : 3.height, CountdownTimerForMainScreen( timeToMarathon: DateTime.parse(provider.marathonDetailModel.startTime!).millisecondsSinceEpoch, provider: provider, ), ], ).paddingOnly( left: AppState().isArabic(context) ? 12 : 3, right: AppState().isArabic(context) ? 3 : 12, ) ], ), ), ), ], ), ), AppState().isArabic(context) ? Align( alignment: Alignment.topRight, child: SizedBox( height: isTablet ? 30 : 20, width: isTablet ? 45 : 35, child: Transform.rotate( angle: math.pi / 4.5, child: Text( LocaleKeys.brainMarathon.tr(), textAlign: TextAlign.center, maxLines: 2, style: TextStyle( color: MyColors.white, fontWeight: FontWeight.bold, fontSize: isTablet ? 8 : 6, height: 1.2, ), ), ), ), ).paddingOnly(top: 5) : Align( alignment: Alignment.topLeft, child: SizedBox( height: isTablet ? 30 : 20, width: isTablet ? 45 : 35, child: Transform.rotate( angle: -math.pi / 4.5, child: Text( LocaleKeys.brainMarathon.tr(), textAlign: TextAlign.center, maxLines: 2, style: TextStyle( color: MyColors.kWhiteColor, fontWeight: FontWeight.bold, fontSize: isTablet ? 8 : 6, height: 1.2, ), ), ), ), ).paddingOnly(top: 5), !AppState().isArabic(context) ? Positioned( right: 0, bottom: 0, child: RotatedBox( quarterTurns: 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: MyColors.whiteColor), ).paddingAll(isTablet ? 20 : 15), ) : Positioned( bottom: 0, left: 0, child: RotatedBox( quarterTurns: 2, child: SvgPicture.asset("assets/images/arrow_next.svg", color: MyColors.whiteColor), ).paddingAll(isTablet ? 20 : 15), ), ], ).onPress(() async { int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes; if (remainingTimeInMinutes > 5 && provider.marathonDetailModel.sponsors != null && provider.marathonDetailModel.sponsors!.isNotEmpty) { Utils.showLoading(context); try { await provider.initializeVideoPlayer().then((_) { Utils.hideLoading(context); provider.startTimerForSponsorVideo(); Navigator.pushNamed(context, AppRoutes.marathonSponsorVideoScreen); }); } catch (e) { if (kDebugMode) { log("Error in VideoPlayer: ${e.toString()}"); } Utils.hideLoading(context); Navigator.pushNamed(context, AppRoutes.marathonIntroScreen); } } else { Navigator.pushNamed(context, AppRoutes.marathonIntroScreen); } provider.updateLanguageAsPerMarathon(context, provider.isUpComingMarathon ? provider.marathonDetailModel : provider.demoMarathonDetailModel); }), ) : getNoUpcomingMarathonWidget(context); } }