import React, { useEffect, useRef, useState } from "react"; import { Animated, Text, TouchableOpacity, View } from "react-native"; export default function LinearProgressBar({ duration = 10 }) { const [timeLeft, setTimeLeft] = useState(duration); const [isRunning, setIsRunning] = useState(false); const progress = useRef(new Animated.Value(0)).current; const intervalRef = useRef(null); const startAnimation = () => { setIsRunning(true); progress.setValue(0); setTimeLeft(duration); Animated.timing(progress, { toValue: 1, duration: duration * 1000, useNativeDriver: false, }).start(() => setIsRunning(false)); //@ts-ignore intervalRef.current = setInterval(() => { setTimeLeft((prev) => (prev > 0 ? prev - 1 : 0)); }, 1000); }; useEffect(() => { //@ts-ignore return () => clearInterval(intervalRef.current); }, []); const progressWidth = progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"], }); return ( Temps restant : {timeLeft}s {isRunning ? "En cours..." : "Play"} ); }