RetryWhenStream<T> class

Creates a Stream that will recreate and re-listen to the source Stream when the notifier emits a new value. If the source Stream emits an error or it completes, the Stream terminates.

If the retryWhenFactory throws an error or returns a Stream that emits an error, original error will be emitted. And then, the error from retryWhenFactory will be emitted if it is not identical with original error.

Basic Example

    RetryWhenStream<int>(
      () => Stream<int>.fromIterable(<int>[1]),
      (Object error, StackTrace s) => throw error,
    ).listen(print); // Prints 1

Periodic Example

    RetryWhenStream<int>(
      () => Stream<int>.periodic(const Duration(seconds: 1), (int i) => i)
          .map((int i) => i == 2 ? throw 'exception' : i),
      (Object e, StackTrace s) =>
          Rx.timer<void>(null, const Duration(milliseconds: 200)),
    ).take(4).listen(print); // Prints 0, 1, 0, 1

Complex Example

    var errorHappened = false;
    RetryWhenStream<int>(
      () => Stream.periodic(const Duration(seconds: 1), (i) => i).map((i) {
        if (i == 3 && !errorHappened) {
          throw 'We can take this. Please restart.';
        } else if (i == 4) {
          throw 'It\'s enough.';
        } else {
          return i;
        }
      }),
      (e, s) {
        errorHappened = true;
        if (e == 'We can take this. Please restart.') {
          return Stream.value('Ok. Here you go!');
        } else {
          return Stream.error(e, s);
        }
      },
    ).listen(print, onError: print); // Prints 0, 1, 2, 0, 1, 2, 3, It's enough.
Inheritance
Available extensions

Constructors

RetryWhenStream(Stream<T> streamFactory(), Stream<void> retryWhenFactory(Object error, StackTrace stackTrace))
Constructs a Stream that will recreate and re-listen to the source Stream (created by the provided factory method). The retry will trigger whenever the Stream created by the retryWhen factory emits and event.

Properties

first Future<T>
The first element of this stream.
no setterinherited
hashCode int
The hash code for this object.
no setterinherited
isBroadcast bool
Whether this stream is a broadcast stream.
no setterinherited
isEmpty Future<bool>
Whether this stream contains any elements.
no setterinherited
last Future<T>
The last element of this stream.
no setterinherited
length Future<int>
The number of elements in this stream.
no setterinherited
retryWhenFactory Stream<void> Function(Object error, StackTrace stackTrace)
The factory method used to create the Stream which triggers a re-listen
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
single Future<T>
The single element of this stream.
no setterinherited
streamFactory Stream<T> Function()
The factory method used at subscription time
final

Methods

any(bool test(T element)) Future<bool>
Checks whether test accepts any element provided by this stream.
inherited
asBroadcastStream({void onListen(StreamSubscription<T> subscription)?, void onCancel(StreamSubscription<T> subscription)?}) Stream<T>
Returns a multi-subscription stream that produces the same events as this.
inherited
asyncExpand<E>(Stream<E>? convert(T event)) Stream<E>
Transforms each element into a sequence of asynchronous events.
inherited
asyncMap<E>(FutureOr<E> convert(T event)) Stream<E>
Creates a new stream with each data event of this stream asynchronously mapped to a new event.
inherited
cast<R>() Stream<R>
Adapt this stream to be a Stream<R>.
inherited
contains(Object? needle) Future<bool>
Returns whether needle occurs in the elements provided by this stream.
inherited
distinct([bool equals(T previous, T next)?]) Stream<T>
Skips data events if they are equal to the previous data event.
inherited
drain<E>([E? futureValue]) Future<E>
Discards all data on this stream, but signals when it is done or an error occurred.
inherited
elementAt(int index) Future<T>
Returns the value of the indexth data event of this stream.
inherited
every(bool test(T element)) Future<bool>
Checks whether test accepts all elements provided by this stream.
inherited
expand<S>(Iterable<S> convert(T element)) Stream<S>
Transforms each element of this stream into a sequence of elements.
inherited
firstWhere(bool test(T element), {T orElse()?}) Future<T>
Finds the first element of this stream matching test.
inherited
fold<S>(S initialValue, S combine(S previous, T element)) Future<S>
Combines a sequence of values by repeatedly applying combine.
inherited
forEach(void action(T element)) Future<void>
Executes action on each element of this stream.
inherited
handleError(Function onError, {bool test(dynamic error)?}) Stream<T>
Creates a wrapper Stream that intercepts some errors from this stream.
inherited
join([String separator = ""]) Future<String>
Combines the string representation of elements into a single string.
inherited
lastWhere(bool test(T element), {T orElse()?}) Future<T>
Finds the last element in this stream matching test.
inherited
listen(void onData(T event)?, {Function? onError, void onDone()?, bool? cancelOnError}) StreamSubscription<T>
Adds a subscription to this stream.
override
map<S>(S convert(T event)) Stream<S>
Transforms each element of this stream into a new stream event.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
pipe(StreamConsumer<T> streamConsumer) Future
Pipes the events of this stream into streamConsumer.
inherited
reduce(T combine(T previous, T element)) Future<T>
Combines a sequence of values by repeatedly applying combine.
inherited
singleWhere(bool test(T element), {T orElse()?}) Future<T>
Finds the single element in this stream matching test.
inherited
skip(int count) Stream<T>
Skips the first count data events from this stream.
inherited
skipWhile(bool test(T element)) Stream<T>
Skip data events from this stream while they are matched by test.
inherited
take(int count) Stream<T>
Provides at most the first count data events of this stream.
inherited
takeWhile(bool test(T element)) Stream<T>
Forwards data events while test is successful.
inherited
timeout(Duration timeLimit, {void onTimeout(EventSink<T> sink)?}) Stream<T>
Creates a new stream with the same events as this stream.
inherited
toList() Future<List<T>>
Collects all elements of this stream in a List.
inherited
toSet() Future<Set<T>>
Collects the data of this stream in a Set.
inherited
toString() String
A string representation of this object.
inherited
transform<S>(StreamTransformer<T, S> streamTransformer) Stream<S>
Applies streamTransformer to this stream.
inherited
where(bool test(T event)) Stream<T>
Creates a new stream from this stream that discards some elements.
inherited

Operators

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