DaylightTimeZoneComponent.fromCrawledBlock constructor

DaylightTimeZoneComponent.fromCrawledBlock(
  1. CrawledBlock block
)

Implementation

factory DaylightTimeZoneComponent.fromCrawledBlock(CrawledBlock block) {
  assert(
    block.blockName.toUpperCase() == "DAYLIGHT",
    "Received invalid block: ${block.blockName}",
  );

  DateTimeStartProperty? dateTimeStart;
  TimeZoneOffsetFromProperty? timeZoneOffsetFrom;
  TimeZoneOffsetToProperty? timeZoneOffsetTo;
  List<CommentProperty>? comments;
  List<RecurrenceDateTimesProperty>? recurrenceDateTimes;
  List<RecurrenceRuleProperty>? recurrenceRules;
  List<TimeZoneNameProperty>? timeZoneNames;

  for (var e in block.properties) {
    switch (e.name.toUpperCase()) {
      case "DTSTART":
        dateTimeStart = DateTimeStartProperty.fromCrawledProperty(e);
        break;
      case "TZOFFSETFROM":
        timeZoneOffsetFrom =
            TimeZoneOffsetFromProperty.fromCrawledProperty(e);
        break;
      case "TZOFFSETTO":
        timeZoneOffsetTo = TimeZoneOffsetToProperty.fromCrawledProperty(e);
        break;
      case "COMMENT":
        comments ??= [];
        comments.add(CommentProperty.fromCrawledProperty(e));
        break;
      case "RDATE":
        recurrenceDateTimes ??= [];
        recurrenceDateTimes
            .add(RecurrenceDateTimesProperty.fromCrawledProperty(e));
        break;
      case "RRULE":
        recurrenceRules ??= [];
        recurrenceRules.add(RecurrenceRuleProperty.fromCrawledProperty(e));
        break;
      case "TZNAME":
        timeZoneNames ??= [];
        timeZoneNames.add(TimeZoneNameProperty.fromCrawledProperty(e));
        break;
      default:
        print(
            "Unknown property encountered in DaylightTimeZoneComponent: ${e.name}");
    }
  }

  assert(
    dateTimeStart != null &&
        timeZoneOffsetFrom != null &&
        timeZoneOffsetTo != null,
    "[dateTimeStart], [timeZoneOffsetFrom], and [timeZoneOffsetTo] cannot be null",
  );

  return DaylightTimeZoneComponent(
    dateTimeStart: dateTimeStart!,
    timeZoneOffsetFrom: timeZoneOffsetFrom!,
    timeZoneOffsetTo: timeZoneOffsetTo!,
    comments: comments,
    recurrenceDateTimes: recurrenceDateTimes,
    recurrenceRules: recurrenceRules,
    timeZoneNames: timeZoneNames,
  );
}