From 7e7585fa8f8daeeb8677c2278e5d62f0392d3f9b Mon Sep 17 00:00:00 2001 From: sihoo Date: Thu, 1 Oct 2026 23:15:01 +0000 Subject: [PATCH] =?UTF-8?q?=EC=9B=B9=20=EB=B8=8C=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=EC=A0=80=EC=97=90=EC=84=9C=EB=8A=94=20NFC=20=EC=84=B8=EC=85=98?= =?UTF-8?q?=EC=9D=84=20=EC=95=84=EC=98=88=20=EC=8B=9C=EC=9E=91=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 웹은 NFC 하드웨어에 접근할 방법이 없는데도 isAvailable()/startSession()을 그대로 호출하고 있었다. kIsWeb이면 바로 "스마트폰 앱에서만 사용할 수 있어요" 안내만 보여주고 세션 시도 자체를 건너뛰게 했다 (출석체크 화면 + 관리자 태그 쓰기 화면 둘 다). dispose()의 stopSession() 호출도 웹에서는 건너뛴다. --- lib/function/nfc_pocket_checkin_controller.dart | 11 ++++++++++- lib/function/nfc_tag_writer_controller.dart | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/function/nfc_pocket_checkin_controller.dart b/lib/function/nfc_pocket_checkin_controller.dart index 9ff036a..c698d6f 100644 --- a/lib/function/nfc_pocket_checkin_controller.dart +++ b/lib/function/nfc_pocket_checkin_controller.dart @@ -105,7 +105,8 @@ class NfcPocketCheckinController extends ChangeNotifier { @override void dispose() { // 화면을 나갈 때 NFC 감지만 종료. 백그라운드 감시 서비스는 화면과 무관하게 계속 동작해야 하므로 건드리지 않는다. - NfcManager.instance.stopSession(); + // 🌐 웹에서는 애초에 세션을 시작하지 않으므로 stopSession도 호출하지 않는다. + if (!kIsWeb) NfcManager.instance.stopSession(); _violationSub?.cancel(); _checkedOutSub?.cancel(); // iOS 근접센서 감시는 (안드로이드와 달리) 이 컨트롤러 안에서 직접 도는 것이라, @@ -119,6 +120,14 @@ class NfcPocketCheckinController extends ChangeNotifier { /// 📡 NFC 감지 세션 시작 void _startNfcSession() async { + // 🌐 웹 브라우저는 NFC 하드웨어에 접근할 방법이 없어서, 시도조차 하지 않고 + // 바로 안내 문구만 보여준다 (괜히 켜는 척하다 먹통되는 것 방지). + if (kIsWeb) { + _statusMessage = "NFC 태그 기능은 스마트폰 앱에서만 사용할 수 있어요."; + notifyListeners(); + return; + } + bool isAvailable = await NfcManager.instance.isAvailable(); if (!isAvailable) { _statusMessage = "이 스마트폰은 NFC 기능이 꺼져있거나 지원되지 않습니다."; diff --git a/lib/function/nfc_tag_writer_controller.dart b/lib/function/nfc_tag_writer_controller.dart index 106ab85..bbda885 100644 --- a/lib/function/nfc_tag_writer_controller.dart +++ b/lib/function/nfc_tag_writer_controller.dart @@ -31,7 +31,8 @@ class NfcTagWriterController extends ChangeNotifier { @override void dispose() { - NfcManager.instance.stopSession(); + // 🌐 웹에서는 애초에 세션을 시작하지 않으므로 stopSession도 호출하지 않는다. + if (!kIsWeb) NfcManager.instance.stopSession(); super.dispose(); } @@ -40,6 +41,11 @@ class NfcTagWriterController extends ChangeNotifier { onMessage("주머니 번호를 입력해주세요.", true); return; } + // 🌐 웹 브라우저는 NFC 하드웨어에 접근할 방법이 없어서 시도조차 하지 않는다. + if (kIsWeb) { + onMessage("NFC 태그 쓰기는 스마트폰 앱에서만 사용할 수 있어요.", true); + return; + } final String pocketLabel = "POCKET_$number"; bool isAvailable = await NfcManager.instance.isAvailable();