PageData.auto constructor

PageData.auto(
  1. String url,
  2. dynamic content
)

Implementation

factory PageData.auto(String url, dynamic content) {
  // Normalize input: support raw bytes by decoding as UTF-8
  // Only treat Uint8List as bytes; generic List<int> may be real JSON arrays
  dynamic normalized = content;
  if (content is Uint8List) {
    try {
      normalized = utf8.decode(content);
    } catch (_) {
      try {
        normalized = gbk.decode(content);
      } catch (_) {
        normalized = content.toString();
      }
    }
  }

  if (normalized is! String) {
    return PageData.json(url, normalized);
  } else {
    var text = normalized.trim();

    // XML → JSON conversion
    if (text.startsWith("<?xml")) {
      try {
        final transfomer = Xml2Json();
        transfomer.parse(text);
        text = transfomer.toParkerWithAttrs();
      } catch (_) {}
    }

    // Decode JSON from possibly converted text
    try {
      return PageData.json(url, tryParseJson(text, throwException: true));
    } catch (_) {}
  }

  return PageData.html(url, normalized.toString());
}