From a3a96c84d77a72eb84773bc092b2c8eeea0287e1 Mon Sep 17 00:00:00 2001 From: srykaran Date: Sat, 14 Mar 2026 10:18:33 +0530 Subject: [PATCH] Fix alarm not being saved due to premature navigation in permission check --- .../add_or_update_alarm_controller.dart | 45 +++++++------------ .../views/add_or_update_alarm_view.dart | 14 +++--- 2 files changed, 22 insertions(+), 37 deletions(-) diff --git a/lib/app/modules/addOrUpdateAlarm/controllers/add_or_update_alarm_controller.dart b/lib/app/modules/addOrUpdateAlarm/controllers/add_or_update_alarm_controller.dart index 86c450c36..03e089c07 100644 --- a/lib/app/modules/addOrUpdateAlarm/controllers/add_or_update_alarm_controller.dart +++ b/lib/app/modules/addOrUpdateAlarm/controllers/add_or_update_alarm_controller.dart @@ -195,10 +195,11 @@ class AddOrUpdateAlarmController extends GetxController { } } - checkOverlayPermissionAndNavigate() async { - if (!(await Permission.systemAlertWindow.isGranted) && + Future checkOverlayPermission() async { + if (!(await Permission.systemAlertWindow.isGranted) || !(await Permission.ignoreBatteryOptimizations.isGranted)) { - Get.defaultDialog( + bool result = false; + await Get.defaultDialog( backgroundColor: themeController.secondaryBackgroundColor.value, title: 'Permission Required', titleStyle: TextStyle( @@ -208,8 +209,8 @@ class AddOrUpdateAlarmController extends GetxController { const EdgeInsets.symmetric(vertical: 20, horizontal: 20), titlePadding: const EdgeInsets.only(top: 30, right: 40), content: const Text( - 'This app requires permission to draw overlays,send notifications' - ' and Ignore batter optimization.', + 'This app requires permission to draw overlays, send notifications' + ' and ignore battery optimization for the alarm to work reliably.', ), actions: [ TextButton( @@ -218,6 +219,7 @@ class AddOrUpdateAlarmController extends GetxController { ), child: const Text('Cancel', style: TextStyle(color: Colors.black)), onPressed: () { + result = false; Get.back(); }, ), @@ -233,47 +235,30 @@ class AddOrUpdateAlarmController extends GetxController { style: TextStyle(color: Colors.black), ), onPressed: () async { - Get.back(); - if (Platform.isAndroid) { // Request overlay permission if (!(await Permission.systemAlertWindow.isGranted)) { - final status = await Permission.systemAlertWindow.request(); - if (!status.isGranted) { - debugPrint('SYSTEM_ALERT_WINDOW permission denied!'); - return; - } + await Permission.systemAlertWindow.request(); } if (!(await Permission.ignoreBatteryOptimizations.isGranted)) { - bool requested = await Permission.ignoreBatteryOptimizations - .request() - .isGranted; - if (!requested) { - debugPrint( - 'IGNORE_BATTERY_OPTIMIZATION permission denied!', - ); - return; - } + await Permission.ignoreBatteryOptimizations.request(); } - } - // Request notification permission - if (!await Permission.notification.isGranted) { - final status = await Permission.notification.request(); - if (status != PermissionStatus.granted) { - debugPrint('Notification permission denied!'); - return; + // Request notification permission + if (!await Permission.notification.isGranted) { + await Permission.notification.request(); } } - + result = true; Get.back(); }, ), ], ); + return result; } else { - Get.back(); + return true; } } diff --git a/lib/app/modules/addOrUpdateAlarm/views/add_or_update_alarm_view.dart b/lib/app/modules/addOrUpdateAlarm/views/add_or_update_alarm_view.dart index ea0f9682a..24cb7c60b 100644 --- a/lib/app/modules/addOrUpdateAlarm/views/add_or_update_alarm_view.dart +++ b/lib/app/modules/addOrUpdateAlarm/views/add_or_update_alarm_view.dart @@ -1044,11 +1044,10 @@ class AddOrUpdateAlarmView extends GetView { ), onPressed: () async { Utils.hapticFeedback(); - await controller.checkOverlayPermissionAndNavigate(); + bool hasPermission = + await controller.checkOverlayPermission(); - if ((await Permission.systemAlertWindow.isGranted) && - (await Permission - .ignoreBatteryOptimizations.isGranted)) { + if (hasPermission) { if (!controller.homeController.isProfile.value) { if (controller.userModel.value != null) { controller.offsetDetails[ @@ -1178,18 +1177,19 @@ class AddOrUpdateAlarmView extends GetView { await controller .updateAlarm(updatedAlarmModel); } + Get.back(); } catch (e) { debugPrint(e.toString()); } } else { - controller.createProfile(); + await controller.createProfile(); + Get.back(); } } }, ), ), - ), - ], + )], ), ), );