1.2.0 #6
+27
-5
@@ -88,7 +88,12 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
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<HomeScreen> {
|
||||
// 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<HomeScreen> {
|
||||
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<HomeScreen> {
|
||||
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<HomeScreen> {
|
||||
} 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');
|
||||
|
||||
Reference in new issue
Block a user