Mam kod odtwarzacza audio. Ma on m.in. mieć przycisk odtwarzania w pętli więc w momencie zakończenia odtwarzania pliku, chcę ustawić pozycje odtwarzania na 0, ale tylko w momencie kiedy przycisk pętli jest włączony. Mam jednak taki problem, że funkcja wysyłana do Audio.Sound.setOnPlaybackStatusUpdate z expo-av nie widzi zmianu stanu przez setInLoop. Czyli komponent się ładuje, inLoop jest równy false. Naciskam przycisk, inLoop jest równy true, ale funkcja przekazana do setOnPlaybackStatusUpdate, która wykonuje się co chwile loguje, false. Dlaczego, false a nie true, i jak to naprawić?
import React, { useState, useEffect, useRef } from 'react';
import { Audio } from 'expo-av';
import { Text } from 'react-native';
function Player() {
const [inLoop, setInLoop] = useState(false);
const sound = useRef<Audio.Sound | undefined>();
useEffect(() => {
sound.current = new Audio.Sound();
sound.current
.loadAsync({ uri: 'https://www.thesoundarchive.com/starwars/yoda_twisted.mp3' })
.then(() => {
sound.current?.playAsync();
});
sound.current.setOnPlaybackStatusUpdate(() => {
console.log(inLoop);
});
return () => {
sound.current?.stopAsync();
};
}, []);
return <Text onPress={() => setInLoop(true)}>CHANGE - {inLoop + ''}</Text>;
}