3 Commits
Author SHA1 Message Date
me 105591910c packages, add alarm. 2026-09-28 04:00:04 -07:00
me 6030da178c main, add an actual alarm for Android. 2026-09-28 03:58:04 -07:00
me dad8fff6d2 main, fix minutes not working properly when set to 0. 2026-09-28 03:57:40 -07:00
2 changed files with 28 additions and 2 deletions

No files matched your search

+27 -2
View File
@@ -8,12 +8,14 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:timezone/data/latest_all.dart' as tz; import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz; import 'package:timezone/timezone.dart' as tz;
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:alarm/alarm.dart';
import 'dart:convert'; import 'dart:convert';
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
tz.initializeTimeZones(); tz.initializeTimeZones();
await Alarm.init();
runApp(const SunsetAlarmApp()); runApp(const SunsetAlarmApp());
} }
@@ -230,6 +232,7 @@ class _HomeScreenState extends State<HomeScreen> {
'Alarm set for ${alarmTime.hour.toString().padLeft(2, '0')}:${alarmTime.minute.toString().padLeft(2, '0')} (app must stay open)', 'Alarm set for ${alarmTime.hour.toString().padLeft(2, '0')}:${alarmTime.minute.toString().padLeft(2, '0')} (app must stay open)',
); );
} else if (Platform.isAndroid) { } else if (Platform.isAndroid) {
/*** Notifcation Method - Works ***/
// Android: use zonedSchedule (works in background) // Android: use zonedSchedule (works in background)
final tzAlarm = tz.TZDateTime.from(alarmTime, tz.local); final tzAlarm = tz.TZDateTime.from(alarmTime, tz.local);
const androidDetails = AndroidNotificationDetails( const androidDetails = AndroidNotificationDetails(
@@ -256,7 +259,27 @@ class _HomeScreenState extends State<HomeScreen> {
debugPrint('DEBUG: Current time: ${DateTime.now().toUtc().toString()}'); debugPrint('DEBUG: Current time: ${DateTime.now().toUtc().toString()}');
debugPrint('DEBUG: ${_notifications.toString()}'); debugPrint('DEBUG: ${_notifications.toString()}');
debugPrint('alarm: $tzAlarm, now: ${tz.TZDateTime.now(tz.local)}'); /*** Alarm Method - WIP ***/
// Schedule:
final settings = AlarmSettings(
id: 42,
dateTime: alarmTime, // your computed sunset time
assetAudioPath: 'assets/alarm.mp3', // put an alarm sound in assets/
loopAudio: true, // keeps ringing until dismissed
vibrate: true,
androidFullScreenIntent: true, // wakes screen like clock app
volumeSettings: VolumeSettings.fade(
volume: 0.8,
fadeDuration: Duration(seconds: 5),
),
notificationSettings: const NotificationSettings(
title: 'Sunset Alarm',
body: 'The sun sets now. Time to get ready!',
stopButton: 'Dismiss',
),
);
await Alarm.set(alarmSettings: settings);
} else { } else {
_showSnack('Platform not detected, unsure how to show alarm.'); _showSnack('Platform not detected, unsure how to show alarm.');
} }
@@ -399,8 +422,10 @@ class _HomeScreenState extends State<HomeScreen> {
), ),
onChanged: (v) { onChanged: (v) {
final val = int.tryParse(v); final val = int.tryParse(v);
if (val != null && val > 0) { if (val != null && val >= 0) {
_minutesBefore = val; _minutesBefore = val;
} else {
_showSnack('Invalid Minute Value');
} }
}, },
), ),
+1
View File
@@ -14,6 +14,7 @@ dependencies:
flutter_local_notifications: ^18.0.0 flutter_local_notifications: ^18.0.0
timezone: ^0.9.0 timezone: ^0.9.0
http: ^1.2.0 http: ^1.2.0
alarm: ^5.13.2
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: