XDate.fromICalString constructor

XDate.fromICalString(
  1. String icalString
)

Implementation

factory XDate.fromICalString(String icalString) {
  final lines = icalString.split('\n');
  String? dateStr;

  for (var i = 0; i < lines.length; i++) {
    final line = lines[i];
    if (line.startsWith('EXDATE')) {
      final dateAndTimeZoneStr = line.split(';').last.trim();
      var timeZoneStr = dateAndTimeZoneStr.split(':').length > 1
          ? dateAndTimeZoneStr.split(':').first
          : null;
      timeZoneStr = timeZoneStr?.replaceAll('TZID=', '');
      dateStr = dateAndTimeZoneStr.replaceAll(timeZoneStr ?? '', '').trim();
      dateStr = dateStr.replaceAll('TZID=', '');
      dateStr = dateStr.replaceAll(':', '');
      break;
    }
  }

  if (dateStr == null) {
    throw FormatException('Invalid iCal string. DTSTART not found.');
  }

  final date = DateTime.parse(dateStr);
  return XDate(date: date);
}