import 'package:flutter_audio_query/flutter_audio_query.dart'; import 'package:get_it/get_it.dart'; import 'domain/repositories/audio_repository.dart'; import 'domain/repositories/music_data_repository.dart'; import 'presentation/state/audio_store.dart'; import 'presentation/state/music_data_store.dart'; import 'presentation/state/navigation_store.dart'; import 'system/datasources/audio_manager.dart'; import 'system/datasources/audio_manager_contract.dart'; import 'system/datasources/local_music_fetcher.dart'; import 'system/datasources/local_music_fetcher_contract.dart'; import 'system/datasources/moor_music_data_source.dart'; import 'system/datasources/music_data_source_contract.dart'; import 'system/repositories/audio_repository_impl.dart'; import 'system/repositories/music_data_repository_impl.dart'; final GetIt getIt = GetIt.instance; Future setupGetIt() async { // stores getIt.registerFactory( () { final musicDataStore = MusicDataStore( musicDataRepository: getIt(), ); musicDataStore.init(); return musicDataStore; }, ); getIt.registerFactory( () { final audioStore = AudioStore( audioRepository: getIt(), musicDataRepository: getIt(), ); audioStore.init(); return audioStore; }, ); getIt.registerFactory( () { final navigationStore = NavigationStore(); navigationStore.init(); return navigationStore; }, ); // repositories getIt.registerLazySingleton( () => MusicDataRepositoryImpl( localMusicFetcher: getIt(), musicDataSource: getIt(), ), ); getIt.registerLazySingleton( () => AudioRepositoryImpl( getIt(), ), ); // data sources // TODO: start background isolate here getIt.registerLazySingleton(() => MoorMusicDataSource()); getIt.registerLazySingleton( () => LocalMusicFetcherImpl( getIt(), ), ); getIt.registerLazySingleton(() => AudioManagerImpl()); // external getIt.registerLazySingleton(() => FlutterAudioQuery()); }