피드로 돌아가기
Dev.toFrontend
원문 읽기
Riverpod 내 ActionState 도입을 통한 Imperative Operation의 선언적 상태 관리
Flutter Actions (mutations)
AI 요약
Context
사용자 트리거 기반의 비동기 작업 처리 시 AsyncValue의 Loading 강제 진입으로 인한 Idle 상태 표현의 한계 존재. Widget 내부 try/catch 남발에 따른 도메인 로직과 UI 관심사 혼재 및 중복 제출(Double-submission) 방지 로직의 반복적 구현 필요성 증대.
Technical Solution
- sealed class 기반의 ActionState(idle, loading, success, error) 정의를 통한 비동기 작업의 생명주기 명시화
- ActionHandler mixin 내 isLoading 체크 로직을 통한 원자적 Double-submission 가드 구현
- ActionState.guard 래퍼를 통한 모든 Exception의 상태 전환 처리로 Widget 내 try/catch 제거
- WidgetRef 확장 메서드인 listenAction을 통한 사이드 이펙트(Navigation, Toast)의 선언적 구독 구조 설계
- Domain Event Bus 연동을 통한 Action의 단일 책임 원칙 준수 및 후속 처리 로직 분리
실천 포인트
- 단발성 쓰기 작업(Mutation)은 AsyncValue 대신 별도의 ActionState 패턴 적용 검토 - 비동기 작업의 중복 실행 방지 로직을 개별 화면이 아닌 Notifier 수준의 Mixin으로 공통화 - UI 레이어의 비동기 예외 처리 로직을 상태 기반의 리스너 구조로 이전하여 테스트 가능성 확보 - 하나의 Provider에는 단 하나의 Action만 할당하여 상태 충돌(State Stomping) 방지