import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:go_router/go_router.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/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/loading_stream_audio_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 { /// ------------constructor------------ DownloadBloc( this._getAudiosUseCase, this._loadingStreamUseCase, this._saveLevelsUseCase, ) : super(const DownloadState()) { on(_getAudiosEvent); on(_saveLevelsEvent); loadingStream = _loadingStreamUseCase(); } /// ------------UseCases------------ final GetAudiosUseCase _getAudiosUseCase; final SaveLevelsUseCase _saveLevelsUseCase; final LoadingStreamAudioUseCase _loadingStreamUseCase; /// ------------Variables------------ Stream loadingStream = Stream.empty(); /// ------------Controllers------------ /// ------------Functions------------ /// ------------Api Calls------------ FutureOr _getAudiosEvent( GetAudiosEvent event, Emitter 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 _saveLevelsEvent( SaveLevelsEvent event, Emitter emit, ) async { await _saveLevelsUseCase(NoParams()).then((value) => value.fold( (data) async { ContextProvider.context.goNamed(Routes.homePage); }, (error) { emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); }, ), ); } }