scheduleAlarmNotif method

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

Schedules notification at the given dateTime.

Implementation

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

  final androidPlatformChannelSpecifics = AndroidNotificationDetails(
    'alarm',
    'alarm_plugin',
    channelDescription: 'Alarm plugin',
    importance: Importance.max,
    priority: Priority.max,
    playSound: false,
    enableLights: true,
    fullScreenIntent: fullScreenIntent,
  );

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

  final zdt = nextInstanceOfTime(dateTime);

  final hasPermission = await requestPermission();
  if (!hasPermission) {
    alarmPrint('Notification permission not granted');
    return;
  }

  try {
    await localNotif.zonedSchedule(
      id,
      title,
      body,
      tz.TZDateTime.from(zdt.toUtc(), tz.UTC),
      platformChannelSpecifics,
      androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
      uiLocalNotificationDateInterpretation:
          UILocalNotificationDateInterpretation.absoluteTime,
    );
    alarmPrint(
      'Notification with id $id scheduled successfuly at $zdt GMT',
    );
  } catch (e) {
    throw AlarmException('Schedule notification with id $id error: $e');
  }
}