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"); runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ChangeNotifierProvider(create: (context) => TodoProvider())], child: MaterialApp( theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: Colors.blue, brightness: Brightness.dark), useMaterial3: true, ), home: const Home(), ), ); } }