Я использую исходную версию реакции 0.61.5 и реагирую на версию 16.8.3 с собственной подарочной версией чата 0.9.11 для создания небольшого приложение чата. Я хочу отправлять звуковые сообщения. Поэтому я использую библиотеку react-native-audio-recorder-player для записи звука и его воспроизведения. Пока аудиозапись и воспроизведение идут успешно. Теперь я хочу воспроизводить прогресс звуковой дорожки, когда пользователь воспроизводит звук. Я использовал response-native-community / react-native-slider для отображения панели поиска. Так выглядит звуковое сообщение
введите описание изображения здесь
Когда пользователь нажимает кнопку воспроизведения, я хочу показать прогресс звуковой дорожки на этом ползунке. До сих пор я делал это так.
Одаренный компонент чата
render() {
return (
<GiftedChat
messages={this.state.messages}
onSend={messages => this.onSend(messages)}
scrollToBottom={true}
renderUsernameOnMessage={true}
renderComposer={this.renderComposer}
renderBubble={this.renderBubble}
user={{
_id: 1,
name:'You'
}}
/>
)
}
компонент renderBubble
renderBubble = (props) => {
return(
<View>
<View style={{display:'flex',flexDirection:'row'}}>
<Button iconLeft transparent onPress={this.onStartPlay}>
<Icon name='ios-play' />
</Button>
<Slider
style={{width: 150, height: 40}}
minimumValue={0.0000}
maximumValue={1.0000}
value={this.state.audioProgress}
minimumTrackTintColor="#FFFFFF"
maximumTrackTintColor="#000000"
/>
</View>
<Bubble {...props}/>
</View>
)
}
функция onStartPlay
onStartPlay = async () => {
console.log('onStartPlay');
const msg = await audioRecorderPlayer.startPlayer('sdcard/test_recording.aac');
console.log(msg);
audioRecorderPlayer.addPlayBackListener((e) => {
if (e.current_position === e.duration) {
console.log('finished');
audioRecorderPlayer.stopPlayer();
}
this.setState({
currentPositionSec: e.current_position,
currentDurationSec: e.duration,
playTime: audioRecorderPlayer.mmssss(Math.floor(e.current_position)),
duration: audioRecorderPlayer.mmssss(Math.floor(e.duration)),
});
let currentProgress = Math.max(0, e.current_position) / e.duration;
console.log('currentProgress',parseFloat(currentProgress).toFixed(4));
this.setState({ audioProgress: parseFloat(currentProgress).toFixed(4) });
});
};
и Я вижу в консоли текущий прогресс обновляется в состоянии audioProgress
. И я устанавливаю значение Slider
через audioProgress
, но положение панели поиска не обновляется. Тестирую на эмуляторе Nexus android.