| 1 | extension DurationFormatter on Duration { |
| 2 | String toHumanReadable() { |
| 3 | if (inSeconds == 0) { |
| 4 | return ''; |
| 5 | } |
| 6 | |
| 7 | final absSeconds = inSeconds.abs |
| 8 | if (absSeconds < 60) { |
| 9 | return '${absSeconds} |
| 10 | } |
| 11 | |
| 12 | final absMinutes = inMinutes.abs |
| 13 | if (absMinutes < 60) { |
| 14 | final minutes = absMinutes; |
| 15 | final seconds = absSeconds % 60 |
| 16 | if (seconds == 0) { |
| 17 | return '${minutes} |
| 18 | } |
| 19 | return '${minutes} |
| 20 | } |
| 21 | |
| 22 | final absHours = inHours.abs |
| 23 | if (absHours < 24) { |
| 24 | final hours = absHours; |
| 25 | final minutes = (absMinutes % 60 |
| 26 | if (minutes == 0) { |
| 27 | return '${hours} |
| 28 | } |
| 29 | return '${hours} |
| 30 | } |
| 31 | |
| 32 | final days = inDays.abs |
| 33 | final hours = (absHours % 24 |
| 34 | if (hours == 0) { |
| 35 | return '${days} |
| 36 | } |
| 37 | return '${days} |
| 38 | } |
| 39 | |
| 40 | String toRelativeTime() { |
| 41 | final difference = this; |
| 42 | |
| 43 | if (difference.inSeconds.abs() |
| 44 | return 'just now'; |
| 45 | } |
| 46 | |
| 47 | if (difference.inMinutes.abs() |
| 48 | final minutes = difference.inMinutes. |
| 49 | return difference.isNegative ? ' |
| 50 | } |
| 51 | |
| 52 | if (difference.inHours.abs() |
| 53 | final hours = difference.inHours. |
| 54 | final minutes = (difference.inMinutes. |
| 55 | final timeString = minutes > 0 |
| 56 | return difference.isNegative ? ' |
| 57 | } |
| 58 | |
| 59 | final days = difference.inDays. |
| 60 | final hours = (difference.inHours. |
| 61 | final timeString = hours > 0 |
| 62 | return difference.isNegative ? ' |
| 63 | } |
| 64 | } |