리버팟에서 헷갈릴 수 있는 부분은 read와 watch 그리고 notifier 부분이다.
final nameProvider= StateProvider<String?>((ref) => "");
해당 Provider는 이름을 가지고 있는 Provider다. 기본값이 “”(빈값)이고, 이렇게 선언하면 글로벌하게 모든 곳에서 접근이 가능하다.
final nameNotifier= ref.read(nameProvider.notifier);
를 하면, 1회성으로 해당 프로바이더의 notifier를 가져온다.
final nameString= ref.read(nameProvider);
이 코드는 그냥 값을 읽어오는게 된다. “”이 return 된다. 여기서 수정하거나 state를 반영하는 등의 조작은 되지 않는다.
위 nameNotifier는 해당 Provider를 update하거나 state에 접근하는 권한이 생긴다.
final nameWatch= ref.watch(nameProvider);
watch() 를 하면, 해당 Provider의 값이 바뀔때마다, 이 watch가 소속해있는 Consumer 또는 ConsumerWidget을 rebuild하게 된다.
이 내용은 다음 글에서 다루기로 한다.