본문 바로가기
Flutter

[Flutter] 상태관리가 되는 앱 만들어 보기 03 (RiverPod)

by JINJINC 2025. 1. 21.
728x90
반응형

Flutter 상태 관리: RiverPod 소개와 활용법

Flutter에서 상태 관리를 위해 다양한 도구를 사용할 수 있지만, RiverPod는 코드의 간결성과 테스트 용이성을 높여주는 강력한 상태 관리 도구입니다. 이번 글에서는 RiverPod의 기본 사용 방법과 몇 가지 예제를 통해 이를 활용하는 방법을 알아보겠습니다.


1. RiverPod란?

RiverPod는 Flutter의 상태 관리 패키지로, Provider의 한계를 극복하기 위해 만들어졌습니다. 주요 특징은 다음과 같습니다:

  • 명확한 상태 관리: 상태를 명확하게 정의하고 관리할 수 있습니다.
  • 컴파일 타임 검증: 잘못된 사용을 컴파일 시점에 감지합니다.
  • 독립적 동작: Flutter 위젯 트리에 의존하지 않고 상태를 관리합니다.

2. RiverPod 기본 사용법

2.1 ProviderScope로 감싸기

RiverPod을 사용하려면 반드시 ProviderScope로 앱을 감싸야 합니다.


void main() { runApp(ProviderScope(child: MyApp())); }

2.2 ConsumerWidget 사용

ConsumerWidget을 사용하면 WidgetRef를 통해 상태에 접근할 수 있습니다.


class TodoPage extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final todo = ref.watch(todoProvider); return Text('할 일: ${todo.description}'); } }

3. RiverPod의 주요 Provider 종류

3.1 Provider

한 번만 데이터를 제공하며, 상태가 변하지 않는 정적인 데이터에 적합합니다.

final todoProvider = Provider<Todo>((ref) { return Todo(isCompleted: true, description: '상태 관리 배우기'); });

3.2 StateNotifierProvider

상태 변경이 필요한 경우 사용하며, 상태와 변경 메서드를 함께 관리합니다.

class FruitStore extends StateNotifier<String> { FruitStore(super.state); void changeData(String newFruit) => state = newFruit; } final fruitProvider = StateNotifierProvider<FruitStore, String>((ref) { return FruitStore('사과'); });

4. RiverPod 활용 예제

4.1 Todo 관리

Provider를 사용하여 단순한 Todo 객체를 관리합니다.


final todoProvider = Provider<Todo>((ref) { return Todo( isCompleted: false, description: 'RiverPod 배우기', ); });

4.2 과일 상태 변경

StateNotifierProvider를 사용하여 과일 이름을 관리하고 버튼 클릭 시 상태를 변경합니다.


ElevatedButton( onPressed: () { ref.read(fruitProvider.notifier).changeData('딸기'); }, child: Text('딸기로 변경'), );

4.3 책 리스트 관리

StateNotifierProvider로 책 리스트를 관리하고 새로운 책을 추가합니다.

final myBookStoreProvider = StateNotifierProvider<MyBookStore, List<String>>((ref) { return MyBookStore(); }); class MyBookStore extends StateNotifier<List<String>> { MyBookStore() : super(\[\]); void addBook(String book) { state = \[...state, book\]; } }

5. 정리

RiverPod에서 기억해야 할 개념

  • ref.read(): 현재 상태를 한 번 가져옴.
  • ref.watch(): 상태 변경을 구독.
  • StateNotifierProvider: 상태와 변경 메서드를 함께 관리.

RiverPod의 장점

  • 간단한 상태 관리: 상태 정의와 관리가 명확합니다.
  • 테스트 가능성: 위젯 트리와 독립적으로 동작하여 테스트하기 쉽습니다.
  • 확장성: 다양한 상태 관리 요구 사항에 대응할 수 있습니다.

6. 예제 코드 전체 보기

main.dart

void main() { runApp(ProviderScope(child: MyApp())); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: BookPage(), ); } }

book.dart

final myBookStoreProvider = StateNotifierProvider<MyBookStore, List<String>>((ref) { return MyBookStore(); }); class MyBookStore extends StateNotifier<List<String>> { MyBookStore() : super(\[\]); void addBook(String book) { state = \[...state, book\]; } }

RiverPod은 Flutter에서 상태 관리를 보다 간단하고 강력하게 구현할 수 있는 도구입니다. 프로젝트에 맞는 Provider를 선택해 활용해보세요!


728x90
반응형

댓글