createOrUpdateEvent method
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(),
);
}