import 'package:duration/locale.dart'; import 'package:duration/duration.dart'; 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"; } String format({ DurationTersity tersity = DurationTersity.second, DurationTersity upperTersity = DurationTersity.week, DurationLocale locale = const EnglishDurationLocale(), String? spacer, String? delimiter, String? conjugation, bool abbreviated = false, }) => printDuration( this, tersity: tersity, upperTersity: upperTersity, locale: locale, spacer: spacer, delimiter: delimiter, conjugation: conjugation, abbreviated: abbreviated, ); } 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); } }