flutter
dart
npx skills add dhruvanbhalara/skills --skill flutter-dio
Networking with Dio
- Use Dio as the primary HTTP client package.
- Use type-safe model classes with
fromJson / toJson factories for all request/response bodies.
- Handle all HTTP status codes appropriately with typed exceptions (e.g.,
ServerException, NetworkException, UnauthorizedException).
- Use proper request timeouts (
connectTimeout, receiveTimeout, sendTimeout).
Dio Interceptors
- Use interceptors for cross-cutting concerns:
- Auth Interceptor: Attach access tokens to headers, handle token refresh on 401.
- Logging Interceptor: Log requests/responses in debug mode via
AppLogger.
- Error Interceptor: Transform
DioException into domain-specific Failure types.
- Register interceptors centrally via
injectable for consistent behavior across all API calls.
Repository Pattern
- DataSources contain only raw Dio API calls — no business logic or mapping
- Repositories orchestrate between remote DataSources and local cache for network data
Retry & Resilience
- Implement retry logic with exponential backoff for transient failures (e.g., 500, timeout).
- Set a maximum retry count (default: 3 retries).
- Cache responses when appropriate to reduce network calls and improve offline UX.
- Parse JSON in background isolates for large responses (> 1MB) using
compute()
- Do NOT block the UI thread with synchronous network operations
Security
- Store tokens via
flutter_secure_storage — never in source code or SharedPreferences
- All API communication MUST use HTTPS