From f7827b7aeae28eaa77bd0696aa2202add82e1d67 Mon Sep 17 00:00:00 2001 From: MarkiDev Date: Tue, 14 Jul 2026 12:27:38 -0600 Subject: [PATCH] fix(pdfx): evita crash "Infinity or NaN toInt" en PdfViewPinch Cuando el documento cabe exactamente en el viewport (o cuando ambos miden 0 durante el primer frame en Android edge-to-edge / gesture nav), el divisor (_docSize.height - _lastViewSize.height) es 0 y produce NaN/Infinity. Al llegar a .round().toInt() lanza UnsupportedError y el PDF se queda en blanco. Se normaliza rawDocumentProgress a 0.0 cuando es NaN o Infinite antes de aplicar .round(): no hay recorrido pendiente si el documento cabe en pantalla. Basado en el PR #602 de akiller (upstream, sin merge desde nov 2025). Repro: Pixel 10a Android 15/16, pdfx 2.9.2. --- .../pdfx/lib/src/viewer/pinch/pdf_view_pinch.dart | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/pdfx/lib/src/viewer/pinch/pdf_view_pinch.dart b/packages/pdfx/lib/src/viewer/pinch/pdf_view_pinch.dart index 294ddc98..f17ba4b6 100644 --- a/packages/pdfx/lib/src/viewer/pinch/pdf_view_pinch.dart +++ b/packages/pdfx/lib/src/viewer/pinch/pdf_view_pinch.dart @@ -291,9 +291,18 @@ class _PdfViewPinchState extends State -m.row0[3], -m.row1[3], _lastViewSize!.width, _lastViewSize!.height); if (_lastViewSize?.height != null) { - final rawDocumentProgress = + // Cuando el documento cabe exactamente en el viewport (o cuando ambos + // aún miden 0 en el primer frame en Android edge-to-edge), el divisor + // (_docSize.height - _lastViewSize.height) es 0 y produce NaN/Infinity. + // Sin este guard, .round() crashea con "Infinity or NaN toInt" y el + // PDF se queda en blanco. Al normalizar a 0.0 el progreso es + // consistente: no hay recorrido pendiente cuando todo cabe en pantalla. + var rawDocumentProgress = ((exposed.bottom / r - _lastViewSize!.height) / (_docSize!.height - _lastViewSize!.height)); + if (rawDocumentProgress.isNaN || rawDocumentProgress.isInfinite) { + rawDocumentProgress = 0.0; + } const precisionFactor = 10000; _controller._documentProgress = ((rawDocumentProgress * precisionFactor).round() / precisionFactor)