Overview
TheApiClient class is a wrapper around the Dio HTTP client that provides:
- Centralized base URL configuration
- Automatic JWT token injection
- Request/response interceptors
- Error handling and 401 auto-logout
- Timeout configuration
lib/core/api/api_client.dart:4
Class Definition
Configuration
Base URL
Timeouts
- connectTimeout: Maximum time to establish connection
- receiveTimeout: Maximum time to receive response after connection
Default Headers
Status Code Validation
Interceptors
Request Interceptor
Automatically injects JWT token from SharedPreferences:- Before each request, read token from SharedPreferences
- If token exists, add
Authorization: Bearer {token}header - Proceed with request
Error Interceptor
Handles 401 Unauthorized responses:- If response status is 401 (Unauthorized)
- Remove invalid token from SharedPreferences
- User should be redirected to login (to be implemented)
HTTP Methods
GET
POST
PUT
DELETE
Authentication Flow
1. Login
2. Subsequent Requests
3. Logout
4. Token Expiration
Usage in Services
Services receiveApiClient via dependency injection:
API Endpoints
Endpoints are defined inApiEndpoints class:
lib/core/api/api_endpoints.dart
Usage:
Error Handling
DioException Types
Extract Error Messages
UseextractErrorMessage utility:
Testing
Mock ApiClient
Extending ApiClient
Add Request Logging
Add Retry Logic
Add Cache
Best Practices
Single ApiClient instance
Single ApiClient instance
Create one
ApiClient instance at app startup:Use ApiEndpoints constants
Use ApiEndpoints constants
Handle all error cases
Handle all error cases