Flutter 상태 관리: 고급 기술
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
- Flutter 앱 개발자, 중간~고급 수준*
- 복잡한 상태 관리와 앱 확장성 문제를 해결하는 데 필요한 기술 습득*
핵심 요약
setState
의 한계: 복잡한 상태 공유, 비동기 처리, 성능 저하 등의 문제 발생- Provider:
ChangeNotifier
와Consumer
를 활용한 효율적인 상태 공유 및 UI 재빌드 최적화 - Riverpod: 컴파일 타임 안정성과 테스트 용이성 강화,
StateProvider
와ref
기반의 확장성 향상 - BLoC/Cubit: 스트림 기반의 비즈니스 로직 분리, 상태 변화에 따른 UI 동기화
섹션별 세부 요약
1. `setState`의 한계
- 공유 상태 관리: 여러 위젯 간 데이터 공유 시
prop-drilling
발생 - 비동기 처리: 로딩 상태, 에러 처리가 위젯 내부에 직접 구현되어 복잡성 증가
- 성능 문제: 깊은 위젯 트리의 빈번한 재빌드로 성능 저하
2. Provider 패키지
ChangeNotifier
: 상태 변경 시 리스너에게 알림 전달ChangeNotifierProvider
: 위젯 트리 내 상태 공유 가능Consumer
: 특정 상태 변경 시만 해당 위젯 재빌드- 예시:
Counter
클래스 정의 후ChangeNotifierProvider
로 전역 상태 공유
3. Riverpod 패키지
StateProvider
: 컴파일 타임 안정성 제공ref
객체: 프로바이더 접근 및 상태 수정 시 사용- 테스트 용이성:
ref.read()
로 상태 조회 및 수정 가능 - 예시:
counterProvider
정의 후ProviderScope
로 앱 루트 감싸기
4. BLoC/Cubit 패턴
- 이벤트-상태 분리: 사용자 이벤트와 UI 상태를 별도로 처리
Bloc
클래스: 이벤트를 처리하고 상태를 발행BlocBuilder
: 상태 변경 시 UI 자동 갱신- 예시:
CounterEvent
와CounterState
정의 후Bloc
에서 상태 처리 로직 구현
결론
- Provider는 간단한 상태 관리에 적합하며, Riverpod은 컴파일 타임 안정성과 확장성에 강점
- BLoC/Cubit은 복잡한 비즈니스 로직 분리에 유리, 앱 성능 최적화 가능
- 선택 기준: 프로젝트 규모, 테스트 용이성, 팀 내 기술 습득 경로에 따라 적절한 패턴 선택