pdf rendering issue fix
This commit is contained in:
parent
ab55141a17
commit
038b178a3c
File diff suppressed because one or more lines are too long
@ -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> {
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
Loading…
Reference in New Issue
Block a user