Files
iiEsaywebUIapp/lib/core/utils/json_parsing.dart
2026-01-13 09:21:17 +05:30

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