You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
import React, { useState, useEffect } from "react"; |
|
import { Text, View, StyleSheet, Button } from "react-native"; |
|
import { BarCodeScanner } from "expo-barcode-scanner"; |
|
|
|
export default function App() { |
|
const [hasPermission, setHasPermission] = useState(null); |
|
const [scanned, setScanned] = useState(false); |
|
|
|
useEffect(() => { |
|
(async () => { |
|
const { status } = await BarCodeScanner.requestPermissionsAsync(); |
|
setHasPermission(status === "granted"); |
|
})(); |
|
}, []); |
|
|
|
const handleBarCodeScanned = ({ type, data }) => { |
|
setScanned(true); |
|
alert(`Bar code with type ${type} and data ${data} has been scanned!`); |
|
}; |
|
|
|
if (hasPermission === null) { |
|
return <Text>Requesting for camera permission</Text>; |
|
} |
|
if (hasPermission === false) { |
|
return <Text>No access to camera</Text>; |
|
} |
|
|
|
return ( |
|
<> |
|
<BarCodeScanner |
|
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned} |
|
style={{ width: "100%", height: 300 }} |
|
/> |
|
{scanned ? ( |
|
<Button title={"Tap to Scan Again"} onPress={() => setScanned(false)} /> |
|
) : null} |
|
</> |
|
); |
|
}
|
|
|