feat: 알림 재예약 개선과 패키지 업그레이드
This commit is contained in:
@@ -114,6 +114,23 @@ class NotificationProvider extends ChangeNotifier {
|
||||
|
||||
// 알림이 활성화된 경우에만 알림 재예약 (비활성화 시에는 필요 없음)
|
||||
if (value) {
|
||||
final hasPermission = await NotificationService.checkPermission();
|
||||
if (!hasPermission) {
|
||||
final granted = await NotificationService.requestPermission();
|
||||
if (!granted) {
|
||||
debugPrint('알림 권한이 부여되지 않았습니다. 일부 알림이 제한될 수 있습니다.');
|
||||
}
|
||||
}
|
||||
|
||||
final canExact = await NotificationService.canScheduleExactAlarms();
|
||||
if (!canExact) {
|
||||
final exactGranted =
|
||||
await NotificationService.requestExactAlarmsPermission();
|
||||
if (!exactGranted) {
|
||||
debugPrint('정확 알람 권한이 없어 근사 알림으로 예약됩니다.');
|
||||
}
|
||||
}
|
||||
|
||||
// 알림 설정 변경 시 모든 구독의 알림 재예약
|
||||
// 지연 실행으로 UI 응답성 향상
|
||||
Future.microtask(() => _rescheduleNotificationsIfNeeded());
|
||||
|
||||
@@ -103,6 +103,14 @@ class SubscriptionProvider extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _reschedulePaymentNotifications() async {
|
||||
try {
|
||||
await NotificationService.reschedulAllNotifications(_subscriptions);
|
||||
} catch (e) {
|
||||
debugPrint('결제 알림 재예약 중 오류 발생: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> addSubscription({
|
||||
required String serviceName,
|
||||
required double monthlyCost,
|
||||
@@ -145,6 +153,8 @@ class SubscriptionProvider extends ChangeNotifier {
|
||||
if (isEventActive && eventEndDate != null) {
|
||||
await _scheduleEventEndNotification(subscription);
|
||||
}
|
||||
|
||||
await _reschedulePaymentNotifications();
|
||||
} catch (e) {
|
||||
debugPrint('구독 추가 중 오류 발생: $e');
|
||||
rethrow;
|
||||
@@ -176,6 +186,8 @@ class SubscriptionProvider extends ChangeNotifier {
|
||||
debugPrint('[SubscriptionProvider] 구독 업데이트 완료, '
|
||||
'현재 총 월간 지출: ${totalMonthlyExpense.toStringAsFixed(2)}');
|
||||
notifyListeners();
|
||||
|
||||
await _reschedulePaymentNotifications();
|
||||
} catch (e) {
|
||||
debugPrint('구독 업데이트 중 오류 발생: $e');
|
||||
rethrow;
|
||||
@@ -186,6 +198,8 @@ class SubscriptionProvider extends ChangeNotifier {
|
||||
try {
|
||||
await _subscriptionBox.delete(id);
|
||||
await refreshSubscriptions();
|
||||
|
||||
await _reschedulePaymentNotifications();
|
||||
} catch (e) {
|
||||
debugPrint('구독 삭제 중 오류 발생: $e');
|
||||
rethrow;
|
||||
@@ -213,6 +227,8 @@ class SubscriptionProvider extends ChangeNotifier {
|
||||
} finally {
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
|
||||
await _reschedulePaymentNotifications();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,6 +242,7 @@ class SubscriptionProvider extends ChangeNotifier {
|
||||
title: '이벤트 종료 알림',
|
||||
body: '${subscription.serviceName}의 할인 이벤트가 종료되었습니다.',
|
||||
scheduledDate: subscription.eventEndDate!,
|
||||
channelId: NotificationService.expirationChannelId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user