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.
74 lines
2.8 KiB
74 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()) {
|
|
LocalStorage.saveData(key: MyConstants.firstLanguagePage, value: 'true');
|
|
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 LocalStorage.saveData(
|
|
key: MyConstants.selectLanguage,
|
|
value: state.selectedLang.code ?? 'fa',
|
|
);
|
|
if (Directory(
|
|
'${StoragePath.documentDir.path}/${state.selectedLang.code}/files')
|
|
.existsSync()) {
|
|
if (ContextProvider.context.mounted) {
|
|
ContextProvider.context.goNamed(Routes.homePage);
|
|
}
|
|
} else {
|
|
await Future.wait([
|
|
LocalStorage.deleteData(key: MyConstants.downloadCompleted),
|
|
LocalStorage.deleteData(key: MyConstants.extractCompleted),
|
|
]);
|
|
if (ContextProvider.context.mounted) {
|
|
ContextProvider.context.goNamed(Routes.introPage);
|
|
}
|
|
}
|
|
}
|
|
|
|
FutureOr<void> _initLanguageEvent(InitLanguageEvent event, Emitter<LanguageState> emit) {
|
|
final String selectedLanguage = LocalStorage.readData(key: MyConstants.selectLanguage).isEmpty
|
|
? 'fa'
|
|
: LocalStorage.readData(key: MyConstants.selectLanguage);
|
|
emit(state.copyWith(selectedLang: LanguageEntity(code: selectedLanguage)));
|
|
}
|
|
}
|