useProviderState<T> function

T useProviderState<T>({
  1. required T create(),
  2. void dispose(
    1. T
    )?,
  3. required bool maintainState,
})

Implementation

T useProviderState<T>({
  required T Function() create,
  void Function(T)? dispose,
  required bool maintainState,
}) {
  final stateRef = useRef<T?>(null);
  final isInitialized = useRef(false);

  useMemoized(() {
    if (!isInitialized.value || !maintainState) {
      stateRef.value = create();
      isInitialized.value = true;
    }
  }, [maintainState]);

  useEffect(() {
    return () {
      if (!maintainState && dispose != null && stateRef.value != null) {
        dispose(stateRef.value as T);
      }
    };
  }, [maintainState]);

  return stateRef.value as T;
}