background_http_client 0.0.7
background_http_client: ^0.0.7 copied to clipboard
A Flutter plugin for background HTTP client operations with Dio-like interface
background_http_client #
Flutter plugin for executing HTTP requests in the background with a Dio-like interface.
Features #
- Dio-like interface (GET, POST, PUT, DELETE, PATCH, HEAD)
- Background request execution
- Saving requests and responses to files
- Request status tracking
- Getting responses by request ID
Usage #
Basic Usage #
import 'package:background_http_client/background_http_client.dart';
final client = BackgroundHttpClient();
// GET request
final requestInfo = await client.get('https://api.example.com/data');
// POST request
final postInfo = await client.post(
'https://api.example.com/data',
data: {'key': 'value'},
);
// Get request status
final status = await client.getRequestStatus(requestInfo.requestId);
// Get response
final response = await client.getResponse(requestInfo.requestId);
if (response != null) {
print('Status Code: ${response.statusCode}');
print('Response File: ${response.responseFilePath}');
}
Request Methods #
get(url, {headers, queryParameters, timeout, requestId, retries})- GET requestpost(url, {data, headers, queryParameters, timeout, requestId, retries})- POST requestput(url, {data, headers, queryParameters, timeout, requestId, retries})- PUT requestdelete(url, {headers, queryParameters, timeout, requestId, retries})- DELETE requestpatch(url, {data, headers, queryParameters, timeout, requestId, retries})- PATCH requesthead(url, {headers, queryParameters, timeout, requestId, retries})- HEAD requestpostMultipart(url, {fields, files, headers, queryParameters, timeout, requestId, retries})- Multipart request
Retries #
For automatic retries on errors (timeouts, network errors, server errors), use the retries parameter:
// Request with 3 retries
final requestInfo = await client.get(
'https://api.example.com/data',
retries: 3, // From 0 to 10
);
How it works:
- On error (timeout, network errors, HTTP status >= 400) the request is automatically retried
- Exponential backoff is used between retries: 2, 4, 8, 16, 32, 64, 128, 256, 512 seconds (max 512)
- Request status is updated to "in progress" during retry wait
- After all retries are exhausted, the request is marked as
FAILED
Handling No Internet Connection #
Android:
- When there's no internet, WorkManager automatically waits for network availability thanks to
NetworkType.CONNECTEDconstraint - The task will be automatically executed when internet becomes available, even if the app is closed
- On network errors (SocketException, ConnectException, UnknownHostException) the task is automatically retried when network becomes available
iOS:
- When there's no internet, URLSession automatically handles network errors
- If the app is in background (minimized), the request will be automatically retried when network becomes available
- After complete app termination, iOS may limit task execution
Request Statuses #
RequestStatus.inProgress- request is in progressRequestStatus.completed- response received from serverRequestStatus.failed- request failed with error
Architecture #
The plugin works according to the following flow:
- Request is executed via
get,post, etc. methods - Manager saves a file for the request, returns ID and file path
- Manager is responsible for sending, has 3 statuses: in progress, response received, error
- Server response is saved to a file
- By ID you can get the server response and path to the response file
Background Work #
Android #
- Uses WorkManager for executing requests in the background
- Requests continue to execute even after the app is closed
- Retries: When using
retries, retry attempts are scheduled via WorkManager with delay, ensuring execution even when the app is closed - WorkManager automatically manages task execution in the background
iOS #
- Uses URLSession with background configuration for background work
- Requests continue to execute when the app is in background (minimized)
- Retries: When using
retries, retry attempts work when the app is in background (minimized), but may not work after complete app termination - Important: After complete app termination, iOS may limit task execution. For guaranteed background work, it's recommended to keep the app minimized rather than completely closing it.
Platforms #
The plugin requires native implementation for Android and iOS. Method channel background_http_client is used for communication between Dart and native code.