Notifications

This commit is contained in:
brausjonas
2024-09-15 23:40:00 +02:00
parent 77a411e4b7
commit 27c628019e
8 changed files with 149 additions and 5 deletions
+65 -4
View File
@@ -1,9 +1,72 @@
import 'package:flutter/material.dart';
import 'package:todoapp/elems/filehandler.dart';
import 'package:todoapp/pages/Home.dart';
import 'package:provider/provider.dart';
import 'package:todoapp/providers/todoprovider.dart';
import 'package:awesome_notifications/awesome_notifications.dart';
import 'package:workmanager/workmanager.dart';
import 'package:disable_battery_optimization/disable_battery_optimization.dart';
@pragma('vm:entry-point')
void callbackDispatcher() {
Workmanager().executeTask((task, inputData) async {
AwesomeNotifications().initialize(
null,
[
NotificationChannel(
channelKey: "reminder_channel",
channelName: "Reminders",
channelDescription: "Reminder for ToDo")
]);
Map content = await FileHandler.fileContent;
for (String key in content.keys) {
Map list = content[key];
for (String title in list.keys) {
Map current = list[title];
DateTime dueTime = DateTime.parse(current["dueTime"]);
bool checked = current["checked"];
DateTime currentTime = DateTime.now();
int timeDiff = dueTime
.difference(currentTime)
.inMinutes;
if (timeDiff <= 30 && timeDiff >= 0 && !checked) {
AwesomeNotifications().createNotification(
content: NotificationContent(
id: 10,
channelKey: "reminder_channel",
title: "Task due!",
body: "Task $title due in $timeDiff minutes!"
)
);
}
}
}
return Future.value(true);
});
}
void main() async {
AwesomeNotifications().initialize(
null,
[
NotificationChannel(
channelKey: "reminder_channel",
channelName: "Reminders",
channelDescription: "Reminder for ToDo")
]);
Workmanager().initialize(
callbackDispatcher,
isInDebugMode: true
);
Workmanager().registerPeriodicTask("check_nots", "nots_check", frequency: Duration(minutes: 15));
// Workmanager().registerOneOffTask("test", "test1");
void main() {
runApp(const MyApp());
}
@@ -13,9 +76,7 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => TodoProvider())
],
providers: [ChangeNotifierProvider(create: (context) => TodoProvider())],
child: MaterialApp(
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(