listFromJson<T> method

List<T>? listFromJson<T>(
  1. dynamic source,
  2. T fromMap(
    1. Map<String, dynamic> map
    )
)

JSON 字符串或列表转为对象列表

Implementation

List<T>? listFromJson<T>(
  dynamic source,
  T Function(Map<String, dynamic> map) fromMap,
) {
  if (source == null) return null;
  try {
    List<dynamic> list;
    if (source is String) {
      list = json.decode(source);
    } else if (source is List) {
      list = source;
    } else {
      return null;
    }

    return list
        .map((item) {
          if (item is String) {
            final decoded = json.decode(item);
            if (decoded is Map<String, dynamic>) {
              return fromMap(decoded);
            }
          } else if (item is Map<String, dynamic>) {
            return fromMap(item);
          }
          return null;
        })
        .whereType<T>()
        .toList();
  } catch (e, stackTrace) {
    logger.e("JSON 列表解析失败: $e\n源数据: $source\n$stackTrace");
    return null;
  }
}