This commit is contained in:
Lea 2023-10-06 14:43:04 +02:00
parent eec578b9c8
commit a057d91493
Signed by: Lea
GPG key ID: 1BAFFE8347019C42
2 changed files with 70 additions and 14 deletions

View file

@ -1,4 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application <application
android:label="hrt" android:label="hrt"
android:name="${applicationName}" android:name="${applicationName}"

View file

@ -1,6 +1,22 @@
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:timezone/data/latest.dart';
import 'package:timezone/timezone.dart';
void sendNotification() async { const details = NotificationDetails(
android: AndroidNotificationDetails(
'hrt',
'HRT',
autoCancel: false,
styleInformation: BigPictureStyleInformation(
DrawableResourceAndroidBitmap('take_your_hrt'),
),
importance: Importance.max,
ongoing: true,
actions: [AndroidNotificationAction("confirmation", "Done!")],
),
);
void _initializePlugin() async {
var initialized = await FlutterLocalNotificationsPlugin().initialize( var initialized = await FlutterLocalNotificationsPlugin().initialize(
const InitializationSettings( const InitializationSettings(
android: AndroidInitializationSettings('estrogen'), android: AndroidInitializationSettings('estrogen'),
@ -10,23 +26,60 @@ void sendNotification() async {
if (initialized != true) { if (initialized != true) {
throw "Not initialized"; throw "Not initialized";
} }
}
void sendNotification() async {
_initializePlugin();
await FlutterLocalNotificationsPlugin().show( await FlutterLocalNotificationsPlugin().show(
1, 1,
null, null,
null, null,
const NotificationDetails( details,
android: AndroidNotificationDetails( );
'hrt', }
'HRT',
autoCancel: false, void scheduleNotification() async {
styleInformation: BigPictureStyleInformation( _initializePlugin();
DrawableResourceAndroidBitmap('take_your_hrt'), initializeTimeZones();
),
importance: Importance.max, // [Hours, Minutes]
ongoing: true, var times = [
actions: [AndroidNotificationAction("confirmation", "Done!")], [12, 00],
), [18, 00],
), ];
if (times.isEmpty) return;
var currentTime = TZDateTime.now(local);
// Map the time entries to TZDateTime objects
var notificationTimes = times
.map((item) => TZDateTime(
local,
currentTime.year,
currentTime.month,
currentTime.day,
item[0],
item[1],
))
.toList();
// For all entries in the past, add 1 day
for (var time in notificationTimes
.where((element) => element.compareTo(currentTime) < 0)) {
time.add(const Duration(days: 1));
}
// Sort the array so we can find the closest time
notificationTimes.sort((a, b) => a.compareTo(b));
await FlutterLocalNotificationsPlugin().zonedSchedule(
1,
null,
null,
notificationTimes[0],
details,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime,
); );
} }