ImagePackContent.fromJson constructor

ImagePackContent.fromJson(
  1. Map<String, Object?> json
)

Implementation

ImagePackContent.fromJson(Map<String, Object?> json)
  : _json = Map.fromEntries(
      json.entries.where(
        (e) => !['images', 'pack', 'emoticons', 'short'].contains(e.key),
      ),
    ),
    pack = ImagePackPackContent.fromJson(
      json.tryGetMap<String, Object?>('pack') ?? {},
    ),
    images =
        json
            .tryGetMap<String, Object?>('images')
            ?.catchMap(
              (k, v) => MapEntry(
                k,
                ImagePackImageContent.fromJson(v as Map<String, Object?>),
              ),
            ) ??
        // the "emoticons" key needs a small migration on the key, ":string:" --> "string"
        json
            .tryGetMap<String, Object?>('emoticons')
            ?.catchMap(
              (k, v) => MapEntry(
                k.startsWith(':') && k.endsWith(':')
                    ? k.substring(1, k.length - 1)
                    : k,
                ImagePackImageContent.fromJson(v as Map<String, Object?>),
              ),
            ) ??
        // the "short" key was still just a map from shortcode to mxc uri
        json
            .tryGetMap<String, String>('short')
            ?.catchMap(
              (k, v) => MapEntry(
                k.startsWith(':') && k.endsWith(':')
                    ? k.substring(1, k.length - 1)
                    : k,
                ImagePackImageContent(url: Uri.parse(v)),
              ),
            ) ??
        {};