loadTile method

  1. @override
Future<Image?> loadTile(
  1. PdfTileKey key, {
  2. required Rect region,
  3. required double pixelRatio,
  4. required int width,
  5. required int height,
})
override

Implementation

@override
Future<ui.Image?> loadTile(
  PdfTileKey key, {
  required ui.Rect region,
  required double pixelRatio,
  required int width,
  required int height,
}) async {
  final disk = tiles;
  final stats = tileStats;
  if (disk == null || documentKey.isEmpty) return null;
  try {
    final bytes =
        await disk.read(_tileKey(key, region, pixelRatio, width, height));
    if (bytes == null) {
      stats._misses++;
      return null;
    }
    final sw = Stopwatch()..start();
    final codec = await ui.instantiateImageCodec(bytes);
    try {
      final frame = await codec.getNextFrame();
      final image = frame.image;
      if (image.width != width || image.height != height) {
        image.dispose();
        stats._errors++;
        stats._misses++;
        return null;
      }
      stats._hits++;
      stats._bytesRead += bytes.length;
      stats._decodeMicros += sw.elapsedMicroseconds;
      return image;
    } finally {
      codec.dispose();
    }
  } catch (_) {
    stats._errors++;
    stats._misses++;
    return null;
  }
}