DurationShorthand.parse constructor
DurationShorthand.parse(
- String value
Parse shorthand duration string Supports: .500ms, .5s, .5m, 500ms, 5s, 5m, 1.5s, etc. Note: Leading dot is just stylistic - ".500ms" = "500ms" = 500 milliseconds For decimal values, use "0.5s" not ".5s" (or use number extensions: 0.5.s)
Implementation
factory DurationShorthand.parse(String value) {
String cleaned = value.trim();
// Remove leading dot if present (it's just stylistic)
if (cleaned.startsWith('.')) {
cleaned = cleaned.substring(1);
}
// Parse the value and unit
final regex = RegExp(r'^(\d+\.?\d*)\s*(ms|s|m|h)$', caseSensitive: false);
final match = regex.firstMatch(cleaned);
if (match == null) {
throw FormatException('Invalid duration format: $value. Expected format: .500ms, .5s, .5m, etc.');
}
final numValue = double.parse(match.group(1)!);
final unit = match.group(2)!.toLowerCase();
switch (unit) {
case 'ms':
return DurationShorthand(Duration(milliseconds: numValue.round()));
case 's':
return DurationShorthand(Duration(milliseconds: (numValue * 1000).round()));
case 'm':
return DurationShorthand(Duration(milliseconds: (numValue * 60 * 1000).round()));
case 'h':
return DurationShorthand(Duration(milliseconds: (numValue * 60 * 60 * 1000).round()));
default:
throw FormatException('Unknown duration unit: $unit');
}
}