resolveRemote method

  1. @override
Future resolveRemote()
override

By default, a generic PubEntry does not fetch a resolved URL.

Implementation

@override
Future resolveRemote() async {
  String? hostedUrl = description?.url;
  final String pkgName = name;

  if (hostedUrl == null) {
    return;
  }

  // Remove any trailing slash
  hostedUrl = hostedUrl.endsWith('/')
      ? hostedUrl.substring(0, hostedUrl.length - 1)
      : hostedUrl;
  final requestUrl = '$hostedUrl/api/packages/$pkgName';
  final urlParsed = Uri.parse(requestUrl);

  try {
    final response = await http.get(urlParsed);
    if (response.statusCode != 200) {
      throw HttpException('HTTP error: ${response.statusCode}');
    }

    final pubPackageJson = json.decode(response.body) as Map<String, dynamic>;
    for (var verPkg in pubPackageJson['versions'] as List<dynamic>) {
      final versionData = verPkg as Map<String, dynamic>;
      if (versionData['version'] == version) {
        _resolvedUrl = versionData['archive_url'] as String;
        _resolvedSha256 = versionData['archive_sha256'] as String?;
        break;
      }
    }
  } catch (e) {
    print("Error fetching package[$pkgName] data: $e");
  }
}