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/platform_integration_actor.dart'; import 'domain/entities/album.dart'; import 'domain/entities/artist.dart'; import 'domain/modules/queue_manager.dart'; import 'domain/repositories/audio_player_repository.dart'; import 'domain/repositories/music_data_modifier_repository.dart'; import 'domain/repositories/music_data_repository.dart'; import 'domain/repositories/persistent_player_state_repository.dart'; import 'domain/repositories/platform_integration_repository.dart'; import 'domain/repositories/settings_repository.dart'; import 'domain/usecases/add_to_queue.dart'; import 'domain/usecases/handle_playback_state.dart'; import 'domain/usecases/increment_play_count.dart'; import 'domain/usecases/inrement_like_count.dart'; import 'domain/usecases/move_queue_item.dart'; import 'domain/usecases/pause.dart'; import 'domain/usecases/play.dart'; import 'domain/usecases/play_album.dart'; import 'domain/usecases/play_artist.dart'; import 'domain/usecases/play_next.dart'; import 'domain/usecases/play_songs.dart'; import 'domain/usecases/remove_queue_index.dart'; import 'domain/usecases/seek_to_index.dart'; import 'domain/usecases/seek_to_next.dart'; import 'domain/usecases/seek_to_previous.dart'; import 'domain/usecases/set_current_song.dart'; import 'domain/usecases/set_loop_mode.dart'; import 'domain/usecases/set_shuffle_mode.dart'; import 'domain/usecases/set_song_blocked.dart'; import 'domain/usecases/shuffle_all.dart'; import 'domain/usecases/update_database.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 '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/platform_integration_data_source.dart'; import 'system/datasources/platform_integration_data_source_impl.dart'; import 'system/datasources/player_state_data_source.dart'; import 'system/datasources/settings_data_source.dart'; import 'system/repositories/audio_player_repository_impl.dart'; import 'system/repositories/music_data_modifier_repository_impl.dart'; import 'system/repositories/music_data_repository_impl.dart'; import 'system/repositories/persistent_player_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.registerFactory( () { final musicDataStore = MusicDataStore( musicDataInfoRepository: getIt(), settingsRepository: getIt(), musicDataModifierRepository: getIt(), incrementLikeCount: getIt(), setSongBlocked: getIt(), updateDatabase: getIt(), ); return musicDataStore; }, ); getIt.registerFactory( () { final audioStore = AudioStore( audioPlayerInfoRepository: getIt(), addToQueue: getIt(), moveQueueItem: getIt(), pause: getIt(), play: getIt(), playAlbum: getIt(), playArtist: getIt(), playNext: getIt(), playSongs: getIt(), removeQueueIndex: getIt(), seekToIndex: getIt(), seekToNext: getIt(), seekToPrevious: getIt(), setLoopMode: getIt(), setShuffleMode: getIt(), shuffleAll: getIt(), ); return audioStore; }, ); getIt.registerFactory( () { final navigationStore = NavigationStore(); return navigationStore; }, ); getIt.registerFactoryParam( (Artist artist, _) => ArtistPageStore(artist: artist, musicDataInfoRepository: getIt()), ); getIt.registerFactoryParam( (Album album, _) => AlbumPageStore(album: album, musicDataInfoRepository: getIt()), ); // use cases getIt.registerLazySingleton( () => AddToQueue( getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => HandlePlaybackEvent( getIt(), ), ); getIt.registerLazySingleton( () => IncrementLikeCount( getIt(), ), ); getIt.registerLazySingleton( () => IncrementPlayCount( getIt(), ), ); getIt.registerLazySingleton( () => MoveQueueItem( getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => Pause( getIt(), ), ); getIt.registerLazySingleton( () => Play( getIt(), ), ); getIt.registerLazySingleton( () => PlayAlbum( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlayArtist( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlayNext( getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => PlaySongs( getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => RemoveQueueIndex( getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => SeekToIndex( getIt(), ), ); getIt.registerLazySingleton( () => SeekToNext( getIt(), ), ); getIt.registerLazySingleton( () => SeekToPrevious( getIt(), ), ); getIt.registerLazySingleton( () => SetCurrentSong( getIt(), ), ); getIt.registerLazySingleton( () => SetLoopMode( getIt(), ), ); getIt.registerLazySingleton( () => SetShuffleMode( getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => SetSongBlocked( getIt(), ), ); getIt.registerLazySingleton( () => ShuffleAll( getIt(), getIt(), getIt(), ), ); getIt.registerLazySingleton( () => UpdateDatabase( getIt(), ), ); // modules getIt.registerLazySingleton( () => QueueManagerModule( getIt(), ), ); // repositories getIt.registerLazySingleton( () => AudioPlayerRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); getIt.registerLazySingleton( () => MusicDataRepositoryImpl( getIt(), getIt(), ), ); getIt.registerLazySingleton( () => getIt(), ); getIt.registerLazySingleton( () => MusicDataModifierRepositoryImpl( getIt(), ), ); getIt.registerLazySingleton( () => PlayerStateRepositoryImpl( 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.playerStateDao); getIt.registerLazySingleton(() => moorDatabase.settingsDao); getIt.registerLazySingleton( () => LocalMusicFetcherImpl( 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: AudioServiceConfig( androidNotificationChannelName: 'mucke', androidEnableQueue: true, ), ); getIt.registerLazySingleton(() => _audioHandler); getIt.registerFactory(() => AudioPlayer()); getIt.registerLazySingleton(() => Audiotagger()); // actors getIt.registerSingleton( PlatformIntegrationActor( getIt(), getIt(), getIt(), getIt(), getIt(), ), ); getIt.registerSingleton( AudioPlayerActor( getIt(), getIt(), getIt(), getIt(), getIt(), ), ); }