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.
 
 
 
 

82 lines
3.0 KiB

import 'dart:async';
import 'dart:io';
import 'package:bloc/bloc.dart';
import 'package:flutter/material.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/local_storage.dart';
import 'package:hadi_hoda_flutter/core/utils/my_context.dart';
import 'package:hadi_hoda_flutter/core/utils/storage_path.dart';
import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_bloc.dart';
import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_event.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';
import 'package:hadi_hoda_flutter/init_bindings.dart';
class LanguageBloc extends Bloc<LanguageEvent, LanguageState> {
/// ------------constructor------------
LanguageBloc() : super(const LanguageState()) {
on<ChangeLanguageEvent>(_changeLanguageEvent);
on<SaveLevelsEvent>(_saveLevelsEvent);
on<InitLanguageEvent>(_initLanguageEvent);
}
/// ------------UseCases------------
/// ------------Variables------------
/// ------------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 ?? MyConstants.defaultLanguage,
),
]);
AppBloc appBloc = locator();
appBloc.add(
ChangeLocaleEvent(state.selectedLang.locale ?? Locale('en', 'US')));
if (Directory(
'${StoragePath.documentDir.path}/${state.selectedLang
.code}/answer_audio')
.existsSync() && Directory(
'${StoragePath.documentDir.path}/${state.selectedLang
.code}/question_audio')
.existsSync()) {
if (MyContext.get.mounted) {
MyContext.get.goNamed(Routes.homePage);
}
} else {
await Future.wait([
LocalStorage.deleteData(key: MyConstants.downloadedAudio),
LocalStorage.deleteData(key: MyConstants.extractedAudio),
]);
if (MyContext.get.mounted) {
MyContext.get.goNamed(Routes.downloadPage);
}
}
}
FutureOr<void> _initLanguageEvent(InitLanguageEvent event, Emitter<LanguageState> emit) {
final String selectedLanguage = LocalStorage.readData(
key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage;
emit(state.copyWith(selectedLang: LanguageEntity(code: selectedLanguage)));
}
}