ResourceState API docs
Manages all the different states of a [Resource]:
ResourceReady<T>? get asReady
Upcast ResourceState into a ResourceReady, or return null if the ResourceState is in loading/error state.
ResourceReady<T>? get asError
Upcast ResourceState into a ResourceError, or return null if the ResourceState is in read/loading state.
T? get value
Attempts to synchronously get the value of ResourceReady.
On error, this will rethrow the error.
If loading, will return null.
T? call()
Attempts to synchronously get the value of ResourceReady.
On error, this will rethrow the error.
If loading, will return null.
Object get error
Attempts to synchronously get the error of ResourceError.
On other states will return null.
R maybeMap<R>({required R Function() orElse, R Function(ResourceReady<T> ready)? ready, R Function(ResourceError<T> error)? error, R Function(ResourceLoading<T> loading)? loading})
Perform some actions based on the state of the ResourceState, or call orElse if the current state is not considered.
resourceState.maybeMap(
ready: (resourceReady) => Text(resourceReady.value),
orElse: () => const SizedBox(),
);
The function above renders the Text widget only in the ready state, for all other state the orElse function is called.
Prefer using the maybeOn method if you are not interested in the ResourceState object.
R on<R>({required R Function(T data) ready, required R Function(Object error, StackTrace? stackTrace) error, required R Function() loading})
Performs an action based on the state of the ResourceState.
All cases are required.
resourceState.when(
ready: (data) => Text('ready: $data'),
error: (error, stackTrace) => Text('error: $error $stackTrace'),
loading: () => Text('loading'),
);
R maybeOn<R>({required R Function() orElse, R Function(T data)? ready, R Function(Object error, StackTrace? stackTrace)? error, R Function()? loading})
Performs an action based on the state of the ResourceState, or call orElse if the current state is not considered.
resourceState.maybeOn(
ready: (data) => Text(data),
orElse: () => const SizedBox(),
);
The function above renders the Text widget only in the ready state, for all other state the orElse function is called.
Resource Unresolved
The ResourceUnresolved state indicates that the Resource is not resolved yet, this state is internal and should never be visible outside.
Constructor
ResourceReady(T value, {bool isRefreshing = false});
value is the resolved value of the Resource.
isRefreshing is true if the Resource is being refreshed.
ResourceReady<T> copyWith({T? value, bool? isRefreshing})
Convenience method to copy the current state and create a new ResourceReady state with the overridden values.
Resource Error
The ResourceError state indicates that the Resource failed to load and is in an error state.
Constructor
ResourceError(
Object error, {
StackTrace? stackTrace,
bool isRefreshing = false,
});
error is the error that occurred.
stackTrace is the stack trace of the error, if present.
isRefreshing is true if the Resource is being refreshed.
ResourceError<T> copyWith({Object? error, StackTrace? stackTrace, bool? isRefreshing})
Convenience method to copy the current state and create a new ResourceError state with the overridden values.
Sealed class
ResourceState is a sealed class, so you can perform a switch on the different states instead of using on, maybeOn, etc.
return switch (userState) {
ResourceReady(:final value) => Text(value),
ResourceError(:final error, :final stackTrace) =>
Text('$error, $stackTrace'),
ResourceLoading() => const CircularProgressIndicator(),
}