웹 브라우저에서는 NFC 세션을 아예 시작하지 않게 수정

웹은 NFC 하드웨어에 접근할 방법이 없는데도 isAvailable()/startSession()을
그대로 호출하고 있었다. kIsWeb이면 바로 "스마트폰 앱에서만 사용할 수 있어요"
안내만 보여주고 세션 시도 자체를 건너뛰게 했다 (출석체크 화면 + 관리자
태그 쓰기 화면 둘 다). dispose()의 stopSession() 호출도 웹에서는 건너뛴다.
This commit is contained in:
2026-10-01 23:15:01 +00:00
parent 12780eb3af
commit 7e7585fa8f
2 changed files with 17 additions and 2 deletions
@@ -105,7 +105,8 @@ class NfcPocketCheckinController extends ChangeNotifier {
@override @override
void dispose() { void dispose() {
// 화면을 나갈 때 NFC 감지만 종료. 백그라운드 감시 서비스는 화면과 무관하게 계속 동작해야 하므로 건드리지 않는다. // 화면을 나갈 때 NFC 감지만 종료. 백그라운드 감시 서비스는 화면과 무관하게 계속 동작해야 하므로 건드리지 않는다.
NfcManager.instance.stopSession(); // 🌐 웹에서는 애초에 세션을 시작하지 않으므로 stopSession도 호출하지 않는다.
if (!kIsWeb) NfcManager.instance.stopSession();
_violationSub?.cancel(); _violationSub?.cancel();
_checkedOutSub?.cancel(); _checkedOutSub?.cancel();
// iOS 근접센서 감시는 (안드로이드와 달리) 이 컨트롤러 안에서 직접 도는 것이라, // iOS 근접센서 감시는 (안드로이드와 달리) 이 컨트롤러 안에서 직접 도는 것이라,
@@ -119,6 +120,14 @@ class NfcPocketCheckinController extends ChangeNotifier {
/// 📡 NFC 감지 세션 시작 /// 📡 NFC 감지 세션 시작
void _startNfcSession() async { void _startNfcSession() async {
// 🌐 웹 브라우저는 NFC 하드웨어에 접근할 방법이 없어서, 시도조차 하지 않고
// 바로 안내 문구만 보여준다 (괜히 켜는 척하다 먹통되는 것 방지).
if (kIsWeb) {
_statusMessage = "NFC 태그 기능은 스마트폰 앱에서만 사용할 수 있어요.";
notifyListeners();
return;
}
bool isAvailable = await NfcManager.instance.isAvailable(); bool isAvailable = await NfcManager.instance.isAvailable();
if (!isAvailable) { if (!isAvailable) {
_statusMessage = "이 스마트폰은 NFC 기능이 꺼져있거나 지원되지 않습니다."; _statusMessage = "이 스마트폰은 NFC 기능이 꺼져있거나 지원되지 않습니다.";
+7 -1
View File
@@ -31,7 +31,8 @@ class NfcTagWriterController extends ChangeNotifier {
@override @override
void dispose() { void dispose() {
NfcManager.instance.stopSession(); // 🌐 웹에서는 애초에 세션을 시작하지 않으므로 stopSession도 호출하지 않는다.
if (!kIsWeb) NfcManager.instance.stopSession();
super.dispose(); super.dispose();
} }
@@ -40,6 +41,11 @@ class NfcTagWriterController extends ChangeNotifier {
onMessage("주머니 번호를 입력해주세요.", true); onMessage("주머니 번호를 입력해주세요.", true);
return; return;
} }
// 🌐 웹 브라우저는 NFC 하드웨어에 접근할 방법이 없어서 시도조차 하지 않는다.
if (kIsWeb) {
onMessage("NFC 태그 쓰기는 스마트폰 앱에서만 사용할 수 있어요.", true);
return;
}
final String pocketLabel = "POCKET_$number"; final String pocketLabel = "POCKET_$number";
bool isAvailable = await NfcManager.instance.isAvailable(); bool isAvailable = await NfcManager.instance.isAvailable();