fix(notification): harden local alerts

This commit is contained in:
JiWoong Sul
2025-12-03 14:48:21 +09:00
parent 3ff9e5f837
commit e4c5fa7356
3 changed files with 100 additions and 17 deletions

View File

@@ -6,6 +6,7 @@ import 'package:permission_handler/permission_handler.dart';
import '../../../core/constants/app_colors.dart';
import '../../../core/constants/app_typography.dart';
import '../../providers/settings_provider.dart';
import '../../providers/notification_provider.dart';
class SettingsScreen extends ConsumerStatefulWidget {
const SettingsScreen({super.key});
@@ -174,6 +175,29 @@ class _SettingsScreenState extends ConsumerState<SettingsScreen> {
);
},
),
if (!kIsWeb && defaultTargetPlatform == TargetPlatform.android)
FutureBuilder<bool>(
future: ref
.read(notificationServiceProvider)
.canScheduleExactAlarms(),
builder: (context, snapshot) {
final canExact = snapshot.data;
// 권한이 이미 허용된 경우 UI 생략
if (canExact == true) {
return const SizedBox.shrink();
}
return _buildPermissionTile(
icon: Icons.alarm,
title: '정확 알람 권한',
subtitle: '정확한 예약 알림을 위해 필요합니다',
isGranted: canExact ?? false,
onRequest: _requestExactAlarmPermission,
isDark: isDark,
);
},
),
], isDark),
// 알림 설정
@@ -407,6 +431,19 @@ class _SettingsScreenState extends ConsumerState<SettingsScreen> {
}
}
Future<void> _requestExactAlarmPermission() async {
final notificationService = ref.read(notificationServiceProvider);
final granted = await notificationService.requestExactAlarmsPermission();
if (!mounted) return;
setState(() {});
if (!granted) {
_showPermissionDialog('정확 알람');
}
}
void _showPermissionDialog(String permissionName) {
final isDark = Theme.of(context).brightness == Brightness.dark;