ApiClient class abstract

A comprehensive API client for handling HTTP requests, file uploads, and downloads.

This abstract class provides a unified interface for all API operations in the application, including standard HTTP requests, file uploads (single/multiple), and file downloads. It automatically handles authentication, cookies, device information, and other common request requirements through configurable interceptors.

Key Features:

  • Cross-platform file upload support (Web and Native)
  • Automatic cookie management (Native platforms)
  • Device information headers
  • Language localization headers
  • Timezone and timestamp headers
  • Token refresh handling for authentication
  • Persistent URL configuration

Implementation Requirements: Subclasses must implement the baseUrl getter to specify the API endpoint.

Usage Example:

class MyApiClient extends ApiClient {
  @override
  String get baseUrl => 'https://api.example.com';
}

final client = MyApiClient(
  shouldUseDeviceInfo: true,
  shouldUseLanguage: true,
);

// Upload a file
final file = await client.uploadFile(filePath: '/path/to/file.jpg');

// Download content
final bytes = await client.downloadBytes('https://example.com/image.png');
Implementers

Constructors

ApiClient({bool shouldUsePersistentUrl = false, bool shouldUseDeviceInfo = false, bool shouldUseLanguage = true, RefreshInterceptor? refreshInterceptor})
Creates an ApiClient instance with configurable interceptors.

Properties

baseUrl → String
The base URL for API requests.
no setter
cookieStorage → CookieManager
no setter
dio → Dio
The Dio HTTP client instance used for all network requests.
final
hashCode → int
The hash code for this object.
no setterinherited
persistentStorage → PersistentStorage
no setter
refreshInterceptor ↔ RefreshInterceptor
The refresh interceptor for handling token refresh on 401 errors.
getter/setter pair
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
secureStorage → SecureStorage
no setter

Methods

downloadBytes(String url) → Future<Uint8List>
Downloads content as bytes from a URL.
downloadFile({required String url, required String savePath, required String filename}) → Future<File?>
Downloads content directly to a file on the local file system.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited
uploadFile({String? filePath, Uint8List? bytes, String uploadUrl = "/upload-file", String? filename}) → Future<File>
Uploads a single file.
uploadFileFromFilePicker(PlatformFile file, {String uploadUrl = "/upload-file"}) → Future<File>
Uploads a file using PlatformFile.
uploadFileFromImagePicker(XFile file, {String uploadUrl = "/upload-file"}) → Future<File>
Uploads a file using XFile.
uploadFiles({List<String>? filePaths, List<Uint8List>? filesBytes, List<String>? filenames, String uploadUrl = "/multi-upload-file"}) → Future<List<File>>
Uploads multiple files.
uploadFilesFromFilePicker(List<PlatformFile> files, {String uploadUrl = "/multi-upload-file"}) → Future<List<File>>
Uploads multiple files using PlatformFile.
uploadFilesFromImagePicker(List<XFile> files, {String uploadUrl = "/multi-upload-file"}) → Future<List<File>>
Uploads multiple files using XFile.

Operators

operator ==(Object other) → bool
The equality operator.
inherited