
Injectable 적용하기1. di/di_setup.dart 파일 생성2. 파일 붙여넣기 3. 내용 변경하기 di/di_setup.dartRepository_impl에 필요한 코드 UseCase의 경우(아마도 일반 class일 것임)ViewModel 처리하는 경우(화면마다 생성되는 게 맞음)한번에 정리하기Main 코드 수정하기
Injectable 적용하기
1. di/di_setup.dart 파일 생성
2. 파일 붙여넣기
//pub.dev에 있는 내용 복사
import '<FILE_NAME>.config.dart';
final getIt = GetIt.instance;
@InjectableInit(
initializerName: 'init', // default
preferRelativeImports: true, // default
asExtension: true, // default
)
void configureDependencies() => getIt.init();
3. 내용 변경하기 di/di_setup.dart
//pub.dev에 있는 내용 복사
import 'di_setup.config.dart'; //파일명 변경
import 'package:injectable/injectable.dart' //추가하기
import 'package:get_it/get_it.dart' //추가하기
final getIt = GetIt.instance;
@InjectableInit( ) //옵션 삭제
void configureDependencies() => getIt.init();
//혹여나 future로 처리해야 되는 사항이 발생하면 Future<void> 라고 처리하면 된다.
Repository_impl에 필요한 코드
→ implements를 통해서 받는 것들은 모두 Singleton으로 받아주면 된다.
@Singleton(as: Repository이름)
Repository이름Impl implements Repository이름
UseCase의 경우(아마도 일반 class일 것임)
@singleton //단순하게 소문자 @singleton으로 처리하면 된다.
class GetUseCase { }
ViewModel 처리하는 경우(화면마다 생성되는 게 맞음)
// @injectable -> viewModel은 화면마다 매번 생성되는 것이 맞다. -> @injectable을 추가하자
@injectable
clas MainViewModel with ChangeNotifier { }
한번에 정리하기
return MainViewModel (
GetNearByStoreUseCase (
storeRepository: MockRepositoryImpl(),
locationRepository: MocakLocationRepositoryImpl(),
locationPermissionHandler: MockLocationPermissionHandler(),
) -> 이 내용이 한꺼번에
return getIt.get<MainViewModel>();
----------------------------------------------------------------------------------------
//동일하게, goRouter를 적용한다고 가정하면,
create:(BuildContext context) => getIt.get<MainViewModel>();
Main 코드 수정하기
void main() {
configureDependencies();
}
Share article