import 'package:catcher_2/catcher_2.dart'; /// Parses duration string formatted by Duration.toString() to [Duration]. /// The string should be of form hours:minutes:seconds.microseconds /// /// Example: /// parseTime('245:09:08.007006'); Duration parseDuration(String input) { final parts = input.split(':'); if (parts.length != 3) throw const FormatException('Invalid time format'); int days; int hours; int minutes; int seconds; int milliseconds; int microseconds; { final p = parts[2].split('.'); if (p.length != 2) throw const FormatException('Invalid time format'); final p2 = int.parse(p[1]); microseconds = p2 % 1000; milliseconds = p2 ~/ 1000; seconds = int.parse(p[0]); } minutes = int.parse(parts[1]); { int p = int.parse(parts[0]); hours = p % 24; days = p ~/ 24; } return Duration( days: days, hours: hours, minutes: minutes, seconds: seconds, milliseconds: milliseconds, microseconds: microseconds, ); } Duration? tryParseDuration(String input) { try { return parseDuration(input); } catch (e, stack) { Catcher2.reportCheckedError(e, stack); return null; } }