pdf rendering issue fix

This commit is contained in:
Surendiran 2026-02-05 11:33:55 +05:30
parent ab55141a17
commit 038b178a3c
2 changed files with 47 additions and 49 deletions

File diff suppressed because one or more lines are too long

View File

@ -21,7 +21,6 @@ class PolicyPdfViewer extends StatefulWidget {
class _PolicyPdfViewerState extends State<PolicyPdfViewer> {
Uint8List? _pdfBytes;
String? _loadedUrl;
final TransformationController _transformController =
TransformationController();
@ -32,33 +31,41 @@ class _PolicyPdfViewerState extends State<PolicyPdfViewer> {
final ScrollController _scrollController = ScrollController();
Future<void> _loadPdf() async {
if (_pdfBytes != null && _loadedUrl == widget.pdfUrl) return;
final response = await http.get(Uri.parse(widget.pdfUrl!));
if (response.statusCode == 200) {
// setState(() {
_pdfBytes = response.bodyBytes;
_loadedUrl = widget.pdfUrl;
// });
}
@override
void initState() {
super.initState();
_loadPdf();
}
void _applyTransform() {
_transformController.value = Matrix4.identity()..scale(_scale);
Future<void> _loadPdf() async {
if (widget.pdfUrl == null) return;
try {
final response = await http.get(Uri.parse(widget.pdfUrl!));
if (!mounted) return;
if (response.statusCode == 200) {
setState(() {
_pdfBytes = response.bodyBytes; // MUST use setState
});
}
} catch (e) {
debugPrint('PDF load error: $e');
}
}
void _zoomIn() {
setState(() {
_scale = (_scale + 0.2).clamp(_minScale, _maxScale);
_applyTransform();
_transformController.value = Matrix4.identity()..scale(_scale);
});
}
void _zoomOut() {
setState(() {
_scale = (_scale - 0.2).clamp(_minScale, _maxScale);
_applyTransform();
_transformController.value = Matrix4.identity()..scale(_scale);
});
}
@ -69,14 +76,6 @@ class _PolicyPdfViewerState extends State<PolicyPdfViewer> {
});
}
@override
void initState() {
super.initState();
if (widget.pdfUrl != null) {
_loadPdf();
}
}
@override
Widget build(BuildContext context) {
if (_pdfBytes == null) {
@ -89,37 +88,36 @@ class _PolicyPdfViewerState extends State<PolicyPdfViewer> {
children: [
InteractiveViewer(
transformationController: _transformController,
panEnabled: isZoomed, // 👈 ONLY pan when zoomed
scaleEnabled: false, // zoom via buttons only
panEnabled: isZoomed,
scaleEnabled: false,
boundaryMargin: const EdgeInsets.all(200),
minScale: _minScale,
maxScale: _maxScale,
child: SingleChildScrollView(
controller: _scrollController,
physics: isZoomed
? const NeverScrollableScrollPhysics() // no scroll when zoomed
: const BouncingScrollPhysics(), // normal scroll
child: PdfDocumentLoader.openData(
_pdfBytes!,
documentBuilder: (context, pdfDocument, pageCount) {
return Column(
children: List.generate(
pageCount,
(index) => Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: PdfPageView(
pdfDocument: pdfDocument,
pageNumber: index + 1,
),
child: PdfDocumentLoader.openData(
_pdfBytes!,
documentBuilder: (context, pdfDocument, pageCount) {
return ListView.builder(
controller: _scrollController,
physics: isZoomed
? const NeverScrollableScrollPhysics()
: const BouncingScrollPhysics(),
itemCount: pageCount,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: PdfPageView(
pdfDocument: pdfDocument,
pageNumber: index + 1,
// renderQuality: PdfPageRenderQuality.medium, // performance
),
),
);
},
),
);
},
);
},
),
),
// Zoom buttons
// Zoom Controls
Positioned(
right: 16,
top: 16,
@ -154,6 +152,7 @@ class _PolicyPdfViewerState extends State<PolicyPdfViewer> {
}
}
//scroll zoom code
// import 'package:dropdown_search/dropdown_search.dart';
// import 'package:flutter/gestures.dart';
@ -336,4 +335,4 @@ class _PolicyPdfViewerState extends State<PolicyPdfViewer> {
// },
// );
// }
// }
// }