Files
Aq-Accounting-Flutter/lib/models/json_util.dart
T
2026-09-21 17:37:53 +08:00

37 lines
1.2 KiB
Dart

/// 后端字段的防御式取值工具
///
/// 后端没有统一的响应包装,字段类型也可能与预期不符(例如金额返回字符串、
/// 数组返回 null)。所有 fromJson 都走这里取值,保证解析绝不抛异常。
library;
int asInt(Object? value, {int fallback = 0}) {
if (value is int) return value;
if (value is num) return value.toInt();
if (value is String) return int.tryParse(value) ?? fallback;
return fallback;
}
double asDouble(Object? value, {double fallback = 0}) {
if (value is double) return value;
if (value is num) return value.toDouble();
if (value is String) return double.tryParse(value) ?? fallback;
return fallback;
}
String asString(Object? value, {String fallback = ''}) {
if (value == null) return fallback;
return value.toString();
}
/// 取字符串,空串时回退(用于分类名/图标这类必须有值的展示字段)
String asNonEmpty(Object? value, String fallback) {
final text = asString(value);
return text.isEmpty ? fallback : text;
}
/// 取对象数组,非 Map 的元素直接丢弃
List<Map<String, dynamic>> asMapList(Object? value) {
if (value is! List) return const [];
return value.whereType<Map<String, dynamic>>().toList();
}