icalendar_parser 2.1.0 copy "icalendar_parser: ^2.1.0" to clipboard
icalendar_parser: ^2.1.0 copied to clipboard

Package to parse iCalendar (.ics) files written in pure Dart.

icalendar_parser #

Pub Version Stars Dart Coverage Status

Package to parse iCalendar (.ics) files written in pure Dart.

Implementation of AnyFetch's ics-parser in JavaScript.

Getting Started #

Add icalendar_parser to your pubspec.yaml:

icalendar_parser: any

How to use #

You can refer to the example/ folder for a complete example implemented in Flutter.

Constructor #

ICalendar.fromString #

import 'package:flutter/services.dart' show rootBundle;
import 'package:icalendar_parser/icalendar_parser.dart';

final icsString = await rootBundle.loadString('assets/your_file.ics');
final iCalendar = ICalendar.fromString(icsString);

ICalendar.fromLines #

final icsLines = await File('your_file.ics').readAsLines();
final iCalendar = ICalendar.fromLines(lines);

Other methods #

ICalendar.registerField #

With this method you can add fields that are not already supported (check Supported Properties) to the parsing and you can specify a custom function to parse its content :

ICalendar.registerField(field: 'TEST');

ICalendar.registerField(
    field: 'TEST2',
    function: (value, params, event, lastEvent) {
        lastEvent['test2'] = 'test';
        return lastEvent;
    },
);

ICalendar.unregisterField #

With this method you can remove parsed fields to ignore them in your file :

ICalendar.unregisterField('TEST');

ICalendar.toJson #

Convert [ICalendar] object to a Map<String, dynamic> containing all its data, formatted into a valid JSON Map<String, dynamic> .

final icsObj = ICalendar.fromLines(File('assets/my_file.ics').readAsLinesSync());
print(jsonEncode(icsObj.toJson()));

Input

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
CREATED:19960329T133000Z
UID:uid1@example.com
DTSTAMP:19970714T170000Z
ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
GEO:48.85299;2.36885
END:VEVENT
END:VCALENDAR

Output

{
    "version": "2.0",
    "prodid": "-//hacksw/handcal//NONSGML v1.0//EN",
    "calscale": "GREGORIAN",
    "method": "PUBLISH",
    "data": [
        {
            "type": "VEVENT",
            "created": {
                "dt": "19960329T133000Z"
            },
            "uid": "uid1@example.com",
            "dtstamp": {
                "dt": "19970714T170000Z"
            },
            "organizer": {
                "name": "John Doe",
                "mail": "john.doe@example.com"
            },
            "dtstart": {
                "dt": "19970714T170000Z"
            },
            "dtend": {
                "dt": "19970715T035959Z"
            },
            "summary": "Bastille Day Party",
            "geo": {
                "latitude": 48.85299,
                "longitude": 2.36885
            }
        }
    ]
}

Supported Properties #

  • VERSION
  • PRODID
  • CALSCALE
  • METHOD
  • COMPONENT: BEGIN
  • COMPONENT: END
  • DTSTART
  • DTEND
  • DTSTAMP
  • TRIGGER
  • LAST-MODIFIED
  • COMPLETED
  • DUE
  • UID
  • SUMMARY
  • DESCRIPTION
  • LOCATION
  • URL
  • ORGANIZER
  • GEO
  • CATEGORIES
  • ATTENDEE
  • ACTION
  • STATUS
  • SEQUENCE
  • REPEAT
  • RRULE
  • EXDATE
  • CREATED

Contributors #

TesteurManiak
Guillaume Roux
LucaCoduriV
Luca
simonbengtsson
Simon Bengtsson
Levi-Lesches
Levi Lesches
jjchiw
Null
stevenboeckmans
Null
54
likes
160
points
4.19k
downloads

Publisher

verified publisherrouxguillau.me

Weekly Downloads

Package to parse iCalendar (.ics) files written in pure Dart.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

meta

More

Packages that depend on icalendar_parser