usePersistedState<T extends Object> function

PersistedState<T> usePersistedState<T extends Object>(
  1. Future<T?> get(),
  2. Future<void> set(
    1. T? value
    ), {
  3. bool canGet = true,
  4. HookKeys getKeys = const [],
})

Implementation

PersistedState<T> usePersistedState<T extends Object>(
  Future<T?> Function() get,
  Future<void> Function(T? value) set, {
  bool canGet = true,
  HookKeys getKeys = const [],
}) {
  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,
        ),
      );
    },
  );
}