Riverpod
Riverpod는 상태관리 라이브러리이다.
상태관리란 데이터를 효율적으로 관리하고, 위젯간에 데이터 공유를 효율적으로 하기위한 방법이다.
상태관리 라이브러리는 Riverpod 이외에 여러 종류가 있다.
- Getx
- Provider
- Bloc
위의 3가지 이외에도 더 있지만 종류가 많아 유명한 3개만 적었다.
Riverpod은 위에 3가지 라이브러리 중 Provider를 개선한 버전이라고 한다.
무엇을 개선했는지는 이후에 정리를 한번 다시해볼수있도록할 예정이다.
나는 일단 들이박고 보기때문에 바로 핵심 기능부터 알아보고 사용해보았다.
사용해보면서 알아낸 신기한부분
지금까지 Getx만 사용하다가 Riverpod을 해보면서 신기했던점은
전역으로 provider를 선언하는점이었다.
Provider
Provider는 데이터를 관리하는 역할이다. 필요한 위젯에 제공을하거나 특정상황마다 함수를 호출해줄수도있다.
Riverpod는 provider의 종류가 다양하다. 각자 역할이 있으며 용도에 맞게 사용하면 된다.
- Provider : 하나의 값을 제공하는 가장 기본적인 형태다 값 변경은 안된다.
- StateNotifierProvider : StateNotifier 클래스의 상태변화를 알려준다. StateNotifier에는 비즈니스 로직이 들어가는것같다.
- FutureProvider : 말 그대로 비동기작업의 상태를 제공한다. 개인적으로 자주 사용하고싶은 provider이다.
이외에도 더 있는것같지만 일단 이정도만 정리를 한 다음에 조금더 사용을 해보고 점차 내용을 보완해갈것이다.
Riverpod 맛보기
ProviderScope
Riverpod를 사용하기 위해서는 최상단에 ProviderScope로 감싸줘야 사용이 가능하다.
void main() {
runApp(ProviderScope(child: MyPost()));
}
ConsumerWidget
provider의 데이터를 받아보기 위해서는 기존의 Stateful 또는 StatelessWidget을 ConsumerWidget으로 변경해서 사용해야한다.
class PostView extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) { //ConsumerWidget을 사용하면서 ref 부분이 추가되었다
final auth = ref.watch(authProvider);
return Scaffold(
body: Center(
child: auth == null
? LoginView()
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(auth.email ?? "null"),
Text(auth.provider_id ?? "null"),
Text(auth.access_token ?? "null"),
Text(auth.refresh_token ?? "null"),
],
)),
);
}
}
Ref
이것이 최종적으로 UI와 데이터간의 연결고리 느낌으로 자주 쓰일것으로 보인다.
잠깐 사용해본결과 Ref에는 listen, read, watch, refresh 를 자주쓴다.
- listen : 변화할때마다 특정 함수 호출
- read : 값을 읽어올수있고 콜백을 사용할수있다.
- watch : 값을 읽어오고, 변화를 감지한다.
주의할 부분
사용하다보니 read와 watch 는 데이터를 출력하는 부분에서는 차이가 없어서 알아보았다.
공식 문서에 이렇게 나와있다.
기능을 구현할때는 가급적 ref.read 또는 ref.listen보다 ref.watch 사용을 권장합니다.
ref.watch를 사용하게되면 리엑티브와 선언형에 가까워지고 애플리케이션을 더 유지보수 하기 편리하게 만들어줍니다.
무슨말인지 도무지 알수가없다.. 이부분은 조금더 공부해서 알아내보자..
박치기 해보며 느낀점
Riverpod은 철저하게 상태를 관리하기위해 나온것같다.
지금 사용중인 GetX는 flutter를 집어삼킬 정도로 점유하고있는 부분이 많고, 사용법도 간단해서 개발속도가 빠른 장점이 있지만
그만큼 GetX에 의존을 하게되는 반면에 Riverpod는 가볍고 스무스하게 프로젝트에 녹아들것만같은 느낌이다. 상당히 유연한것이 매력포인트다.
앞으로 Riverpod을 주력으로 개발을 해도 될것같다.
Riverpod 공식문서
시작하기 | Riverpod
[Riverpod]의 내부 메커니즘에 들어가기 앞서, 우선 [Riverpod]을 설치하는 방법과
riverpod.dev