resolve method

  1. @override
Future<ImageData> resolve()
override

Resolves and returns the image data.

Implementation

@override
Future<ImageData> resolve() async {
  final client = HttpClient();
  try {
    final request = await client.getUrl(Uri.parse(url));
    headers.forEach((name, value) => request.headers.add(name, value));
    final response = await request.close();
    if (response.statusCode < 200 || response.statusCode >= 300) {
      throw Exception('Failed to load image: HTTP ${response.statusCode}');
    }

    final builder = BytesBuilder(copy: false);
    await for (final chunk in response) {
      builder.add(chunk);
    }
    final bytes = builder.takeBytes();
    final decoded = img.decodeImage(bytes);
    if (decoded == null) {
      throw Exception('Failed to decode image: $url');
    }
    return ImageData(decoded);
  } finally {
    client.close(force: true);
  }
}