Cursos / Informática para Internet / Desenvolvimento para Dispositivos Móveis / Aula
O nosso aplicativo já está utilizando a câmera. Agora vamos fazer com que ele possa alternar entre a câmera traseira e frontal, geralmente presentes na maioria dos dispositivos móveis atuais.
Inicialmente iremos criar um estado que vai armazenar o tipo da câmera (frontal ou traseira) e setá-lo para iniciar com a câmera traseira por padrão.
const [type, setType] = useState(Camera.Constants.Type.back)
Após isso, iremos utilizar o estado em uma propriedade enviada ao componente, a propriedade type.
<Camera type={type} style={styles.camera}></Camera>
Para alternar as câmeras, iremos criar um botão que, ao ser clicado, executará uma função que altera o estado type.
Veja a função abaixo:
async function flipCamera() {
if (type === Camera.Constants.Type.back) {
setType(Camera.Constants.Type.front)
} else {
setType(Camera.Constants.Type.back)
}
}
Ao final da aula, seu código deve ficar como abaixo:
import { Camera } from 'expo-camera';
import React, { useEffect, useState } from 'react';
import { StyleSheet, Text, View, Button } from 'react-native';
export default function App() {
const [hasPermission, setHasPermission] = useState(null)
const [type, setType] = useState(Camera.Constants.Type.back)
async function requestPermission() {
const { status } = await Camera.requestPermissionsAsync()
setHasPermission(status === 'granted')
}
async function flipCamera() {
if (type === Camera.Constants.Type.back) {
setType(Camera.Constants.Type.front)
} else {
setType(Camera.Constants.Type.back)
}
}
useEffect(() => {
requestPermission()
}, [])
if (hasPermission == null) {
return <View></View>
}
if (hasPermission === false) {
return <View><Text>Não foi possível acessar a câmera</Text></View>
}
return (
<View style={styles.container}>
<Camera type={type} style={styles.camera}></Camera>
<Button title="Alternar" onPress={() => flipCamera()}></Button>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
camera: {
width: 400,
height: 400
}
});
Versão 5.3 - Todos os Direitos reservados