event activity added - cont
							parent
							
								
									a33da491f9
								
							
						
					
					
						commit
						6e3fc55fde
					
				| @ -0,0 +1,77 @@ | ||||
| class EventActivityList { | ||||
|   EventActivityList({ | ||||
|     required this.id, | ||||
|     required this.titleEn, | ||||
|     required this.titleAr, | ||||
|     required this.shortDescEn, | ||||
|     required this.shortDescAr, | ||||
|     required this.longDescEn, | ||||
|     required this.longDescAr, | ||||
|     required this.url, | ||||
|     required this.startOn, | ||||
|     required this.endOn, | ||||
|     required this.channel, | ||||
|     required this.isActive, | ||||
|     required this.createdBy, | ||||
|     required this.createdOn, | ||||
|     required this.modifiedBy, | ||||
|     required this.modifiedOn, | ||||
|   }); | ||||
| 
 | ||||
|   final int? id; | ||||
|   final String? titleEn; | ||||
|   final String? titleAr; | ||||
|   final String? shortDescEn; | ||||
|   final String? shortDescAr; | ||||
|   final String? longDescEn; | ||||
|   final String? longDescAr; | ||||
|   final String? url; | ||||
|   final String? startOn; | ||||
|   final String? endOn; | ||||
|   final int? channel; | ||||
|   final bool? isActive; | ||||
|   final int? createdBy; | ||||
|   final String? createdOn; | ||||
|   final String? modifiedBy; | ||||
|   final String? modifiedOn; | ||||
| 
 | ||||
|   factory EventActivityList.fromJson(Map<String, dynamic> json) { | ||||
|     return EventActivityList( | ||||
|       id: json["ID"], | ||||
|       titleEn: json["TitleEn"], | ||||
|       titleAr: json["TitleAr"], | ||||
|       shortDescEn: json["ShortDescEn"], | ||||
|       shortDescAr: json["ShortDescAr"], | ||||
|       longDescEn: json["LongDescEn"], | ||||
|       longDescAr: json["LongDescAr"], | ||||
|       url: json["URL"], | ||||
|       startOn: json["StartOn"], | ||||
|       endOn: json["EndOn"], | ||||
|       channel: json["Channel"], | ||||
|       isActive: json["IsActive"], | ||||
|       createdBy: json["CreatedBy"], | ||||
|       createdOn: json["CreatedOn"], | ||||
|       modifiedBy: json["ModifiedBy"], | ||||
|       modifiedOn: json["ModifiedOn"], | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   Map<String, dynamic> toJson() => { | ||||
|         "ID": id, | ||||
|         "TitleEn": titleEn, | ||||
|         "TitleAr": titleAr, | ||||
|         "ShortDescEn": shortDescEn, | ||||
|         "ShortDescAr": shortDescAr, | ||||
|         "LongDescEn": longDescEn, | ||||
|         "LongDescAr": longDescAr, | ||||
|         "URL": url, | ||||
|         "StartOn": startOn, | ||||
|         "EndOn": endOn, | ||||
|         "Channel": channel, | ||||
|         "IsActive": isActive, | ||||
|         "CreatedBy": createdBy, | ||||
|         "CreatedOn": createdOn, | ||||
|         "ModifiedBy": modifiedBy, | ||||
|         "ModifiedOn": modifiedOn, | ||||
|       }; | ||||
| } | ||||
| @ -0,0 +1,578 @@ | ||||
| import 'dart:math' as math; | ||||
| 
 | ||||
| import 'package:easy_localization/easy_localization.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/date_uitl.dart'; | ||||
| import 'package:mohem_flutter_app/classes/decorations_helper.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/provider/dashboard_provider_model.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:mohem_flutter_app/widgets/glowy_borders/glowy_borders.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| 
 | ||||
| // It is used to pass a dummy time to test Marathon | ||||
| int dummyTime = DateTime.now().millisecondsSinceEpoch + 8690; | ||||
| 
 | ||||
| class EventActivityBanner extends StatelessWidget { | ||||
|   const EventActivityBanner({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: <Widget>[ | ||||
|   //         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: <Widget>[ | ||||
|   //               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: <Widget>[ | ||||
|   //                       Column( | ||||
|   //                         mainAxisAlignment: MainAxisAlignment.center, | ||||
|   //                         crossAxisAlignment: CrossAxisAlignment.start, | ||||
|   //                         mainAxisSize: MainAxisSize.min, | ||||
|   //                         children: <Widget>[ | ||||
|   //                           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: <Widget>[ | ||||
|           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: <Widget>[ | ||||
|                 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: <Widget>[ | ||||
|                         Column( | ||||
|                           mainAxisAlignment: MainAxisAlignment.center, | ||||
|                           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                           mainAxisSize: MainAxisSize.min, | ||||
|                           children: <Widget>[ | ||||
|                             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) { | ||||
|     DashboardProviderModel dashboardProvider = context.read<DashboardProviderModel>(); | ||||
| 
 | ||||
|     return Container( | ||||
|       // decoration: BoxDecoration( | ||||
|       //   color: MyColors.kWhiteColor, | ||||
|       //   borderRadius: BorderRadius.circular(8), | ||||
|       //   boxShadow: [ | ||||
|       //     BoxShadow( | ||||
|       //       color: const Color(0xff000000).withOpacity(.05), | ||||
|       //       blurRadius: 26, | ||||
|       //       offset: const Offset(0, -3), | ||||
|       //     ), | ||||
|       //   ], | ||||
|       // ), | ||||
|       height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11, | ||||
|       child: AnimatedGradientBorder( | ||||
|         borderSize: 3, | ||||
|         stretchAlongAxis: true, | ||||
|         animationTime: 2, | ||||
|         stretchAxis: Axis.vertical, | ||||
|         gradientColors: const [ | ||||
|           Color(0xff0E5A64), | ||||
|           Color(0xff0E5A64), | ||||
|           Color(0xff0E5A64), | ||||
|           Color(0xff91C481), | ||||
|         ], | ||||
|         borderRadius: BorderRadius.circular(10), | ||||
|         child: Container( | ||||
|             decoration: BoxDecoration( | ||||
|               color: const Color(0xff0E5A64), | ||||
|               borderRadius: BorderRadius.circular(8), | ||||
|             ), | ||||
|             // height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11, | ||||
| 
 | ||||
|             child: Stack( | ||||
|               children: <Widget>[ | ||||
|                 // 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: <Widget>[ | ||||
|                       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: <Widget>[ | ||||
|                               Column( | ||||
|                                 mainAxisAlignment: MainAxisAlignment.center, | ||||
|                                 crossAxisAlignment: CrossAxisAlignment.start, | ||||
|                                 mainAxisSize: MainAxisSize.min, | ||||
|                                 children: <Widget>[ | ||||
|                                   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( | ||||
|                                       displayLocalizedContent( | ||||
|                                         isPhoneLangArabic: AppState().isArabic(context), | ||||
|                                         selectedLanguage: 3, | ||||
|                                         englishContent: dashboardProvider.eventActivity?.titleEn ?? "", | ||||
|                                         arabicContent: dashboardProvider.eventActivity?.titleAr ?? "", | ||||
|                                       ), | ||||
|                                       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: DateUtil.convertStringToDateMarathon(dashboardProvider.eventActivity!.startOn!).millisecondsSinceEpoch, | ||||
|                                     provider: context.read<MarathonProvider>(), | ||||
|                                   ), | ||||
|                                 ], | ||||
|                               ).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(dashboardProvider.eventActivity!.startOn!).difference(DateTime.now()).inMinutes; | ||||
|               // if (remainingTimeInMinutes > 5 && dashboardProvider.eventActivity.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); | ||||
|             })), | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,150 @@ | ||||
| library glowy_borderspertino.dart; | ||||
| 
 | ||||
| import 'dart:math' as math; | ||||
| 
 | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:mohem_flutter_app/classes/colors.dart'; | ||||
| 
 | ||||
| class AnimatedGradientBorder extends StatefulWidget { | ||||
|   const AnimatedGradientBorder( | ||||
|       {Key? key, | ||||
|       required this.child, | ||||
|       required this.gradientColors, | ||||
|       required this.borderRadius, | ||||
|       this.animationTime, | ||||
|       this.borderSize, | ||||
|       this.animationProgress, | ||||
|       this.stretchAlongAxis = false, | ||||
|       this.stretchAxis = Axis.horizontal}); | ||||
| 
 | ||||
|   final Widget child; | ||||
|   final double? borderSize; | ||||
|   final List<Color> gradientColors; | ||||
|   final BorderRadiusGeometry borderRadius; | ||||
|   final int? animationTime; | ||||
|   final double? animationProgress; | ||||
|   final bool stretchAlongAxis; | ||||
|   final Axis stretchAxis; | ||||
| 
 | ||||
|   @override | ||||
|   State<StatefulWidget> createState() => AnimatedGradientState(); | ||||
| } | ||||
| 
 | ||||
| class AnimatedGradientState extends State<AnimatedGradientBorder> with SingleTickerProviderStateMixin { | ||||
|   late AnimationController _controller; | ||||
|   late Animation _angleAnimation; | ||||
| 
 | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
|     _controller = AnimationController(vsync: this, duration: Duration(seconds: widget.animationTime ?? 2)); | ||||
|     _controller.addListener(() => setState(() {})); | ||||
|     _angleAnimation = Tween<double>(begin: 0.1, end: 2 * math.pi).animate(_controller); | ||||
|     if (widget.animationProgress != null) { | ||||
|       _controller.forward(); | ||||
|     } else { | ||||
|       _controller.repeat(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   void dispose() { | ||||
|     _controller.dispose(); | ||||
|     super.dispose(); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   void didUpdateWidget(covariant AnimatedGradientBorder oldWidget) { | ||||
|     super.didUpdateWidget(oldWidget); | ||||
|     double? animateTo = widget.animationProgress; | ||||
|     if (animateTo != null) { | ||||
|       _controller.animateTo(animateTo); | ||||
|     } else { | ||||
|       _controller.repeat(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     double? negativeMargin = -1.0 * (widget.borderSize ?? 0); | ||||
|     return Container( | ||||
|       padding:  EdgeInsets.all(widget.borderSize ?? 0), | ||||
|       clipBehavior: Clip.hardEdge, | ||||
|       decoration: BoxDecoration( | ||||
|         color: MyColors.kWhiteColor, | ||||
|         borderRadius: BorderRadius.circular(10), | ||||
|         boxShadow: [ | ||||
|           BoxShadow( | ||||
|             color: const Color(0xff000000).withOpacity(.05), | ||||
|             blurRadius: 26, | ||||
|             offset: const Offset(0, -3), | ||||
|           ), | ||||
|         ], | ||||
|       ), | ||||
|       child: Stack(alignment: Alignment.center, clipBehavior: Clip.none, children: [ | ||||
|         Positioned( | ||||
|             top: negativeMargin, | ||||
|             left: negativeMargin, | ||||
|             right: negativeMargin, | ||||
|             bottom: negativeMargin, | ||||
|             child: AnimatedGradientContainer( | ||||
|               gradientColors: widget.gradientColors, | ||||
|               borderRadius: widget.borderRadius, | ||||
|               gradientAngle: _angleAnimation.value, | ||||
|             )), | ||||
|         widget.child, | ||||
|         // BackdropFilter( | ||||
|         //   filter: ImageFilter.blur(sigmaX: widget.glowSize ?? 0, sigmaY: widget.glowSize ?? 0), | ||||
|         //   child: Stack( | ||||
|         //     alignment: Alignment.center, | ||||
|         //     clipBehavior: Clip.none, | ||||
|         //     children: [ | ||||
|         //       Positioned( | ||||
|         //           top: negativeMargin, | ||||
|         //           right: negativeMargin, | ||||
|         //           left: negativeMargin, | ||||
|         //           bottom: negativeMargin, | ||||
|         //           child: AnimatedGradientContainer( | ||||
|         //             gradientColors: widget.gradientColors, | ||||
|         //             borderRadius: widget.borderRadius, | ||||
|         //             gradientAngle: _angleAnimation.value, | ||||
|         //           )), | ||||
|         //       if (widget.stretchAlongAxis) | ||||
|         //         SizedBox( | ||||
|         //           width: widget.stretchAxis == Axis.horizontal ? double.infinity : null, | ||||
|         //           height: widget.stretchAxis == Axis.vertical ? double.infinity : null, | ||||
|         //           child: widget.child, | ||||
|         //         ) | ||||
|         //       else | ||||
|         //         widget.child, | ||||
|         //     ], | ||||
|         //   ), | ||||
|         // ), | ||||
|       ]), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class AnimatedGradientContainer extends StatelessWidget { | ||||
|   const AnimatedGradientContainer({Key? key, required this.gradientColors, required this.gradientAngle, required this.borderRadius}); | ||||
| 
 | ||||
|   final List<Color> gradientColors; | ||||
|   final double gradientAngle; | ||||
|   final BorderRadiusGeometry borderRadius; | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Container( | ||||
|         decoration: BoxDecoration( | ||||
|             borderRadius: borderRadius, | ||||
|             gradient: SweepGradient( | ||||
|                 colors: [...gradientColors, ...gradientColors.reversed], stops: _generateColorStops([...gradientColors, ...gradientColors.reversed]), transform: GradientRotation(gradientAngle)))); | ||||
|   } | ||||
| 
 | ||||
|   List<double> _generateColorStops(List<dynamic> colors) { | ||||
|     return colors.asMap().entries.map((entry) { | ||||
|       double percentageStop = entry.key / colors.length; | ||||
|       return percentageStop; | ||||
|     }).toList(); | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue