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.
		
		
		
		
		
			
		
			
				
					
					
						
							80 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							80 lines
						
					
					
						
							2.8 KiB
						
					
					
				| import 'dart:async'; | |
| import 'dart:io'; | |
| 
 | |
| 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/routers/my_routes.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/core/utils/storage_path.dart'; | |
| import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.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<LanguageEvent, LanguageState> { | |
|   /// ------------constructor------------ | |
|   LanguageBloc() : super(const LanguageState()) { | |
|     on<ChangeLanguageEvent>(_changeLanguageEvent); | |
|     on<SaveLevelsEvent>(_saveLevelsEvent); | |
|     on<InitLanguageEvent>(_initLanguageEvent); | |
|   } | |
| 
 | |
|   /// ------------UseCases------------ | |
|  | |
|   /// ------------Variables------------ | |
|   final List<LanguageEntity> languages = [ | |
|     LanguageEntity(title: 'Persian (فارسی)', code: 'fa'), | |
|     LanguageEntity(title: 'English (English)', code: 'en'), | |
|     LanguageEntity(title: 'Arabic (عربی)', code: 'ar'), | |
|   ]; | |
| 
 | |
|   /// ------------Controllers------------ | |
|  | |
|   /// ------------Functions------------ | |
|   FutureOr<void> _changeLanguageEvent( | |
|     ChangeLanguageEvent event, | |
|     Emitter<LanguageState> emit, | |
|   ) { | |
|     emit(state.copyWith(selectedLang: event.lang)); | |
|   } | |
| 
 | |
|   /// ------------Api Calls------------ | |
|   FutureOr<void> _saveLevelsEvent( | |
|     SaveLevelsEvent event, | |
|     Emitter<LanguageState> emit, | |
|   ) async { | |
|     await Future.wait([ | |
|       LocalStorage.saveData( | |
|         key: MyConstants.selectLanguage, | |
|         value: state.selectedLang.code ?? 'fa', | |
|       ), | |
|     ]); | |
| 
 | |
|     if (Directory( | |
|         '${StoragePath.documentDir.path}/${state.selectedLang | |
|             .code}/answer_audio') | |
|         .existsSync() && Directory( | |
|         '${StoragePath.documentDir.path}/${state.selectedLang | |
|             .code}/question_audio') | |
|         .existsSync()) { | |
|       if (ContextProvider.context.mounted) { | |
|         ContextProvider.context.goNamed(Routes.homePage); | |
|       } | |
|     } else { | |
|       await Future.wait([ | |
|         LocalStorage.deleteData(key: MyConstants.downloadedAudio), | |
|         LocalStorage.deleteData(key: MyConstants.extractedAudio), | |
|       ]); | |
|       if (ContextProvider.context.mounted) { | |
|         ContextProvider.context.goNamed(Routes.downloadPage); | |
|       } | |
|     } | |
|   } | |
| 
 | |
|   FutureOr<void> _initLanguageEvent(InitLanguageEvent event, Emitter<LanguageState> emit) { | |
|     final String selectedLanguage = LocalStorage.readData( | |
|         key: MyConstants.selectLanguage) ?? 'fa'; | |
|     emit(state.copyWith(selectedLang: LanguageEntity(code: selectedLanguage))); | |
|   } | |
| }
 |