ответная реакция на сборщик изображений и экспозиция ImagePicker - PullRequest
0 голосов
/ 05 ноября 2019

Я перепробовал много попыток, чтобы заставить устройство работать с собственным изображением и работать с моим приложением RN. Я использую Expo и VS Code и не запускаю приложение с Xcode или Android Studio. Кажется, есть много вариантов, чтобы получить доступ к рулону камеры в приложении, и я не уверен, что это лучший путь. Кажется, ни один из них не работает для меня, поэтому я хотел бы выбрать лучший путь и сосредоточиться на том, чтобы этот маршрут работал.

Я слежу за документацией: https://github.com/react-native-community/react-native-image-picker

Вещи, которые я пробовал:

  • Реагировать на нативную камеру Roll
  • Expo ImagePicker
  • expo-image-picker
  • реагировать-родной-сборщик изображений
  • реагировать-изображения-загружать
  • реагировать-родной-фото-загрузка

Мой код:

import React, {useState, useEffect} from 'react';
import {StyleSheet, View, TextInput, TouchableOpacity, Text, CameraRoll } from 'react-native'
import ImagePicker from 'react-native-image-picker';
// import * as ImagePicker from 'expo-image-picker';
import Constants from 'expo-constants';

const PicturesScreen = ({navigation}) => {
    const [pictures, setPictures] = useState([]);

getPermissionAsync = async () => {
    if (Constants.platform.ios) {
      const { status } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
      if (status !== 'granted') {
        alert('Sorry, we need camera roll permissions to make this work!');
      }
    }
};

useEffect(() => {
    getPermissionAsync();
}, []);

selectPhotoTapped = () => {
   const options = {
      quality: 1.0,
      maxWidth: 500,
      maxHeight: 500,
      storageOptions: {
        skipBackup: true,
      },
    };

    ImagePicker.showImagePicker(options, response => {    
      if (response.didCancel) {
        console.log('User cancelled photo picker');
      } else if (response.error) {
        console.log('ImagePicker Error: ', response.error);
      } else if (response.customButton) {
        console.log('User tapped custom button: ', response.customButton);
      } else {
        let source = {uri: response.uri};
        console.log('source: ' + source);
        // You can also display the image using data:
        // let source = { uri: 'data:image/jpeg;base64,' + response.data };

        setPictures({
          picture: source
        });
      }
    });
  };


return (
    <View style = {styles.container}>
        <TouchableOpacity style = {styles.buttonContainerPhoto} onPress={()=> selectPhotoTapped()}> 
            <Text style={styles.buttonText} >
                Upload Photos 
            </Text>
        </TouchableOpacity> 

    <TouchableOpacity style = {styles.buttonContainer} onPress={()=> navigation.navigate('NextScreen')}> 
            <Text style={styles.buttonText} >
                Next 
            </Text>
        </TouchableOpacity>
    </View>
    );
};

const styles = StyleSheet.create({
    container: {
        ...
    }
});

export default PicturesScreen; 

Я удостоверился, что связал пакеты, я также удалил и переустановил и начал с нуля несколько раз. Я понизил версию, чтобы она работала, но я все еще продолжаю получать одно из следующих сообщений об ошибках:

response-native-image-picker: NativeModule.ImagePickerManager равен null

или

Невозможно прочитать свойство 'showImagePicker' из undefined.

или

undefined не является объектом (оценивает 'imagepickerManager.showimagepicker ')

Это вызывает проблемы, потому что я пользуюсь Expo? Должен ли я просто использовать CameraRoll с Reaction-native?

1 Ответ

1 голос
/ 05 ноября 2019

Используйте expo-image-picker , если вы используете Expo.

Все, что требует использования react-native link, не будет работать с Expo, если не указано, что оно уже включенов Экспо.

...