import {useEffect, useState} from 'react'; import {Text, View} from 'react-native'; import NfcManager, {Ndef, NfcEvents} from 'react-native-nfc-manager'; import {Button, Snackbar} from 'react-native-paper'; export default function Nfc() { const [hasNfc, setHasNFC] = useState(null); const [foundNfcTag, setFoundNfcTag] = useState(''); const [nfcScanningActive, setNfcScanningActive] = useState(false); const [snackbarVisible, setSnackbarVisible] = useState(false); const [snackbarMessage, setSnackbarMessage] = useState(''); useEffect(() => { const checkIsSupported = async () => { const deviceIsSupported = await NfcManager.isSupported(); setHasNFC(deviceIsSupported); if (deviceIsSupported) { await NfcManager.start(); } }; checkIsSupported(); NfcManager.setEventListener(NfcEvents.DiscoverTag, tag => { console.log( 'tag found', tag, Ndef.uri.decodePayload(tag.ndefMessage[0].payload), ); setFoundNfcTag(Ndef.uri.decodePayload(tag.ndefMessage[0].payload)); setSnackbarVisible(true); // fetch setTimeout(() => { setSnackbarVisible(false); }, 2000); }); return () => { NfcManager.setEventListener(NfcEvents.DiscoverTag, null); }; }, []); const readTag = async () => { await NfcManager.registerTagEvent(); setNfcScanningActive(true); }; const unregisterReadTag = async () => { await NfcManager.unregisterTagEvent(); setNfcScanningActive(false); }; if (!hasNfc) { return ( NFC not supported ); } return ( {nfcScanningActive ? ( <> Found tag: {foundNfcTag} ) : ( )} setSnackbarVisible(false)} action={{ label: 'OK', onPress: () => setSnackbarVisible(false), }}> {snackbarMessage} ); }