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/intro/domain/entities/download_entity.dart'; import 'package:hadi_hoda_flutter/features/intro/domain/usecases/get_files_usecase.dart'; import 'package:hadi_hoda_flutter/features/intro/domain/usecases/loading_stream_usecase.dart'; import 'package:hadi_hoda_flutter/features/intro/domain/usecases/save_levels_usecase.dart'; import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart'; import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_state.dart'; class IntroBloc extends Bloc { /// ------------constructor------------ IntroBloc( this._getFilesUseCase, this._loadingStreamUseCase, this._saveLevelsUseCase, ) : super(const IntroState()) { on(_getFilesEvent); on(_saveLevelsEvent); loadingStream = _loadingStreamUseCase(); } /// ------------UseCases------------ final GetFilesUseCase _getFilesUseCase; final SaveLevelsUseCase _saveLevelsUseCase; final LoadingStreamUseCase _loadingStreamUseCase; /// ------------Variables------------ Stream loadingStream = Stream.empty(); /// ------------Controllers------------ /// ------------Functions------------ /// ------------Api Calls------------ FutureOr _getFilesEvent( GetFilesEvent event, Emitter emit, ) async { emit(state.copyWith(getFilesStatus: BaseInit())); await _getFilesUseCase(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 { if(LocalStorage.readData(key: MyConstants.firstLanguagePage) != 'true'){ ContextProvider.context.goNamed(Routes.languagePage); } else { await Future.delayed(Duration(milliseconds: 500), () { if (ContextProvider.context.mounted) { ContextProvider.context.goNamed(Routes.homePage); } }); } }, (error) { emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); }, ), ); } }