readModelFromFile<T> static method
从文件中读取 JSON 并解析为单个对象
filePath JSON 文件路径
fromJson JSON 映射到 T 类型对象的工厂函数
fromAsset 是否从 Assets 中读取(默认false,即从沙盒文件读取)
返回值: Future<T?> 解析后的对象,文件不存在或异常时返回 null
使用示例:
// 从沙盒文件读取
WheelModel? model = await JsonUtil.readModelFromFile<WheelModel>(
'/tmp/wheel.json',
(json) => WheelModel.fromJson(json),
);
// 从 Assets 读取
WheelModel? model = await JsonUtil.readModelFromFile<WheelModel>(
'assets/data/wheel.json',
(json) => WheelModel.fromJson(json),
fromAsset: true,
);
Implementation
static Future<T?> readModelFromFile<T>(
String filePath,
T Function(Map<String, dynamic>) fromJson, {
bool fromAsset = false,
}) async {
try {
String jsonString;
if (fromAsset) {
jsonString = await rootBundle.loadString(filePath);
} else {
final file = File(filePath);
if (!file.existsSync()) {
return null;
}
jsonString = await file.readAsString();
}
final data = jsonDecode(jsonString) as Map<String, dynamic>;
return fromJson(data);
} catch (e) {
Logger.log('Error reading model from file: $e');
return null;
}
}