import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import 'package:timezone/data/latest.dart' as tz; import 'package:timezone/timezone.dart' as tz; class NotificationController extends GetxController { final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); @override void onInit() { super.onInit(); initNotifications(); tz.initializeTimeZones(); } // Initializes the local notifications plugin Future initNotifications() async { const AndroidInitializationSettings android = AndroidInitializationSettings('@mipmap/launcher_icon'); const InitializationSettings initializationSettings = InitializationSettings(android: android); await _flutterLocalNotificationsPlugin.initialize(initializationSettings); } // Displays a notification with the given title and message void showNotification(String title, String message, String tone) async { AndroidNotificationDetails android = AndroidNotificationDetails( 'your channel id', 'your channel name', importance: Importance.max, priority: Priority.high, showWhen: false, sound: RawResourceAndroidNotificationSound(tone)); NotificationDetails details = NotificationDetails(android: android); await _flutterLocalNotificationsPlugin.show(0, title, message, details); } // Schedules a notification for a specific time Future scheduleNotification( String title, String body, DateTime scheduledTime) async { await _flutterLocalNotificationsPlugin.zonedSchedule( 0, title, body, tz.TZDateTime.from(scheduledTime, tz.local), const NotificationDetails( android: AndroidNotificationDetails( 'your_channel_id', 'your_channel_name', channelDescription: 'your_channel_description', importance: Importance.max, priority: Priority.high, showWhen: false, ), ), androidAllowWhileIdle: true, uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, matchDateTimeComponents: DateTimeComponents.time, ); } }