Возможное отклонение необработанного обещания (id: 0) Ошибка типа: неопределенный не является объектом (оценка ‘ImagePicker.Permissions.askAsync)

#react-native #expo #typeerror #ios-permissions #expo-permissions

#react-native #выставка #ошибка типа #ios-разрешения #выставка-разрешения

Вопрос:

Я создаю приложение для iOS с использованием React-Native и Expo. Я выяснил, как получить доступ к библиотеке фотографий пользователя, но не могу запросить разрешения с их устройства. Вместо этого он просто обращается к фотопленке без запроса, что, очевидно, не разрешено в iOS. Ниже приведен некоторый мой код:

     import React, {useState, useEffect, useRef} from 'react';
    import * as ImagePicker from 'expo-image-picker';
    import Permissions, {usePermissions} from 'expo-permissions';
    import Constants from 'expo-constants'
 

// Функция useEffect — это то, что запускается при проверке, была ли принята асинхронная функция или нет

 const Screen = ({navigation}) => {

const [ imagePicker1, setImagePicker1 ] = useState(null);

useEffect(() => {
    const permission_get1 = async ()=> {
        if (Platform.OS !== 'web'){
            let { status } = await ImagePicker.Permissions.askAsync(Permissions.MEDIA_LIBRARY);
            if (status !== 'granted'){
                console.log('No permission given')
                alert('Camera roll required for to upload photo from your library');
                return;
            }
            /*if (status === 'granted'){
                console.log('Permission granted')*/

            let imagePicker1 = await ImagePicker.getMediaLibraryAsync()
                setImagePicker1(imagePicker1)
                console.log('It worked')
            }

    };
            permission_get1();
}, []);
 

Ответ №1:

В итоге я заставил его работать, используя это: я полагаю, что в предыдущем примере использовался устаревший метод.

  import * as ImagePicker from 'expo-image-picker'

const pickImage = async ()=>{
  const { granted } = await Permissions.askAsync(Permissions.CAMERA_ROLL)
  if(granted){
    console.log('access granted')
    let data = await ImagePicker.launchImageLibraryAsync({
      mediaTypes:ImagePicker.MediaTypeOptions.Images,
      allowsEditing: true,
      aspect:[1,1],
      quality:0.5,
    })
    console.log(data)

    if (!data.cancelled){
    setImage(data.uri);
  }
  
  }else{
    Alert.alert('Permissions required to access camera roll.')
  }

}