pub package Analyze & Test innim lint

Utility for wrapping an asynchronous function in automatic retry logic with ability to cancel it.


Allows to automatically retry request on some condition. Retry logic implemented with exponential back-off, useful when making requests over network. If you don’t need to continue retry – you can cancel retry. In such case last result will be returned.

Getting started

To use this plugin, add cancelable_retry as a dependency in your pubspec.yaml file.


Create instance of CancelableRetry and call run():

import 'package:cancelable_retry/cancelable_retry.dart';

final request = CancelableRetry(
    // Provide request function
    () => doSomeRequest(),
    // Set conditions for retry
    retryIf: (result) => result == "retry",
    // Optional:
    // - Define max retry attempts
    maxAttempts: 8,
    // - Define max delay between retries
    maxDelay: const Duration(seconds: 30),
    // - Tune delay between retries
    delayFactor: const Duration(milliseconds: 200),
    randomizationFactor: 0.25,

// Run request
final res = await;

If you want to cancel retries, just call cancel():

await request.cancel();


View Github