From f0b723e15825c88dbd3536c4fef3119871ed86cf Mon Sep 17 00:00:00 2001 From: Hyperling Date: Wed, 11 Nov 2026 08:14:47 -0700 Subject: [PATCH] main, fix rescheduling by making each day's alarm ID unique so that it does not cancel the alarm currently going off. --- lib/main.dart | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index ae22a3b..dbc0c53 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -88,7 +88,12 @@ class _HomeScreenState extends State { String? _minuteErrorText; bool _validTime = false; - static const _alarmId = 1001; + static int _alarmId = 20260000; + + int dateAsId(DateTime d) => d.year * 10000 + d.month * 100 + d.day; + int todayAsId() { + return dateAsId(DateTime.now()); + } @override void initState() { @@ -99,7 +104,10 @@ class _HomeScreenState extends State { // Reschedule alarm any time one goes off. Alarm.ringing.listen((AlarmSet alarmSet) { for (final alarm in alarmSet.alarms) { - if (alarm.id == _alarmId) _scheduleAlarm(); + if (alarm.id == todayAsId()) { + _scheduleAlarm(); + break; + } } }); } @@ -249,7 +257,9 @@ class _HomeScreenState extends State { alarmTime = alarmTime.add(const Duration(days: 1)); } - _debug("_scheduleAlarm, alarmTime=" + alarmTime.toIso8601String()); + _debug("_scheduleAlarm, alarmTime=${alarmTime.toIso8601String()}"); + _alarmId = dateAsId(alarmTime); + _debug("_alarmId=$_alarmId"); if (Platform.isLinux) { // Linux: use a Timer (app must stay open) @@ -338,6 +348,16 @@ class _HomeScreenState extends State { icon: 'ic_notification', ), ); + + // Skip if tomorrow's alarm already exists. + final existing = await Alarm.getAlarm(_alarmId); + if (existing == settings) { + _debug( + "Alarm already exists, skipping schedule. ${settings.toString()}", + ); + return; + } + await Alarm.set(alarmSettings: settings); } // End Alarm Method ***/ @@ -363,11 +383,13 @@ class _HomeScreenState extends State { } else if (Platform.isAndroid) { // Notification Method if (ANDROID_USE_NOTIF) { - await _notifications.cancel(id: _alarmId); + //await _notifications.cancel(id: _alarmId); + await _notifications.cancelAll(); } // Alarm Method if (ANDROID_USE_ALARM) { - await Alarm.stop(_alarmId); + //await Alarm.stop(_alarmId); + await Alarm.stopAll(); } } _showSnack('Alarm Cancelled');