createHeartRate method
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,
);
}