import 'dart:ui'; import 'package:flutter_audio_query/flutter_audio_query.dart'; import 'package:get_it/get_it.dart'; import 'package:moor/isolate.dart'; import 'package:moor/moor.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/audio/audio_manager.dart'; import 'system/audio/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 { print('setupGetIt'); // stores getIt.registerFactory( () { final musicDataStore = MusicDataStore( musicDataRepository: getIt(), ); musicDataStore.init(); return musicDataStore; }, ); getIt.registerFactory( () { final audioStore = AudioStore( audioRepository: getIt(), ); return audioStore; }, ); getIt.registerFactory( () { final navigationStore = NavigationStore(); return navigationStore; }, ); // repositories getIt.registerLazySingleton( () => MusicDataRepositoryImpl( localMusicFetcher: getIt(), musicDataSource: getIt(), ), ); getIt.registerLazySingleton( () => AudioRepositoryImpl( getIt(), ), ); // data sources final MoorIsolate moorIsolate = await createMoorIsolate(); IsolateNameServer.registerPortWithName(moorIsolate.connectPort, MOOR_ISOLATE); final DatabaseConnection databaseConnection = await moorIsolate.connect(); final MoorMusicDataSource moorMusicDataSource = MoorMusicDataSource.connect(databaseConnection); getIt.registerLazySingleton(() => moorMusicDataSource); getIt.registerLazySingleton( () => LocalMusicFetcherImpl( getIt(), ), ); getIt.registerLazySingleton(() => AudioManagerImpl()); // external getIt.registerLazySingleton(() => FlutterAudioQuery()); }