From 43d43bb3800c8807aa4e0b4dabb0bdc09453285e Mon Sep 17 00:00:00 2001 From: Fareez Iqmal <60868965+iqfareez@users.noreply.github.com> Date: Sun, 24 Mar 2024 18:51:18 +0800 Subject: [PATCH] :pencil2: If notification is already granted, make able to open alarm setting --- .../settings/notification_page_setting.dart | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/lib/views/settings/notification_page_setting.dart b/lib/views/settings/notification_page_setting.dart index ef0aad7..785c176 100644 --- a/lib/views/settings/notification_page_setting.dart +++ b/lib/views/settings/notification_page_setting.dart @@ -45,6 +45,28 @@ class _NotificationPageSettingState extends State { return res ?? false; } + /// Request permission kalau belum dapat permission. Kalau dah dapat, just + /// open the relevant setting page + void _requestOrOpenAlarmPermission() async { + // check dulu permissionnya + final dahAdaPermissionScheduleAlarm = await _canScheduleNotification(); + + if (dahAdaPermissionScheduleAlarm) { + AppSettings.openAppSettings(type: AppSettingsType.alarm); + return; + } + + // kalau belum, request permission + final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); + + final scheduleExactAlarmPermission = await flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + AndroidFlutterLocalNotificationsPlugin>() + ?.requestExactAlarmsPermission(); + + debugPrint('scheduleExactAlarmPermission: $scheduleExactAlarmPermission'); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -184,38 +206,29 @@ class _NotificationPageSettingState extends State { builder: (context, snapshot) { if (!snapshot.hasData) return const SizedBox.shrink(); if (snapshot.data ?? false) { - return const Card( + return Card( clipBehavior: Clip.hardEdge, child: ListTile( - title: Text('Notification scheduling permission'), - subtitle: Text( + onTap: _requestOrOpenAlarmPermission, + title: const Text('Notification scheduling permission'), + subtitle: const Text( 'Permission granted. The app can send azan notification on prayer times'), ), ); } else { + // If not granted, highlight this option in yellow to draw user attention return Card( color: Theme.of(context).brightness == Brightness.light ? Colors.yellow[100] : Colors.yellow.withAlpha(60), clipBehavior: Clip.hardEdge, child: ListTile( - title: const Text('Notification scheduling permission'), - isThreeLine: true, - subtitle: const Text( - 'Permission not granted. The app cannot send the azan notification. Tap here to grant permission'), - onTap: () async { - final flutterLocalNotificationsPlugin = - FlutterLocalNotificationsPlugin(); - - final scheduleExactAlarmPermission = - await flutterLocalNotificationsPlugin - .resolvePlatformSpecificImplementation< - AndroidFlutterLocalNotificationsPlugin>() - ?.requestExactAlarmsPermission(); - - debugPrint( - 'scheduleExactAlarmPermission: $scheduleExactAlarmPermission'); - }), + title: const Text('Notification scheduling permission'), + isThreeLine: true, + subtitle: const Text( + 'Permission not granted. The app cannot send the azan notification. Tap here to grant permission'), + onTap: _requestOrOpenAlarmPermission, + ), ); } }),