2

应用程序中有一个单独的页面,我在其中发布了 expo-barcode-scanner。最重要的是,当您打开相机所在的特定页面时,应用程序会立即崩溃。没有错误被打印到控制台。扫描仪本身的代码被取消了。文档。

其中:

  • 不管我是通过“Camera”组件还是通过“BarCodeScanner”组件,它仍然会崩溃
  • 如果您传入 onBarcodeScanned = undefined,则相机本身会工作并启动,但一旦 onBarcodeScanned = handleBarCodeScanned - 程序立即崩溃。
const AdminScreen = ({navigation}) => {
  const [hasPermission, setHasPermission] = useState(null);
  const [scanned, setScanned] = useState(true);
  const [cameraReady, setCameraReady] = useState(false);

  useEffect(() => {
    (async () => {
      const { status } = await BarCodeScanner.requestPermissionsAsync();
      setHasPermission(status === 'granted');
    })();
  }, []);
  
  const onCameraReady = () => {
    setCameraReady(true)
    console.warn("Camera ready")
  }

  const handleBarCodeScanned = ({ type, data }) => {
    if (cameraReady){
      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 (
    <View
    style={{
      flex: 1,
      resizeMode: 'cover',
    }}>
      <Camera
        onCameraReady={onCameraReady}
        barCodeTypes={[BarCodeScanner.Constants.BarCodeType.qr]}
        onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
        style={{
          flex:1
        }}
      />
      {scanned && <Button title={'Tap to Scan Again'} onPress={() => setScanned(false)} />}
    </View>
  );
}

PS:我不排除错误尽可能明显和愚蠢,我一周前才开始学习react和js,我很容易错过一些东西

4

0 回答 0