React Native Camera Code
React Native Camera Code
MAD
function Assignment() {
const navigation = useNavigation();
return(
<View style = {{flex: 1, justifyContent: "center", flexDirection:
'column', alignItems: 'center',}}>
<ImageBackground style = {styles.container}
source={require('../../assets/images/imageBackground.png')}
resizeMode="cover">
<Text style = {styles.heading}>
Welcome To Assignment 02
</Text>
<View style = {styles.buttonConatiner}>
<Button mode="contained" onPress={() =>
navigation.navigate('TakePicture')}>Open Camera</Button>
<Button mode="contained" onPress={() =>
navigation.navigate('ViewPicture')}>View Pictures</Button>
</View>
</ImageBackground>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
width: '100%',
height: '100%',
},
heading: {
marginBottom: 250,
fontWeight: '800',
fontSize: 25,
},
buttonConatiner: {
display: 'flex',
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
gap: 30,
},
});
export default Assignment;
TakePicture Component
import React, { useState, useRef } from 'react';
import { Camera } from 'expo-camera';
import {
Button,
Modal,
StyleSheet,
Text,
TextInput,
TouchableOpacity,
View,
} from 'react-native';
import { Entypo, MaterialCommunityIcons } from '@expo/vector-icons';
import { collection, addDoc } from 'firebase/firestore'
import db from '../../configFirebase';
function TakePicture() {
const [type, setType] = useState(Camera.Constants.Type.back);
const [permission, requestPermission] = Camera.useCameraPermissions();
const [isModalVisible, setModalVisible] = useState(false);
const [enteredName, setEnteredName] = useState('');
const [image, setImage] = useState(null);
if (!permission) {
return <View />;
}
if (!permission.granted) {
return (
<View style={styles.container}>
<Text style={{ textAlign: 'center' }}>
We need your permission to show the camera
</Text>
<Button onPress={requestPermission} title="Grant Permission" />
</View>
);
}
return (
<View style={styles.container}>
<Camera style={styles.camera} type={type} ref={cameraRef}>
<View style={styles.buttonContainer}>
<TouchableOpacity style={styles.button}
onPress={toggleCameraType}>
<Text><MaterialCommunityIcons name="camera-flip" size={50}
color="white" /></Text>
</TouchableOpacity>
<TouchableOpacity style={styles.button} onPress={takePhoto}>
<Text><Entypo name="circle" size={60} color="white"/></Text>
</TouchableOpacity>
</View>
</Camera>
<Modal
animationType="slide"
transparent={true}
visible={isModalVisible}
onRequestClose={() => setModalVisible(false)}>
<View style={styles.modalContainer}>
<Text style={styles.modalText}>Enter Name:</Text>
<TextInput
style={styles.input}
onChangeText={(text) => setEnteredName(text)}
value={enteredName}
/>
<Button onPress={saveImage} title="Save Image" />
</View>
</Modal>
</View>
);
}
ViewPicture Component
import React, { useState, useEffect } from 'react';
import { Image, View, Text, StyleSheet, TouchableOpacity, FlatList, Button }
from 'react-native';
import { getDocs, collection } from 'firebase/firestore';
import db from '../../configFirebase';
function ViewPicture() {
const [imageDataList, setImageDataList] = useState([]);
const [selectedName, setSelectedName] = useState(null);
useEffect(() => {
const fetchImageData = async () => {
try {
const imageCollection = collection(db, 'images');
const snapshot = await getDocs(imageCollection);
fetchImageData();
}, []);
return (
<View style={styles.container}>
<FlatList
data={imageDataList}
keyExtractor={(item) => item.name}
renderItem={renderItem}
/>
</View>
);
}
Outputs