작성
·
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 할 위치를 렌더링 기준으로 고려하실 필요는 없습니다.
상위 위젯이 다시 렌더링되면 어차피 하위 위젯도 다시 렌더링 됩니다. (상위에 두지 않고 하위에 두겠다면 또 다른 얘기입니다. 하위에 두는게 효율적인건 맞습니다. 부분적으로만 다시 렌더링하니까요)
다만 코드 관리의 관점에서 어떤 위젯이 데이터를 들고있는게 유리할지 생각해보시는게 좋습니다!
네 답변 감사합니다.
조금 더 고민해 보겠습니다. ^^