fix(sms-scan): 에러 메시지를 토스트로 변경

- 구독 정보를 찾지 못한 경우 상단 붉은색 텍스트 대신 하단 토스트 메시지 출력
- ScanInitialWidget에서 errorMessage 파라미터 제거
- SmsScanController에서 AppSnackBar.showError() 사용
- 불필요한 _errorMessage 상태 변수 제거
This commit is contained in:
JiWoong Sul
2026-01-29 23:55:49 +09:00
parent cc8bcc7b54
commit 5de33992a2
3 changed files with 18 additions and 24 deletions

View File

@@ -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<Subscription> _scannedSubscriptions = [];
List<Subscription> get scannedSubscriptions => _scannedSubscriptions;
PaymentCardSuggestion? _currentSuggestion;
@@ -109,7 +107,6 @@ class SmsScanController extends ChangeNotifier {
Future<void> 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;