extension DurationToHumanReadableString on Duration { String toHumanReadableString({padZero = true}) { final mm = inMinutes .remainder(60) .toString() .padLeft(2, !padZero && inHours == 0 ? '' : '0'); final ss = inSeconds.remainder(60).toString().padLeft(2, '0'); if (inHours > 0) { final hh = inHours.toString().padLeft(2, !padZero ? '' : '0'); return '$hh:$mm:$ss'; } return '$mm:$ss'; } } extension ParseDuration on Duration { static Duration fromString(String duration) { final parts = duration.split(':').reversed.toList(); final seconds = int.parse(parts[0]); final minutes = parts.length > 1 ? int.parse(parts[1]) : 0; final hours = parts.length > 2 ? int.parse(parts[2]) : 0; return Duration(hours: hours, minutes: minutes, seconds: seconds); } }