You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							159 lines
						
					
					
						
							5.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							159 lines
						
					
					
						
							5.7 KiB
						
					
					
				| import 'package:flutter/material.dart'; | |
| import 'package:flutter_bloc/flutter_bloc.dart'; | |
| import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; | |
| import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; | |
| import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; | |
| import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; | |
| import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; | |
| import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_bloc.dart'; | |
| import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart'; | |
| import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/bottom_path.dart'; | |
| import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/hint_level_widget.dart'; | |
| import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart'; | |
| import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/top_path.dart'; | |
| 
 | |
| class LevelPage extends StatelessWidget { | |
|   const LevelPage({super.key}); | |
| 
 | |
|   @override | |
|   Widget build(BuildContext context) { | |
|     return Scaffold( | |
|       body: Stack( | |
|         children: [ | |
|           SingleChildScrollView( | |
|             controller: context.read<LevelBloc>().scrollController, | |
|             child: Stack( | |
|               alignment: Alignment.center, | |
|               children: [ | |
|                 _background(), | |
|                 _topPath(context), | |
|                 _bottomPath(context), | |
|               ], | |
|             ), | |
|           ), | |
|           _topButtons(context), | |
|           _hintMission(context) | |
|         ], | |
|       ), | |
|     ); | |
|   } | |
| 
 | |
|   Widget _hintMission(BuildContext context) { | |
|     return BlocBuilder<LevelBloc, LevelState>( | |
|         buildWhen: (previous, current) => | |
|         previous.chooseLevel?.id != current.chooseLevel?.id, | |
|         builder: (context, state) { | |
|           if (state.chooseLevel?.id != null) { | |
|             return Positioned( | |
|               bottom: MediaQuery.viewPaddingOf(context).bottom + MySpaces.s10, | |
|               right: MySpaces.s16, | |
|               left: MySpaces.s16, | |
|               child: HintLevelWidget( | |
|                 level: state.chooseLevel ?? LevelEntity(), | |
|                 onTap: (level) => | |
|                     context.read<LevelBloc>().goToQuestionPage(context, level), | |
|               ), | |
|             ); | |
|           } else { | |
|             return SizedBox.shrink(); | |
|           } | |
|         } | |
|     ); | |
|   } | |
| 
 | |
|   Positioned _topButtons(BuildContext context) { | |
|     return Positioned( | |
|       left: MySpaces.s16, | |
|       right: MySpaces.s16, | |
|       top: MediaQuery.viewPaddingOf(context).top + MySpaces.s16, | |
|       child: Row( | |
|         mainAxisAlignment: MainAxisAlignment.spaceBetween, | |
|         children: [ | |
|           InkWell( | |
|             onTap: () => context.read<LevelBloc>().goToHomePage(context), | |
|             child: MyImage( | |
|               image: MyAssets.homeButton, | |
|             ), | |
|           ), | |
|           StreamBuilder<double>( | |
|             initialData: 1, | |
|             stream: context.read<LevelBloc>().volumeStream, | |
|             builder: (context, snapshot) => InkWell( | |
|               onTap: () => context.read<LevelBloc>().changeMute(), | |
|               child: MyImage( | |
|                 image: snapshot.data == 1 ? MyAssets.musicOn : MyAssets.musicOff, | |
|               ), | |
|             ), | |
|           ), | |
|         ], | |
|       ), | |
|     ); | |
|   } | |
| 
 | |
|   MyImage _background() { | |
|     return MyImage(image: MyAssets.mapBackground, fit: BoxFit.cover); | |
|   } | |
| 
 | |
|   Positioned _topPath(BuildContext context) { | |
|     return Positioned( | |
|       top: context.heightScreen * 0.16, | |
|       left: context.widthScreen * 0.15, | |
|       child: BlocBuilder<LevelBloc, LevelState>( | |
|         builder: (context, state) => Stack( | |
|           children: [ | |
|             TopPath( | |
|               height: 950, | |
|               width: context.widthScreen * 0.6, | |
|             ), | |
|             ...List.generate( | |
|               context.read<LevelBloc>().top12LevelList.length, | |
|                   (index) => Positioned( | |
|                     top: context.read<LevelBloc>().topLocationList[index].top, | |
|                     bottom: context.read<LevelBloc>().topLocationList[index].bottom, | |
|                     right: context.read<LevelBloc>().topLocationList[index].right, | |
|                     left: context.read<LevelBloc>().topLocationList[index].left, | |
|                     child: LevelWidget( | |
|                       level: context.read<LevelBloc>().top12LevelList[index], | |
|                       type: context.read<LevelBloc>().getLevelType(index + 9), | |
|                       onTap: (LevelEntity level) {}, | |
|                     ), | |
|                   ), | |
|             ), | |
|           ], | |
|         ), | |
|       ), | |
|     ); | |
|   } | |
| 
 | |
|   Positioned _bottomPath(BuildContext context) { | |
|     return Positioned( | |
|       bottom: context.heightScreen * 0.18, | |
|       left: context.widthScreen * 0.2, | |
|       child: BlocBuilder<LevelBloc, LevelState>( | |
|         builder: (context, state) => Stack( | |
|           clipBehavior: Clip.none, | |
|           children: [ | |
|             BottomPath( | |
|               width: context.widthScreen * 0.75, | |
|               height: context.heightScreen * 0.65, | |
|             ), | |
|             ...List.generate( | |
|               context.read<LevelBloc>().bottom8LevelList.length, | |
|                   (index) => Positioned( | |
|                     top: context.read<LevelBloc>().bottomLocationList[index].top, | |
|                     bottom: context.read<LevelBloc>().bottomLocationList[index].bottom, | |
|                     right: context.read<LevelBloc>().bottomLocationList[index].right, | |
|                     left: context.read<LevelBloc>().bottomLocationList[index].left, | |
|                     child: LevelWidget( | |
|                       level: context.read<LevelBloc>().bottom8LevelList[index], | |
|                       type: context.read<LevelBloc>().getLevelType(index + 1), | |
|                       onTap: (LevelEntity level) {}, | |
|                     ), | |
|                   ), | |
|             ), | |
|           ], | |
|         ), | |
|       ), | |
|     ); | |
|   } | |
| }
 |