StreamProvider<T> class

Creates a stream and expose 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, ScopedReader watch) {
  AsyncValue<String> message = 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:

Inheritance
Annotations

Constructors

StreamProvider(Create<Stream<T>, ProviderReference> create, {String name})
Creates a stream and expose its latest event. [...]

Properties

argument Object
If this provider was created with the .family modifier, argument is variable used.
read-only, inherited
from Family<dynamic, dynamic, dynamic, ProviderReference, RootProvider>
If this provider was created with the .family modifier, from is the .family instance.
read-only, inherited
hashCode int
The hash code for this object. [...]
@nonVirtual, read-only, inherited
last AlwaysAliveProviderBase<Object, Future<T>>
Exposes a Future which resolves with the last value or error emitted. [...]
read-only
name String
A custom label for providers. [...]
final, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
stream AlwaysAliveProviderBase<Stream<T>, Stream<T>>
Exposes the Stream created by a StreamProvider. [...]
read-only

Methods

createElement() → ProviderElement<Stream<T>, AsyncValue<T>>
An internal method that defines how a provider behaves.
inherited
createState() → _StreamProviderState<T>
An internal method that creates the state of a provider.
override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
overrideWithProvider(AlwaysAliveProviderBase<Stream<T>, AsyncValue<T>> provider) → ProviderOverride
Overrides the behavior of this provider with another provider. [...]
inherited
overrideWithValue(AsyncValue<T> value) Override
Overrides the behavior of a provider with a value. [...]
inherited
select<Selected>(Selected selector(AsyncValue<T> value)) ProviderListenable<Selected>
Partially listen to a provider. [...]
inherited
toString() String
Returns 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. [...]
const AutoDisposeStreamProviderBuilder()
family → const StreamProviderFamilyBuilder
A group of providers that builds their value from an external parameter. [...]
const StreamProviderFamilyBuilder()