Riverpod
Flutter 개발자들이 가장 많이 사용하는 상태관리 도구, 라이브러리
Flutter 상태관리의 표준이라고 불리며 Flutter 개발자 채용공고를 볼때 우대사항에 필수적으로 들어간다.
구글 내부 팀에서 만든 것은 아니지만 Flutter 커뮤니티에서 가장 신뢰받는 개발자가 관리함.
관리에 대표주자인 git이 코드를 '이전버전'으로 복구하는게 주요 목적이라면
Riverpod는 앱 실행중에 화면 상태관리가 중점이다.
https://standout.tistory.com/207
git이란?
git 버전 관리 시스템(VCS) 소스 코드의 변경 사항을 추적하고 이를 효율적으로 관리 협업시 각자의 변경 내용을 쉽게 합칠 수 있도록 도움 https://git-scm.com/ Git git-scm.com 오픈소스이며, 무료로 사용
standout.tistory.com
이 두개를 따로 쓰지않는다.
git은 과거형, 리버팟은 현재형으로 무조건 같이 쓰는 단짝이다.
개발자는 Riverpod에서 내 입에서 화면에 숫자와 로그인상태등의 데이터가 어떻게 흐를지 설계한다.
그리고 기능을 잘 만들었다면 상태를 영구적으로 보존하기 위해 git으로 그 설계의 역사를 기록한다.
자세히 과정을 짚어가며 이해를 해보자.
main.dart에 앱의 가장 최상단을 ProviderScope로 감싸서 로봇이 활동할 영역을 지정한다.
void main() {
runApp(
// 1. 로봇(Riverpod)이 앱 전체를 관리할 수 있도록 울타리를 칩니다.
const ProviderScope(
child: MyApp(),
),
);
}
riverpod를 import 하여 @riverpod로 로봇에게 관리해야할 대상을 알리고,
1. 로봇은 우리가 작성한 함수의 반환타입과 함수 이름을 읽고 최종적 결과물을 판단한다.
Future<int> -> 결과물은 int임을 인지
2. 처음시작할때 실행하는 함수로 약속된 build()와 그 return 값을 보고 시작을 판단한다.
build() > return 0; -> 첫 시작은 0임을 인지
3. class 이름으로 로봇이 변수를 세팅한다.
사용자가 class CountProvider라고 이름을 짓는다 -> 로봇은 그 이름을 가져다 countProviderProvider라는 이름으로 'class 이름 + Provider' 자동 생성해 화면에서 쓸 수 있는 변수를 대신 만든다.
4. 로봇은 build()를 제외한 모든 함수를 데이터를 조작하는 기능으로 인식하고 사용자가 함수를 만들면 view에 버튼을 만든다.
countUp()... 을 보고 notifier.countUp()이란 버튼을 만들어준다.
5. 코드는 모두 개발자가 작성하지만 로봇은 이 데이터가 바뀌었을때 화면을 다시 그리라고 명령하는 배선작업을 대신 한다.
import 'package:riverpod_annotation/riverpod_annotation.dart';
// [3번 과정] 로봇이 'count_provider.g.dart'라는 빈 종이에 배선 코드를 자동으로 적습니다.
part 'count_provider.g.dart';
@riverpod // [1번 과정] 로봇에게 이 클래스를 관리하라고 알리는 스티커
class CountProvider extends _$CountProvider {
// [2번 과정] 초기값 설정. Future<int>를 보고 로봇은 '아, 숫자가 오겠구나' 인지합니다.
@override
Future<int> build() async {
return 0; // 첫 시작은 0으로 설정
}
// [4번 과정] 데이터 조작 함수. 로봇은 이를 notifier에 연결된 기능으로 인식합니다.
void countUp() {
// 로봇이 제공하는 state를 통해 값을 업데이트하면,
// [5번 과정] 로봇이 이 데이터를 쓰는 모든 화면에 "새로고침!" 명령을 내립니다.
final currentValue = state.value ?? 0;
state = AsyncValue.data(currentValue + 1);
}
}
+
개발자는 로봇이 없다면 countUp()안에 count++등의 코드를 작성해야하나, 로봇은 countUp()이 실행되어 데이터가 바뀌는 순간, view 위젯들에게 화면을 다시 그리라고 명령하는 것이다. 즉 데이터가 바뀔 때마다 루프를 돌며 업데이트 함수를 호출하지 않아도 된다.
+
또한 로봇은 데이터를 단순히 int로 판단하지 않고 AsyncValue로 인식해 데이터를 가져오는 동안 자동으로 로딩중 상태를 만들고 실패하면 에러 사태로 바꿔준다. 이또한 로봇이 없다면 개발자는 try-catch문과 if문으로 도배를 해야한다.
+
더불어 로봇은 메모리도 지워 앱을 가볍게 유지하기 때문에 앱이 느려지는것을 따로 관리하지 않아도 된다.
'이론' 카테고리의 다른 글
| 타입 힌트란? : return값을 Python이 알 수 없지만 실행될때 결정될것이라는것을 인지한다. (0) | 2026.05.08 |
|---|---|
| Command Prompt(CMD) vs PowerShell 차이 (0) | 2026.05.06 |
| Hive란? : SQL 없이 데이터를 읽고 쓰는 초경량 NoSQL 데이터베이스 (0) | 2026.05.06 |
| SQLite란? : 내 주머니 속의 작은 데이터베이스 (0) | 2026.05.06 |
| application.YML의 종류: dev.xml, prod.xml, stag.xml (0) | 2024.11.01 |