extension DurationExtension on Duration { /// Returns clamp of [Duration] between [min] and [max]. Duration clamp(Duration min, Duration max) { if (this < min) return min; if (this > max) return max; return this; } /// Returns a [String] representation of [Duration]. String label({Duration? reference}) { reference ??= this; if (reference > const Duration(days: 1)) { final days = inDays.toString().padLeft(3, '0'); final hours = (inHours - (inDays * 24)).toString().padLeft(2, '0'); final minutes = (inMinutes - (inHours * 60)).toString().padLeft(2, '0'); final seconds = (inSeconds - (inMinutes * 60)).toString().padLeft(2, '0'); return '$days:$hours:$minutes:$seconds'; } else if (reference > const Duration(hours: 1)) { final hours = inHours.toString().padLeft(2, '0'); final minutes = (inMinutes - (inHours * 60)).toString().padLeft(2, '0'); final seconds = (inSeconds - (inMinutes * 60)).toString().padLeft(2, '0'); return '$hours:$minutes:$seconds'; } else { final minutes = inMinutes.toString().padLeft(2, '0'); final seconds = (inSeconds - (inMinutes * 60)).toString().padLeft(2, '0'); return '$minutes:$seconds'; } } }