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

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

조재우님의 프로필 이미지
조재우

작성한 질문수

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

Provider안에 Provider 사용하기

Provider 내에 Provider 2개를 이용할 때 화면 업데이트 궁금한점.

작성

·

50

0

김치,라면,삼겹살 등등의 값을 바꾼뒤에 filter 를 하면 가끔씩 필터가 안되는 아이들이 보이는 문제가 왜 발생되는지 궁금합니다! 강의 영상에서도 보였구요,

 

두 번째로는, toggleHasBought() 로 값을 변경하면 화면이 다시 그려지는데 왜 필터는 적용되지 않는지 이유도 알고싶습니다!

답변 2

0

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

안녕하세요!

코드 예제와 함께 질문 부탁드립니다. 문맥이 없으면 질문을 파악하기 어렵습니다.

감사합니다!

조재우님의 프로필 이미지
조재우
질문자

final filteredShoppingListProvider = Provider<List<ShoppingItemModel>>(
  (ref) {
    final filterState = ref.watch(filterProvider);
    final shoppingListState = ref.watch(shoppingListProvider);

    if (filterState == FilterState.all) {
      return shoppingListState;
    } else {
      return shoppingListState
          .where((element) => filterState == FilterState.spicy
              ? element.isSpicy
              : !element.isSpicy)
          .toList();
    }
  },
);
조재우님의 프로필 이미지
조재우
질문자

아래 코드에서 provider에 filterProvider 와 shoppingListProvider 두개를 등록했습니다.

질문의 요지는 filterState 든, shoppingListState 든 두 개중에 1개의 상태가 변화되도 Re build 한다고 배웠는데, shoppingListState 의 filter 되는 속성이 변경되도 UI에서는 왜 계속 보여지는 궁금합니다.

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

안녕하세요!

말씀하신대로 두 상태를 모두 watch() 하고 있기 때문에 둘중 누가 변경되더라도 rebuild 됩니다. rebuild가 안된다는 관점의 질문이 맞을까요? 로그를 찍거나 디버깅 브레이크 포인트를 설정해서 확인 해보시면 분명 rebuild가 될거라고 생각합니다. 만약 안된다면 다시 질문 부탁드립니다.

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

조재우님께서 질문하신 두 가지 사항에 대해 설명드릴게요.

첫 번째로, 김치, 라면, 삼겹살 같은 값을 변경한 뒤에 필터가 정상적으로 적용되지 않는 이유는 여러 가지가 있을 수 있습니다. 일반적으로 필터링 기능이 제대로 작동하지 않는 경우는 상태 관리에서 상태 변화를 제대로 반영하지 않았거나, UI가 상태 변화에 따라 올바르게 다시 그려지지 않는 경우에 발생할 수 있습니다. 강의에서 언급된 것처럼, 상태 관리 도구가 해당 상태 변화를 감지하지 못한 상황이나 의도하지 않은 side effect 때문에 이런 현상이 발생할 수 있습니다.

두 번째로는, toggleHasBought() 함수를 통해 값을 변경할 때 화면은 다시 그려지지만 필터가 적용되지 않는 문제는 필터링 로직이 상태 변화에 직접적으로 반응하지 않기 때문에 발생할 수 있습니다. 상태 변경이 있을 때 마다 필터링 로직을 호출하도록 구현되어야 올바르게 표시됩니다. 업데이트가 필요한 시점에서 명시적으로 필터링 기능을 다시 작동시키도록 구성할 필요가 있습니다.

이와 유사한 주제에 대해 더 많은 정보를 얻으시려면 다음의 질문을 참고하실 수 있습니다:
- 상태 설계 관련 질문드립니다.
- riverpod 상태관리시에 궁금한점 질문드립니다.

다양한 상태 관리 기술들(Riverpod, Provider 등)의 차이점과 각각의 장단점을 이해하는 것이 중요하며, 이를 통해 문제 해결에 대한 더 나은 접근 방식을 개발할 수 있습니다. 따라서 위의 링크들을 통해 추가 정보를 확인해 보시고, 자신의 코드에 어떻게 응용할 수 있을지 고민해 보시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

조재우님의 프로필 이미지
조재우

작성한 질문수

질문하기