usePersistedState<T extends Object> function
Implementation
PersistedState<T> usePersistedState<T extends Object>(
Future<T?> Function() get,
Future<void> Function(T? value) set, {
bool canGet = true,
HookKeys getKeys = hookKeysEmpty,
}) {
return useDebugGroup(
debugLabel: "usePersistedState<$T>()",
debugFillProperties: (builder) => builder
..add(FlagProperty("can get", value: canGet, ifFalse: "fetching disabled"))
..add(IterableProperty("get keys", getKeys, ifEmpty: null)),
() {
final state = useAutoComputedState(get, shouldCompute: canGet, keys: getKeys);
final submitState = useSubmitState();
final wrappedSet = useValueWrapper(set);
void updateValue(T? value) {
state.updateValue(value);
unawaited(submitState.run(() => wrappedSet.value(value)));
}
final wrappedValue = useValueWrapper(usePreviousIfNull(state.valueOrNull));
return useMemoized(
() => _DelegatePersistedState(
getIsInitialized: () => state.value is ComputedStateValueReady,
getIsSynchronized: () => state.value is ComputedStateValueReady && !submitState.inProgress,
getValue: wrappedValue.get,
setValue: updateValue,
),
);
},
);
}