• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

widget build private 함수 멀티 호출

22.03.25 11:55 작성 조회수 167

0

안녕하세요. 강의코드중 궁금한게 몇가지 있어서 질문드립니다. 

1. add_edit_note_screen.dart 파일에서

param 값인 selected와 color를 콘솔에 찍어보면

한번 클릭시 여러번의 로그가 쌓이는데요.. 

색상 변경시 _buildBadkgroundColor() 함수가 여러번 호출이 되어서 그런건지 color의 갯수만큼 로그가 찍히는데요..정상인건가요? 

 

 

2. 다른 강의에서도 설명해주신 내용으로 자체 개발을 진행해보고 있는데요.. di/ provider_setup.dart 파일을 구성할때

가령 msa 구조로 product, order 이렇게 모듈로 나누어져 있고 product 모듈에서 쓰는 여러 api 및 use_case, order에서 쓰는 여러 api 및 use_case가 있을텐데요..

이렇게 앱이 규모가 커졌을때 provider_setup 파일에 각 모듈에 해당하는 productAPI 및 use_case를 다 정의해줘야 하는지 아니면 다른 방법이 있는지 궁금합니다.

 

ProxyProvider<http.Client, PixabayApi>(
update: (context, client, _) => PixabayApi(client),
),
ProxyProvider<PixabayApi, PhotoApiRepository>(
update: (context, api, _) => PhotoApiRepositoryImpl(api),
),
ProxyProvider<PhotoApiRepository, GetPhotosUseCase>(
update: (context, repository, _) => GetPhotosUseCase(repository),
),

 

이전에 이렇게 pixabayapi 및 use_case가 1개라 위와 같이 선언이 되었는데요..

pixabayapi 외에도 또 다른 productapi, orderapi 가 존재하는 경우, 그리고 각 product 모듈내에 GetPhotoUseCase 처럼 하나가 아닌 여러 useCase가 존재할때 같은 방식으로 각 useCase별로 여러번 위와 같이 선언을 해야 하나요? 

 

ProxyProvider<http.Client, PixabayApi>(
update: (context, client, _) => PixabayApi(client),
),
ProxyProvider<PhotoApiRepository, GetPhotosUseCase>(
update: (context, repository, _) => GetPhotosUseCase(repository),
),

//product API
ProxyProvider<http.Client, ProductApi>(
update: (context, client, _) => ProductApi(client),
),

 

//여러개 use case일때??????

ProxyProvider<ProductApiRepository, GetProductUseCase>(
update: (context, repository, _) => GetProductUseCase(repository),
),
 
ProxyProvider<ProductApiRepository, GetProductDetailUseCase>(
update: (context, repository, _) => GetProductDetailUseCase(repository),
),

ProxyProvider<ProductApiRepository, UpdateProductDetailUseCase>(
update: (context, repository, _) => UpdateProductDetailUseCase(repository),
),


.... usecase별로 다 생성이 필요한거죠???

 

 

답변 1

답변을 작성해보세요.

0

1. noteColors를 map 함수로 변환하고 있으니 색상 갯수만큼 실행되는 것이 맞습니다. 로그를 잘 보시면 색상도 모두 다르고 상태도 한 개만 true 이지요.

2. 네. 잘 하고 계십니다.

추가로 부연 설명을 추가하자면

Provider로 설정을 하는 이유가 다른 곳에서도 쉽게 해당 객체 인스턴스를 얻고자 하기 위함입니다.

모든 객체를 싱글턴으로 취급하겠다면 위와 같이 모든 객체를 Provider로 설정해도 되고, 상황에 따라서는 다른 방식도 응용할 수 있습니다.

어떤 ViewModel은 싱글턴이면 안 되는 상황도 있습니다. 예를 들어 리스트에서 클릭시 상세 페이지로 들어가는 부분은 상세 페이지로 들어갈 때 Provider 가 작성되어서 매번 ViewModel을 다시 생성해야 합니다. 이 때는 navigator.push 하는 순간에 Provider 코드가 들어가지요.

그래서 의존성 주입 부분은 여러가지 옵션이 있을 수 있겠습니다.

따라서 프로젝트가 복잡해 지게 되면get_It 패키지 도입도 고려해 볼 만 합니다. 싱글턴과 매번 생성되는 인스턴스 설정을 관리하기가 좀 더 쉬워집니다.

https://www.youtube.com/watch?v=f9XQD5mf6FY

이동현님의 프로필

이동현

질문자

2022.03.28

항상 친절하고 자세한 답변 감사드립니다.