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 {
							 | 
						|
								    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 {
							 | 
						|
								    emit(state.copyWith(getFilesStatus: BaseInit()));
							 | 
						|
								    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)));
							 | 
						|
								          },
							 | 
						|
								        ),
							 | 
						|
								    );
							 | 
						|
								  }
							 | 
						|
								}
							 |