jsonDecodeDurationInMinutes function

Duration jsonDecodeDurationInMinutes(
  1. dynamic value
)

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,
  };
}