// ignore: import_of_legacy_library_into_null_safe import 'package:dio/dio.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:get_it/get_it.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; import 'config/dio_client.dart'; import 'config/theme.dart'; import 'core/network/network_info.dart'; import 'features/authentication/data/datasources/authentication_local_datasource.dart'; import 'features/authentication/data/datasources/authentication_remote_datasource.dart'; import 'features/authentication/data/repositories/authentication_repository_impl.dart'; import 'features/authentication/data/services/authentication_service.dart'; import 'features/authentication/domain/repositories/authentication_repository.dart'; import 'features/authentication/domain/usecases/fetch_token.dart'; import 'features/authentication/domain/usecases/keep_token.dart'; import 'features/authentication/domain/usecases/set_user.dart'; import 'features/authentication/presentation/bloc/authentication_bloc.dart'; import 'features/home/data/datasources/user_remote_datasource.dart'; import 'features/home/data/repositories/user_repository_impl.dart'; import 'features/home/data/services/user_service.dart'; import 'features/home/domain/repositories/user_repository.dart'; import 'features/home/domain/usecases/get_user.dart'; import 'features/home/presentation/bloc/home_bloc.dart'; import 'features/login/data/datasources/login_local_datasource.dart'; import 'features/login/data/datasources/login_remote_datasource.dart'; import 'features/login/data/repositories/login_repository_impl.dart'; import 'features/login/data/services/login_service.dart'; import 'features/login/domain/repositories/login_repository.dart'; import 'features/login/domain/usecases/login_user.dart'; import 'features/login/presentation/bloc/user_login_bloc.dart'; final di = GetIt.instance; //Dependency injection Future setup() async { di.registerLazySingleton(() => const FlutterSecureStorage()); di.registerLazySingleton(() => ThemeProvider()); //------------Blocs------------------------------------------------------------- di.registerFactory(() => UserLoginBloc(loginUser: di())); di.registerFactory(() => AuthenticationBloc(fetchToken: di(), keepToken: di(), setUser: di()) ..add(CheckAuthenticationStatusEvent())); di.registerFactory(() => HomeBloc(getUser: di())); //------------Use Cases------------------------------------------------------------- di.registerLazySingleton(() => LoginUser(repository: di())); di.registerLazySingleton(() => FetchToken(repository: di())); di.registerLazySingleton(() => KeepToken(repository: di())); di.registerLazySingleton(() => SetUser(repository: di())); di.registerLazySingleton(() => GetUser(userRepository: di())); //------------Repositories------------------------------------------------------------- di.registerLazySingleton(() => LoginRepositoryImpl( remoteDataSource: di(), localDataSource: di(), networkInfo: di(), )); di.registerLazySingleton( () => AuthenticationRepositoryImpl(localDataSource: di(), networkInfo: di(), remoteDataSource: di())); di.registerLazySingleton( () => UserRepositoryImpl(networkInfo: di(), userRemoteDataSource: di())); //------------Data Sources------------------------------------------------------------- di.registerLazySingleton( () => LoginLocalDataSourceImpl(storage: di())); di.registerLazySingleton( () => LoginRemoteDataSourceImpl(api: di())); di.registerLazySingleton( () => AuthenticationLocalDataSourceImpl(storage: di())); di.registerLazySingleton( () => AuthenticationRemoteDataSourceImpl(service: di())); di.registerLazySingleton( () => UserRemoteDataSourceImpl(service: di()), ); //! Core di.registerLazySingleton( () => NetworkInfoImpl(connectionChecker: di())); //------------Rest services------------------------------------------------------------- final dio = buildDioClient(Dio()); di.registerLazySingleton(() => LoginService(dio)); di.registerLazySingleton( () => AuthenticationService(dio)); di.registerLazySingleton(() => UserService(dio)); //! External di.registerLazySingleton(() => InternetConnectionChecker()); }