Если вы хотите сохранить информацию в QR-коде как QR-код, вам необходимо преобразовать QR-код в изображение PNG, а затем сохранить его в своей базе данных как изображение.
Итак, что я советую вам сделать это, при сохранении просто сохранить информацию в виде строки (или как угодно) в базе данных. При загрузке просто получите информацию из своей базы данных и немедленно сгенерируйте QR-код. Это не займет больше времени. После создания QR-кода отобразите его.
Я думаю, что это наиболее подходящее решение для вас.
Вам может понадобиться react-native-qrcode-generator
для создания QR-кода.
Вот пример кода ...
Вы можете ввести key
и value
(верхние поля ввода) и нажать кнопку «Сохранить». При нажатии кнопки «Сохранить» вы должны сохранить свою пару (данные) ключ-значение в своей базе данных.
Затем введите key
(в нижнем поле ввода), из которого вы хотите загрузить и нажмите кнопку «Загрузить». Затем вы должны получить данные (значение), связанные с данным ключом.
Значение состояния устанавливается после того, как значение успешно извлечено из базы данных. Это состояние передается как prop
компоненту QRCode
.
import React, { useState } from 'react';
import { StyleSheet, View, Text, TextInput, TouchableOpacity, AsyncStorage } from 'react-native';
import QRCode from 'react-native-qrcode-generator';
export default function App() {
const [key, setKey] = useState(null);
const [value, setValue] = useState(null);
const [downloadKey, setDownloadKey] = useState(null);
const [qrCodeValue, setQRCodeValue] = useState('');
const save = async () => {
//You have to implement the function that saves your information into your database.
//Here I'm saving data to AsyncStorage. (For sample)
await AsyncStorage.setItem(key, value);
}
const download = async () => {
//You have to implement the function that retrieves your information from your database for given key.
//Here I'm retrieving data from AsyncStorage. (For sample)
const qrValue = await AsyncStorage.getItem(downloadKey);
setQRCodeValue(qrValue);
}
return (
<View style={styles.container}>
<View style={styles.row}>
<TextInput placeholder={'Key'} value={key} onChangeText={(key) => setKey(key)} style={styles.textInput}/>
<TextInput placeholder={'Value'} value={value} onChangeText={(value) => setValue(value)} style={styles.textInput}/>
</View>
<TouchableOpacity style={{ flexDirection: 'row', marginBottom: 50 }} onPress={save}>
<Text style={styles.button}>Save</Text>
</TouchableOpacity>
{qrCodeValue ? <QRCode value={qrCodeValue} size={200} /> : null}
<Text style={{ margin: 10 }}>{qrCodeValue}</Text>
<View style={[styles.row, { marginTop: 50 }]}>
<TextInput placeholder={'Key'} value={downloadKey} onChangeText={(downloadKey) => setDownloadKey(downloadKey)} style={styles.textInput}/>
<TouchableOpacity style={{ flex: 1, flexDirection: 'row' }} onPress={download}>
<Text style={styles.button}>Download</Text>
</TouchableOpacity>
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
paddingTop: 50,
paddingBottom: 50
},
row: {
flexDirection: 'row',
},
textInput: {
flex: 1,
borderColor: '#808080',
borderWidth: 1,
borderRadius: 5,
margin: 5,
paddingLeft: 5,
paddingRight: 5,
},
button: {
flex: 1,
borderColor: '#0040FF',
backgroundColor: '#0080FF',
borderWidth: 1,
borderRadius: 5,
margin: 5,
textAlign: 'center',
textAlignVertical: 'center',
height: 30
},
});
Вот демонстрация ...
Пожалуйста go через это и не стесняйтесь спрашивать меня, если у вас возникнут другие проблемы. Удачи!