import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:smoke_cess_app/services/date_service.dart'; import 'package:timezone/timezone.dart'; class NotificationService { static final NotificationService _notificationService = NotificationService._internal(); factory NotificationService() { return _notificationService; } final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); NotificationService._internal(); Future initNotification() async { // Android initialization const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('mipmap/ic_launcher'); // ios initialization const DarwinInitializationSettings initializationSettingsIOS = DarwinInitializationSettings( requestAlertPermission: false, requestBadgePermission: false, requestSoundPermission: false, ); const InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS); // the initialization settings are initialized after they are setted await flutterLocalNotificationsPlugin.initialize(initializationSettings); } Future setAllNotifications() async { List moodDates = await getDatesforMood(); List sleepDates = await getDatesforSleep(); int index = 0; for (var date in moodDates) { setNotification(index, "Mood", "Evaluate your mood", date); index++; } for (var date in sleepDates) { setNotification(index, "Sleep", "Evaluate your sleep", date); index++; } } Future setNotification( int id, String title, String body, TZDateTime tzDateTime) async { if (tzDateTime.isAfter(DateTime.now())) { await flutterLocalNotificationsPlugin.zonedSchedule( id, title, body, tzDateTime, //schedule the notification to show after 2 seconds. const NotificationDetails( // Android details android: AndroidNotificationDetails('main_channel', 'Main Channel', channelDescription: "ashwin", importance: Importance.max, priority: Priority.max), // iOS details iOS: DarwinNotificationDetails( sound: 'default.wav', presentAlert: true, presentBadge: true, presentSound: true, ), ), // Type of time interpretation uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, androidAllowWhileIdle: true, // To show notification even when the app is closed ); } } }