loadContent method

Future<String?> loadContent(
  1. dynamic srcOrUri
)

Implementation

Future<String?> loadContent(dynamic srcOrUri) async {
  final String rawInput =
      (srcOrUri is Uri ? srcOrUri.toString() : srcOrUri.toString()).trim();
  if (rawInput.isEmpty) return null;

  if (rawInput.startsWith('<')) {
    return rawInput;
  }

  if (rawInput.startsWith('data:')) {
    return _decodeDataUri(rawInput);
  }

  final Uri uri = srcOrUri is Uri ? srcOrUri : resolveUri(rawInput);
  if (uri.isScheme('data')) {
    return _decodeDataUri(rawInput, uri);
  }

  if (virtualFiles != null) {
    final matched = _lookupVirtualFile(rawInput) ??
        (uri.isScheme('file') ? _lookupVirtualFile(uri.toFilePath()) : null);
    if (matched != null) {
      final parsedMatched = Uri.tryParse(matched);
      if (parsedMatched != null && isHttp(parsedMatched)) {
        return await _fetchHttp(parsedMatched);
      }
      return matched;
    }
  }

  if (isHttp(uri)) {
    return await _fetchHttp(uri);
  }

  if (uri.isScheme('file') || (!uri.hasScheme && !_isWeb)) {
    try {
      final filePath = uri.isScheme('file')
          ? uri.toFilePath()
          : Uri.decodeComponent(uri.path);
      final file = File(filePath);
      if (file.existsSync()) {
        return await file.readAsString();
      }
    } catch (_) {
      return null;
    }
  }

  return null;
}