formatDuration function

String formatDuration(
  1. Duration d, {
  2. bool isShort = true,
  3. bool isIncludeSeconds = true,
  4. bool isIncludeMilliseconds = false,
})

Formats Duration as a short string (e.g. "2h 30m" or "1d 2h").

isIncludeSeconds and isIncludeMilliseconds add smaller units when non-zero.

Implementation

String formatDuration(
  Duration d, {
  bool isShort = true,
  bool isIncludeSeconds = true,
  bool isIncludeMilliseconds = false,
}) {
  final List<String> parts = <String>[];
  final int days = d.inDays;
  final int hours = d.inHours % 24;
  final int minutes = d.inMinutes % 60;
  final int seconds = d.inSeconds % 60;
  final int millis = d.inMilliseconds % 1000;
  final String? dPart = _formatUnit(days, isShort, 'd', _kDay, _kDays);
  if (dPart != null) parts.add(dPart);
  final String? hPart = _formatUnit(hours, isShort, 'h', _kHour, _kHours);
  if (hPart != null) parts.add(hPart);
  final String? mPart = _formatUnit(minutes, isShort, 'm', _kMinute, _kMinutes);
  if (mPart != null) parts.add(mPart);
  final String? sPart = _secondsPart(d, seconds, parts, isIncludeSeconds, isShort);
  if (sPart != null) parts.add(sPart);
  final String? msPart = _millisPart(millis, isIncludeMilliseconds, isShort);
  if (msPart != null) parts.add(msPart);
  return parts.isEmpty ? (isShort ? _kZeroS : _kZeroSeconds) : parts.join(' ');
}