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.
 
 
 
 

74 lines
2.5 KiB

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<DownloadEvent, DownloadState> {
/// ------------constructor------------
DownloadBloc(
this._getAudiosUseCase,
this._loadingStreamUseCase,
this._saveLevelsUseCase,
)
: super(const DownloadState()) {
on<GetAudiosEvent>(_getAudiosEvent);
on<SaveLevelsEvent>(_saveLevelsEvent);
loadingStream = _loadingStreamUseCase();
}
/// ------------UseCases------------
final GetAudiosUseCase _getAudiosUseCase;
final SaveLevelsUseCase _saveLevelsUseCase;
final LoadingStreamAudioUseCase _loadingStreamUseCase;
/// ------------Variables------------
Stream<DownloadEntity> loadingStream = Stream.empty();
/// ------------Controllers------------
/// ------------Functions------------
/// ------------Api Calls------------
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 {
ContextProvider.context.goNamed(Routes.homePage);
},
(error) {
emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage)));
},
),
);
}
}