notifier provider /state에 바로 추가하는 것과 add함수로 추가하는 것 차이
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() 하는 기능은 실제 변수의 메모리 주소가 변경돼야만 실행됩니다.
감사합니다!
Isar 마지막 업데이트는 2년전입니다.
0
30
0
FlutterSecureStorage 질문
0
31
0
Dio onError Interceptor 만드는 부분에 질문이 있습니다.
0
79
2
관리자 기능에 대한 질문
0
100
2
part 'restaurant_model.g.dart';
0
92
1
36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.
0
56
2
2번 반환 상황 관련 질문
0
61
2
riverpod 3.0
0
139
2
Asset folder??
0
82
2
디자이너와 협업 시 프레임 크기 설정 관련 질문
0
113
2
FutureProvider, StateNotifierProvider 선택 기준
0
70
2
컴포넌트 모델화
0
64
2
쿼리 파라미터
0
84
2
화면 안보임
0
67
2
PaginationListView
0
54
1
강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.
0
101
2
프로토타입이미지
0
62
2
여러 객체를 상태 관리하는 방법에 대한 질문
0
84
2
장바구니 결제하기 응답이 500이 옵니다.
0
105
2
removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?
0
67
2
이 두가지는 완전히 동일한 기능인가요?
0
106
3
내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...
0
77
2
_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?
0
86
2
코딩 작성 순서 관련 질문
0
88
2





