Files
musicland/src/providers/SplashAnimationProvider.js
T
Thomas Demirdjian 471a3177e8 last tickets
2025-11-21 21:57:41 +01:00

57 lines
1.4 KiB
JavaScript

import { useState, useEffect, createContext, useRef } from "react";
import { StyleSheet, Animated } from "react-native";
import { Palette, Style } from "../styles";
import { Image } from "expo-image";
export const SplashAnimationContext = createContext();
const SplashAnimationProvider = ({ children }) => {
const [isFullyLoaded, setIsFullyLoaded] = useState(false);
const [showOverlay, setShowOverlay] = useState(true);
const fadeAnim = useRef(new Animated.Value(1)).current;
useEffect(() => {
if (isFullyLoaded) {
Animated.timing(fadeAnim, {
toValue: 0,
duration: 500,
useNativeDriver: true,
}).start(() => {
setShowOverlay(false);
});
}
}, [isFullyLoaded]);
return (
<SplashAnimationContext.Provider
value={{ isFullyLoaded, setIsFullyLoaded }}
>
{children}
{showOverlay && (
<Animated.View
style={{
...StyleSheet.absoluteFillObject,
flex: 1,
...Style.containerCenter,
backgroundColor: Palette.darkPurple,
opacity: fadeAnim,
}}
>
<Image
source={require("../../assets/splash.png")}
contentFit={"contain"}
style={{
width: 250,
height: 250,
}}
/>
</Animated.View>
)}
</SplashAnimationContext.Provider>
);
};
export default SplashAnimationProvider;