UNPKG

react-native-infy-qrcode-scanner

Version:
306 lines (197 loc) 8.24 kB
# react-native-infy-qrcode-scanner [![npm version](https://badge.fury.io/js/react-native-infy-qrcode-scanner.svg)](https://badge.fury.io/js/react-native-infy-qrcode-scanner) [![Backers on Open Collective](https://opencollective.com/react-native-infy-qrcode-scanner/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/react-native-infy-qrcode-scanner/sponsors/badge.svg)](#sponsors) QR code scanner component is used for React Native applications, built on top of [react-native-infy-camera by Satish Attada](https://github.com/satishattada/react-native-camera) This prototype will used as barcode scanner and was built for QR code scanning ## Getting started ### Requirements #### Android 8 With Android 8 and higher you should add "Vibration" permission on your AndroidManifest.xml of your project. This should be found in your `android/app/src/main/AndroidManifest.xml` Add the following: ``` <uses-permission android:name="android.permission.VIBRATE"/> ``` You should add "missingDimensionStrategy" defaultConfig to the 'react-native-infy-camera' by placing it to 'general', this should be found in `android/app/build.gradle` of your project, please add the following: ``` android { ... defaultConfig { ... missingDimensionStrategy 'react-native-infy-camera', 'general' } } ``` #### react-native-infy-camera There is a dependency with react-native-infy-camera to this package. Install [react-native-infy-camera](https://github.com/satishattada/react-native-camera) 1. `npm install react-native-infy-camera --save` 2. `react-native link react-native-infy-camera` ### To install and start react-native-infy-qrcode-scanner: 1. `npm i react-native-infy-qrcode-scanner` 2. `react-native link react-native-infy-qrcode-scanner` _**Please note**: If you are using react-native version 0.60 or above, then please ignore react-native link._ #### react-native-permissions You should also need to install react-native-permissions to handle camera related permissions 1. `npm install react-native-permissions --save` 2. `react-native link react-native-permissions` _**Please note**: If you are using react-native version 0.60 or above, then please ignore react-native link._ _**Please note**: You may also need to reset your simulator/emulator data after adding the permissions `Device -> Erase All Content and Settings...` ._ ## Usage To use react-native-infy-qrcode-scanner, `import` the `react-native-infy-qrcode-scanner` module and use the `<QRCodeScanner />` tag. Here is an example of basic usage: ```js 'use strict'; import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, TouchableOpacity, Linking } from 'react-native'; import QRCodeScanner from 'react-native-infy-qrcode-scanner'; import { RNCamera } from 'react-native-infy-camera'; class ScanQRComponent extends Component { onSuccess = e => { Linking.openURL(e.data).catch(err => console.error('Error', err) ); }; render() { return ( <QRCodeScanner onRead={this.onSuccess} flashMode={RNCamera.Constants.FlashMode.torch} topContent={ <Text style={styles.centerText}> Go to{' '} <Text style={styles.textBold}>https://www.qr-code-generator.com/</Text> and add some TEXT QR code generator on your computer and scan the QR code. </Text> } bottomContent={ <TouchableOpacity style={styles.buttonTouchable}> <Text style={styles.buttonText}>Confirm</Text> </TouchableOpacity> } /> ); } } const styles = StyleSheet.create({ centerText: { flex: 1, fontSize: 16, padding: 20, color: '#eee' }, textBold: { fontWeight: '600', color: '#000' }, buttonText: { fontSize: 21, color: '#009b00' }, buttonTouchable: { padding: 10 } }); AppRegistry.registerComponent('default', () => ScanQRComponent); ``` ## Methods #### `reactivate()` To enable the scan again, use this method `<QRCodeScanner ref={(node) => { this.scanner = node }}>` and call `this.scanner.reactivate()` ## Props #### `onRead` (required) propType: `func.isRequired` default: `(e) => (console.log('QR code scanned!', e))` After scanning the QR code, onRead method is used to read the QR code and this method is required. #### `fadeIn` propType: `bool` default: `true` Camera view fades after scanning, it is like animation fading. #### `reactivate` propType: `bool` default: `false` After scanning the `QRCodeScanner`, You cannot scan another, if set to `false` if set to `true` it will reactivate the scanning #### `reactivateTimeout` propType: `number` default: `0` reactivate with some time (in milliseconds). `reactivateTimeout` is used, by default it is `0` #### `cameraTimeout` propType: `number` default: `0` This is used to take some time ( in milliseconds) before the `QRCodeScanner` displayed. #### `cameraTimeoutView` propType: `element` Pass component to show when the camera is inactive in `cameraTimeout` (another prop) milliseconds. If the `cameraTimeout` is 0 or not specified, this prop will be never used. #### `flashMode` propType: `RNCamera.Constants.FlashMode` default: `RNCamera.Constants.FlashMode.auto` **Flash modes** - `RNCamera.Constants.FlashMode.off` turns it to off. - `RNCamera.Constants.FlashMode.on` means camera flash will be used for all photos. - `RNCamera.Constants.FlashMode.auto` used to flash automatically based on lightening conditions. - `RNCamera.Constants.FlashMode.torch` on camera open, light will be opened for scanning. #### `topContent` propType: `oneOfType([ PropTypes.element, PropTypes.string, ])` This us used to render any additional content at the top of the camera view. #### `bottomContent` propType: `oneOfType([ PropTypes.element, PropTypes.string, ])` This us used to render any additional content at the bottom of the camera view. #### `containerStyle` propType: `any` This us used pass styling for the outermost container. Useful for adding margin/padding to account for navigation bar. #### `cameraStyle` propType: `any` This us used to pass or overwrite styling for the camera window rendered. #### `cameraContainerStyle` propType: `any` This us used to pass or overwrite styling for the camera container (view) window rendered. #### `topViewStyle` propType: `any` This us used to pass or overwrite styling for the `<View>` that contains the `topContent` prop. #### `bottomViewStyle` propType: `any` This us used to pass or overwrite styling for the `<View>` that contains the `bottomContent` prop. #### `showMarker` propType: `boolean` default: `false` This us used to show marker on the camera scanning window. #### `customMarker` propType: `element` This us used for custom marker. #### `markerStyle` propType: `any` This us used to add custom styling to the default marker. #### `notAuthorizedView` propType: `element` Pass a RN element/component to use it when no permissions given to the camera (iOS only). #### `cameraType` propType: `oneOf(['front', 'back'])` default: `'back'` This us used to control which camera to use for scanning QR codes, defaults to rear camera. #### `checkAndroid6Permissions` propType: `bool` default: `false` This us used to enable permission checking on Android 6 #### `permissionDialogTitle` propType: `string` default: `'Info'` This us used to set permission dialog title (Android only). #### `permissionDialogMessage` propType: `string` default: `'Need camera permission'` This us used to set permission dialog message (Android only). #### `buttonPositive` propType: `string` default: `'OK'` This us used to set permission dialog button text (Android only). #### `cameraProps` propType: `object` Properties to be passed to the `Camera` component. ## License See [LICENSE.md](LICENSE.md)