플러터 프레임워크에서 자주 사용되는 상태관리 라이브러리
이 외 사용되는 라이브러리로는 provider, get, Bloc 등이 있다.
Riverpod 은 Provider 를 대체하기 위해 탄생하였다.
Provider 의 공급자를 읽기 위해서는 BuildContext.watch 를 사용하고,
RiverPod 의 공급자는 WidgetRef.watch 를 사용한다.
WidgetRef 는 Riverpod 이 제공하는 ConsumerWidget 의 build 함수의 매개변수
https://riverpod.dev/docs/from_provider/provider_vs_riverpod
Riverpod 은 많은 공급자를 제공하고 있는데, 여기서 (Async)NotifierProvider 와 StateProvider 만 사용하면 웬만한 상태 관리 로직은 구현할 수 있을 것 같다.
(Async)NotifierProvider 은 비동기 또는 동기 방식으로 notifier 를 수신하고 노출하는 데 사용된다.
공급자의 상태가 변경된 경우 notifier 에 변경점을 알리고, notifier 는 초기화되어 변경점을 나타낼 수 있다.
StateProvider 는 간단한 상태를 변경할 때 사용된다.
(게시글을 읽었다는 표시를 하기 위해 사용해보자)
공급자 정의 방식으로는 2가지가 존재한다.
final myProvider = Provider<?>((ref) => 'hello');
part 'myProvider.g.dart';
@riverpod
class My extends _$My {
@override
List build() {
return [];
}
}
위와 같이 클래스를 생성하기 위해서는 riverpod_generator, riverpod_annotation 라이브러리가 추가되어야 한다.
클래스를 작성하였다면, 터미널에서 flutter run build_runner build
커맨드를 입력하면 part 에 지정했던 이름의 dart 파일이 생성된다.
클래스 이름은 My
이지만
riverpod_generator 이 prefix 설정과 suffix 설정이 되어있으므로 접근할 때에는 ref.watch(myProvider)
같이 접근할 수 있다.