네트워크 지연 환경에서 즉각적인 사용자 경험을 제공하면서 데이터 무결성을 보장하는 가이드입니다.
이 가이드는 두 가지 문제를 해결합니다:
| 문제 | 증상 | 솔루션 |
|---|---|---|
| 반응 지연 | "탭했는데 반응이 없어요" | Optimistic UI |
| 데이터 유실 | "포인트가 사라졌어요" | 서버 응답 검증 |
서버 응답을 기다리지 않고 UI를 먼저 업데이트하여 즉각적인 피드백을 제공합니다.
[User Tap] → [UI 즉시 업데이트] → [버퍼 누적] → [디바운스 후 서버 전송] → [응답 확정]
class PointState {
int serverPoint = 0; // 서버 확인된 포인트
int accumulatedTapCount = 0; // 미전송 탭 수
int inFlightPending = 0; // 전송 중인 수
bool isPointsSyncing = false; // 동기화 진행 여부
}
int get optimisticPending =>
accumulatedTapCount + (isPointsSyncing ? inFlightPending : 0);
int get displayWalletPoints => serverPoint + optimisticPending;
💡 Note: displayWalletPoints를 UI에 바인딩하면 탭 즉시 숫자가 증가합니다.
void onTap() {
setState(() {
_accumulatedTapCount++;
});
_debounceTimer?.cancel();
_debounceTimer = Timer(const Duration(milliseconds: 1500), () {
_syncToServer();
});
}