Flutter에서, Injectable 적용하기

Feb 27, 2025
Flutter에서, Injectable 적용하기
 

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

정리한 노션 내용을 올리는 공간