From 5de33992a281fe8f49e70d1fa1f118f3914f562b Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Thu, 29 Jan 2026 23:55:49 +0900 Subject: [PATCH] =?UTF-8?q?fix(sms-scan):=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=EB=A5=BC=20=ED=86=A0=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구독 정보를 찾지 못한 경우 상단 붉은색 텍스트 대신 하단 토스트 메시지 출력 - ScanInitialWidget에서 errorMessage 파라미터 제거 - SmsScanController에서 AppSnackBar.showError() 사용 - 불필요한 _errorMessage 상태 변수 제거 --- lib/controllers/sms_scan_controller.dart | 29 ++++++++++++------- lib/screens/sms_scan_screen.dart | 2 -- lib/widgets/sms_scan/scan_initial_widget.dart | 11 ------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/lib/controllers/sms_scan_controller.dart b/lib/controllers/sms_scan_controller.dart index 7fb8587..caf059f 100644 --- a/lib/controllers/sms_scan_controller.dart +++ b/lib/controllers/sms_scan_controller.dart @@ -17,15 +17,13 @@ import '../providers/category_provider.dart'; import '../providers/payment_card_provider.dart'; import '../l10n/app_localizations.dart'; import '../utils/logger.dart'; +import '../widgets/common/snackbar/app_snackbar.dart'; class SmsScanController extends ChangeNotifier { // 상태 관리 bool _isLoading = false; bool get isLoading => _isLoading; - String? _errorMessage; - String? get errorMessage => _errorMessage; - List _scannedSubscriptions = []; List get scannedSubscriptions => _scannedSubscriptions; PaymentCardSuggestion? _currentSuggestion; @@ -109,7 +107,6 @@ class SmsScanController extends ChangeNotifier { Future scanSms(BuildContext context) async { _isLoading = true; - _errorMessage = null; _scannedSubscriptions = []; _currentIndex = 0; notifyListeners(); @@ -137,9 +134,12 @@ class SmsScanController extends ChangeNotifier { final req = await permission.Permission.sms.request(); if (!ctx.mounted) return; if (!req.isGranted) { - // 거부됨: 안내 후 종료 + // 거부됨: 토스트 표시 후 종료 if (!ctx.mounted) return; - _errorMessage = AppLocalizations.of(ctx).smsPermissionRequired; + AppSnackBar.showError( + context: ctx, + message: AppLocalizations.of(ctx).smsPermissionRequired, + ); _isLoading = false; notifyListeners(); return; @@ -162,7 +162,10 @@ class SmsScanController extends ChangeNotifier { if (scanResults.isEmpty) { Log.i('스캔된 구독이 없음'); - _errorMessage = AppLocalizations.of(context).subscriptionNotFound; + AppSnackBar.showError( + context: context, + message: AppLocalizations.of(context).subscriptionNotFound, + ); _isLoading = false; notifyListeners(); return; @@ -184,7 +187,10 @@ class SmsScanController extends ChangeNotifier { if (repeatSubscriptions.isEmpty) { Log.i('반복 결제된 구독이 없음'); - _errorMessage = AppLocalizations.of(context).repeatSubscriptionNotFound; + AppSnackBar.showError( + context: context, + message: AppLocalizations.of(context).repeatSubscriptionNotFound, + ); _isLoading = false; notifyListeners(); return; @@ -223,8 +229,10 @@ class SmsScanController extends ChangeNotifier { } catch (e) { Log.e('SMS 스캔 중 오류 발생', e); if (context.mounted) { - _errorMessage = - AppLocalizations.of(context).smsScanErrorWithMessage(e.toString()); + AppSnackBar.showError( + context: context, + message: AppLocalizations.of(context).smsScanErrorWithMessage(e.toString()), + ); _isLoading = false; notifyListeners(); } @@ -343,7 +351,6 @@ class SmsScanController extends ChangeNotifier { void resetState() { _scannedSubscriptions = []; _currentIndex = 0; - _errorMessage = null; _selectedPaymentCardId = null; _currentSuggestion = null; _shouldSuggestCardCreation = false; diff --git a/lib/screens/sms_scan_screen.dart b/lib/screens/sms_scan_screen.dart index c05b70d..5f61aba 100644 --- a/lib/screens/sms_scan_screen.dart +++ b/lib/screens/sms_scan_screen.dart @@ -58,7 +58,6 @@ class _SmsScanScreenState extends State { if (_controller.scannedSubscriptions.isEmpty) { return ScanInitialWidget( onScanPressed: () => _controller.startScan(context), - errorMessage: _controller.errorMessage, ); } @@ -77,7 +76,6 @@ class _SmsScanScreenState extends State { }); return ScanInitialWidget( onScanPressed: () => _controller.startScan(context), - errorMessage: _controller.errorMessage, ); } diff --git a/lib/widgets/sms_scan/scan_initial_widget.dart b/lib/widgets/sms_scan/scan_initial_widget.dart index 221903a..37c301b 100644 --- a/lib/widgets/sms_scan/scan_initial_widget.dart +++ b/lib/widgets/sms_scan/scan_initial_widget.dart @@ -7,12 +7,10 @@ import '../../l10n/app_localizations.dart'; class ScanInitialWidget extends StatelessWidget { final VoidCallback onScanPressed; - final String? errorMessage; const ScanInitialWidget({ super.key, required this.onScanPressed, - this.errorMessage, }); @override @@ -24,15 +22,6 @@ class ScanInitialWidget extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - if (errorMessage != null) - Padding( - padding: const EdgeInsets.only(bottom: 24.0), - child: ThemedText( - errorMessage!, - color: Theme.of(context).colorScheme.error, - textAlign: TextAlign.center, - ), - ), ThemedText( AppLocalizations.of(context).findRepeatSubscriptions, fontSize: 20,