renderThumbnail method

  1. @override
Future<Image?> renderThumbnail(
  1. int pageIndex, {
  2. int maxSize = 240,
})
override

Implementation

@override
Future<ui.Image?> renderThumbnail(int pageIndex, {int maxSize = 240}) async {
  final ui.Image? cached = _thumbnails.get(pageIndex);
  if (cached != null) return cached;
  try {
    final ui.Picture? picture = await renderPage(pageIndex);
    final UDocPageInfo info = pageInfo(pageIndex);
    if (picture == null) return null;
    final Size rotated = info.rotatedSize;
    final double scale = rotated.width > rotated.height ? maxSize / rotated.width : maxSize / rotated.height;
    final int width = (rotated.width * scale).round().clamp(1, 2048);
    final int height = (rotated.height * scale).round().clamp(1, 2048);
    final ui.PictureRecorder recorder = ui.PictureRecorder();
    final Canvas canvas = Canvas(recorder);
    canvas.scale(scale);
    canvas.drawPicture(picture);
    final ui.Picture scaled = recorder.endRecording();
    final ui.Image image = await scaled.toImage(width, height);
    scaled.dispose();
    _thumbnails.put(pageIndex, image);
    return image;
  } on Object {
    return null;
  }
}