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
2.9 KiB
82 lines
2.9 KiB
import 'dart:async';
|
|
|
|
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/params/no_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/core/utils/local_storage.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/domain/entities/download_entity.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/domain/usecases/get_files_usecase.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/domain/usecases/loading_stream_usecase.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/domain/usecases/save_levels_usecase.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_state.dart';
|
|
|
|
class IntroBloc extends Bloc<IntroEvent, IntroState> {
|
|
/// ------------constructor------------
|
|
IntroBloc(
|
|
this._getFilesUseCase,
|
|
this._loadingStreamUseCase,
|
|
this._saveLevelsUseCase,
|
|
)
|
|
: super(const IntroState()) {
|
|
on<GetFilesEvent>(_getFilesEvent);
|
|
on<SaveLevelsEvent>(_saveLevelsEvent);
|
|
loadingStream = _loadingStreamUseCase();
|
|
}
|
|
|
|
/// ------------UseCases------------
|
|
final GetFilesUseCase _getFilesUseCase;
|
|
final SaveLevelsUseCase _saveLevelsUseCase;
|
|
final LoadingStreamUseCase _loadingStreamUseCase;
|
|
|
|
/// ------------Variables------------
|
|
Stream<DownloadEntity> loadingStream = Stream.empty();
|
|
|
|
/// ------------Controllers------------
|
|
|
|
/// ------------Functions------------
|
|
|
|
/// ------------Api Calls------------
|
|
FutureOr<void> _getFilesEvent(
|
|
GetFilesEvent event,
|
|
Emitter<IntroState> emit,
|
|
) async {
|
|
emit(state.copyWith(getFilesStatus: BaseInit()));
|
|
await _getFilesUseCase(NoParams()).then((value) {
|
|
value.fold(
|
|
(data) async {
|
|
add(SaveLevelsEvent());
|
|
},
|
|
(error) async {
|
|
emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage)));
|
|
},
|
|
);
|
|
});
|
|
}
|
|
|
|
FutureOr<void> _saveLevelsEvent(SaveLevelsEvent event,
|
|
Emitter<IntroState> emit) async {
|
|
await _saveLevelsUseCase(NoParams()).then((value) =>
|
|
value.fold(
|
|
(data) async {
|
|
if(LocalStorage.readData(key: MyConstants.firstLanguagePage) != 'true'){
|
|
ContextProvider.context.goNamed(Routes.languagePage);
|
|
} else {
|
|
await Future.delayed(Duration(milliseconds: 500), () {
|
|
if (ContextProvider.context.mounted) {
|
|
ContextProvider.context.goNamed(Routes.homePage);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
(error) {
|
|
emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage)));
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|