해결된 질문
작성
·
76
0
안녕하세요.
아래와 같은 오류가 나서 해결을 하려고 했습니다.
제공해주신 완성 본 코드와 비교하니 정확하게 일치했구요.
E/flutter (22734): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: Bad state: GetIt: Object/factory with type StoreRepository is not registered inside GetIt. E/flutter (22734): (Did you accidentally do GetIt sl=GetIt.instance(); instead of GetIt sl=GetIt.instance;
이해가 안되어서 di_setup_config.dart파일을 보는데
const String dev = 'dev';
const String prod = 'prod';
extension GetItInjectableX on i174.GetIt {
// initializes the registration of main-scope dependencies inside of GetIt
i174.GetIt init({
String? environment,
i526.EnvironmentFilter? environmentFilter,
}) {
final gh = i526.GetItHelper(
this,
environment,
environmentFilter,
);
gh.singleton<_i149.LocationPermissionHandler>(
() => i399.MockLocationPermissionHandler(),
registerFor: {dev},
);
gh.singleton<_i872.StoreRepository>(
() => i399.MockStoreRepositoryImpl(),
registerFor: {dev},
);
gh.singleton<_i920.LocationRepository>(
() => i399.MockLocationRepositoryImpl(),
registerFor: {dev},
);
gh.singleton<_i716.GetNearByStoresUseCase>(
() => i716.GetNearByStoresUseCase(
storeRepository: gh<i872.StoreRepository>(),
locationRepository: gh<_i920.LocationRepository>(),
locationPermissionHandler: gh<_i149.LocationPermissionHandler>(),
));
gh.singleton<_i920.LocationRepository>(
() => i359.LocationRepositoryImpl(),
registerFor: {prod},
);
gh.singleton<_i872.StoreRepository>(
() => i303.StoreRepositoryImpl(),
registerFor: {prod},
);
gh.singleton<_i149.LocationPermissionHandler>(
() => i148.LocationPermissionHandlerImpl(),
registerFor: {prod},
);
gh.factory<_i912.MainViewModel>(
() => i912.MainViewModel(gh<i716.GetNearByStoresUseCase>()));
return this;
}
}
GetNearByStoresUseCase 코드가 prod버전의 코드들 보다 상위에 배치되어서 발생했습니다.
di_setup_config.dart파일을 자동으로 생성되는 파일인데 매번 dart run build_runner build 할 때 마다 일일이 수동으로 수정을 해줘야 할까요?
flutter pub run build_runner build --delete-conflicting-outputs
를 해도 동일합니다.
답변 1
0
여러가지 방법이 있는데요.
@singleton 어노테이션 대신에 @lazySingleton 으로 고쳐서 지연된 초기화를 하면 해결 될 것 같습니다.
혹시 해결 되셨는지 답변 기다리겠습니다.
GetNearByStoresUseCase 쪽에서 @lazySingleton를 하니까 정상적으로 동작했습니다.
감사합니다!