fix(knowledgebase): parsing for knowledge
This commit is contained in:
53
lib/core/utils/json_parsing.dart
Normal file
53
lib/core/utils/json_parsing.dart
Normal file
@@ -0,0 +1,53 @@
|
||||
/// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user