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
View File
+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(
+6
View File
@@ -117,6 +117,10 @@ class _ModalEditTodoState extends State<ModalEditTodo> {
const SizedBox(height: 20),
SegmentedButton(
segments: const [
ButtonSegment(
value: "Delete",
label: Text("Delete"),
icon: Icon(Icons.delete)),
ButtonSegment(
value: "Cancel",
label: Text("Cancel"),
@@ -131,6 +135,8 @@ class _ModalEditTodoState extends State<ModalEditTodo> {
onSelectionChanged: (p0) {
if (p0.last == "Save") {
context.read<TodoProvider>().updateTodo(widget.oldValue, tempValue, combineTime());
} else if (p0.last == "Delete") {
context.read<TodoProvider>().removeTodo(widget.oldValue);
}
Navigator.pop(context);
},
+24
View File
@@ -5,6 +5,10 @@ import 'package:todoapp/modules/body.dart';
import 'package:todoapp/modules/drawer.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';
class Home extends StatefulWidget {
const Home({super.key});
@@ -14,8 +18,28 @@ class Home extends StatefulWidget {
}
class _HomeState extends State<Home> {
void getPermissions() async {
await DisableBatteryOptimization.showEnableAutoStartSettings("Enable Auto Start", "Follow the steps and enable the auto start of this app");
await DisableBatteryOptimization.showDisableBatteryOptimizationSettings();
AwesomeNotifications().isNotificationAllowed().then((isAllowed) {
AwesomeNotifications().requestPermissionToSendNotifications();
});
}
@override
void initState() {
getPermissions();
super.initState();
}
@override
Widget build(BuildContext context) {
// AwesomeNotifications().createNotification(
// content: NotificationContent(id: 10, channelKey: "reminder_channel", title: "test", body: "test"),
// );
return FutureBuilder(
future: context.read<TodoProvider>().readListsFromDisk(),
builder: (context, snapshot) => const Scaffold(