Logosolidart

ResourceState API docs

Manages all the different states of a [Resource]:

bool get isLoading#

Returns true if the Resource is in the loading state.

bool get isReady#

Returns true if the Resource is in the ready state.

bool get hasError#

Returns true if the Resource is in the error state.

bool get isRefreshing#

Returns true if the Resource is being refreshed.

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.on(
  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.

Resource Ready#

The ResourceReady state indicates that the Resource is resolved and ready to use.

Constructor#

ResourceReady(T value, {bool isRefreshing = false});

value is the resolved value of the Resource. isRefreshing is true if the Resource is being refreshed.

String toString()#

Returns the string representation of the ResourceReady state.

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 Loading#

The ResourceLoading state indicates that the Resource is loading.

String toString()#

Returns the string representation of the ResourceLoading state.

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.

String toString()#

Returns the string representation of the ResourceError state.

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(),
}