Files
xianyan/lib/core/utils/safe_json.dart
Developer 09d68cd6aa refactor: 替换硬编码的AppTypography为基于context的动态获取
1. 批量修改所有直接调用AppTypography静态方法的地方,改为使用AppTypography.of(context)获取主题文本样式,适配不同主题上下文
2. 新增channelOrder存储键,支持频道排序持久化
3. 修复笔记删除全部功能未重置total字段的bug
4. 调整build.yaml配置,扩展freezed和json_serializable的生成范围
5. 优化底部弹窗默认样式,使用主题色替代硬编码颜色
6. 调整主题设置中的卡片样式默认文案
2026-05-24 09:26:55 +08:00

73 lines
2.6 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================
// 闲言APP — 安全JSON转换器
// 创建时间: 2026-05-24
// 更新时间: 2026-05-24
// 作用: freezed模型使用的安全fromJson转换器防止API返回类型不匹配崩溃
// 上次更新: 初始创建提供int/String/double/List/Map/bool安全解析
// ============================================================
class SafeJson {
static int parseInt(dynamic value, [int defaultValue = 0]) {
if (value == null) return defaultValue;
if (value is int) return value;
if (value is double) return value.toInt();
if (value is String) return int.tryParse(value) ?? defaultValue;
return defaultValue;
}
static String parseString(dynamic value, [String defaultValue = '']) {
if (value == null) return defaultValue;
if (value is String) return value;
return value.toString();
}
static double parseDouble(dynamic value, [double defaultValue = 0.0]) {
if (value == null) return defaultValue;
if (value is double) return value;
if (value is int) return value.toDouble();
if (value is String) return double.tryParse(value) ?? defaultValue;
return defaultValue;
}
static bool parseBool(dynamic value, [bool defaultValue = false]) {
if (value == null) return defaultValue;
if (value is bool) return value;
if (value is int) return value != 0;
if (value is String) return value == '1' || value.toLowerCase() == 'true';
return defaultValue;
}
static List<T> parseList<T>(dynamic value, [List<T> defaultValue = const []]) {
if (value == null) return defaultValue;
if (value is List) return value.whereType<T>().toList();
return defaultValue;
}
static List<dynamic> parseDynamicList(dynamic value) {
if (value == null) return [];
if (value is List) return value;
return [];
}
static Map<String, dynamic> parseMap(dynamic value) {
if (value == null) return {};
if (value is Map<String, dynamic>) return value;
if (value is Map) return value.map((k, v) => MapEntry(k.toString(), v));
return {};
}
static Map<String, dynamic>? parseNullableMap(dynamic value) {
if (value is Map<String, dynamic>) return value;
if (value is Map) return value.map((k, v) => MapEntry(k.toString(), v));
return null;
}
static Map<String, dynamic> parseResponseData(Map<String, dynamic> response) {
final data = response['data'];
if (data == null) return response;
if (data is Map<String, dynamic>) return data;
if (data is Map) return data.map((k, v) => MapEntry(k.toString(), v));
return response;
}
}