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.
		
		
		
		
		
			
		
			
				
					
					
						
							99 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							99 lines
						
					
					
						
							3.4 KiB
						
					
					
				| import 'dart:async'; | |
| 
 | |
| import 'package:bloc/bloc.dart'; | |
| import 'package:go_router/go_router.dart'; | |
| import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; | |
| import 'package:hadi_hoda_flutter/core/params/no_params.dart'; | |
| import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; | |
| import 'package:hadi_hoda_flutter/core/status/base_status.dart'; | |
| import 'package:hadi_hoda_flutter/core/utils/context_provider.dart'; | |
| import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; | |
| import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; | |
| import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_audios_usecase.dart'; | |
| import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_images_usecase.dart'; | |
| import 'package:hadi_hoda_flutter/features/download/domain/usecases/loading_stream_usecase.dart'; | |
| import 'package:hadi_hoda_flutter/features/download/domain/usecases/save_levels_usecase.dart'; | |
| import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_event.dart'; | |
| import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_state.dart'; | |
| 
 | |
| class DownloadBloc extends Bloc<DownloadEvent, DownloadState> { | |
|   /// ------------constructor------------ | |
|   DownloadBloc( | |
|       this._getImagesUseCase, | |
|       this._getAudiosUseCase, | |
|       this._loadingStreamUseCase, | |
|       this._saveLevelsUseCase, | |
|       ) | |
|     : super(const DownloadState()) { | |
|     on<GetImagesEvent>(_getImagesEvent); | |
|     on<GetAudiosEvent>(_getAudiosEvent); | |
|     on<SaveLevelsEvent>(_saveLevelsEvent); | |
|     loadingStream = _loadingStreamUseCase(); | |
|   } | |
| 
 | |
|   /// ------------UseCases------------ | |
|   final GetImagesUseCase _getImagesUseCase; | |
|   final GetAudiosUseCase _getAudiosUseCase; | |
|   final SaveLevelsUseCase _saveLevelsUseCase; | |
|   final LoadingStreamUseCase _loadingStreamUseCase; | |
| 
 | |
|   /// ------------Variables------------ | |
|   Stream<DownloadEntity> loadingStream = Stream.empty(); | |
| 
 | |
|   /// ------------Controllers------------ | |
|  | |
|   /// ------------Functions------------ | |
|  | |
|   /// ------------Api Calls------------ | |
|   FutureOr<void> _getImagesEvent( | |
|       GetImagesEvent event, | |
|       Emitter<DownloadState> emit, | |
|       ) async { | |
|     emit(state.copyWith(getFilesStatus: BaseInit())); | |
|     await _getImagesUseCase(NoParams()).then((value) { | |
|       value.fold( | |
|         (data) { | |
|           add(GetAudiosEvent()); | |
|         }, | |
|         (error) async { | |
|           emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); | |
|         }, | |
|       ); | |
|     }); | |
|   } | |
| 
 | |
|   FutureOr<void> _getAudiosEvent( | |
|     GetAudiosEvent event, | |
|     Emitter<DownloadState> emit, | |
|   ) async { | |
|     await _getAudiosUseCase(NoParams()).then((value) { | |
|       value.fold( | |
|         (data) async { | |
|           add(SaveLevelsEvent()); | |
|         }, | |
|         (error) async { | |
|           emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); | |
|         }, | |
|       ); | |
|     }); | |
|   } | |
| 
 | |
|   FutureOr<void> _saveLevelsEvent( | |
|       SaveLevelsEvent event, | |
|       Emitter<DownloadState> emit, | |
|       ) async { | |
|       await _saveLevelsUseCase(NoParams()).then((value) => | |
|         value.fold( | |
|           (data) async { | |
|             await LocalStorage.saveData(key: MyConstants.firstDownload, value: 'true'); | |
|             if(ContextProvider.context.mounted){ | |
|               ContextProvider.context.goNamed(Routes.homePage); | |
|             } | |
|           }, | |
|           (error) { | |
|             emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); | |
|           }, | |
|         ), | |
|     ); | |
|   } | |
| }
 |