readModelsFromFile<T> static method
从文件中读取 JSON 数组并解析为对象列表
filePath JSON 文件路径
fromJson JSON 映射到 T 类型对象的工厂函数
fromAsset 是否从 Assets 中读取(默认false,即从沙盒文件读取)
返回值: Future<List<T>> 解析后的对象列表,文件不存在或异常时返回空列表
使用示例:
// 从沙盒文件读取
List<WheelModel> models = await JsonUtil.readModelsFromFile<WheelModel>(
'/tmp/wheels.json',
(json) => WheelModel.fromJson(json),
);
// 从 Assets 读取
List<WheelModel> models = await JsonUtil.readModelsFromFile<WheelModel>(
'assets/data/wheels.json',
(json) => WheelModel.fromJson(json),
fromAsset: true,
);
Implementation
static Future<List<T>> readModelsFromFile<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 [];
}
jsonString = await file.readAsString();
}
final List<dynamic> data = jsonDecode(jsonString) as List<dynamic>;
return data
.map((item) => fromJson(item as Map<String, dynamic>))
.toList();
} catch (e) {
Logger.log('Error reading models from file: $e');
return [];
}
}