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

김상호님의 프로필 이미지
김상호

작성한 질문수

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

StateNotifierProvider 실습

notifier provider /state에 바로 추가하는 것과 add함수로 추가하는 것 차이

해결된 질문

작성

·

245

0

onPressed: () {
  ref.read(shoppingListProvider.notifier).state += [
    ShoppingItemModel(
        name: uuid.v1(),
        quantity: 5,
        hasBought: false,
        isSpicy: true)
  ];
},

추가하는 것도 혼자 연습해보다가 의문이 생겼습니다.

위 코드에서는 watch해둔 것 때문에 build()가 바로바로 재실행되는 것 같은데 아래같이 List에 추가할 때처럼 add함수로 추가하면 build()가 되지 않고 HomeScreen으로 나갔다 들어와야만 적용이 되는 것을 볼 수 있었습니다.

똑같이 state에 model을 추가하는 것인데 무슨 차이가 있는 건가요?

 

ref.read(shoppingListProvider.notifier).state.add(
  ShoppingItemModel(
      name: uuid.v1(),
      quantity: 5,
      hasBought: false,
      isSpicy: true)
);

답변 1

1

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

안녕하세요!

List에 add() 함수를 사용하면 리스트의 메모리 주소가 달라지지 않습니다.

즉, 리스트 안에 값을 변경하긴 했지만 List 자체가 다른 리스트가 아니기 때문에 watch()가 성립되지 않습니다.

모든 상태관리 툴에서 watch() 하는 기능은 실제 변수의 메모리 주소가 변경돼야만 실행됩니다.

감사합니다!

김상호님의 프로필 이미지
김상호

작성한 질문수

질문하기