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/utils/context_provider.dart'; import 'package:hadi_hoda_flutter/features/intro/domain/usecases/extract_data_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._saveLevelsUseCase, this._extractDataUseCase, this._loadingStreamUseCase, ) : super(const IntroState()) { on(_saveLevelsEvent); on(_extractDataEvent); loadingStream = _loadingStreamUseCase(); } /// ------------UseCases------------ final SaveLevelsUseCase _saveLevelsUseCase; final ExtractDataUseCase _extractDataUseCase; final LoadingStreamUseCase _loadingStreamUseCase; /// ------------Variables------------ Stream loadingStream = Stream.empty(); /// ------------Controllers------------ /// ------------Functions------------ /// ------------Api Calls------------ FutureOr _saveLevelsEvent(SaveLevelsEvent event, Emitter emit) async { await _saveLevelsUseCase(NoParams()).then( (value) { value.fold( (data) async { add(ExtractDataEvent()); }, (error) {}, ); }, ); } FutureOr _extractDataEvent(ExtractDataEvent event, Emitter emit) async { await _extractDataUseCase(NoParams()).then( (value) { value.fold( (data) async { await Future.delayed( Duration(seconds: 1), () { ContextProvider.context!.goNamed(Routes.homePage); }, ); }, (error) {}, ); }, ); } }