NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2719 most downloaded on pub.dev
Platform interface for device_calendar_plus plugin.
Last release 7 days ago
01 Oct 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 16 of 16 stable releases
Nothing withdrawn
no release was ever pulled
11 months old
16 releases · first in 2025
One column per month.
Per-event color lands, plus one rename to swallow.
Per-event color lands, plus one rename to swallow.
Event.colorHex — the event's custom color as #RRGGBB, with a parsed Event.color getter (read-only, mirrors Calendar.colorHex). Android reads it from EVENT_COLOR; null when the event just uses its calendar's color, and always null on iOS (EventKit has no per-event colors). No write support (#117).WeeklyRecurrence's wkst field and constructor parameter are renamed to weekStart, matching the spelled-out naming of the other recurrence fields. The emitted RRULE is unchanged (still WKST=). Update WeeklyRecurrence(wkst: …) call sites and .wkst reads to weekStart.Ships device_calendar_plus 0.8.0 and device_calendar_plus_android 0.7.1. The platform interface and iOS packages are unchanged.
updateRecurring gains a Patch<List<int>>? reminders
parameter (whole minutes before start), as updateEvent has (#175).updateEvent / deleteEvent with a null timestamp target a one-off
event; implementations refuse a recurring series with
INVALID_ARGUMENTS (#175).Feature release. App-facing API is additive; device_calendar_plus_platform_interface has breaking signature changes for platform implementers.
Feature release. App-facing API is additive; device_calendar_plus_platform_interface has breaking signature changes for platform implementers.
requestPermissions(level: CalendarAccessLevel.writeOnly) for the gentler add-only prompt (#89).DeviceCalendar.instance.autoPermissions = AutoPermissionMode.asNeeded | .full; methods request access on first use (#90).calendarId — omit it on createEvent to write to the default calendar (#88).reminders: List<Duration> on create, Patch<List<Duration>> on update, Event.reminders read back; minute-granular relative offsets (#87).permissionDenied (not "no writable calendar") when a default can't be resolved (#112); tighter denial reporting (#108).All four packages bumped 0.6.0 → 0.7.0 in lockstep.
createEvent's calendarId is now String? — a null targets
the platform's default calendar — and it gains a List<int>? reminders
parameter (whole-minute before-start offsets) (#88, #87).updateEvent gains a Patch<List<int>>? reminders parameter
(#87).requestPermissions takes a writeOnly flag to request the
add-only access tier (#89).writePatchFields accepts patches of any serializable value type, not just
strings, so non-string fields ride the same clearedFields convention.chore(release): prepare 0.6.0
chore(release): prepare 0.6.0
updateRecurring takes start: DateTime (sent as
newStartMillis) instead of startTime: EventTimeOfDay; the anchored
occurrence moves to start and the scope translates by that wall-clock
delta (#103).EventTimeOfDay is removed.No functional changes; version aligned with the rest of the suite for the 0.5.2 release
iOS: fix showEventModal(edit: true) crash
showEventModal docs: the edit flag only sets the modal's
starting mode; the native view screen still lets the user edit on both
platformsBreaking: updateRecurring() reworked — positional eventId, occurrence timestamp and span, with startTime (EventTimeOfDay) and durationMinutes replacin
updateRecurring() reworked — positional eventId, occurrence
timestamp and span, with startTime (EventTimeOfDay) and
durationMinutes replacing absolute dates, and recurrenceRule taking a
Patch<String> (RRULE); returns the affected scope's event IDupdateEvent() and deleteEvent() take an optional occurrence
timestamp; when set, the operation acts on that single occurrencespan accepts only allEvents and thisAndFollowing;
thisInstance is goneEventTimeOfDay — validating hour/minute value classupdateRecurring() method with EventSpan enum (allEvents / thisAndFollowing / thisInstance)
updateRecurring() method with EventSpan enum (allEvents / thisAndFollowing / thisInstance)deleteRecurring() method taking an EventSpanurl parameter on updateEvent()edit parameter on showEventModal()Patch<T> sealed type (Patch.set / Patch.clear) for clearable optional fieldsupdateEvent() description, location, and url now take Patch<String> instead of String?Version sync with other packages. No functional changes.
Version sync with other packages. No functional changes.
Version sync with other packages. No functional changes.
Version sync with other packages. No functional changes.
Version sync with other packages. No functional changes.
Version sync with other packages. No functional changes.
feat(android): add CreateCalendarOptionsAndroid for custom account na…
feat(android): add CreateCalendarOptionsAndroid for custom account na…
CreateCalendarPlatformOptions base class for platform-specific calendar creation optionscreateCalendar() now accepts optional platformOptions parameterVersion sync with other packages. No functional changes.
Version sync with other packages. No functional changes.
chore: bump version and update changelogs
chore: bump version and update changelogs
deleteEvent() signature changed - removed deleteAllInstances parameter, operations on recurring events now always delete entire seriesupdateEvent() signature changed - removed updateAllInstances parameter, operations on recurring events now always update entire seriesNOT_SUPPORTED platform exception code (no longer needed)openAppSettings() method to direct users to app settings for permission management
openAppSettings() method to direct users to app settings for permission managementgetPlatformVersion() method (unused boilerplate)Version sync with other packages. No functional changes.
Version sync with other packages. No functional changes.
Initial release.
Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →