BuildFromFHIRRepeat method Null safety

Frequency BuildFromFHIRRepeat(
  1. Map<String, dynamic> fhirTiming,
  2. String fhirFreqText
)

build a Frequency object from a FHIR Timing.repeat Map

Implementation

static Frequency BuildFromFHIRRepeat(
    Map<String, dynamic> fhirTiming, String fhirFreqText) {
  Map<String, String> periodUnitMap = {
    "d": "Day",
    "h": "Hour",
    "wk": "Week",
    "mo": "Month",
    "y": "Year"
  };

  Map<String, String> weekDaystMap = {
    "mon": "Monday",
    "tue": "Tuesday",
    "wed": "Wednesday",
    "thu": "Thursday",
    "fri": "Friday",
    "sat": "Saturday",
    "sun": "Sunday"
  };

  if (fhirTiming.containsKey("frequency") &&
      fhirTiming.containsKey("period") &&
      fhirTiming.containsKey("periodUnit")) {
    if ((fhirTiming.containsKey("timeOfDay"))) {
      String pPeriod = periodUnitMap[fhirTiming["periodUnit"]].toString();
      return Frequency.Static(
          "", pPeriod, fhirTiming["timeOfDay"].split("|"));
    } else if ((fhirTiming.containsKey("DayOfWeek"))) {
      String pPeriod = periodUnitMap[fhirTiming["periodUnit"]].toString();
      List<String> daysInWeek = fhirTiming["DayOfWeek"].split("|");
      return Frequency.Static("", pPeriod,
          daysInWeek.map((e) => weekDaystMap[e].toString()).toList());
    } else {
      String pInterval = periodUnitMap[fhirTiming["periodUnit"]].toString();

      double pTimesPerIntervald =
          (fhirTiming["frequency"]) * (fhirTiming["period"]);
      int pTimesPerInterval = pTimesPerIntervald.toInt();

      if ((pInterval == "Hour") ||
          ((pInterval == "Day") && (fhirTiming["period"] == 1))) {
        pTimesPerInterval =
            24 ~/ ((fhirTiming["frequency"]) * (fhirTiming["period"]));
        pInterval = "Day";
      } else if ((pInterval == "Day") && (fhirTiming["period"] > 1)) {
        pTimesPerInterval =
            30 ~/ ((fhirTiming["frequency"]) * (fhirTiming["period"]));
        pInterval = "Month";
      }

      return Frequency.Dynamic("", pInterval, pTimesPerInterval);
    }
  } else if (fhirTiming.containsKey("count") &&
      (fhirTiming["count"] as int == 1)) {
    return Frequency.Once("");
  }
  return Frequency.Text(fhirFreqText);
}