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:
- Provider, a provider that synchronously creates a value
- FutureProvider, a provider that asynchronously exposes a value that can change over time.
future
, to obtain the last value emitted by a Stream.- StreamProvider.family, to create a StreamProvider from external parameters
- StreamProvider.autoDispose, to destroy the state of a StreamProvider when no longer needed.
Constructors
-
StreamProvider.new(Create<
Stream< _create, {String? name, Iterable<ValueT> >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< create) → OverrideValueT> > -
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.