54 lines
1.6 KiB
Dart
54 lines
1.6 KiB
Dart
/// Utilities for parsing JSON values with graceful fallbacks.
|
|
///
|
|
/// These helpers handle various API response formats and provide defensive
|
|
/// parsing to avoid crashes from malformed data.
|
|
library;
|
|
|
|
/// Parses a DateTime from various formats.
|
|
///
|
|
/// Handles:
|
|
/// - `DateTime` objects (returned as-is)
|
|
/// - ISO 8601 strings (parsed)
|
|
/// - Unix timestamps as integers (assumed to be in seconds)
|
|
/// - `null` or invalid values (returns [DateTime.now])
|
|
DateTime parseDateTime(Object? value) {
|
|
if (value == null) {
|
|
return DateTime.now();
|
|
}
|
|
if (value is DateTime) {
|
|
return value;
|
|
}
|
|
if (value is String) {
|
|
// Use tryParse to avoid FormatException on malformed strings
|
|
return DateTime.tryParse(value) ?? DateTime.now();
|
|
}
|
|
if (value is int) {
|
|
// Assume Unix timestamp in seconds
|
|
return DateTime.fromMillisecondsSinceEpoch(value * 1000);
|
|
}
|
|
return DateTime.now();
|
|
}
|
|
|
|
/// Parses a nullable DateTime from various formats.
|
|
///
|
|
/// Returns `null` if the input is `null`, otherwise delegates to [parseDateTime].
|
|
DateTime? parseDateTimeOrNull(Object? value) {
|
|
if (value == null) return null;
|
|
return parseDateTime(value);
|
|
}
|
|
|
|
/// Parses an int from various formats.
|
|
///
|
|
/// Handles:
|
|
/// - `int` values (returned as-is)
|
|
/// - `num` values (converted to int)
|
|
/// - String values (parsed with [int.tryParse])
|
|
/// - `null` or invalid values (returns `null`)
|
|
int? parseInt(Object? value) {
|
|
if (value == null) return null;
|
|
if (value is int) return value;
|
|
if (value is num) return value.toInt();
|
|
if (value is String) return int.tryParse(value);
|
|
return null;
|
|
}
|