formatDuration function
Formats a duration in milliseconds to a human-readable string.
Implementation
String formatDuration(
int ms, {
bool hideTrailingZeros = false,
bool mostSignificantOnly = false,
}) {
if (ms < 60000) {
if (ms == 0) return '0s';
if (ms < 1) return '${(ms / 1000).toStringAsFixed(1)}s';
return '${ms ~/ 1000}s';
}
var days = ms ~/ 86400000;
var hours = (ms % 86400000) ~/ 3600000;
var minutes = (ms % 3600000) ~/ 60000;
var seconds = ((ms % 60000) / 1000).round();
// Handle rounding carry-over
if (seconds == 60) {
seconds = 0;
minutes++;
}
if (minutes == 60) {
minutes = 0;
hours++;
}
if (hours == 24) {
hours = 0;
days++;
}
if (mostSignificantOnly) {
if (days > 0) return '${days}d';
if (hours > 0) return '${hours}h';
if (minutes > 0) return '${minutes}m';
return '${seconds}s';
}
if (days > 0) {
if (hideTrailingZeros && hours == 0 && minutes == 0) return '${days}d';
if (hideTrailingZeros && minutes == 0) return '${days}d ${hours}h';
return '${days}d ${hours}h ${minutes}m';
}
if (hours > 0) {
if (hideTrailingZeros && minutes == 0 && seconds == 0) return '${hours}h';
if (hideTrailingZeros && seconds == 0) return '${hours}h ${minutes}m';
return '${hours}h ${minutes}m ${seconds}s';
}
if (minutes > 0) {
if (hideTrailingZeros && seconds == 0) return '${minutes}m';
return '${minutes}m ${seconds}s';
}
return '${seconds}s';
}