import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:go_router/go_router.dart'; import 'package:hadi_hoda_flutter/core/params/language_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/language/domain/entity/language_entity.dart'; import 'package:hadi_hoda_flutter/features/language/domain/usecases/save_levels_usecase.dart'; import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_event.dart'; import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_state.dart'; class LanguageBloc extends Bloc { /// ------------constructor------------ LanguageBloc( this._saveLevelsUseCase, ) : super(const LanguageState()) { on(_changeLanguageEvent); on(_saveLevelsEvent); } /// ------------UseCases------------ final SaveLevelsUseCase _saveLevelsUseCase; /// ------------Variables------------ final List languages = [ LanguageEntity(title: 'Persian (فارسی)', code: 'fa'), LanguageEntity(title: 'English (English)', code: 'en'), LanguageEntity(title: 'Arabic (عربی)', code: 'ar'), ]; /// ------------Controllers------------ /// ------------Functions------------ FutureOr _changeLanguageEvent( ChangeLanguageEvent event, Emitter emit, ) { emit(state.copyWith(selectedLang: event.lang)); } /// ------------Api Calls------------ FutureOr _saveLevelsEvent( SaveLevelsEvent event, Emitter emit, ) async { emit(state.copyWith(saveLevelsStatus: const BaseLoading())); await _saveLevelsUseCase(LanguageParams(code: state.selectedLang.code)).then( (value) => value.fold( (data) { emit(state.copyWith(saveLevelsStatus: const BaseInit())); ContextProvider.context!.goNamed(Routes.homePage); }, (error) { emit(state.copyWith(saveLevelsStatus: const BaseInit())); }, ), ); } }