jsonDecodeDurationInMinutes function
Converts a dynamic value to a Duration in minutes.
Returns Duration.zero for invalid or null input.
durationInMinutesFromJson('2.5'); // 0:02:30.000000
durationInMinutesFromJson('2'); // 0:02:00.000000
durationInMinutesFromJson(2); // 0:02:00.000000
durationInMinutesFromJson(null); // 0:00:00.000000
Implementation
Duration jsonDecodeDurationInMinutes(final dynamic value) {
if (value == null) return Duration.zero;
Duration handleDouble(final double value) {
final minutes = value.floor();
final remainingSeconds = ((value - minutes) * 60).round();
return Duration(minutes: minutes, seconds: remainingSeconds);
}
return switch (value) {
final double value => handleDouble(value),
final int value => Duration(minutes: value),
final String value => () {
final doubleMinutes = double.tryParse(value);
if (doubleMinutes != null) return handleDouble(doubleMinutes);
final intMinutes = int.tryParse(value);
if (intMinutes != null) return Duration(minutes: intMinutes);
return Duration.zero;
}(),
_ => Duration.zero,
};
}