toString method

  1. @override
String toString({
  1. T? targetUnit,
  2. QuantityFormat format = QuantityFormat.invariant,
})
override

Returns a string representation of this quantity.

By default, formats as "[value]\u00A0[unit_symbol]" (e.g., "10.5\u00A0m"), using Dart-native number formatting (dot decimal, no thousands separator).

Parameters:

  • targetUnit: If provided, the value is converted to this unit before formatting. The displayed symbol will be that of targetUnit.

  • format: A QuantityFormat controlling number formatting, locale, fraction digits, unit symbol visibility, and separator. Defaults to QuantityFormat.invariant.

Examples:

1.km.toString(targetUnit: LengthUnit.meter)
// "1000.0 m"

1234.56.m.toString(format: QuantityFormat.forLocale('de_DE', fractionDigits: 2))
// "1.234,56 m"

10.m.toString(format: QuantityFormat.valueOnly)
// "10.0"

Implementation

@override
String toString({
  T? targetUnit,
  QuantityFormat format = QuantityFormat.invariant,
}) {
  var valueToFormat = _value;
  var unitToDisplay = _unit;

  if (targetUnit != null && targetUnit != _unit) {
    valueToFormat = getValue(targetUnit);
    unitToDisplay = targetUnit;
  }

  String formattedValue;
  final nf = format.effectiveNumberFormat;

  if (nf != null) {
    formattedValue = nf.format(valueToFormat);
  } else if (format.fractionDigits != null) {
    formattedValue = valueToFormat.toStringAsFixed(format.fractionDigits!);
  } else {
    formattedValue = valueToFormat.toString();
  }

  if (format.showUnitSymbol) {
    return '$formattedValue${format.unitSymbolSeparator}${unitToDisplay.symbol}';
  }
  return formattedValue;
}