Untitled
unknown
plain_text
a year ago
3.6 kB
8
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