createHeartRate method

  1. @override
HealthConnectHeartRate createHeartRate(
  1. Map<String, dynamic> data
)
override

Creates a HealthConnectHeartRate object from JSON map data. Extracts and validates all required fields, handling time conversions and sample collection.

Implementation

@override
HealthConnectHeartRate createHeartRate(Map<String, dynamic> data) {
  var errMsg =
      "Error occured when extracting data for health connect heart rate";
  var startTime = converter.extractDateTimeFromEpochMs(
    data["startTimeEpochMs"],
    errMsg,
  );
  var endTime = converter.extractDateTimeFromEpochMs(
    data["endTimeEpochMs"],
    errMsg,
  );

  var startZoneOffset =
      data["startZoneOffsetSeconds"] != null
          ? converter.extractIntValue(data["startZoneOffsetSeconds"], errMsg)
          : null;

  var endZoneOffset =
      data["endZoneOffsetSeconds"] != null
          ? converter.extractIntValue(data["endZoneOffsetSeconds"], errMsg)
          : null;

  var samplesDataList = converter.extractList(data["samples"], errMsg);
  List<HeartRateRecordSample> samples = [];
  for (var sample in samplesDataList) {
    var samplesMap = converter.extractJsonObject(sample, errMsg);
    var time = converter.extractDateTime(samplesMap["time"], errMsg);
    var beatsPerMinute = converter.extractIntValue(
      samplesMap["beatsPerMinute"],
      errMsg,
    );
    var heartRateRecordSample = HeartRateRecordSample(time, beatsPerMinute);
    samples.add(heartRateRecordSample);
  }

  var metadataMap = converter.extractJsonObject(data["metadata"], errMsg);
  var metadata = _extractMetaData(metadataMap, errMsg);

  return HealthConnectHeartRate(
    startTime: startTime,
    endTime: endTime,
    startZoneOffset: startZoneOffset,
    endZoneOffset: endZoneOffset,
    samples: samples,
    metadata: metadata,
  );
}