background notifications

This commit is contained in:
brausjonas
2024-09-16 00:47:09 +02:00
parent 27c628019e
commit 22b1d3b75b
6 changed files with 170 additions and 63 deletions
+59 -51
View File
@@ -1,72 +1,80 @@
import 'dart:async';
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';
import 'package:flutter_background_service/flutter_background_service.dart';
import 'package:shared_preferences/shared_preferences.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!"
)
);
}
void callbackDispatcher() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences.getInstance();
print("test1");
Map content = await FileHandler.fileContent;
for (String key in content.keys) {
Map list = content[key];
for (String title in list.keys) {
print("test2");
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);
}
}
@pragma('vm:entry-point')
void onStart(ServiceInstance service) {
Timer.periodic(const Duration(seconds: 10), (timer) {
callbackDispatcher();
});
}
Future<void> initService() async {
final service = FlutterBackgroundService();
void main() async {
AwesomeNotifications().initialize(
null,
[
NotificationChannel(
channelKey: "reminder_channel",
channelName: "Reminders",
channelDescription: "Reminder for ToDo")
]);
Workmanager().initialize(
callbackDispatcher,
isInDebugMode: true
await service.configure(
iosConfiguration: IosConfiguration(),
androidConfiguration: AndroidConfiguration(
onStart: onStart,
isForegroundMode: false,
autoStart: true,
autoStartOnBoot: true
)
);
Workmanager().registerPeriodicTask("check_nots", "nots_check", frequency: Duration(minutes: 15));
// Workmanager().registerOneOffTask("test", "test1");
service.startService();
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AwesomeNotifications().initialize(null, [
NotificationChannel(
channelKey: "reminder_channel",
channelName: "Reminders",
channelDescription: "Reminder for ToDo",
importance: NotificationImportance.High,
)
]);
await initService();
runApp(const MyApp());
}
+4 -5
View File
@@ -6,7 +6,6 @@ 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';
@@ -19,12 +18,12 @@ 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) {
await AwesomeNotifications().isNotificationAllowed().then((isAllowed) {
AwesomeNotifications().requestPermissionToSendNotifications();
});
await DisableBatteryOptimization.showEnableAutoStartSettings("Enable Auto Start", "Follow the steps and enable the auto start of this app");
await DisableBatteryOptimization.showDisableBatteryOptimizationSettings();
}
@override