addOrUpdateEvent method

Future<bool?> addOrUpdateEvent({
  1. required String title,
  2. String? description,
  3. required DateTime start,
  4. required DateTime end,
  5. void onPermissionDenied()?,
})
override

Implementation

Future<bool?> addOrUpdateEvent({
  required String title,
  String? description,
  required DateTime start,
  required DateTime end,
  void Function()? onPermissionDenied,
}) async {
  final permissionsGranted = await _deviceCalendarPlugin.requestPermissions();
  if (!permissionsGranted.isSuccess || !(permissionsGranted.data ?? false)) {
    onPermissionDenied?.call();
    return null;
  }

  // Get calendars
  final calendarsResult = await _deviceCalendarPlugin.retrieveCalendars();
  if (!calendarsResult.isSuccess || calendarsResult.data == null) {
    return false;
  }

  final calendarId = calendarsResult.data
      ?.firstOrDefault((calendar) => !calendar.isReadOnly.value)
      ?.id; // Use first available calendar

  final eventStart = _toTZDateTime(start);
  final eventEnd = _toTZDateTime(end);

  final eventsResult = await _deviceCalendarPlugin.retrieveEvents(
    calendarId,
    device_calendar.RetrieveEventsParams(
      startDate: eventStart,
      endDate: eventEnd,
    ),
  );

  final existingEvent =
      eventsResult.data?.firstOrDefault((event) => event.title == title);

  final eventId = existingEvent?.eventId;

  final event = device_calendar.Event(
    calendarId.value,
    eventId: eventId,
    reminders: [device_calendar.Reminder(minutes: 15)],
    title: title,
    description: description,
    start: eventStart,
    end: eventEnd,
  );

  final createEventResult =
      await _deviceCalendarPlugin.createOrUpdateEvent(event);

  return (createEventResult?.isSuccess).value;
}