StreamProvider<ValueT> class final Providers

Creates a stream and exposes its latest event.

StreamProvider is identical in behavior/usage to FutureProvider, modulo the fact that the value created is a Stream instead of a Future.

It can be used to express a value asynchronously loaded that can change over time, such as an editable Message coming from a web socket:

final messageProvider = StreamProvider.autoDispose<String>((ref) async* {
  // Open the connection
  final channel = IOWebSocketChannel.connect('ws://echo.websocket.org');

  // Close the connection when the stream is destroyed
  ref.onDispose(() => channel.sink.close());

  // Parse the value received and emit a Message instance
  await for (final value in channel.stream) {
    yield value.toString();
  }
});

Which the UI can then listen:

Widget build(BuildContext context, WidgetRef ref) {
  AsyncValue<String> message = ref.watch(messageProvider);

  return message.when(
    loading: () => const CircularProgressIndicator(),
    error: (err, stack) => Text('Error: $err'),
    data: (message) {
      return Text(message);
    },
  );
}

Note: When listening to web sockets, firebase, or anything that consumes resources, it is important to use StreamProvider.autoDispose instead of simply StreamProvider.

This ensures that the resources are released when no longer needed as, by default, a StreamProvider is almost never destroyed.

See also:

Constructors

StreamProvider.new(Create<Stream<ValueT>> _create, {String? name, Iterable<ProviderOrFamily>? dependencies, bool isAutoDispose = false, Retry? retry})
Creates a stream and exposes its latest event.

Properties

argument Object?
If this provider was created with the .family modifier, argument is the variable that was used.
finalinherited
dependencies Iterable<ProviderOrFamily>?
The list of providers that this provider potentially depends on.
finalinherited
from → Family?
If this provider was created with the .family modifier, from is the .family instance.
finalinherited
future → Refreshable<Future<ValueT>>
Obtains the Future representing this provider.
no setterinherited
hashCode int
The hash code for this object.
no setterinherited
isAutoDispose bool
Whether the state associated to this provider should be disposed automatically when the provider stops being listened.
finalinherited
name String?
A custom label for providers.
finalinherited
retry → Retry?
The retry strategy to use when a provider fails.
finalinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
overrideWith(Create<Stream<ValueT>> create) → Override
Override the provider with a new initialization function.
inherited
overrideWithValue(AsyncValue<ValueT> value) → Override
Overrides a provider with a value, ejecting the default behavior.
inherited
selectAsync<OutT>(OutT selector(ValueT data)) → ProviderListenable<Future<OutT>>
A variant of select for asynchronous values
inherited
toString() String
A string representation of this object.
inherited

Operators

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

Constants

autoDispose → const AutoDisposeStreamProviderBuilder
Marks the provider as automatically disposed when no longer listened to.
family → const StreamProviderFamilyBuilder
A group of providers that builds their value from an external parameter.