From 7336ca4d5780be2973fc9917a6af96cbc86a21a4 Mon Sep 17 00:00:00 2001 From: insleker Date: Fri, 12 Sep 2025 12:29:23 +0800 Subject: [PATCH] fix: thumbnail not shown actualy pdf page --- integration_test/export_flow_test.dart | 51 +++---- integration_test/pdf_view_test.dart | 37 +++--- .../repositories/document_repository.dart | 1 - .../pdf_providers.dart | 0 .../pdf/view_model/pdf_view_model.dart | 2 +- .../features/pdf/widgets/pages_sidebar.dart | 4 +- .../pdf/widgets/pdf_mock_continuous_list.dart | 2 +- .../features/pdf/widgets/pdf_page_area.dart | 4 +- .../pdf/widgets/pdf_page_overlays.dart | 2 +- .../pdf/widgets/pdf_pages_overview.dart | 115 +++++++++------- lib/ui/features/pdf/widgets/pdf_screen.dart | 10 +- lib/ui/features/pdf/widgets/pdf_toolbar.dart | 2 +- .../pdf/widgets/pdf_viewer_widget.dart | 124 ++++++------------ .../pdf/widgets/signature_drawer.dart | 2 +- .../features/pdf/widgets/thumbnails_view.dart | 86 ++++++++++++ .../view_model/welcome_view_model.dart | 2 +- test/features/_test_helper.dart | 2 +- ...ains_at_least_one_signature_placement.dart | 2 +- ...ced_signature_placements_across_pages.dart | 2 +- ...n_with_no_signature_placements_placed.dart | 2 +- .../step/a_multipage_document_is_open.dart | 6 +- ...ultipage_document5_pages_is_available.dart | 2 +- ...signature_asset_is_placed_on_the_page.dart | 2 +- test/features/step/page_is_displayed.dart | 2 +- test/features/step/the_app_launches.dart | 2 +- .../step/the_last_page_is_displayed_page.dart | 2 +- ...he_user_clicks_the_go_to_apply_button.dart | 2 +- ...he_user_clicks_the_thumbnail_for_page.dart | 2 +- ...in_multiple_locations_in_the_document.dart | 2 +- ...cument_to_place_a_signature_placement.dart | 2 +- ...s_into_the_go_to_input_and_applies_it.dart | 2 +- .../features/step/the_user_jumps_to_page.dart | 2 +- ...nd_places_another_signature_placement.dart | 2 +- ...in_multiple_locations_in_the_document.dart | 2 +- test/features/step/the_user_selects.dart | 4 +- ...nto_the_go_to_input_and_presses_enter.dart | 2 +- ...ements_are_placed_on_the_current_page.dart | 4 +- test/widget/export_flow_test.dart | 9 +- test/widget/helpers.dart | 2 +- test/widget/pdf_navigation_widget_test.dart | 2 +- .../widget/pdf_page_area_early_jump_test.dart | 2 +- test/widget/pdf_page_area_jump_test.dart | 2 +- test/widget/pdf_page_area_test.dart | 2 +- 43 files changed, 276 insertions(+), 237 deletions(-) rename lib/ui/features/pdf/{widgets => view_model}/pdf_providers.dart (100%) create mode 100644 lib/ui/features/pdf/widgets/thumbnails_view.dart diff --git a/integration_test/export_flow_test.dart b/integration_test/export_flow_test.dart index 1106593..b44224c 100644 --- a/integration_test/export_flow_test.dart +++ b/integration_test/export_flow_test.dart @@ -13,7 +13,7 @@ import 'package:pdf_signature/data/repositories/signature_card_repository.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/domain/models/model.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/ui_services.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pages_sidebar.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart'; @@ -48,11 +48,7 @@ void main() { (ref) => PreferencesStateNotifier(prefs), ), documentRepositoryProvider.overrideWith( - (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - ), + (ref) => DocumentStateNotifier()..openPicked(pageCount: 3), ), useMockViewerProvider.overrideWith((ref) => false), exportServiceProvider.overrideWith((_) => fake), @@ -110,11 +106,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), signatureAssetRepositoryProvider.overrideWith((ref) { final c = SignatureAssetRepository(); @@ -196,11 +189,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], @@ -239,11 +229,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], @@ -285,11 +272,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], @@ -305,6 +289,14 @@ void main() { final ctx = tester.element(find.byType(PdfSignatureHomePage)); final container = ProviderScope.containerOf(ctx); expect(container.read(pdfViewModelProvider), 1); + + final pagesSidebar = find.byType(PagesSidebar); + expect(pagesSidebar, findsOneWidget); + + // Scroll to make page 3 thumbnail visible + await tester.drag(pagesSidebar, const Offset(0, -300)); + await tester.pumpAndSettle(); + final page3Thumb = find.text('3'); expect(page3Thumb, findsOneWidget); await tester.tap(page3Thumb); @@ -326,11 +318,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], diff --git a/integration_test/pdf_view_test.dart b/integration_test/pdf_view_test.dart index 1873ba3..a5c9be1 100644 --- a/integration_test/pdf_view_test.dart +++ b/integration_test/pdf_view_test.dart @@ -6,7 +6,7 @@ import 'dart:io'; import 'package:flutter/services.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pages_sidebar.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -34,11 +34,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], @@ -85,11 +82,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], @@ -136,11 +130,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], @@ -159,6 +150,13 @@ void main() { final container = ProviderScope.containerOf(ctx); expect(container.read(pdfViewModelProvider), 1); + final pagesSidebar = find.byType(PagesSidebar); + expect(pagesSidebar, findsOneWidget); + + // Scroll to make page 3 thumbnail visible + await tester.drag(pagesSidebar, const Offset(0, -300)); + await tester.pumpAndSettle(); + final page3Thumbnail = find.text('3'); expect(page3Thumbnail, findsOneWidget); await tester.tap(page3Thumbnail); @@ -181,11 +179,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'integration_test/data/sample-local-pdf.pdf', - pageCount: 3, - bytes: pdfBytes, - ), + DocumentStateNotifier() + ..openPicked(pageCount: 3, bytes: pdfBytes), ), useMockViewerProvider.overrideWithValue(false), ], diff --git a/lib/data/repositories/document_repository.dart b/lib/data/repositories/document_repository.dart index 174491a..225f08d 100644 --- a/lib/data/repositories/document_repository.dart +++ b/lib/data/repositories/document_repository.dart @@ -16,7 +16,6 @@ class DocumentStateNotifier extends StateNotifier { } void openPicked({ - required String path, required int pageCount, Uint8List? bytes, }) { diff --git a/lib/ui/features/pdf/widgets/pdf_providers.dart b/lib/ui/features/pdf/view_model/pdf_providers.dart similarity index 100% rename from lib/ui/features/pdf/widgets/pdf_providers.dart rename to lib/ui/features/pdf/view_model/pdf_providers.dart diff --git a/lib/ui/features/pdf/view_model/pdf_view_model.dart b/lib/ui/features/pdf/view_model/pdf_view_model.dart index 78711b3..457fc21 100644 --- a/lib/ui/features/pdf/view_model/pdf_view_model.dart +++ b/lib/ui/features/pdf/view_model/pdf_view_model.dart @@ -29,7 +29,7 @@ class PdfViewModel extends StateNotifier { } ref .read(documentRepositoryProvider.notifier) - .openPicked(path: path, pageCount: pageCount, bytes: bytes); + .openPicked(pageCount: pageCount, bytes: bytes); ref.read(signatureCardRepositoryProvider.notifier).clearAll(); state = 1; // Reset current page to 1 } diff --git a/lib/ui/features/pdf/widgets/pages_sidebar.dart b/lib/ui/features/pdf/widgets/pages_sidebar.dart index 5da2e20..8cc3380 100644 --- a/lib/ui/features/pdf/widgets/pages_sidebar.dart +++ b/lib/ui/features/pdf/widgets/pages_sidebar.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'pdf_pages_overview.dart'; +import 'thumbnails_view.dart'; class PagesSidebar extends StatelessWidget { const PagesSidebar({super.key}); @override Widget build(BuildContext context) { - return Card(margin: EdgeInsets.zero, child: const PdfPagesOverview()); + return Card(margin: EdgeInsets.zero, child: const ThumbnailsView()); } } diff --git a/lib/ui/features/pdf/widgets/pdf_mock_continuous_list.dart b/lib/ui/features/pdf/widgets/pdf_mock_continuous_list.dart index 92a0615..2fd7199 100644 --- a/lib/ui/features/pdf/widgets/pdf_mock_continuous_list.dart +++ b/lib/ui/features/pdf/widgets/pdf_mock_continuous_list.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/l10n/app_localizations.dart'; import 'pdf_page_overlays.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; import 'package:pdf_signature/data/repositories/signature_asset_repository.dart'; // using only adjusted overlay, no direct model imports needed import '../../signature/widgets/signature_drag_data.dart'; diff --git a/lib/ui/features/pdf/widgets/pdf_page_area.dart b/lib/ui/features/pdf/widgets/pdf_page_area.dart index 25608aa..a333b05 100644 --- a/lib/ui/features/pdf/widgets/pdf_page_area.dart +++ b/lib/ui/features/pdf/widgets/pdf_page_area.dart @@ -6,7 +6,7 @@ import 'package:pdf_signature/l10n/app_localizations.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'pdf_viewer_widget.dart'; import '../view_model/pdf_view_model.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; class PdfPageArea extends ConsumerStatefulWidget { const PdfPageArea({ @@ -159,6 +159,7 @@ class _PdfPageAreaState extends ConsumerState { // Use real PDF viewer if (isContinuous) { + final controller = ref.watch(pdfViewerControllerProvider); return PdfViewerWidget( pageSize: widget.pageSize, onDragSignature: widget.onDragSignature, @@ -168,6 +169,7 @@ class _PdfPageAreaState extends ConsumerState { onSelectPlaced: widget.onSelectPlaced, pageKeyBuilder: _pageKey, scrollToPage: _scrollToPage, + controller: controller, ); } return const SizedBox.shrink(); diff --git a/lib/ui/features/pdf/widgets/pdf_page_overlays.dart b/lib/ui/features/pdf/widgets/pdf_page_overlays.dart index 0ce2890..05b1af8 100644 --- a/lib/ui/features/pdf/widgets/pdf_page_overlays.dart +++ b/lib/ui/features/pdf/widgets/pdf_page_overlays.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../domain/models/model.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'signature_overlay.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; /// Builds all overlays for a given page: placed signatures and the active one. class PdfPageOverlays extends ConsumerWidget { diff --git a/lib/ui/features/pdf/widgets/pdf_pages_overview.dart b/lib/ui/features/pdf/widgets/pdf_pages_overview.dart index 03b83d7..0473d32 100644 --- a/lib/ui/features/pdf/widgets/pdf_pages_overview.dart +++ b/lib/ui/features/pdf/widgets/pdf_pages_overview.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:pdfrx/pdfrx.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; class PdfPagesOverview extends ConsumerWidget { const PdfPagesOverview({super.key}); @@ -9,59 +10,77 @@ class PdfPagesOverview extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final pdf = ref.watch(documentRepositoryProvider); - ref.watch(useMockViewerProvider); + final controller = ref.watch(pdfViewerControllerProvider); final theme = Theme.of(context); - if (!pdf.loaded) return const SizedBox.shrink(); + if (!pdf.loaded || pdf.pickedPdfBytes == null) + return const SizedBox.shrink(); - Widget buildList(int pageCount, {Widget Function(int i)? item}) { - return ListView.separated( - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), - itemCount: pageCount, - separatorBuilder: (_, _) => const SizedBox(height: 8), - itemBuilder: (context, index) { - final pageNumber = index + 1; - final isSelected = ref.watch(currentPageProvider) == pageNumber; - return InkWell( - onTap: () { - final controller = ref.read(pdfViewerControllerProvider); - if (controller.isReady) - controller.goToPage(pageNumber: pageNumber); - }, - child: DecoratedBox( - decoration: BoxDecoration( - color: - isSelected - ? theme.colorScheme.primaryContainer - : theme.cardColor, - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: - isSelected - ? theme.colorScheme.primary - : theme.dividerColor, - ), - ), - child: Padding( - padding: const EdgeInsets.all(6), - child: AspectRatio( - aspectRatio: 1 / 1.4142, // A4 portrait approx - child: ClipRRect( - borderRadius: BorderRadius.circular(4), - child: - item != null - ? item(index) - : Center(child: Text('$pageNumber')), + final documentRef = PdfDocumentRefData( + pdf.pickedPdfBytes!, + sourceName: 'document.pdf', + ); + + return Container( + color: theme.colorScheme.surface, + child: PdfDocumentViewBuilder( + documentRef: documentRef, + builder: (context, document) { + final pageCount = document?.pages.length ?? 0; + return ListView.separated( + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), + itemCount: pageCount, + separatorBuilder: (_, _) => const SizedBox(height: 8), + itemBuilder: (context, index) { + final pageNumber = index + 1; + final isSelected = ref.watch(currentPageProvider) == pageNumber; + return InkWell( + onTap: () { + controller.goToPage( + pageNumber: pageNumber, + anchor: PdfPageAnchor.top, + ); + }, + child: DecoratedBox( + decoration: BoxDecoration( + color: + isSelected + ? theme.colorScheme.primaryContainer + : theme.cardColor, + borderRadius: BorderRadius.circular(8), + border: Border.all( + color: + isSelected + ? theme.colorScheme.primary + : theme.dividerColor, + ), + ), + child: Padding( + padding: const EdgeInsets.all(6), + child: Column( + children: [ + SizedBox( + height: 180, + child: ClipRRect( + borderRadius: BorderRadius.circular(4), + child: PdfPageView( + document: document, + pageNumber: pageNumber, + alignment: Alignment.center, + ), + ), + ), + const SizedBox(height: 4), + Text('$pageNumber', style: theme.textTheme.bodySmall), + ], + ), ), ), - ), - ), + ); + }, ); }, - ); - } - - final count = pdf.pageCount == 0 ? 1 : pdf.pageCount; - return buildList(count); + ), + ); } } diff --git a/lib/ui/features/pdf/widgets/pdf_screen.dart b/lib/ui/features/pdf/widgets/pdf_screen.dart index cc2f754..69a2d1c 100644 --- a/lib/ui/features/pdf/widgets/pdf_screen.dart +++ b/lib/ui/features/pdf/widgets/pdf_screen.dart @@ -8,7 +8,7 @@ import 'package:pdf_signature/l10n/app_localizations.dart'; import 'package:multi_split_view/multi_split_view.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; import 'package:pdfrx/pdfrx.dart'; import 'draw_canvas.dart'; import 'pdf_toolbar.dart'; @@ -31,6 +31,7 @@ class _PdfSignatureHomePageState extends ConsumerState { bool _showPagesSidebar = true; bool _showSignaturesSidebar = true; int _zoomLevel = 100; // percentage for display only + fs.XFile _file = fs.XFile(''); // Split view controller to manage resizable sidebars without remounting the center area. late final MultiSplitViewController _splitController; @@ -57,6 +58,9 @@ class _PdfSignatureHomePageState extends ConsumerState { final typeGroup = const fs.XTypeGroup(label: 'PDF', extensions: ['pdf']); final file = await fs.openFile(acceptedTypeGroups: [typeGroup]); if (file != null) { + setState(() { + _file = file; + }); Uint8List? bytes; try { bytes = await file.readAsBytes(); @@ -75,7 +79,7 @@ class _PdfSignatureHomePageState extends ConsumerState { } ref .read(documentRepositoryProvider.notifier) - .openPicked(path: file.path, pageCount: pageCount, bytes: bytes); + .openPicked(pageCount: pageCount, bytes: bytes); } } @@ -331,7 +335,7 @@ class _PdfSignatureHomePageState extends ConsumerState { }); }, zoomLevel: _zoomLevel, - fileName: 'mock.pdf', + fileName: _file.name, showPagesSidebar: _showPagesSidebar, showSignaturesSidebar: _showSignaturesSidebar, onTogglePagesSidebar: diff --git a/lib/ui/features/pdf/widgets/pdf_toolbar.dart b/lib/ui/features/pdf/widgets/pdf_toolbar.dart index 9167a52..a8350f7 100644 --- a/lib/ui/features/pdf/widgets/pdf_toolbar.dart +++ b/lib/ui/features/pdf/widgets/pdf_toolbar.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/l10n/app_localizations.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; class PdfToolbar extends ConsumerStatefulWidget { const PdfToolbar({ diff --git a/lib/ui/features/pdf/widgets/pdf_viewer_widget.dart b/lib/ui/features/pdf/widgets/pdf_viewer_widget.dart index 58c2578..4b2fe92 100644 --- a/lib/ui/features/pdf/widgets/pdf_viewer_widget.dart +++ b/lib/ui/features/pdf/widgets/pdf_viewer_widget.dart @@ -5,8 +5,8 @@ import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/l10n/app_localizations.dart'; import 'pdf_page_overlays.dart'; import './pdf_mock_continuous_list.dart'; -import '../../signature/widgets/signature_drag_data.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; +import '../view_model/pdf_view_model.dart'; class PdfViewerWidget extends ConsumerStatefulWidget { const PdfViewerWidget({ @@ -19,6 +19,7 @@ class PdfViewerWidget extends ConsumerStatefulWidget { required this.onSelectPlaced, this.pageKeyBuilder, this.scrollToPage, + required this.controller, }); final Size pageSize; @@ -29,22 +30,21 @@ class PdfViewerWidget extends ConsumerStatefulWidget { final ValueChanged onSelectPlaced; final GlobalKey Function(int page)? pageKeyBuilder; final void Function(int page)? scrollToPage; + final PdfViewerController controller; @override ConsumerState createState() => _PdfViewerWidgetState(); } class _PdfViewerWidgetState extends ConsumerState { - PdfViewerController? _controller; PdfDocumentRef? _documentRef; // Public getter for testing the actual viewer page - int? get viewerCurrentPage => _controller?.pageNumber; + int? get viewerCurrentPage => widget.controller.pageNumber; @override void initState() { super.initState(); - _controller = PdfViewerController(); } @override @@ -99,86 +99,40 @@ class _PdfViewerWidgetState extends ConsumerState { ); } - return Stack( - children: [ - PdfViewer( - _documentRef!, - key: const Key( - 'pdf_continuous_mock_list', - ), // Keep the same key for test compatibility - controller: _controller, - params: PdfViewerParams( - onViewerReady: (document, controller) { - // Update page count in repository - ref - .read(documentRepositoryProvider.notifier) - .setPageCount(document.pages.length); - }, - onPageChanged: (page) { - if (page != null) { - ref.read(currentPageProvider.notifier).state = page; - } - }, - ), - ), - // Drag target for dropping signatures - Positioned.fill( - child: DragTarget( - onAcceptWithDetails: (details) { - final dragData = details.data; - - // For real PDF viewer, we need to calculate which page was dropped on - // This is a simplified implementation - in a real app you'd need to - // determine the exact page and position within that page - final currentPage = ref.read(currentPageProvider); - - // Create a default rect for the signature (can be adjusted later) - final rect = const Rect.fromLTWH(0.1, 0.1, 0.2, 0.1); - - // Add placement to the document - ref - .read(documentRepositoryProvider.notifier) - .addPlacement( - page: currentPage, - rect: rect, - asset: dragData.card?.asset, - rotationDeg: dragData.card?.rotationDeg ?? 0.0, - graphicAdjust: dragData.card?.graphicAdjust, - ); - }, - builder: (context, candidateData, rejectedData) { - return Container( - color: - candidateData.isNotEmpty - ? Colors.blue.withOpacity(0.1) - : Colors.transparent, - ); - }, - ), - ), - // Add signature overlays on top - Positioned.fill( - child: Consumer( - builder: (context, ref, _) { - final visible = ref.watch(signatureVisibilityProvider); - if (!visible) return const SizedBox.shrink(); - - // For now, just add a simple overlay for the first page - // This is a simplified version - in a real implementation you'd need - // to handle overlays for each page properly - return PdfPageOverlays( - pageSize: widget.pageSize, - pageNumber: ref.watch(currentPageProvider), - onDragSignature: widget.onDragSignature, - onResizeSignature: widget.onResizeSignature, - onConfirmSignature: widget.onConfirmSignature, - onClearActiveOverlay: widget.onClearActiveOverlay, - onSelectPlaced: widget.onSelectPlaced, - ); - }, - ), - ), - ], + return PdfViewer( + _documentRef!, + key: const Key( + 'pdf_continuous_mock_list', + ), // Keep the same key for test compatibility + controller: widget.controller, + params: PdfViewerParams( + onViewerReady: (document, controller) { + // Update page count in repository + ref + .read(documentRepositoryProvider.notifier) + .setPageCount(document.pages.length); + }, + onPageChanged: (page) { + if (page != null) { + ref.read(currentPageProvider.notifier).state = page; + // Also update the view model to keep them in sync + ref.read(pdfViewModelProvider.notifier).jumpToPage(page); + } + }, + viewerOverlayBuilder: (context, size, handle) { + return [ + PdfPageOverlays( + pageSize: widget.pageSize, + pageNumber: ref.watch(currentPageProvider), + onDragSignature: widget.onDragSignature, + onResizeSignature: widget.onResizeSignature, + onConfirmSignature: widget.onConfirmSignature, + onClearActiveOverlay: widget.onClearActiveOverlay, + onSelectPlaced: widget.onSelectPlaced, + ), + ]; + }, + ), ); } } diff --git a/lib/ui/features/pdf/widgets/signature_drawer.dart b/lib/ui/features/pdf/widgets/signature_drawer.dart index 26b7925..74502d6 100644 --- a/lib/ui/features/pdf/widgets/signature_drawer.dart +++ b/lib/ui/features/pdf/widgets/signature_drawer.dart @@ -8,7 +8,7 @@ import 'package:pdf_signature/data/repositories/signature_asset_repository.dart' import 'package:pdf_signature/data/repositories/signature_card_repository.dart'; import 'image_editor_dialog.dart'; import '../../signature/widgets/signature_card.dart'; -import 'pdf_providers.dart'; +import '../view_model/pdf_providers.dart'; /// Data for drag-and-drop is in signature_drag_data.dart diff --git a/lib/ui/features/pdf/widgets/thumbnails_view.dart b/lib/ui/features/pdf/widgets/thumbnails_view.dart new file mode 100644 index 0000000..d23041f --- /dev/null +++ b/lib/ui/features/pdf/widgets/thumbnails_view.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:pdfrx/pdfrx.dart'; +import 'package:pdf_signature/data/repositories/document_repository.dart'; +import '../view_model/pdf_providers.dart'; + +class ThumbnailsView extends ConsumerWidget { + const ThumbnailsView({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final pdf = ref.watch(documentRepositoryProvider); + final controller = ref.watch(pdfViewerControllerProvider); + final theme = Theme.of(context); + + if (!pdf.loaded || pdf.pickedPdfBytes == null) + return const SizedBox.shrink(); + + final documentRef = PdfDocumentRefData( + pdf.pickedPdfBytes!, + sourceName: 'document.pdf', + ); + + return Container( + color: theme.colorScheme.surface, + child: PdfDocumentViewBuilder( + documentRef: documentRef, + builder: (context, document) { + final pageCount = document?.pages.length ?? 0; + return ListView.separated( + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), + itemCount: pageCount, + separatorBuilder: (_, _) => const SizedBox(height: 8), + itemBuilder: (context, index) { + final pageNumber = index + 1; + final isSelected = ref.watch(currentPageProvider) == pageNumber; + return InkWell( + onTap: () { + controller.goToPage( + pageNumber: pageNumber, + anchor: PdfPageAnchor.top, + ); + }, + child: DecoratedBox( + decoration: BoxDecoration( + color: + isSelected + ? theme.colorScheme.primaryContainer + : theme.cardColor, + borderRadius: BorderRadius.circular(8), + border: Border.all( + color: + isSelected + ? theme.colorScheme.primary + : theme.dividerColor, + ), + ), + child: Padding( + padding: const EdgeInsets.all(6), + child: Column( + children: [ + SizedBox( + height: 180, + child: ClipRRect( + borderRadius: BorderRadius.circular(4), + child: PdfPageView( + document: document, + pageNumber: pageNumber, + alignment: Alignment.center, + ), + ), + ), + const SizedBox(height: 4), + Text('$pageNumber', style: theme.textTheme.bodySmall), + ], + ), + ), + ), + ); + }, + ); + }, + ), + ); + } +} diff --git a/lib/ui/features/welcome/view_model/welcome_view_model.dart b/lib/ui/features/welcome/view_model/welcome_view_model.dart index bed60b7..76acbd7 100644 --- a/lib/ui/features/welcome/view_model/welcome_view_model.dart +++ b/lib/ui/features/welcome/view_model/welcome_view_model.dart @@ -21,7 +21,7 @@ class WelcomeViewModel { } ref .read(documentRepositoryProvider.notifier) - .openPicked(path: path, pageCount: pageCount, bytes: bytes); + .openPicked(pageCount: pageCount, bytes: bytes); ref.read(signatureCardRepositoryProvider.notifier).clearAll(); } } diff --git a/test/features/_test_helper.dart b/test/features/_test_helper.dart index f98d9d2..fd1cc9b 100644 --- a/test/features/_test_helper.dart +++ b/test/features/_test_helper.dart @@ -6,7 +6,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:pdf_signature/app.dart'; import 'package:pdf_signature/data/repositories/preferences_repository.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/ui_services.dart'; import 'package:pdf_signature/data/services/export_service.dart'; import 'package:pdf_signature/domain/models/model.dart'; diff --git a/test/features/step/a_document_is_open_and_contains_at_least_one_signature_placement.dart b/test/features/step/a_document_is_open_and_contains_at_least_one_signature_placement.dart index c98ecc1..58ed31e 100644 --- a/test/features/step/a_document_is_open_and_contains_at_least_one_signature_placement.dart +++ b/test/features/step/a_document_is_open_and_contains_at_least_one_signature_placement.dart @@ -14,7 +14,7 @@ Future aDocumentIsOpenAndContainsAtLeastOneSignaturePlacement( TestWorld.container = container; container .read(documentRepositoryProvider.notifier) - .openPicked(path: 'test.pdf', pageCount: 5); + .openPicked(pageCount: 5); container .read(documentRepositoryProvider.notifier) .addPlacement( diff --git a/test/features/step/a_document_is_open_and_contains_multiple_placed_signature_placements_across_pages.dart b/test/features/step/a_document_is_open_and_contains_multiple_placed_signature_placements_across_pages.dart index 32379e9..99aa05f 100644 --- a/test/features/step/a_document_is_open_and_contains_multiple_placed_signature_placements_across_pages.dart +++ b/test/features/step/a_document_is_open_and_contains_multiple_placed_signature_placements_across_pages.dart @@ -15,7 +15,7 @@ aDocumentIsOpenAndContainsMultiplePlacedSignaturePlacementsAcrossPages( TestWorld.container = container; container .read(documentRepositoryProvider.notifier) - .openPicked(path: 'multi.pdf', pageCount: 5); + .openPicked(pageCount: 5); container .read(documentRepositoryProvider.notifier) .addPlacement( diff --git a/test/features/step/a_document_is_open_with_no_signature_placements_placed.dart b/test/features/step/a_document_is_open_with_no_signature_placements_placed.dart index ddc140e..8ccccff 100644 --- a/test/features/step/a_document_is_open_with_no_signature_placements_placed.dart +++ b/test/features/step/a_document_is_open_with_no_signature_placements_placed.dart @@ -11,6 +11,6 @@ Future aDocumentIsOpenWithNoSignaturePlacementsPlaced( TestWorld.container = container; container .read(documentRepositoryProvider.notifier) - .openPicked(path: 'empty.pdf', pageCount: 5); + .openPicked(pageCount: 5); // No placements added } diff --git a/test/features/step/a_multipage_document_is_open.dart b/test/features/step/a_multipage_document_is_open.dart index 2f45765..7bdfab1 100644 --- a/test/features/step/a_multipage_document_is_open.dart +++ b/test/features/step/a_multipage_document_is_open.dart @@ -4,7 +4,7 @@ import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/data/repositories/signature_card_repository.dart'; import 'package:pdf_signature/data/repositories/signature_asset_repository.dart'; import 'package:pdf_signature/domain/models/model.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; @@ -18,9 +18,7 @@ Future aMultipageDocumentIsOpen(WidgetTester tester) async { container.read(signatureCardRepositoryProvider.notifier).state = [ SignatureCard.initial(), ]; - container - .read(documentRepositoryProvider.notifier) - .openPicked(path: 'mock.pdf', pageCount: 5); + container.read(documentRepositoryProvider.notifier).openPicked(pageCount: 5); // Reset page state providers try { container.read(currentPageProvider.notifier).state = 1; diff --git a/test/features/step/a_sample_multipage_document5_pages_is_available.dart b/test/features/step/a_sample_multipage_document5_pages_is_available.dart index a436b43..29660f2 100644 --- a/test/features/step/a_sample_multipage_document5_pages_is_available.dart +++ b/test/features/step/a_sample_multipage_document5_pages_is_available.dart @@ -11,5 +11,5 @@ Future aSampleMultipageDocument5PagesIsAvailable( TestWorld.container = container; container .read(documentRepositoryProvider.notifier) - .openPicked(path: 'sample.pdf', pageCount: 5); + .openPicked(pageCount: 5); } diff --git a/test/features/step/a_signature_asset_is_placed_on_the_page.dart b/test/features/step/a_signature_asset_is_placed_on_the_page.dart index 11a1810..ec85fc6 100644 --- a/test/features/step/a_signature_asset_is_placed_on_the_page.dart +++ b/test/features/step/a_signature_asset_is_placed_on_the_page.dart @@ -17,7 +17,7 @@ Future aSignatureAssetIsPlacedOnThePage(WidgetTester tester) async { if (!container.read(documentRepositoryProvider).loaded) { container .read(documentRepositoryProvider.notifier) - .openPicked(path: 'mock.pdf', pageCount: 5); + .openPicked(pageCount: 5); } // Get or create an asset diff --git a/test/features/step/page_is_displayed.dart b/test/features/step/page_is_displayed.dart index e87fe78..80921b0 100644 --- a/test/features/step/page_is_displayed.dart +++ b/test/features/step/page_is_displayed.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; diff --git a/test/features/step/the_app_launches.dart b/test/features/step/the_app_launches.dart index 99980b5..153421c 100644 --- a/test/features/step/the_app_launches.dart +++ b/test/features/step/the_app_launches.dart @@ -7,7 +7,7 @@ import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/data/repositories/signature_asset_repository.dart'; import 'package:pdf_signature/data/repositories/signature_card_repository.dart'; import 'package:pdf_signature/domain/models/model.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import '_world.dart'; class _BridgedSignatureCardStateNotifier extends SignatureCardStateNotifier { diff --git a/test/features/step/the_last_page_is_displayed_page.dart b/test/features/step/the_last_page_is_displayed_page.dart index a48cd9a..82eac65 100644 --- a/test/features/step/the_last_page_is_displayed_page.dart +++ b/test/features/step/the_last_page_is_displayed_page.dart @@ -2,7 +2,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import '_world.dart'; /// Usage: the last page is displayed (page {5}) diff --git a/test/features/step/the_user_clicks_the_go_to_apply_button.dart b/test/features/step/the_user_clicks_the_go_to_apply_button.dart index 9f90057..d0540fd 100644 --- a/test/features/step/the_user_clicks_the_go_to_apply_button.dart +++ b/test/features/step/the_user_clicks_the_go_to_apply_button.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; diff --git a/test/features/step/the_user_clicks_the_thumbnail_for_page.dart b/test/features/step/the_user_clicks_the_thumbnail_for_page.dart index 59e9f1b..7d56eb4 100644 --- a/test/features/step/the_user_clicks_the_thumbnail_for_page.dart +++ b/test/features/step/the_user_clicks_the_thumbnail_for_page.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; diff --git a/test/features/step/the_user_drags_it_on_the_page_of_the_document_to_place_signature_placements_in_multiple_locations_in_the_document.dart b/test/features/step/the_user_drags_it_on_the_page_of_the_document_to_place_signature_placements_in_multiple_locations_in_the_document.dart index b78bbe8..a5eda2c 100644 --- a/test/features/step/the_user_drags_it_on_the_page_of_the_document_to_place_signature_placements_in_multiple_locations_in_the_document.dart +++ b/test/features/step/the_user_drags_it_on_the_page_of_the_document_to_place_signature_placements_in_multiple_locations_in_the_document.dart @@ -22,7 +22,7 @@ theUserDragsItOnThePageOfTheDocumentToPlaceSignaturePlacementsInMultipleLocation if (!container.read(documentRepositoryProvider).loaded) { container .read(documentRepositoryProvider.notifier) - .openPicked(path: 'mock.pdf', pageCount: 5); + .openPicked(pageCount: 5); } container diff --git a/test/features/step/the_user_drags_this_signature_card_on_the_page_of_the_document_to_place_a_signature_placement.dart b/test/features/step/the_user_drags_this_signature_card_on_the_page_of_the_document_to_place_a_signature_placement.dart index 10a0dbf..96e55df 100644 --- a/test/features/step/the_user_drags_this_signature_card_on_the_page_of_the_document_to_place_a_signature_placement.dart +++ b/test/features/step/the_user_drags_this_signature_card_on_the_page_of_the_document_to_place_a_signature_placement.dart @@ -21,7 +21,7 @@ theUserDragsThisSignatureCardOnThePageOfTheDocumentToPlaceASignaturePlacement( if (!container.read(documentRepositoryProvider).loaded) { container .read(documentRepositoryProvider.notifier) - .openPicked(path: 'mock.pdf', pageCount: 5); + .openPicked(pageCount: 5); } // Get or create an asset diff --git a/test/features/step/the_user_enters_into_the_go_to_input_and_applies_it.dart b/test/features/step/the_user_enters_into_the_go_to_input_and_applies_it.dart index ced06b8..1bbfa53 100644 --- a/test/features/step/the_user_enters_into_the_go_to_input_and_applies_it.dart +++ b/test/features/step/the_user_enters_into_the_go_to_input_and_applies_it.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; diff --git a/test/features/step/the_user_jumps_to_page.dart b/test/features/step/the_user_jumps_to_page.dart index a838f18..ba6c97d 100644 --- a/test/features/step/the_user_jumps_to_page.dart +++ b/test/features/step/the_user_jumps_to_page.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; diff --git a/test/features/step/the_user_navigates_to_page_and_places_another_signature_placement.dart b/test/features/step/the_user_navigates_to_page_and_places_another_signature_placement.dart index 4b304d2..e42fdc3 100644 --- a/test/features/step/the_user_navigates_to_page_and_places_another_signature_placement.dart +++ b/test/features/step/the_user_navigates_to_page_and_places_another_signature_placement.dart @@ -4,7 +4,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/domain/models/model.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; diff --git a/test/features/step/the_user_places_it_in_multiple_locations_in_the_document.dart b/test/features/step/the_user_places_it_in_multiple_locations_in_the_document.dart index 8d19226..b48c7cf 100644 --- a/test/features/step/the_user_places_it_in_multiple_locations_in_the_document.dart +++ b/test/features/step/the_user_places_it_in_multiple_locations_in_the_document.dart @@ -12,7 +12,7 @@ Future theUserPlacesItInMultipleLocationsInTheDocument( TestWorld.container = container; final notifier = container.read(documentRepositoryProvider.notifier); // Always open a fresh doc to avoid state bleed between scenarios - notifier.openPicked(path: 'mock.pdf', pageCount: 6); + notifier.openPicked(pageCount: 6); // Place two on page 2 and one on page 4 notifier.addPlacement(page: 2, rect: const Rect.fromLTWH(10, 10, 80, 40)); notifier.addPlacement(page: 2, rect: const Rect.fromLTWH(120, 50, 80, 40)); diff --git a/test/features/step/the_user_selects.dart b/test/features/step/the_user_selects.dart index ff5640f..9580e06 100644 --- a/test/features/step/the_user_selects.dart +++ b/test/features/step/the_user_selects.dart @@ -10,9 +10,7 @@ Future theUserSelects(WidgetTester tester, dynamic file) async { final container = ProviderContainer(); TestWorld.container = container; // Mark page for signing to enable signature ops - container - .read(documentRepositoryProvider.notifier) - .openPicked(path: 'mock.pdf', pageCount: 1); + container.read(documentRepositoryProvider.notifier).openPicked(pageCount: 1); // For invalid/unsupported/empty selections we do NOT set image bytes. // This simulates a failed load and keeps rect null. final token = file.toString(); diff --git a/test/features/step/the_user_types_into_the_go_to_input_and_presses_enter.dart b/test/features/step/the_user_types_into_the_go_to_input_and_presses_enter.dart index 55a2fda..3af7065 100644 --- a/test/features/step/the_user_types_into_the_go_to_input_and_presses_enter.dart +++ b/test/features/step/the_user_types_into_the_go_to_input_and_presses_enter.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import '_world.dart'; diff --git a/test/features/step/three_signature_placements_are_placed_on_the_current_page.dart b/test/features/step/three_signature_placements_are_placed_on_the_current_page.dart index 1ca8f75..e23ed58 100644 --- a/test/features/step/three_signature_placements_are_placed_on_the_current_page.dart +++ b/test/features/step/three_signature_placements_are_placed_on_the_current_page.dart @@ -22,9 +22,7 @@ Future threeSignaturePlacementsArePlacedOnTheCurrentPage( container.read(signatureCardRepositoryProvider.notifier).state = [ SignatureCard.initial(), ]; - container - .read(documentRepositoryProvider.notifier) - .openPicked(path: 'mock.pdf', pageCount: 5); + container.read(documentRepositoryProvider.notifier).openPicked(pageCount: 5); final pdfN = container.read(documentRepositoryProvider.notifier); final page = container.read(pdfViewModelProvider); pdfN.addPlacement( diff --git a/test/widget/export_flow_test.dart b/test/widget/export_flow_test.dart index 7e8be62..aa334fd 100644 --- a/test/widget/export_flow_test.dart +++ b/test/widget/export_flow_test.dart @@ -8,7 +8,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:pdf_signature/data/services/export_service.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/ui_services.dart'; import 'package:pdf_signature/data/repositories/preferences_repository.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart'; @@ -55,11 +55,8 @@ void main() { ), documentRepositoryProvider.overrideWith( (ref) => - DocumentStateNotifier()..openPicked( - path: 'test.pdf', - pageCount: 5, - bytes: Uint8List(0), - ), + DocumentStateNotifier() + ..openPicked(pageCount: 5, bytes: Uint8List(0)), ), useMockViewerProvider.overrideWith((ref) => true), exportServiceProvider.overrideWith((_) => fake), diff --git a/test/widget/helpers.dart b/test/widget/helpers.dart index 478be31..a4b7c48 100644 --- a/test/widget/helpers.dart +++ b/test/widget/helpers.dart @@ -5,7 +5,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:image/image.dart' as img; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/ui_services.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/data/repositories/signature_asset_repository.dart'; diff --git a/test/widget/pdf_navigation_widget_test.dart b/test/widget/pdf_navigation_widget_test.dart index 48fa6f9..c575ccb 100644 --- a/test/widget/pdf_navigation_widget_test.dart +++ b/test/widget/pdf_navigation_widget_test.dart @@ -5,7 +5,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; import 'package:pdf_signature/domain/models/model.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/l10n/app_localizations.dart'; diff --git a/test/widget/pdf_page_area_early_jump_test.dart b/test/widget/pdf_page_area_early_jump_test.dart index 3e44f53..c4d76b0 100644 --- a/test/widget/pdf_page_area_early_jump_test.dart +++ b/test/widget/pdf_page_area_early_jump_test.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_page_area.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import 'package:pdf_signature/l10n/app_localizations.dart'; diff --git a/test/widget/pdf_page_area_jump_test.dart b/test/widget/pdf_page_area_jump_test.dart index d8ff449..d68d078 100644 --- a/test/widget/pdf_page_area_jump_test.dart +++ b/test/widget/pdf_page_area_jump_test.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_page_area.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/ui/features/pdf/view_model/pdf_view_model.dart'; import 'package:pdf_signature/l10n/app_localizations.dart'; diff --git a/test/widget/pdf_page_area_test.dart b/test/widget/pdf_page_area_test.dart index 017eecc..c70ed95 100644 --- a/test/widget/pdf_page_area_test.dart +++ b/test/widget/pdf_page_area_test.dart @@ -6,7 +6,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdf_signature/ui/features/pdf/widgets/pdf_page_area.dart'; import 'package:pdf_signature/data/repositories/document_repository.dart'; -import 'package:pdf_signature/ui/features/pdf/widgets/pdf_providers.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/pdf_providers.dart'; import 'package:pdf_signature/l10n/app_localizations.dart'; import 'package:pdf_signature/domain/models/model.dart';