Untitled
unknown
plain_text
a year ago
3.6 kB
12
Indexable
import React, { useState, useEffect } from 'react';
import { Text, View, StyleSheet, TouchableOpacity, Image } from 'react-native';
import Constants from 'expo-constants';
import { launchCamera } from 'react-native-image-picker';
import * as MediaLibrary from 'expo-media-library';
import { MaterialIcons } from '@expo/vector-icons';
import Button from '../components/Button';
const AddMemoryScreen = () => {
const [hasCameraPermission, setHasCameraPermission] = useState(null);
const [image, setImage] = useState(null);
useEffect(() => {
(async () => {
const { status } = await MediaLibrary.requestPermissionsAsync();
setHasCameraPermission(status === 'granted');
})();
}, []);
const takePicture = async () => {
if (hasCameraPermission) {
try {
launchCamera(
{
mediaType: 'photo',
saveToPhotos: true,
},
(response) => {
if (response.didCancel) {
console.log('User cancelled image picker');
} else if (response.errorCode) {
console.log('Camera error: ', response.errorMessage);
} else {
console.log('Camera response: ', response);
setImage(response.assets[0].uri);
}
}
);
} catch (error) {
console.log('Error launching camera: ', error);
}
} else {
console.log('No camera permission granted');
}
};
const savePicture = async () => {
if (image) {
try {
const asset = await MediaLibrary.createAssetAsync(image);
alert('Picture saved! 🎉');
setImage(null);
console.log('Saved successfully');
} catch (error) {
console.log(error);
}
}
};
if (hasCameraPermission === false) {
return <Text>No access to camera</Text>;
}
return (
<View style={styles.container}>
{!image ? (
<TouchableOpacity style={styles.cameraButton} onPress={takePicture}>
<MaterialIcons name="camera" size={40} color="#fff" />
</TouchableOpacity>
) : (
<Image source={{ uri: image }} style={styles.camera} />
)}
<View style={styles.controls}>
{image ? (
<View style={styles.controlRow}>
<Button title="Re-take" onPress={() => setImage(null)} icon="retweet" />
<Button title="Save" onPress={savePicture} icon="check" />
</View>
) : (
<Button title="Take a picture" onPress={takePicture} icon="camera" />
)}
</View>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#000',
padding: 8,
},
controls: {
flex: 0.5,
},
button: {
height: 40,
borderRadius: 6,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
},
text: {
fontWeight: 'bold',
fontSize: 16,
color: '#E9730F',
marginLeft: 10,
},
camera: {
flex: 5,
borderRadius: 20,
},
topControls: {
flex: 1,
},
cameraButton: {
flex: 5,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'gray',
borderRadius: 20,
},
controlRow: {
flexDirection: 'row',
justifyContent: 'space-between',
paddingHorizontal: 50,
},
});
export default AddMemoryScreen;
Editor is loading...
Leave a Comment