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)));
							 | 
						|
								  }
							 | 
						|
								}
							 |