scheduleAlarmNotif method

Future<void> scheduleAlarmNotif({
  1. required int id,
  2. required DateTime dateTime,
  3. required String title,
  4. required String body,
})

Schedules notification at the given time.

Implementation

Future<void> scheduleAlarmNotif({
  required int id,
  required DateTime dateTime,
  required String title,
  required String body,
}) async {
  const iOSPlatformChannelSpecifics = DarwinNotificationDetails(
    presentSound: false,
    presentAlert: false,
    presentBadge: false,
  );

  const androidPlatformChannelSpecifics = AndroidNotificationDetails(
    'alarm',
    'alarm_package',
    channelDescription: 'Alarm package',
    importance: Importance.max,
    priority: Priority.max,
    enableLights: true,
    fullScreenIntent: true,
    playSound: false,
    category: AndroidNotificationCategory.alarm,
    visibility: NotificationVisibility.public,
    actions: <AndroidNotificationAction>[
      AndroidNotificationAction(alarmStopActionId, 'Stop',
          showsUserInterface: true, cancelNotification: true),
      AndroidNotificationAction(alarmSnoozeActionId, 'Snooze',
          showsUserInterface: true, cancelNotification: true),
    ],
  );

  const platformChannelSpecifics = NotificationDetails(
    iOS: iOSPlatformChannelSpecifics,
    android: androidPlatformChannelSpecifics,
  );

  final zdt = nextInstanceOfTime(dateTime);

  final hasPermission = await requestPermission();
  if (!hasPermission) {
    debugPrint('[Alarm] Notification permission not granted');
    return;
  }

  try {
    await localNotif.zonedSchedule(
      id,
      title,
      body,
      zdt,
      platformChannelSpecifics,
      uiLocalNotificationDateInterpretation:
          UILocalNotificationDateInterpretation.absoluteTime,
    );
    debugPrint(
        '[Alarm] Notification with id $id scheduled successfuly at $zdt');
  } catch (e) {
    debugPrint('[Alarm] Schedule notification with id $id error: $e');
  }
}