From 0d41cdeebfa71a04afe514b9dee57d8ee6bae490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=B6sche?= Date: Sun, 25 Jan 2026 14:16:28 +0100 Subject: [PATCH] Frontend: unify PDF viewer to use network URL like internal viewer, remove bytes loading hack --- .../lib/pages/public_file_viewer.dart | 71 ++++--------------- 1 file changed, 14 insertions(+), 57 deletions(-) diff --git a/b0esche_cloud/lib/pages/public_file_viewer.dart b/b0esche_cloud/lib/pages/public_file_viewer.dart index 0a0ea6c..cd0cab6 100644 --- a/b0esche_cloud/lib/pages/public_file_viewer.dart +++ b/b0esche_cloud/lib/pages/public_file_viewer.dart @@ -26,7 +26,6 @@ class _PublicFileViewerState extends State { String? _error; Map? _fileData; VideoPlayerController? _videoController; - List? _pdfBytes; String? _videoViewType; @override @@ -51,11 +50,6 @@ class _PublicFileViewerState extends State { _isLoading = false; }); - // Load PDF bytes if it's a PDF file - if (_isPdfFile()) { - await _loadPdfBytes(); - } - // Initialize video player if it's a video file if (_isVideoFile()) { await _initializeVideoPlayer(); @@ -68,28 +62,6 @@ class _PublicFileViewerState extends State { } } - Future _loadPdfBytes() async { - if (_fileData?['viewUrl'] != null) { - try { - final apiClient = getIt(); - // Extract the path from viewUrl and call it directly - final viewUrl = _fileData!['viewUrl'] as String; - final uri = Uri.parse(viewUrl); - final path = uri.path + (uri.query.isNotEmpty ? '?${uri.query}' : ''); - - final bytes = await apiClient.getBytes(path); - setState(() { - _pdfBytes = bytes; - }); - } catch (e) { - // If loading fails, we'll show an error or fallback - setState(() { - _error = 'Failed to load PDF content.'; - }); - } - } - } - Future _initializeVideoPlayer() async { if (!kIsWeb) { // For mobile, use VideoPlayerController @@ -184,35 +156,20 @@ class _PublicFileViewerState extends State { if (viewUrl == null) return const SizedBox(); if (_isPdfFile()) { - if (_pdfBytes != null) { - return Expanded( - child: SfPdfViewer.memory( - Uint8List.fromList(_pdfBytes!), - canShowScrollHead: false, - canShowScrollStatus: false, - enableDoubleTapZooming: true, - enableTextSelection: false, - ), - ); - } else if (_error != null) { - return Expanded( - child: Center( - child: Text( - _error!, - style: TextStyle(color: AppTheme.primaryText), - textAlign: TextAlign.center, - ), - ), - ); - } else { - return const Expanded( - child: Center( - child: CircularProgressIndicator( - valueColor: AlwaysStoppedAnimation(AppTheme.accentColor), - ), - ), - ); - } + return Expanded( + child: SfPdfViewer.network( + viewUrl, + onDocumentLoadFailed: (details) { + setState(() { + _error = 'Failed to load PDF: ${details.description}'; + }); + }, + canShowScrollHead: false, + canShowScrollStatus: false, + enableDoubleTapZooming: true, + enableTextSelection: false, + ), + ); } else if (_isVideoFile()) { if (kIsWeb && _videoViewType != null) { // Use HTML video element for web