getValue method

Object? getValue(
  1. int index, {
  2. int? subfieldInfo,
  3. String? subfieldName,
})

Implementation

Object? getValue(int index, {int? subfieldInfo, String? subfieldName}) {
  if (index >= values.length || index < 0) {
    return null;
  }

  Subfield? subfield;
  if (subfieldInfo != null) {
    subfield = getSubfieldByIndex(subfieldInfo);
  } else if (subfieldName != null) {
    subfield = getSubfieldByName(subfieldName);
  }

  double s, o;
  if (subfield == null) {
    s = scale;
    o = offset;
  } else {
    s = subfield.scale;
    o = subfield.offset;
  }

  final Object? value = values[index];
  if (value == null) return null;

  final int baseTypeNum = type & Fit.baseTypeNumMask;
  if (baseTypeNum == Fit.string) {
    if (value is List<int>) {
      // Remove null terminator if present
      int len = value.length;
      if (len > 0 && value[len - 1] == 0) {
        len--;
      }
      return utf8.decode(value.sublist(0, len));
    }
    return value.toString();
  }

  if (isNumeric()) {
    final invalid = Fit.baseType[baseTypeNum].invalidValue;
    if (value == invalid) {
      return null;
    }
    if (value is num && (s != 1.0 || o != 0.0)) {
      return (value.toDouble() / s) - o;
    }
  }

  return value;
}