flutter_resilient_http 1.0.0 copy "flutter_resilient_http: ^1.0.0" to clipboard
flutter_resilient_http: ^1.0.0 copied to clipboard

A resilient HTTP client wrapper for Flutter with exponential backoff retries, circuit breaker pattern, and offline request queueing.

flutter_resilient_http #

pub package Build Status License: MIT Flutter

A production-ready, highly resilient HTTP client wrapper for Flutter & Dart. Built over standard http.Client, it provides exponential backoff retries with jitter, an enterprise circuit breaker pattern, and an offline request queueing & replay engine.


๐ŸŒŸ Key Features #

  • ๐Ÿ”„ Exponential Backoff & Jitter: Automatically retries failing requests with configurable backoff timing and randomized jitter to prevent server overload.
  • โšก Circuit Breaker Pattern: Prevents cascading backend failures by tripping into OPEN state after repeated HTTP 5xx or connection errors.
  • ๐Ÿ“ถ Offline Request Queueing: Intercepts POST/PUT/DELETE mutations while offline, stores them, and replays them when connectivity restores.
  • ๐Ÿ› ๏ธ Seamless http Drop-In: Directly extends http.BaseClient, making it fully compatible with existing Dart/Flutter network codebases.
  • ๐Ÿ“Š Telemetry & Logging: Configurable hooks for tracking network attempt metrics, circuit state changes, and queue processing events.

๐Ÿ“ฆ Installation #

Add flutter_resilient_http to your pubspec.yaml:

dependencies:
  flutter_resilient_http: ^1.0.0

Then run:

flutter pub get

๐Ÿš€ Quick Start #

1. Basic Usage with Retries #

import 'package:flutter_resilient_http/flutter_resilient_http.dart';

final client = ResilientHttpClient(
  retryPolicy: const RetryPolicy(
    maxRetries: 3,
    initialDelay: Duration(milliseconds: 500),
    useJitter: true,
  ),
);

// Use like standard http client
final response = await client.get(Uri.parse('https://api.example.com/data'));
print('Response: ${response.statusCode}');

2. Full Enterprise Configuration (Retries + Circuit Breaker + Offline Queue) #

import 'package:flutter_resilient_http/flutter_resilient_http.dart';

// Create Circuit Breaker
final circuitBreaker = CircuitBreaker(
  failureThreshold: 5,
  resetTimeout: Duration(seconds: 30),
  onStateChange: (oldState, newState) {
    print('Circuit Breaker transitioned from $oldState to $newState');
  },
);

// Create Offline Queue
final offlineQueue = OfflineRequestQueue(maxCapacity: 50);

// Initialize ResilientHttpClient
final client = ResilientHttpClient(
  retryPolicy: const RetryPolicy(
    maxRetries: 3,
    retryStatusCodes: {408, 429, 500, 502, 503, 504},
  ),
  circuitBreaker: circuitBreaker,
  offlineQueue: offlineQueue,
  isOffline: () => checkConnectivityStatus(), // Connect your connectivity_plus logic
  onLog: (msg) => print('[HTTP Log] $msg'),
);

// Send request
try {
  final response = await client.post(
    Uri.parse('https://api.example.com/orders'),
    body: {'item': 'widget'},
  );
} on OfflineRequestException catch (e) {
  print('Device is offline! Request queued for replay: ${e.wasQueued}');
} on CircuitBreakerOpenException catch (e) {
  print('Circuit is OPEN. Try again in ${e.timeRemaining.inSeconds} seconds.');
}

// When network restores, replay queued requests
await client.flushOfflineQueue();

๐Ÿ›๏ธ Architecture Overview #

                      +-----------------------------+
                      |    ResilientHttpClient      |
                      +--------------+--------------+
                                     |
             +-----------------------+-----------------------+
             |                                               |
   [ Network Check ]                               [ Circuit Breaker ]
   Is Device Offline?                              Is Circuit Open?
    /             \                                 /            \
  YES              NO                             YES             NO
  /                 \                             /                \
[Queue Mutation]   [Execute Request]   [Throw CircuitOpen]  [Run Retries]

๐Ÿงช Testing #

flutter_resilient_http comes with comprehensive unit tests:

flutter test

๐Ÿ“„ License #

This project is licensed under the MIT License - see the LICENSE file for details.

Developed with โค๏ธ by Olamilekan Adeyemi (@lekthedeveloper).

0
likes
160
points
21
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A resilient HTTP client wrapper for Flutter with exponential backoff retries, circuit breaker pattern, and offline request queueing.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, http

More

Packages that depend on flutter_resilient_http