Это код, который я использовал для сканера штрих-кода. Он сканирует только QR-код на iOS. На андроиде работает нормально. А также я использовал разные пакеты, все они не работают на iOS.
import React, {
Component,
} from 'react'
import {
View,
StyleSheet,
Alert,
} from 'react-native'
Пакеты для BarcodeScanner называются
import Barcode from 'react-native-smart-barcode-scan'
import TimerEnhance from 'react-native-smart-timer-enhance'
Класс штрих-кода
class BarcodeTest extends Component {
// structure
constructor(props) {
super(props);
// initial state
this.state = {
viewAppear: true,
};
}
render() {
return (
Здесь вызывается штрих-код.
<View style={{flex: 1, backgroundColor: 'black',}}>
{this.state.viewAppear ?
<Barcode style={{flex: 1,}}
ref={component => this._barCode = component}
onBarCodeRead={this._onBarCodeRead}/> : null}
</View>
)
}
Компонент монтируется, а компонент монтируется
componentDidMount() {
let viewAppearCallBack = (event) => {
this.setTimeout(() => {
this.setState({
viewAppear: true,
})
}, 255)
}
this._listeners = [
// this.props.navigator.navigationContext.addListener('didfocus',
viewAppearCallBack)
]
}
componentWillUnmount() {
this._listeners && this._listeners.forEach(listener =>
listener.remove());
}
Функции для использования сканирования штрих-кода
_onBarCodeRead = (e) => {
console.log(`e.nativeEvent.data.type = ${e.nativeEvent.data.type},
e.nativeEvent.data.code = ${e.nativeEvent.data.code}`)
this._stopScan()
Alert.alert(e.nativeEvent.data.type, e.nativeEvent.data.code, [
{text: 'OK', onPress: () => this._startScan()},
])
}
_startScan = (e) => {
this._barCode.startScan()
}
_stopScan = (e) => {enter code here
this._barCode.stopScan()
}
}
`enter code here`export default TimerEnhance(BarcodeTest)