feat: improve sms scan review and detail layouts
This commit is contained in:
@@ -39,14 +39,18 @@ class SmsScanController extends ChangeNotifier {
|
||||
String? get selectedPaymentCardId => _selectedPaymentCardId;
|
||||
|
||||
final TextEditingController websiteUrlController = TextEditingController();
|
||||
final TextEditingController serviceNameController = TextEditingController();
|
||||
|
||||
// 의존성
|
||||
final SmsScanner _smsScanner = SmsScanner();
|
||||
final SubscriptionConverter _converter = SubscriptionConverter();
|
||||
final SubscriptionFilter _filter = SubscriptionFilter();
|
||||
bool _forceServiceNameEditing = false;
|
||||
bool get isServiceNameEditable => _forceServiceNameEditing;
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
serviceNameController.dispose();
|
||||
websiteUrlController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
@@ -66,6 +70,16 @@ class SmsScanController extends ChangeNotifier {
|
||||
|
||||
void resetWebsiteUrl() {
|
||||
websiteUrlController.text = '';
|
||||
serviceNameController.text = '';
|
||||
}
|
||||
|
||||
void updateCurrentServiceName(String value) {
|
||||
if (_currentIndex >= _scannedSubscriptions.length) return;
|
||||
final trimmed = value.trim();
|
||||
final updated = _scannedSubscriptions[_currentIndex]
|
||||
.copyWith(serviceName: trimmed.isEmpty ? '알 수 없는 서비스' : trimmed);
|
||||
_scannedSubscriptions[_currentIndex] = updated;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> scanSms(BuildContext context) async {
|
||||
@@ -215,6 +229,9 @@ class SmsScanController extends ChangeNotifier {
|
||||
if (_currentIndex >= _scannedSubscriptions.length) return;
|
||||
|
||||
final subscription = _scannedSubscriptions[_currentIndex];
|
||||
final inputName = serviceNameController.text.trim();
|
||||
final resolvedServiceName =
|
||||
inputName.isNotEmpty ? inputName : subscription.serviceName;
|
||||
|
||||
try {
|
||||
final provider =
|
||||
@@ -240,7 +257,7 @@ class SmsScanController extends ChangeNotifier {
|
||||
|
||||
// addSubscription 호출
|
||||
await provider.addSubscription(
|
||||
serviceName: subscription.serviceName,
|
||||
serviceName: resolvedServiceName,
|
||||
monthlyCost: subscription.monthlyCost,
|
||||
billingCycle: subscription.billingCycle,
|
||||
nextBillingDate: subscription.nextBillingDate,
|
||||
@@ -273,7 +290,9 @@ class SmsScanController extends ChangeNotifier {
|
||||
void moveToNextSubscription(BuildContext context) {
|
||||
_currentIndex++;
|
||||
websiteUrlController.text = '';
|
||||
serviceNameController.text = '';
|
||||
_selectedCategoryId = null;
|
||||
_forceServiceNameEditing = false;
|
||||
_prepareCurrentSelection(context);
|
||||
|
||||
// 모든 구독을 처리했으면 홈 화면으로 이동
|
||||
@@ -298,6 +317,8 @@ class SmsScanController extends ChangeNotifier {
|
||||
_selectedPaymentCardId = null;
|
||||
_currentSuggestion = null;
|
||||
_shouldSuggestCardCreation = false;
|
||||
serviceNameController.clear();
|
||||
_forceServiceNameEditing = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@@ -316,6 +337,13 @@ class SmsScanController extends ChangeNotifier {
|
||||
if (websiteUrlController.text.isEmpty && currentSub.websiteUrl != null) {
|
||||
websiteUrlController.text = currentSub.websiteUrl!;
|
||||
}
|
||||
if (_shouldEnableServiceNameEditing(currentSub)) {
|
||||
if (serviceNameController.text != currentSub.serviceName) {
|
||||
serviceNameController.clear();
|
||||
}
|
||||
} else {
|
||||
serviceNameController.text = currentSub.serviceName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,10 +360,18 @@ class SmsScanController extends ChangeNotifier {
|
||||
if (_currentIndex >= _scannedSubscriptions.length) {
|
||||
_selectedPaymentCardId = null;
|
||||
_currentSuggestion = null;
|
||||
_forceServiceNameEditing = false;
|
||||
serviceNameController.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
final current = _scannedSubscriptions[_currentIndex];
|
||||
_forceServiceNameEditing = _shouldEnableServiceNameEditing(current);
|
||||
if (_forceServiceNameEditing && current.serviceName == '알 수 없는 서비스') {
|
||||
serviceNameController.clear();
|
||||
} else {
|
||||
serviceNameController.text = current.serviceName;
|
||||
}
|
||||
|
||||
// URL 기본값
|
||||
if (current.websiteUrl != null && current.websiteUrl!.isNotEmpty) {
|
||||
@@ -392,4 +428,9 @@ class SmsScanController extends ChangeNotifier {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
bool _shouldEnableServiceNameEditing(Subscription subscription) {
|
||||
final name = subscription.serviceName.trim();
|
||||
return name.isEmpty || name == '알 수 없는 서비스';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user