AsyncState#
class |
Package: package:signals_core
Class: AsyncState#
A sealed union representing the lifecycle states of an asynchronous operation.
AsyncState is commonly wrapped by AsyncSignal or returned by asynchronous
computed signals (computedAsync, computedFrom) to model loading, success (data),
and error outcomes.
State Hierarchy#
The states are modeled as a robust hierarchy of immutable types:
- AsyncLoading: Pure loading state with no pre-existing data.
-
AsyncData: Success state holding a resolved value of type
T.- AsyncDataRefreshing: Refreshing in the background (holding historical data).
- AsyncDataReloading: Reloading (holding historical data).
-
AsyncError: Failure state holding an error and optional stack trace.
- AsyncErrorRefreshing: Refreshing in the background (holding historical error).
- AsyncErrorReloading: Reloading (holding historical error).
Pattern Matching & Switch Expressions#
Standard Dart switch expressions provide type-safe branching across all states:
Important
Branch Matching Order & Existing Value Preservation:
Since reloading and refreshing states (e.g., AsyncDataRefreshing, AsyncDataReloading) implement both
AsyncData and AsyncLoading, matching on AsyncLoading first
will prematurely swallow existing data!
Always place AsyncData and AsyncError branches before
AsyncLoading to ensure pre-existing data or error states are successfully rendered during refreshes:
final value = switch (state) {
AsyncDataRefreshing<int> r => 'Refreshing with value: ${r.value}',
AsyncDataReloading<int> r => 'Reloading with value: ${r.value}',
AsyncData<int> data => 'Stable value: ${data.value}',
AsyncErrorRefreshing<int> r => 'Refreshing error: ${r.error}',
AsyncErrorReloading<int> r => 'Reloading error: ${r.error}',
AsyncError<int> error => 'Stable error: ${error.error}',
AsyncLoading<int>() => 'Pure Loading State (no prior data)',
};
Standard Branching Methods (map and maybeMap)#
If you prefer standard callbacks over switch expressions, use map or maybeMap:
state.map(
data: (value) => 'Value: $value',
error: (error, stackTrace) => 'Error: $error',
loading: () => 'Loading...',
);
Members of AsyncState#
| Member | Type | Signature | Description |
|---|---|---|---|
| AsyncState | constructor |
dart AsyncState() |
|
| AsyncState.dataReloading | constructor |
dart AsyncState.dataReloading(T data) |
Create a state with a value that is reloading |
| AsyncState.dataRefreshing | constructor |
dart AsyncState.dataRefreshing(T data) |
Create a state with a value that is refreshing |
| AsyncState.data | constructor |
dart AsyncState.data(T data) |
Create a state with a value |
| AsyncState.errorReloading | constructor |
dart AsyncState.errorReloading(Object error, [StackTrace? stackTrace]) |
Create a state with an error that is reloading |
| AsyncState.errorRefreshing | constructor |
dart AsyncState.errorRefreshing(Object error, [StackTrace? stackTrace]) |
Create a state with an error that is refreshing |
| AsyncState.error | constructor |
dart AsyncState.error(Object error, [StackTrace? stackTrace]) |
Create a state with an error |
| AsyncState.loading | constructor |
dart AsyncState.loading() |
Create a loading state |
| hasValue | method |
dart bool hasValue |
Returns true if the state has a value |
| hasError | method |
dart bool hasError |
Returns true if the state has an error |
| isLoading | method |
dart bool isLoading |
Check if the state is a loading state |
| isRefreshing | method |
dart bool isRefreshing |
Returns true if the state is refreshing with a loading flag, |
| isReloading | method |
dart bool isReloading |
Returns true if the state is reloading with having a value or error, |
| requireValue | method |
dart T requireValue |
Force unwrap the value of the state. |
| value | method |
dart T? value |
Returns the value of the state. |
| error | method |
dart Object? error |
Returns the error of the state. |
| stackTrace | method |
dart StackTrace? stackTrace |
Returns the stack trace of the state. |
| map | method |
dart E map({required AsyncDataBuilder<E, T> data, required AsyncErrorBuilder
|
Map the state to a value. |
| maybeMap | method |
dart E maybeMap({AsyncDataBuilder<E, T>? data, AsyncErrorBuilder
|
Map the state to a value with optional or else. |
| == | method |
dart bool ==(covariant AsyncState |
|
| hashCode | method |
dart int hashCode |
References#
The AsyncState type is referenced and used in the following pages:
- Signal (signals_flutter/core)
- SignalsMixin (signals_flutter/mixins)
- EventSinkSignalMixin (signals_flutter/mixins)
- AsyncState (signals_flutter/async)
- FutureSignal (signals_flutter/async)
- AsyncSignal (signals_flutter/async)
- Stream (signals_flutter/async)
- signals_flutter
- Signal (signals_core/core)
- EventSinkSignalMixin (signals_core/mixins)
- AsyncState (signals_core/async)
- FutureSignal (signals_core/async)
- AsyncSignal (signals_core/async)
- Stream (signals_core/async)
- signals_core
- Signal (signals/core)
- SignalsMixin (signals/mixins)
- EventSinkSignalMixin (signals/mixins)
- AsyncState (signals/async)
- FutureSignal (signals/async)
- AsyncSignal (signals/async)
- Stream (signals/async)
- signals
- useAsyncSignal (signals_hooks/hooks)