durationText function
String
durationText(
- Duration dur, {
- DurationDisplayUnit? unit,
- bool includeUnit = true,
- int fractionDigits = 1,
- bool allowRoundingToZero = true,
Converts a Duration into a readable text representation in the specified
unit.
includeUnit - whether to include the unit at the end of the returned value
fractionDigits - how many fraction digits should appear after the decimal.
This parameter value will be ignored when the unit is specified or inferred
as DurationDisplayUnit.micros, since there cannot be a fractional value of
microseconds from the Duration class.
allowRoundingToZero - when true, this method may return zero for a very
small number (e.g. '0.0 ms'). When false, this method will return a minimum
value with the less than operator for very small values (e.g. '< 0.1 ms').
The value returned will always respect the specified fractionDigits.
Implementation
String durationText(
final Duration dur, {
DurationDisplayUnit? unit,
final bool includeUnit = true,
int fractionDigits = 1,
final bool allowRoundingToZero = true,
}) {
if (!allowRoundingToZero && unit == null) {
throw AssertionError('To disable rounding to zero, please specify a unit.');
}
final micros = dur.inMicroseconds;
unit ??= DurationDisplayUnit.unitFor(micros);
double durationAsDouble;
switch (unit) {
case DurationDisplayUnit.micros:
durationAsDouble = micros.toDouble();
case DurationDisplayUnit.milliseconds:
durationAsDouble = micros / 1000;
case DurationDisplayUnit.seconds:
durationAsDouble = micros / 1000000;
}
// Hide any fraction digits when the unit is microseconds, since the
// duration displayed will always be a whole number in this case.
if (unit == DurationDisplayUnit.micros) {
fractionDigits = 0;
}
var durationStr = durationAsDouble.toStringAsFixed(fractionDigits);
if (dur != Duration.zero && !allowRoundingToZero) {
final zeroRegexp = RegExp('[0]+[.][0]+');
if (zeroRegexp.hasMatch(durationStr)) {
final buf = StringBuffer('< 0.');
for (int i = 1; i < fractionDigits; i++) {
buf.write('0');
}
buf.write('1');
durationStr = buf.toString();
}
}
return '$durationStr${includeUnit ? ' ${unit.display}' : ''}';
}