인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Jay님의 프로필 이미지
Jay

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

riverpod watch 사용

작성

·

348

0

flutter 화면 layout 을 만들때 코드가 길어져 Screen 의 위젯들을 분리하여 만들고
build 에서 합체시킵니다.
riverpod provider 에서 상태값을 가져와 위젯에 출력해주고자 하는데
궁금한 점은 각 분리된 위젯들에서 상태값을 독립적으로 watch 해서 적용하는 것과,
build 에서 통합적으로 watch 하다가 필요한 값들을 각 위젯으로 넘겨주는 것 중 어떤것이 성능상 이로운지
아니면 별 차이가 없는지 궁금합니다.

(각 위젯마다 여기저기서 watch 를 하고 있으면 더 성능이 떨어질 것 같기도 하고, build 에다 넣어 놓으면 화면 재 빌드 될 때 영향을 받을 것 같기도 하고 괜한 걱정인가요?^^;; )


@override
Widget build(BuildContext context) {
 var state = ref.watch(userAccountProvider);
 return Column(
    children: [
      _loginA(state.userName),
      _loginB(state.userId),
    ], 
  );
}

or

Widget _loginA() {
 var state = ref.watch(userAccountProvider);
 return Text(state.userName);
}


Widget _loginB() {
 var state = ref.watch(userAccountProvider);
 return Text(state.userId);
}

 

 

 


답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

provider를 watch 할 위치를 렌더링 기준으로 고려하실 필요는 없습니다.

상위 위젯이 다시 렌더링되면 어차피 하위 위젯도 다시 렌더링 됩니다. (상위에 두지 않고 하위에 두겠다면 또 다른 얘기입니다. 하위에 두는게 효율적인건 맞습니다. 부분적으로만 다시 렌더링하니까요)

다만 코드 관리의 관점에서 어떤 위젯이 데이터를 들고있는게 유리할지 생각해보시는게 좋습니다!

 

Jay님의 프로필 이미지
Jay
질문자

네 답변 감사합니다.
조금 더 고민해 보겠습니다. ^^

Jay님의 프로필 이미지
Jay

작성한 질문수

질문하기