错误如下:
我花了几天时间试图弄清楚这一点,基本上包括我在论坛上从遇到类似问题的人那里读到的所有其他补救措施。 withNavigationFocus 的实现对大多数人来说似乎解决了这个问题,但就我而言,结果根本没有改变。
非常感谢您的帮助!
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native';
import { Camera } from 'expo-camera';
import { useRef } from 'react';
import { connect } from 'react-redux'
import { addPhoto, addVideo } from '../redux/actions'
import { storagePicUpload, storageVideoUpload } from '../tools/storage'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import { uuid } from '../tools/uuid'
import { withNavigationFocus } from 'react-navigation'
let EditableCamera = (props) => {
const insets = useSafeAreaInsets()
const [hasPermission, setHasPermission] = useState(null);
const [type, setType] = useState(Camera.Constants.Type['back']);
const cameraRef = useRef(null)
useEffect(() => {
(async () => {
const { status } = await Camera.requestPermissionsAsync()
setHasPermission(status === 'granted')
})();
}, []);
if (hasPermission === null) {
return <View />;
}
if (hasPermission === false) {
return <Text>No access to camera</Text>;
}
let snap = async () => {
if (cameraRef) {
let photo = await cameraRef.current.takePictureAsync({ exif: true })
if (photo) {
storagePicUpload(photo)
.then((uploadInfo) => {
props.addPhoto(uploadInfo)
})
.catch(err => {
console.log('err', err)
})
props.navigation.navigate('Feeling')
}
}
}
let record = async () => {
if (cameraRef) {
let video = await cameraRef.current.recordAsync({
maxDuration: 10
})
if (video) {
storageVideoUpload(video)
.then((uploadInfo) => {
props.addVideo(uploadInfo)
})
.catch(err => {
console.log('err', err)
})
props.navigation.navigate('Feeling')
}
}
}
let endRecording = () => {
cameraRef.current.stopRecording()
}
let renderControls = () => {
return (
<View style={styles.buttonContainer}>
<TouchableOpacity
style={styles.button}
onPress={() => {
setType(
type === Camera.Constants.Type.back
? Camera.Constants.Type.front
: Camera.Constants.Type.back
);
}}>
<Text style={styles.text}> Flip </Text>
</TouchableOpacity>
</View>
)
}
return (
<TouchableOpacity
style={[styles.container, { paddingTop: insets.top }]}
delayLongPress={300}
onPress={(() => {
snap()
})}
onLongPress={(() => {
record()
})}
onPressOut={() => {
endRecording()
}}
key={uuid()}
>
{ props.navigation.isFocused && <Camera
style={styles.camera}
type={type}
ratio={'16:9'}
autoFocus={'on'}
zoom={0}
whiteBalance={'auto'}
ref={cameraRef}
key={uuid()}
>
{renderControls()}
</Camera>}
</TouchableOpacity>
)
}
export default withNavigationFocus(connect(null, { addPhoto, addVideo })(EditableCamera))
const styles = StyleSheet.create({
container: {
flex: 1,
},
camera: {
flex: 1,
},
buttonContainer: {
flex: 1,
backgroundColor: 'transparent',
flexDirection: 'row',
margin: 20,
},
button: {
flex: 0.1,
alignSelf: 'flex-end',
alignItems: 'center',
},
text: {
fontSize: 18,
color: 'white',
},
});```