Индикатор активности при синхронизации съемки с выставочной камерой

#react-native #camera #expo #activity-indicator

#react-native #камера #выставка #индикатор активности

Вопрос:

Я разрабатываю приложение React Native и хочу показывать компонент ActivityIndicator, пока камера Expo обрабатывает изображение.

 <TouchableOpacity style={{alignSelf: 'center'}} onPress={takePicture}>    
  <FontAwesome name="camera" style={{ color: "#FEA428", fontSize: 50, marginBottom: 20}}/>
</TouchableOpacity> 
  

Итак, функция takePicture делает это:

 const takePicture = async () => {
  setLoading(prevState => !prevState)
  if(cameraRef){
    let photo = await cameraRef.takePictureAsync({quality: 0.5, skipProcessing: true, fixOrientation: false});
    setLoading(prevState => !prevState)
    setPhotoAbove(photo)

  }
  
}
  

setLoading измените параметр «isLoading», в котором указывается, будет ли ActivityIndicator видимым или нет. Однако после первого setLoading(prevState => !prevState) следующего кода никогда не выполняется. Я что-то здесь упускаю?

РЕДАКТИРОВАТЬ: я публикую презентацию Expo с кодом для целей тестирования. В Интернете проблема не видна, но, например, если вы запустите ее на Android, она будет.

https://snack.expo.io/@avradev/0a8a01

Tks.

Ответ №1:

Вы должны переместить свою вторую setLoading сразу после вызова метода await следующим образом:

 const takePicture = async () => {
  setLoading(prevState => !prevState)
  if(cameraRef){
    let photo = await cameraRef.takePictureAsync({quality: 0.5, skipProcessing: true, fixOrientation: false});

    setLoading(prevState => !prevState);

    setPhotoAbove(photo);
  }
 
}
  

Комментарии:

1. Это хороший момент, но проблема не в этом. В любом случае, Tks. Я публикую закуску к выставке.