localJsonToModel<T> static method

Future<T?> localJsonToModel<T>(
  1. String assetPath,
  2. T fromJson(
    1. Map<String, dynamic>
    ), {
  3. bool fromSandbox = false,
})

通用的 JSON 解析为对象的方法。

从本地 asset 或沙盒文件中读取 JSON 并解析为对象。

assetPath JSON 文件路径(asset 或本地文件) fromJson JSON 映射到 T 类型对象的工厂函数 fromSandbox 是否从沙盒目录读取(默认false,即从asset读取)

返回值: Future<T?> 解析后的对象,文件不存在或异常时返回 null

使用示例:

WheelModel? model = await JsonUtil.localJsonToModel<WheelModel>(
  'assets/data/wheel.json',
  (json) => WheelModel.fromJson(json),
);

Implementation

static Future<T?> localJsonToModel<T>(
  String assetPath,
  T Function(Map<String, dynamic>) fromJson, {
  bool fromSandbox = false,
}) async {
  String response;
  if (fromSandbox) {
    final file = File(assetPath);
    if (!file.existsSync()) {
      return null;
    }
    response = await file.readAsString();
  } else {
    try {
      response = await rootBundle.loadString(assetPath);
    } catch (e) {
      return null;
    }
  }
  final data = json.decode(response);
  return fromJson(data);
}