본문 바로가기

IT/Flutter

Provider 그리고 Riverpod#

riverpod를 사용하면서 경험한 바보같은 실패담

 

1. 변경? 생성?

HookWidget을 이용해서 자동적으로 상태를 업데이트 하려고 했는데, 

아무리 해도 변화가 없어서 포기하려고 한순간!! 

riverpod 튜토리얼에서 발견한 한것은 바로!

StateNotifier<T> 클래스 안에서 모든 연산들이 다 변수의 변경이 아니라 생성이였다는 점이였다.

 

예를 들어서

list.add(anyting)이런 식이 아니라.

var list = [...state, anyting]요런식으로 

새로운 변수를 생성해서 반환하는 식으로 되어있었다.

 

결국 StateNotifier<T> 에서 noti를 하려면 내부의 변수의 변경이 아니라 새로운 값을 넣을때만 notify갱신이 

생긴다는 걸 한 6시간의 노가다끝에 알게 되었다. 

 

특별히 튜토리얼 설명글을 다 읽고 이해 하고 하는게 아니라 단순히 코드만 가지고 할라니까 이런 단순한 실수가 생기는거 같다는

 

 

2. useProvider?

riverpod에서 provider처럼 값에 접근하기 위해서는 useProvider를 사용해야 하는데

ㅂㅅ같이 그냥 변수라고 생각해서 클래스 안에서 내부 변수로 선언해서 썼는데,

계속 HookWidget이 잘못됐다고 에러가.....ㅠㅠ

이것도 한 3시간 이상 튜토리얼 소스랑 한줄한줄 비교해보면서 찾아보니까

useProvider는 build함수 안에서 선언해서 썼다는....아~~~~

어쩌면 당연한건데.....상태변화에 따라서 계속 업데이트를 해야 하는 구조인데 그걸 build밖에다가

클래스 내부 변수로 선어하면 말이 되니?.....ㅂㅅ이니?

 

아무튼 별 쓸데없는걸로 굉장이 고생스러운 하루였다.