Add SfTheme wrapper for PDF viewer and update syncfusion_flutter_core dependency

This commit is contained in:
Leon Bösche
2026-01-16 15:01:51 +01:00
parent b006187320
commit b27cc5eaf0
3 changed files with 44 additions and 22 deletions

View File

@@ -12,6 +12,7 @@ import '../blocs/session/session_state.dart';
import '../services/file_service.dart'; import '../services/file_service.dart';
import '../injection.dart'; import '../injection.dart';
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
import 'package:syncfusion_flutter_core/theme.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
@@ -200,15 +201,25 @@ class _DocumentViewerModalState extends State<DocumentViewerModal> {
if (state is DocumentViewerReady) { if (state is DocumentViewerReady) {
// Handle different file types based on MIME type // Handle different file types based on MIME type
if (state.caps.isPdf) { if (state.caps.isPdf) {
// PDF viewer using SfPdfViewer // PDF viewer using SfPdfViewer, wrapped in SfTheme for custom accent color
return SfPdfViewer.network( return SfTheme(
state.viewUrl.toString(), data: SfThemeData(
headers: {'Authorization': 'Bearer ${state.token}'}, pdfViewerThemeData: SfPdfViewerThemeData(
onDocumentLoadFailed: (details) {}, backgroundColor: AppTheme.primaryBackground,
onDocumentLoaded: (PdfDocumentLoadedDetails details) {}, scrollHeadStyle: PdfScrollHeadStyle(
canShowHyperlinkDialog: false, backgroundColor: AppTheme.accentColor,
onHyperlinkClicked: (details) => ),
_handleHyperlink(details.uri), ),
),
child: SfPdfViewer.network(
state.viewUrl.toString(),
headers: {'Authorization': 'Bearer ${state.token}'},
onDocumentLoadFailed: (details) {},
onDocumentLoaded: (PdfDocumentLoadedDetails details) {},
canShowHyperlinkDialog: false,
onHyperlinkClicked: (details) =>
_handleHyperlink(details.uri),
),
); );
} else if (state.caps.isImage) { } else if (state.caps.isImage) {
// Image viewer // Image viewer
@@ -787,18 +798,28 @@ class _DocumentViewerState extends State<DocumentViewer> {
} }
if (state.caps.isPdf) { if (state.caps.isPdf) {
// PDF viewer using SfPdfViewer // PDF viewer using SfPdfViewer, wrapped in SfTheme for custom accent color
return SfPdfViewer.network( return SfTheme(
state.viewUrl.toString(), data: SfThemeData(
headers: token != null pdfViewerThemeData: SfPdfViewerThemeData(
? {'Authorization': 'Bearer $token'} backgroundColor: AppTheme.primaryBackground,
: {}, scrollHeadStyle: PdfScrollHeadStyle(
onDocumentLoadFailed: (details) {}, backgroundColor: AppTheme.accentColor,
onDocumentLoaded: (PdfDocumentLoadedDetails details) {}, ),
canShowHyperlinkDialog: false, ),
enableHyperlinkNavigation: false, ),
onHyperlinkClicked: (details) => child: SfPdfViewer.network(
_handleHyperlink(details.uri), state.viewUrl.toString(),
headers: token != null
? {'Authorization': 'Bearer $token'}
: {},
onDocumentLoadFailed: (details) {},
onDocumentLoaded: (PdfDocumentLoadedDetails details) {},
canShowHyperlinkDialog: false,
enableHyperlinkNavigation: false,
onHyperlinkClicked: (details) =>
_handleHyperlink(details.uri),
),
); );
} else if (state.caps.isImage) { } else if (state.caps.isImage) {
// Image viewer // Image viewer

View File

@@ -1230,7 +1230,7 @@ packages:
source: hosted source: hosted
version: "0.9.1" version: "0.9.1"
syncfusion_flutter_core: syncfusion_flutter_core:
dependency: transitive dependency: "direct main"
description: description:
name: syncfusion_flutter_core name: syncfusion_flutter_core
sha256: e1fdfcc3ed7e1f040ba95838780b2eb1857e3e5eccb817fbe94ea2b09c35eac4 sha256: e1fdfcc3ed7e1f040ba95838780b2eb1857e3e5eccb817fbe94ea2b09c35eac4

View File

@@ -62,6 +62,7 @@ dependencies:
# Video Playback # Video Playback
video_player: ^2.8.2 video_player: ^2.8.2
syncfusion_flutter_core: ^31.2.18
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: