fix(notification): harden local alerts
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user