Как закрыть камеру / сканер в реагирующем родном сканере qrcode? - PullRequest
1 голос
/ 20 февраля 2020

Текущий код:

import QRCodeScanner from 'react-native-qrcode-scanner';
function ScanScreen({ navigation }) {
  return (
    <SafeAreaView style={styles.screen}>
      <QRCodeScanner reactivate={true} reactivateTimeout={3000}
        onRead={data => navigation.navigate('Third', {target:data.data})}
      />
    </SafeAreaView>
  );
}

Это работает, но вот что я хочу сделать: пользователь может перемещаться между экранами, одним из которых является сканер QR-кода. При сканировании мне нужно отменить сканер, чтобы он не генерировал события onRead. Пользователь может а) запустить сканирование на экране сканирования, не считывая QR-код, и вручную перейти к другому экрану. b) прочитайте QR и автоматически перейдите на другой экран для обработки, затем go вернитесь к сканированию снова. По этой причине мне нужно снова включить сканер через некоторое разумное время. Я не могу просто установить реактивировать на ложь, потому что тогда сканер QR неактивен, пока я не перезапущу приложение. Проблема заключается в том, что, когда пользователь остается на другом экране, QR-сканер повторно активируется после истечения времени ожидания и пытается сканировать, когда это нежелательно. В идеале я хотел бы деактивировать сканер QR, когда пользователь не находится на экране сканирования, и повторно активировать его с указанными выше параметрами каждый раз, когда пользователь входит в экран сканирования. Есть какой-либо способ сделать это? Спасибо!

1 Ответ

1 голос
/ 20 марта 2020

У меня была почти такая же проблема. Сканер не останавливает сканирование при отображении другого вида (используя reactivate={true}). Я использую реагирующую навигацию, и поэтому я пришел к следующему решению.

Вы можете прослушивать, что происходит с вашим видом, с помощью focus и blur.

this.props.navigation.addListener('focus', () => {
    this.setState({viewFocused: true});
});

this.props.navigation.addListener('blur', () => {
    this.setState({viewFocused: false});
});

Примечание. : вы помещаете этот фрагмент кода в componentDidMount или используете React.useEffect.

На основе состояния viewFocused вы можете отобразить сканер QR-кода.

this.state.viewFocused && (
    <QRCodeScanner
        onRead={onRead}
        reactivate={true}
        reactivateTimeout={2000}
    /> );

Это помогает мне решить мою проблему. Не сканировать при отображении других видов, но сканировать, если вид отображается снова. Кредиты pkyeck на github.com

...