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.
 
 
 
 

60 lines
2.2 KiB

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<LanguageEvent, LanguageState> {
/// ------------constructor------------
LanguageBloc(
this._saveLevelsUseCase,
) : super(const LanguageState()) {
on<ChangeLanguageEvent>(_changeLanguageEvent);
on<SaveLevelsEvent>(_saveLevelsEvent);
}
/// ------------UseCases------------
final SaveLevelsUseCase _saveLevelsUseCase;
/// ------------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 {
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()));
},
),
);
}
}