I'm currently using react-native-vision-camera with the vision-camera-code-scanner plugin, however when there is no barcode in front of the camera, the barcodes value is an empty array, but when a barcode is brought within view, the barcodes value is undefined. I've tried disabling debugger mode as I've read in a thread but no difference.
Note: react-native-camera is deprecated by extension so is: react-native-qrcode-scanner
I've already read this thread, no solutions there: How to scan a qr code in React Native cli?
Any help would. be appreciated
Please see code below:
import React, { memo, useEffect, useState } from 'react';
import { runOnJS } from 'react-native-reanimated';
import { Camera, useCameraDevices, useFrameProcessor } from 'react-native-vision-camera';
import { BarcodeFormat, scanBarcodes, Barcode } from 'vision-camera-code-scanner';
import { Container } from './styles';
interface QRReaderProps {
testID?: string;
}
const QRReader: React.FC<QRReaderProps> = ({ testID }) => {
const [hasPermission, setHasPermission] = React.useState(false);
const devices = useCameraDevices();
const device = devices.back;
const [barcodes, setBarcodes] = useState<Barcode[]>([]);
useEffect(() => {
console.log('barcodesState', barcodes); // undefined
}, [barcodes]);
const frameProcessor = useFrameProcessor((frame) => {
'worklet';
const detectedBarcodes = scanBarcodes(frame, [BarcodeFormat.QR_CODE]);
runOnJS(setBarcodes)(detectedBarcodes);
}, []);
React.useEffect(() => {
(async () => {
const status = await Camera.requestCameraPermission();
setHasPermission(status === 'authorized');
})();
}, []);
return (
<Container testID={testID}>
{device && hasPermission && (
<Camera
style={{ width: '100%', height: '100%', position: 'absolute' }}
device={device}
isActive
frameProcessor={frameProcessor}
frameProcessorFps={1}
/>
)}
</Container>
);
};
export { QRReader };
export default memo(QRReader);
QRReader.defaultProps = {
testID: 'qrreader-testID',
};