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.
 
 
 

181 lines
8.5 KiB

import 'dart:io';
import 'package:get_it/get_it.dart';
import 'package:hadi_hoda_flutter/core/constants/my_constants.dart';
import 'package:hadi_hoda_flutter/core/network/http_request.dart';
import 'package:hadi_hoda_flutter/core/network/http_request_impl.dart';
import 'package:hadi_hoda_flutter/core/services/audio_service.dart';
import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_bloc.dart';
import 'package:hadi_hoda_flutter/features/download/data/datasource/download_datasource.dart';
import 'package:hadi_hoda_flutter/features/download/data/repository_impl/download_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/download/domain/repository/download_repository.dart';
import 'package:hadi_hoda_flutter/features/download/domain/usecases/batch_download_usecase.dart';
import 'package:hadi_hoda_flutter/features/download/domain/usecases/cancel_download_usecase.dart';
import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_audios_usecase.dart';
import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_images_usecase.dart';
import 'package:hadi_hoda_flutter/features/download/domain/usecases/get_last_downloaded_level.dart';
import 'package:hadi_hoda_flutter/features/download/domain/usecases/loading_stream_usecase.dart';
import 'package:hadi_hoda_flutter/features/download/domain/usecases/save_levels_usecase.dart';
import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_bloc.dart';
import 'package:hadi_hoda_flutter/features/guider/data/datasource/guider_datasource.dart';
import 'package:hadi_hoda_flutter/features/guider/data/repository_impl/guider_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/guider/domain/repository/guider_repository.dart';
import 'package:hadi_hoda_flutter/features/guider/domain/usecases/get_first_level_usecase.dart';
import 'package:hadi_hoda_flutter/features/language/data/datasource/language_datasource.dart';
import 'package:hadi_hoda_flutter/features/language/data/repository_impl/language_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/language/domain/repository/language_repository.dart';
import 'package:hadi_hoda_flutter/features/language/domain/usecases/get_languages_usecase.dart';
import 'package:hadi_hoda_flutter/features/language/domain/usecases/get_selected_language_usecase.dart';
import 'package:hadi_hoda_flutter/features/language/domain/usecases/save_selected_language_usecase.dart';
import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_bloc.dart';
import 'package:hadi_hoda_flutter/features/level/data/datasource/level_datasource.dart';
import 'package:hadi_hoda_flutter/features/level/data/repository_impl/level_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/node_entity.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/prize_entity.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart';
import 'package:hadi_hoda_flutter/features/level/domain/repository/level_repository.dart';
import 'package:hadi_hoda_flutter/features/level/domain/usecases/get_levels_usecase.dart';
import 'package:hadi_hoda_flutter/features/question/data/datasource/question_datasource.dart';
import 'package:hadi_hoda_flutter/features/question/data/repository_impl/question_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart';
import 'package:hadi_hoda_flutter/features/question/domain/entity/file_entity.dart';
import 'package:hadi_hoda_flutter/features/question/domain/entity/hadith_entity.dart';
import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart';
import 'package:hadi_hoda_flutter/features/question/domain/repository/question_repository.dart';
import 'package:hadi_hoda_flutter/features/question/domain/usecases/get_level_usecase.dart';
import 'package:hadi_hoda_flutter/features/question/domain/usecases/get_next_level_usecase.dart';
import 'package:hadi_hoda_flutter/features/sample/data/datasource/sample_datasource.dart';
import 'package:hadi_hoda_flutter/features/sample/data/repository_impl/sample_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/sample/domain/repository/sample_repository.dart';
import 'package:hadi_hoda_flutter/features/sample/domain/usecases/get_sample_usecase.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';
final GetIt locator = GetIt.I;
void initBindings() {
/// Classes
locator.registerSingleton<IHttpRequest>(HttpRequestImpl());
locator.registerSingleton<AudioService>(
AudioService(volume: MyConstants.musicAudioVolume),
instanceName: MyConstants.mainAudioService,
);
locator.registerSingleton<AudioService>(
AudioService(volume: MyConstants.effectAudioVolume),
instanceName: MyConstants.effectAudioService,
);
locator.registerSingleton<AppBloc>(AppBloc());
/// Blocs
locator.registerFactory<LanguageBloc>(
() => LanguageBloc(locator(), locator(), locator()),
);
locator.registerFactory<DownloadBloc>(
() => DownloadBloc(locator(), locator(), locator(), locator(), locator()),
);
/// Sample Feature
locator.registerLazySingleton<ISampleDatasource>(
() => SampleDatasourceImpl(locator()),
);
locator.registerLazySingleton<ISampleRepository>(
() => SampleRepositoryImpl(locator()),
);
locator.registerLazySingleton<GetSampleUseCase>(
() => GetSampleUseCase(locator()),
);
/// Download Feature
locator.registerLazySingleton<IDownloadDatasource>(
() => DownloadDatasourceImpl(locator()),
);
locator.registerLazySingleton<IDownloadRepository>(
() => DownloadRepositoryImpl(locator()),
);
locator.registerLazySingleton<SaveLevelsUseCase>(
() => SaveLevelsUseCase(locator()),
);
locator.registerLazySingleton<BatchDownloadUseCase>(
() => BatchDownloadUseCase(locator()),
);
locator.registerLazySingleton<LoadingStreamUseCase>(
() => LoadingStreamUseCase(locator()),
);
locator.registerLazySingleton<CancelDownloadUseCase>(
() => CancelDownloadUseCase(locator()),
);
locator.registerLazySingleton<GetLastDownloadedLevel>(
() => GetLastDownloadedLevel(locator()),
);
/// Guider Feature
locator.registerLazySingleton<IGuiderDatasource>(
() => const GuiderDatasourceImpl(),
);
locator.registerLazySingleton<IGuiderRepository>(
() => GuiderRepositoryImpl(locator()),
);
locator.registerLazySingleton<GetFirstLevelUseCase>(
() => GetFirstLevelUseCase(locator()),
);
/// Question Feature
locator.registerLazySingleton<IQuestionDatasource>(
() => const QuestionDatasourceImpl(),
);
locator.registerLazySingleton<IQuestionRepository>(
() => QuestionRepositoryImpl(locator()),
);
locator.registerLazySingleton<GetLevelUseCase>(
() => GetLevelUseCase(locator()),
);
locator.registerLazySingleton<GetNextLevelUseCase>(
() => GetNextLevelUseCase(locator()),
);
/// Level Feature
locator.registerLazySingleton<ILevelDatasource>(
() => LocalLevelDatasourceImpl(locator()),
);
locator.registerLazySingleton<ILevelRepository>(
() => LevelRepositoryImpl(locator()),
);
locator.registerLazySingleton<GetLevelsUseCase>(
() => GetLevelsUseCase(locator()),
);
/// Language Feature
locator.registerLazySingleton<ILanguageDatasource>(
() => LanguageDatasourceImpl(locator()),
);
locator.registerLazySingleton<ILanguageRepository>(
() => LanguageRepositoryImpl(locator()),
);
locator.registerLazySingleton<GetLanguagesUseCase>(
() => GetLanguagesUseCase(locator()),
);
locator.registerLazySingleton<GetSelectedLanguageUseCase>(
() => GetSelectedLanguageUseCase(locator()),
);
locator.registerLazySingleton<SaveSelectedLanguageUseCase>(
() => SaveSelectedLanguageUseCase(locator()),
);
}
Future<void> initDataBase() async {
final Directory dir = await getApplicationDocumentsDirectory();
Hive
..init(dir.path)
..registerAdapter<FileEntity>(FileEntityAdapter())
..registerAdapter<AnswerEntity>(AnswerEntityAdapter())
..registerAdapter<QuestionEntity>(QuestionEntityAdapter())
..registerAdapter<HadithEntity>(HadithEntityAdapter())
..registerAdapter<PrizeEntity>(PrizeEntityAdapter())
..registerAdapter<LevelEntity>(LevelEntityAdapter())
..registerAdapter<NodeType>(NodeTypeAdapter())
..registerAdapter<NodeEntity>(NodeEntityAdapter())
..registerAdapter<TotalDataEntity>(TotalDataEntityAdapter());
await Hive.openBox<TotalDataEntity>(MyConstants.levelBox);
}