createOrUpdateEvent method

Future<Result<String>?> createOrUpdateEvent(
  1. Event? event
)

Creates or updates an event

The event paramter specifies how event data should be saved into the calendar Always specify the Event.calendarId, to inform the plugin in which calendar it should create or update the event.

Returns a Result with the newly created or updated Event.eventId

Implementation

Future<Result<String>?> createOrUpdateEvent(Event? event) async {
  if (event == null) return null;
  return _invokeChannelMethod(
    ChannelConstants.methodNameCreateOrUpdateEvent,
    assertParameters: (result) {
      // Setting time to 0 for all day events
      if (event.allDay == true) {
        if (event.start != null) {
          var dateStart = DateTime(event.start!.year, event.start!.month,
              event.start!.day, 0, 0, 0);
          // allDay events on Android need to be at midnight UTC
          event.start = Platform.isAndroid
              ? TZDateTime.utc(event.start!.year, event.start!.month,
                  event.start!.day, 0, 0, 0)
              : TZDateTime.from(dateStart,
                  timeZoneDatabase.locations[event.start!.location.name]!);
        }
        if (event.end != null) {
          var dateEnd = DateTime(
              event.end!.year, event.end!.month, event.end!.day, 0, 0, 0);
          // allDay events on Android need to be at midnight UTC on the
          // day after the last day. For example, a 2-day allDay event on
          // Jan 1 and 2, should be from Jan 1 00:00:00 to Jan 3 00:00:00
          event.end = Platform.isAndroid
              ? TZDateTime.utc(event.end!.year, event.end!.month,
                      event.end!.day, 0, 0, 0)
                  .add(const Duration(days: 1))
              : TZDateTime.from(dateEnd,
                  timeZoneDatabase.locations[event.end!.location.name]!);
        }
      }

      _assertParameter(
        result,
        !(event.allDay == true && (event.calendarId?.isEmpty ?? true) ||
            event.start == null ||
            event.end == null),
        ErrorCodes.invalidArguments,
        ErrorMessages.createOrUpdateEventInvalidArgumentsMessageAllDay,
      );

      _assertParameter(
        result,
        !(event.allDay != true &&
            ((event.calendarId?.isEmpty ?? true) ||
                event.start == null ||
                event.end == null ||
                (event.start != null &&
                    event.end != null &&
                    event.start!.isAfter(event.end!)))),
        ErrorCodes.invalidArguments,
        ErrorMessages.createOrUpdateEventInvalidArgumentsMessage,
      );
    },
    arguments: () => event.toJson(),
  );
}