Resource
Resources are special Signals designed specifically to handle async loading. Their purpose is wrap async values in a way that makes them easy to interact with handling the common states of a future data, error and loading.
Resources can be driven by a source signal that provides the query to an async data.
The contents of the function can be anything. You can hit typical REST endpoints or GraphQL or anything that generates a future or a stream. Resources are not opinionated on the means of loading the data, only that they are driven by futures and streams.
Let’s create a Resource:
// Using http as a clientimport 'package:http/http.dart' as http;
// The sourcefinal userId = Signal(1);
// The fetcherFuture<String> fetchUser() async { final response = await http.get( Uri.parse('https://swapi.dev/api/people/${userId.value}/'), ); return response.body;}
// The resource (source is optional)final user = Resource(fetchUser, source: userId);A Resource can also be driven from a Stream instead of a Future, and can be created with Resource.stream(() => stream).
The resource has a value named ResourceState, that provides many useful convenience methods to correctly handle the state of the resource.
The on method forces you to handle all the states of a Resource (ready, error and loading).
The are also other convenience methods to handle only specific states:
onforces you to handle all the states of a ResourcemaybeOnlets you decide which states to handle and provide anorElseaction for unhandled statesmapequal toonbut gives access to theResourceStatedata classmaybeMapequal tomaybeOnbut gives access to theResourceStatedata classisReadyindicates if theResourceis in the ready stateisLoadingindicates if theResourceis in the loading statehasErrorindicates if theResourceis in the error stateasReadyupcastResourceStateinto aResourceReady, or return null if theResourceStateis in loading/error stateasErrorupcastResourceStateinto aResourceError, or return null if theResourceStateis in loading/ready statevalueattempts to synchronously get the value ofResourceReadyerrorattempts to synchronously get the error ofResourceError
A Resource provides the fetch and refresh methods.
The refresh method forces an update and calls the fetcher function again or subscribes again to the stream.