FutureSignal
Future signals can be created by extension or method.
futureSignal
final s = futureSignal(() async => 1);toSignal()
final s = Future(() => 1).toSignal();.value, .peek()
Returns AsyncState<T> for the value and can handle the various states.
The value getter returns the value of the future if it completed successfully.
.peek() can also be used to not subscribe in an effect
final s = futureSignal(() => Future(() => 1));final value = s.value.value; // 1 or null.reset()
The reset method resets the future to its initial state to recall on the next evaluation.
final s = futureSignal(() => Future(() => 1));s.reset();.refresh()
Refresh the future value by setting isLoading to true, but maintain the current state (AsyncData, AsyncLoading, AsyncError).
final s = futureSignal(() => Future(() => 1));s.refresh();print(s.value.isLoading); // true.reload()
Reload the future value by setting the state to AsyncLoading and pass in the value or error as data.
final s = futureSignal(() => Future(() => 1));s.reload();print(s.value is AsyncLoading); // trueDependencies
By default the callback will be called once and the future will be cached unless a signal is read in the callback.
final count = signal(0);final s = futureSignal(() async => count.value);
await s.future; // 0count.value = 1;await s.future; // 1If there are signals that need to be tracked across an async gap then use the dependencies when creating the futureSignal to reset every time any signal in the dependency array changes.
final count = signal(0);final s = futureSignal( () async => count.value, dependencies: [count],);s.value; // state with count 0count.value = 1; // resets the futures.value; // state with count 1