readModelFromFile<T> static method

Future<T?> readModelFromFile<T>(
  1. String filePath,
  2. T fromJson(
    1. Map<String, dynamic>
    ), {
  3. bool fromAsset = false,
})

从文件中读取 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;
  }
}