import 'package:audio_service/audio_service.dart'; import 'package:audiotagger/audiotagger.dart'; import 'package:get_it/get_it.dart'; import 'package:just_audio/just_audio.dart'; import 'domain/actors/audio_player_actor.dart'; import 'domain/actors/persistence_actor.dart'; import 'domain/actors/platform_integration_actor.dart'; import 'domain/entities/album.dart'; import 'domain/entities/artist.dart'; import 'domain/entities/smart_list.dart'; import 'domain/entities/song.dart'; import 'domain/modules/dynamic_queue.dart'; import 'domain/repositories/audio_player_repository.dart'; import 'domain/repositories/music_data_repository.dart'; import 'domain/repositories/persistent_state_repository.dart'; import 'domain/repositories/platform_integration_repository.dart'; import 'domain/repositories/settings_repository.dart'; import 'domain/usecases/play_album.dart'; import 'domain/usecases/play_artist.dart'; import 'domain/usecases/play_smart_list.dart'; import 'domain/usecases/play_songs.dart'; import 'domain/usecases/seek_to_next.dart'; import 'domain/usecases/set_song_blocked.dart'; import 'domain/usecases/shuffle_all.dart'; import 'presentation/state/album_page_store.dart'; import 'presentation/state/artist_page_store.dart'; import 'presentation/state/audio_store.dart'; import 'presentation/state/music_data_store.dart'; import 'presentation/state/navigation_store.dart'; import 'presentation/state/search_page_store.dart'; import 'presentation/state/settings_store.dart'; import 'presentation/state/smart_list_form_store.dart'; import 'presentation/state/smart_list_page_store.dart'; import 'presentation/state/song_store.dart'; import 'system/datasources/audio_player_data_source.dart'; import 'system/datasources/audio_player_data_source_impl.dart'; import 'system/datasources/local_music_fetcher.dart'; import 'system/datasources/local_music_fetcher_impl.dart'; import 'system/datasources/moor_database.dart'; import 'system/datasources/music_data_source_contract.dart'; import 'system/datasources/persistent_state_data_source.dart'; import 'system/datasources/platform_integration_data_source.dart'; import 'system/datasources/platform_integration_data_source_impl.dart'; import 'system/datasources/playlist_data_source.dart'; import 'system/datasources/settings_data_source.dart'; import 'system/repositories/audio_player_repository_impl.dart'; import 'system/repositories/music_data_repository_impl.dart'; import 'system/repositories/persistent_state_repository_impl.dart'; import 'system/repositories/platform_integration_repository_impl.dart'; import 'system/repositories/settings_repository_impl.dart'; final GetIt getIt = GetIt.instance; Future setupGetIt() async { print('setupGetIt'); // stores getIt.registerLazySingleton( () => MusicDataStore( musicDataRepository: getIt(), setSongBlocked: getIt(), ), ); getIt.registerLazySingleton( () => AudioStore( audioPlayerRepository: getIt(), playAlbum: getIt(), playArtist: getIt(), playSmartList: getIt(), playSongs: getIt(), seekToNext: getIt(), shuffleAll: getIt(), ), ); getIt.registerLazySingleton( () => NavigationStore(), ); getIt.registerLazySingleton( () => SearchPageStore( musicDataInfoRepository: getIt(), ), ); getIt.registerLazySingleton( () => SettingsStore( settingsRepository: getIt(), musicDataRepository: getIt(), ), ); getIt.registerFactoryParam( (Song song, _) => SongStore(song: song, musicDataInfoRepository: getIt()), ); getIt.registerFactoryParam( (Artist artist, _) => ArtistPageStore(artist: artist, musicDataInfoRepository: getIt()), ); getIt.registerFactoryParam( (Album album, _) => AlbumPageStore(album: album, musicDataInfoRepository: getIt()), ); getIt.registerFactoryParam( (SmartList? smartList, _) => SmartListFormStore(musicDataRepository: getIt(), smartList: smartList), ); getIt.registerFactoryParam( (SmartList? smartList, _) => SmartListPageStore( smartList: smartList!, musicDataInfoRepository: getIt(), ), ); // use cases getIt.registerLazySingleton( () => PlayAlbum( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlayArtist( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlaySmartList( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlaySongs( getIt(), ), ); getIt.registerLazySingleton( () => SeekToNext( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => SetSongsBlocked( getIt(), ), ); getIt.registerLazySingleton( () => ShuffleAll( getIt(), getIt(), getIt(), ), ); // modules getIt.registerLazySingleton( () => DynamicQueue( getIt(), ), ); // repositories getIt.registerLazySingleton( () => AudioPlayerRepositoryImpl( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); getIt.registerLazySingleton( () => MusicDataRepositoryImpl( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); getIt.registerLazySingleton( () => PersistentStateRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => SettingsRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => PlatformIntegrationRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); // data sources final MoorDatabase moorDatabase = MoorDatabase(); getIt.registerLazySingleton(() => moorDatabase.musicDataDao); getIt.registerLazySingleton(() => moorDatabase.persistentStateDao); getIt.registerLazySingleton(() => moorDatabase.settingsDao); getIt.registerLazySingleton(() => moorDatabase.playlistDao); getIt.registerLazySingleton( () => LocalMusicFetcherImpl( getIt(), getIt(), getIt(), ), ); final AudioPlayerDataSource audioPlayer = AudioPlayerDataSourceImpl( AudioPlayer(), ); getIt.registerLazySingleton(() => audioPlayer); final PlatformIntegrationDataSource _platformIntegrationDataSource = PlatformIntegrationDataSourceImpl(); getIt.registerLazySingleton( () => _platformIntegrationDataSource, ); // external final _audioHandler = await AudioService.init( builder: () => _platformIntegrationDataSource as AudioHandler, config: const AudioServiceConfig( androidNotificationChannelName: 'mucke', ), ); getIt.registerLazySingleton(() => _audioHandler); getIt.registerFactory(() => AudioPlayer()); getIt.registerLazySingleton(() => Audiotagger()); // actors getIt.registerSingleton( PlatformIntegrationActor( getIt(), getIt(), getIt(), ), ); getIt.registerSingleton( AudioPlayerActor( getIt(), getIt(), getIt(), ), ); getIt.registerSingleton( PersistenceActor( getIt(), getIt(), ), ); }