icalendar_plus 0.0.6 icalendar_plus: ^0.0.6 copied to clipboard
This Dart plugin provides a comprehensive set of classes to create, manage, serialize, and parse iCalendar components. It supports creating events, to-dos, journals, alarms, free/busy times, timezones [...]
iCalendar Dart Plugin #
This Dart plugin provides a comprehensive set of classes to create, manage, serialize, and parse iCalendar components. It supports creating events, to-dos, journals, alarms, free/busy times, timezones, and more. The plugin adheres to the iCalendar (.ics
) format, making it easy to integrate with calendar applications.
Features #
- Basic Calendar Object: Create and manage iCalendar objects.
- Event (
VEVENT
): Define and handle events with support for recurrence rules, exceptions, attendees, and more. - To-Do (
VTODO
): Manage tasks with priorities, due dates, and recurrence. - Journal (
VJOURNAL
): Create journal entries for diary-like notes. - Alarm (
VALARM
): Set alarms for reminders with different actions (e.g., display, email). - Free/Busy Times (
VFREEBUSY
): Define availability and busy slots. - Timezones (
VTIMEZONE
): Manage time zone information for events. - Recurrence Rules (
RRULE
): Configure recurring patterns for events and tasks. - Attachments: Attach files, sounds, or documents to events and alarms.
- Participants (
ATTENDEE
,CONTACT
,ORGANIZER
): Handle contacts, attendees, and event organizers.
Getting Started #
Installation #
Add the following to your pubspec.yaml
file:
dependencies:
icalendar: ^1.0.0
Run pub get
to install the package.
Import the Package #
import 'package:icalendar/icalendar.dart';
Usage #
Example: Create and Serialize iCalendar #
import 'package:icalendar_plus/icalendar.dart';
void main() {
// Create Calendar Headers
final headers = CalHeaders(
prodId: '-//Your Organization//Your Product//EN',
version: '2.0',
calScale: 'GREGORIAN',
);
// Create ICalendar instance
final calendar = ICalendar.instance(headers);
final event = VEvent(
uid: 'event123@example.com',
dtstamp: DateTime.now(),
dtstart: DateTime.now().add(const Duration(days: 2)),
dtend: DateTime.now().add(const Duration(days: 2, hours: 1)),
summary: 'Team Meeting',
description: 'Weekly sync-up meeting with the project team.',
location: 'Zoom',
attendees: [Attendee(mailto: MailTo('member1@example.com')), Attendee(mailto: MailTo('member2@example.com'))],
organizer: MailTo('manager@example.com'));
// Create a VAlarm for the event
final alarm1 = VAlarm(
action: VAlarmAction.display,
trigger: TrrigerDuration(
-Duration(seconds: 10, minutes: 5, hours: 1, days: 1)
), // or use as Trrig.parse('-PT15M') to create 15 minutes before the event
description: 'Reminder: Team Meeting in 15 minutes.',
);
final alarm2 = VAlarm(
action: VAlarmAction.audio,
trigger: TrrigerDate(event.dtstart), // on time of the event by exect date
description: 'Event begins',
);
final alarm3 = VAlarm(
action: VAlarmAction.audio,
trigger: Trriger.parse('-PT15M'), // on time of the event by exect date
description: 'Event begins',
);
// Add components to the calendar
calendar.add(event);
calendar.addAll([alarm1, alarm2, alarm3]);
// Serialize the calendar to an iCalendar string
final icsContent = calendar.serialize();
print('Generated iCalendar Content:');
print(icsContent);
// Parse back from the serialized string
final parsedCalendar = ICalendar.parse(icsContent);
// Print parsed components to demonstrate parsing
print('\nParsed Components:');
parsedCalendar.components.forEach((component) {
print(component.toJson());
});
}
Output #
The above example will produce an iCalendar .ics
format string with an event and an alarm, and then demonstrate how to parse it back.
Integration Tests #
To ensure the plugin works as expected, run the integration tests:
- Create a test file:
test/icalendar_integration_test.dart
- Use the example below:
import 'package:test/test.dart';
import 'package:icalendar/icalendar.dart';
void main() {
group('ICalendar Integration Test', () {
test('Create, serialize, and parse iCalendar with multiple components', () {
// Setup headers, events, todos, and other components as shown in the usage example.
// Assert the integrity of the parsed components.
});
});
}
Run the test using:
dart test test/icalendar_integration_test.dart
Components Overview #
ICalendar
#
The main class to create and manage iCalendar components. Supports adding, serializing, and parsing multiple calendar items.
VEvent
#
Used to define events with start/end times, recurrence rules, attendees, and more.
VTodo
#
Manages tasks with support for due dates, priority, recurrence, and alarms.
VJournal
#
For creating diary-like entries to record notes or logs.
VAlarm
#
Set reminders or alarms for events or tasks with different actions (display, email, sound).
VFreeBusy
#
Define periods when you're free or busy, useful for scheduling and availability.
VTimezone
#
Manage time zone information and specify offsets for standard and daylight saving time.
RecurrenceRule
#
Configure recurring patterns for events and tasks (e.g., daily, weekly).
VParticipant
#
Represents attendees, contacts, and organizers, managing emails, roles, and names.
VAttachment
#
Attach documents, images, or sounds to events or alarms.
ExDate
#
Specify exception dates for recurring events or tasks, allowing you to skip specific occurrences.
License #
This plugin is open-sourced under the MIT License.
Contributions #
Contributions are welcome! Feel free to submit issues, pull requests, and feature requests. Make sure to include tests for any new features or bug fixes.
This README.md
covers:
- Overview: What the plugin offers.
- Installation: How to get started with the plugin.
- Usage Examples: Demonstrates the core functionality.
- Integration Testing: Instructions on how to run tests.
- Component Descriptions: Describes each main class.
- Contribution & License: Guidelines for contributing.
This will give users a comprehensive understanding of how to use your plugin and get started quickly.