From b8918717b5f35665c17ef9293c4b9f0d0653cc50 Mon Sep 17 00:00:00 2001 From: insleker Date: Fri, 29 Aug 2025 13:24:44 +0800 Subject: [PATCH] chore: adopt MVVM and default `Package structure` at official --- README.md | 2 + docs/NFRs.md | 4 + lib/app.dart | 2 +- lib/data/model/model.dart | 91 ++++++++++++++++++ .../services}/export_service.dart | 0 lib/data/services/providers.dart | 45 +++++++++ .../features/pdf/view_model/view_model.dart} | 95 ++----------------- .../features/pdf/widgets/draw_canvas.dart} | 8 +- .../features/pdf/widgets/pdf_screen.dart} | 51 ++-------- pubspec.yaml | 7 +- test/export_signature_test.dart | 2 +- test/features/step/_helpers.dart | 2 +- .../a_default_signature_rect_is_placed.dart | 2 +- ..._drawn_signature_exists_in_the_canvas.dart | 2 +- .../step/a_multipage_pdf_is_open.dart | 2 +- .../step/a_pdf_document_is_available.dart | 2 +- ...ontains_at_least_one_placed_signature.dart | 2 +- ...pdf_is_open_with_no_signatures_placed.dart | 2 +- ...a_pdf_is_open_with_path_and_pagecount.dart | 2 +- .../a_pdf_page_is_selected_for_signing.dart | 2 +- .../step/a_signature_image_is_created.dart | 2 +- ...signature_image_is_placed_on_the_page.dart | 2 +- .../step/a_signature_image_is_selected.dart | 2 +- ...osition_and_size_relative_to_the_page.dart | 2 +- .../step/an_empty_signature_canvas.dart | 2 +- test/features/step/aspect_lock_is.dart | 2 +- test/features/step/i_drag_signature_by.dart | 2 +- test/features/step/i_jumpto.dart | 2 +- .../i_openpicked_with_path_and_pagecount.dart | 2 +- .../step/i_place_default_signature_rect.dart | 2 +- test/features/step/i_resize_signature_by.dart | 2 +- test/features/step/i_set_page_count.dart | 2 +- .../step/i_set_signature_image_bytes.dart | 2 +- .../i_set_tiny_signature_image_bytes.dart | 2 +- test/features/step/i_toggle_mark.dart | 2 +- .../it_is_placed_on_the_selected_page.dart | 2 +- .../step/multiple_strokes_were_drawn.dart | 2 +- ...nd_becomes_transparent_in_the_preview.dart | 2 +- test/features/step/pdf_current_page_is.dart | 2 +- .../step/pdf_marked_for_signing_is.dart | 2 +- test/features/step/pdf_page_count_is.dart | 2 +- test/features/step/pdf_picked_path_is.dart | 2 +- test/features/step/pdf_state_is_loaded.dart | 2 +- ...ture_aspect_ratio_is_preserved_within.dart | 2 +- .../signature_image_bytes_is_not_null.dart | 2 +- test/features/step/signature_rect_bottom.dart | 2 +- test/features/step/signature_rect_height.dart | 2 +- .../step/signature_rect_is_not_null.dart | 2 +- .../features/step/signature_rect_is_null.dart | 2 +- test/features/step/signature_rect_left.dart | 2 +- .../signature_rect_moved_from_center.dart | 2 +- test/features/step/signature_rect_right.dart | 2 +- test/features/step/signature_rect_top.dart | 2 +- test/features/step/signature_rect_width.dart | 2 +- .../features/step/that_page_is_displayed.dart | 2 +- .../step/the_canvas_becomes_blank.dart | 2 +- .../step/the_first_page_is_displayed.dart | 2 +- ...loaded_and_shown_as_a_signature_asset.dart | 2 +- ...he_image_is_not_added_to_the_document.dart | 2 +- .../step/the_image_scales_proportionally.dart | 2 +- .../step/the_last_stroke_is_removed.dart | 2 +- .../step/the_preview_updates_immediately.dart | 2 +- ...e_exact_pdf_page_coordinates_and_size.dart | 2 +- ...ignature_remains_within_the_page_area.dart | 2 +- ..._the_corresponding_page_in_the_output.dart | 2 +- ...size_and_position_update_in_real_time.dart | 2 +- .../step/the_user_attempts_to_save.dart | 2 +- ...e_user_can_apply_or_reset_adjustments.dart | 2 +- ...can_move_to_the_next_or_previous_page.dart | 2 +- ...nges_contrast_and_brightness_controls.dart | 2 +- ...e_user_chooses_a_signature_image_file.dart | 2 +- test/features/step/the_user_chooses_undo.dart | 2 +- .../step/the_user_clears_the_canvas.dart | 2 +- ...les_to_resize_and_drags_to_reposition.dart | 2 +- .../the_user_draws_strokes_and_confirms.dart | 2 +- ...enables_aspect_ratio_lock_and_resizes.dart | 2 +- .../the_user_enables_background_removal.dart | 2 +- .../the_user_is_notified_of_the_issue.dart | 2 +- .../the_user_savesexports_the_document.dart | 2 +- test/features/step/the_user_selects.dart | 2 +- ...e_user_selects_a_specific_page_number.dart | 2 +- test/pdf_state_test.dart | 2 +- test/signature_state_test.dart | 2 +- test/widget/widget_test.dart | 8 +- 84 files changed, 243 insertions(+), 216 deletions(-) create mode 100644 docs/NFRs.md create mode 100644 lib/data/model/model.dart rename lib/{features/share => data/services}/export_service.dart (100%) create mode 100644 lib/data/services/providers.dart rename lib/{features/pdf/viewer_state.dart => ui/features/pdf/view_model/view_model.dart} (70%) rename lib/{features/pdf/viewer_widgets.dart => ui/features/pdf/widgets/draw_canvas.dart} (94%) rename lib/{features/pdf/viewer.dart => ui/features/pdf/widgets/pdf_screen.dart} (91%) diff --git a/README.md b/README.md index 3eebd63..193a333 100644 --- a/README.md +++ b/README.md @@ -19,4 +19,6 @@ flutter run flutter test flutter build +# create windows installer +flutter pub run msix:create ``` diff --git a/docs/NFRs.md b/docs/NFRs.md new file mode 100644 index 0000000..1b89a97 --- /dev/null +++ b/docs/NFRs.md @@ -0,0 +1,4 @@ +# Non-Functional Requirements + +* Package structure + * plz follow official [Package structure](https://docs.flutter.dev/app-architecture/case-study#package-structure) with a slight modification, put each `/`s in `features/` sub-directory under `ui/`. diff --git a/lib/app.dart b/lib/app.dart index 990fc95..ff7af21 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart'; class MyApp extends StatelessWidget { const MyApp({super.key}); diff --git a/lib/data/model/model.dart b/lib/data/model/model.dart new file mode 100644 index 0000000..68f4582 --- /dev/null +++ b/lib/data/model/model.dart @@ -0,0 +1,91 @@ +import 'dart:typed_data'; +import 'package:flutter/widgets.dart'; + +class PdfState { + final bool loaded; + final int pageCount; + final int currentPage; + final bool markedForSigning; + final String? pickedPdfPath; + final Uint8List? pickedPdfBytes; + final int? signedPage; + const PdfState({ + required this.loaded, + required this.pageCount, + required this.currentPage, + required this.markedForSigning, + this.pickedPdfPath, + this.pickedPdfBytes, + this.signedPage, + }); + factory PdfState.initial() => const PdfState( + loaded: false, + pageCount: 0, + currentPage: 1, + markedForSigning: false, + pickedPdfBytes: null, + signedPage: null, + ); + PdfState copyWith({ + bool? loaded, + int? pageCount, + int? currentPage, + bool? markedForSigning, + String? pickedPdfPath, + Uint8List? pickedPdfBytes, + int? signedPage, + }) => PdfState( + loaded: loaded ?? this.loaded, + pageCount: pageCount ?? this.pageCount, + currentPage: currentPage ?? this.currentPage, + markedForSigning: markedForSigning ?? this.markedForSigning, + pickedPdfPath: pickedPdfPath ?? this.pickedPdfPath, + pickedPdfBytes: pickedPdfBytes ?? this.pickedPdfBytes, + signedPage: signedPage ?? this.signedPage, + ); +} + +class SignatureState { + final Rect? rect; + final bool aspectLocked; + final bool bgRemoval; + final double contrast; + final double brightness; + final List> strokes; + final Uint8List? imageBytes; + const SignatureState({ + required this.rect, + required this.aspectLocked, + required this.bgRemoval, + required this.contrast, + required this.brightness, + required this.strokes, + this.imageBytes, + }); + factory SignatureState.initial() => const SignatureState( + rect: null, + aspectLocked: false, + bgRemoval: false, + contrast: 1.0, + brightness: 0.0, + strokes: [], + imageBytes: null, + ); + SignatureState copyWith({ + Rect? rect, + bool? aspectLocked, + bool? bgRemoval, + double? contrast, + double? brightness, + List>? strokes, + Uint8List? imageBytes, + }) => SignatureState( + rect: rect ?? this.rect, + aspectLocked: aspectLocked ?? this.aspectLocked, + bgRemoval: bgRemoval ?? this.bgRemoval, + contrast: contrast ?? this.contrast, + brightness: brightness ?? this.brightness, + strokes: strokes ?? this.strokes, + imageBytes: imageBytes ?? this.imageBytes, + ); +} diff --git a/lib/features/share/export_service.dart b/lib/data/services/export_service.dart similarity index 100% rename from lib/features/share/export_service.dart rename to lib/data/services/export_service.dart diff --git a/lib/data/services/providers.dart b/lib/data/services/providers.dart new file mode 100644 index 0000000..4ac4835 --- /dev/null +++ b/lib/data/services/providers.dart @@ -0,0 +1,45 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:path_provider/path_provider.dart' as pp; +import 'package:file_selector/file_selector.dart' as fs; +import 'package:pdf_signature/data/services/export_service.dart'; + +// Feature-scoped DI and configuration providers + +// Toggle mock viewer (used by tests to show a gray placeholder instead of real PDF pages) +final useMockViewerProvider = Provider((_) => false); + +// Export service injection for testability +final exportServiceProvider = Provider((_) => ExportService()); + +// Export DPI setting (points per inch mapping), default 144 DPI +final exportDpiProvider = StateProvider((_) => 144.0); + +// Controls whether signature overlay is visible (used to hide on non-stamped pages during export) +final signatureVisibilityProvider = StateProvider((_) => true); + +// Save path picker (injected for tests) +final savePathPickerProvider = Provider Function()>((ref) { + return () async { + String? initialDir; + try { + final d = await pp.getDownloadsDirectory(); + initialDir = d?.path; + } catch (_) {} + if (initialDir == null) { + try { + final d = await pp.getApplicationDocumentsDirectory(); + initialDir = d.path; + } catch (_) {} + } + final location = await fs.getSaveLocation( + suggestedName: 'signed.pdf', + acceptedTypeGroups: [ + const fs.XTypeGroup(label: 'PDF', extensions: ['pdf']), + ], + initialDirectory: initialDir, + ); + if (location == null) return null; + final path = location.path; + return path.toLowerCase().endsWith('.pdf') ? path : '$path.pdf'; + }; +}); diff --git a/lib/features/pdf/viewer_state.dart b/lib/ui/features/pdf/view_model/view_model.dart similarity index 70% rename from lib/features/pdf/viewer_state.dart rename to lib/ui/features/pdf/view_model/view_model.dart index 7be08e0..14d57b8 100644 --- a/lib/features/pdf/viewer_state.dart +++ b/lib/ui/features/pdf/view_model/view_model.dart @@ -1,52 +1,14 @@ -part of 'viewer.dart'; +import 'dart:math' as math; +import 'dart:typed_data'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; -class PdfState { - final bool loaded; - final int pageCount; - final int currentPage; - final bool markedForSigning; - final String? pickedPdfPath; - final Uint8List? pickedPdfBytes; - final int? signedPage; - const PdfState({ - required this.loaded, - required this.pageCount, - required this.currentPage, - required this.markedForSigning, - this.pickedPdfPath, - this.pickedPdfBytes, - this.signedPage, - }); - factory PdfState.initial() => const PdfState( - loaded: false, - pageCount: 0, - currentPage: 1, - markedForSigning: false, - pickedPdfBytes: null, - signedPage: null, - ); - PdfState copyWith({ - bool? loaded, - int? pageCount, - int? currentPage, - bool? markedForSigning, - String? pickedPdfPath, - Uint8List? pickedPdfBytes, - int? signedPage, - }) => PdfState( - loaded: loaded ?? this.loaded, - pageCount: pageCount ?? this.pageCount, - currentPage: currentPage ?? this.currentPage, - markedForSigning: markedForSigning ?? this.markedForSigning, - pickedPdfPath: pickedPdfPath ?? this.pickedPdfPath, - pickedPdfBytes: pickedPdfBytes ?? this.pickedPdfBytes, - signedPage: signedPage ?? this.signedPage, - ); -} +import '../../../../data/model/model.dart'; class PdfController extends StateNotifier { PdfController() : super(PdfState.initial()); static const int samplePageCount = 5; + void openSample() { state = state.copyWith( loaded: true, @@ -102,51 +64,6 @@ final pdfProvider = StateNotifierProvider( (ref) => PdfController(), ); -class SignatureState { - final Rect? rect; - final bool aspectLocked; - final bool bgRemoval; - final double contrast; - final double brightness; - final List> strokes; - final Uint8List? imageBytes; - const SignatureState({ - required this.rect, - required this.aspectLocked, - required this.bgRemoval, - required this.contrast, - required this.brightness, - required this.strokes, - this.imageBytes, - }); - factory SignatureState.initial() => const SignatureState( - rect: null, - aspectLocked: false, - bgRemoval: false, - contrast: 1.0, - brightness: 0.0, - strokes: [], - imageBytes: null, - ); - SignatureState copyWith({ - Rect? rect, - bool? aspectLocked, - bool? bgRemoval, - double? contrast, - double? brightness, - List>? strokes, - Uint8List? imageBytes, - }) => SignatureState( - rect: rect ?? this.rect, - aspectLocked: aspectLocked ?? this.aspectLocked, - bgRemoval: bgRemoval ?? this.bgRemoval, - contrast: contrast ?? this.contrast, - brightness: brightness ?? this.brightness, - strokes: strokes ?? this.strokes, - imageBytes: imageBytes ?? this.imageBytes, - ); -} - class SignatureController extends StateNotifier { SignatureController() : super(SignatureState.initial()); static const Size pageSize = Size(400, 560); diff --git a/lib/features/pdf/viewer_widgets.dart b/lib/ui/features/pdf/widgets/draw_canvas.dart similarity index 94% rename from lib/features/pdf/viewer_widgets.dart rename to lib/ui/features/pdf/widgets/draw_canvas.dart index 5b52487..2b7344b 100644 --- a/lib/features/pdf/viewer_widgets.dart +++ b/lib/ui/features/pdf/widgets/draw_canvas.dart @@ -1,4 +1,7 @@ -part of 'viewer.dart'; +import 'dart:math' as math; +import 'dart:typed_data'; +import 'package:flutter/material.dart'; +import 'package:hand_signature/signature.dart' as hand; class DrawCanvas extends StatefulWidget { const DrawCanvas({ @@ -52,11 +55,8 @@ class _DrawCanvasState extends State { height: 512, ); final bytes = data?.buffer.asUint8List(); - // print("onPressed, Exported signature bytes: ${bytes?.length}"); - // Notify tests if provided widget.debugBytesSink?.value = bytes; if (widget.onConfirm != null) { - // print("onConfirm callback called"); widget.onConfirm!(bytes); } else { if (context.mounted) { diff --git a/lib/features/pdf/viewer.dart b/lib/ui/features/pdf/widgets/pdf_screen.dart similarity index 91% rename from lib/features/pdf/viewer.dart rename to lib/ui/features/pdf/widgets/pdf_screen.dart index cd7b880..339e2d7 100644 --- a/lib/features/pdf/viewer.dart +++ b/lib/ui/features/pdf/widgets/pdf_screen.dart @@ -1,51 +1,16 @@ import 'dart:math' as math; +import 'dart:typed_data'; import 'package:file_selector/file_selector.dart' as fs; -import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:pdfrx/pdfrx.dart'; -import 'package:path_provider/path_provider.dart' as pp; -import 'dart:typed_data'; -import '../share/export_service.dart'; -import 'package:hand_signature/signature.dart' as hand; import 'package:printing/printing.dart' as printing; -part 'viewer_state.dart'; -part 'viewer_widgets.dart'; - -final useMockViewerProvider = Provider((_) => false); -// Export service injection for testability -final exportServiceProvider = Provider((_) => ExportService()); -// Export DPI setting (points per inch mapping), default 144 DPI -final exportDpiProvider = StateProvider((_) => 144.0); -// Controls whether signature overlay is visible (used to hide on non-stamped pages during export) -final signatureVisibilityProvider = StateProvider((_) => true); -// Save path picker (injected for tests) -final savePathPickerProvider = Provider Function()>((ref) { - return () async { - String? initialDir; - try { - final d = await pp.getDownloadsDirectory(); - initialDir = d?.path; - } catch (_) {} - if (initialDir == null) { - try { - final d = await pp.getApplicationDocumentsDirectory(); - initialDir = d.path; - } catch (_) {} - } - final location = await fs.getSaveLocation( - suggestedName: 'signed.pdf', - acceptedTypeGroups: [ - const fs.XTypeGroup(label: 'PDF', extensions: ['pdf']), - ], - initialDirectory: initialDir, - ); - if (location == null) return null; - final path = location.path; - return path.toLowerCase().endsWith('.pdf') ? path : '$path.pdf'; - }; -}); +import '../../../../data/model/model.dart'; +import '../../../../data/services/providers.dart'; +import '../view_model/view_model.dart'; +import 'draw_canvas.dart'; class PdfSignatureHomePage extends ConsumerStatefulWidget { const PdfSignatureHomePage({super.key}); @@ -102,8 +67,6 @@ class _PdfSignatureHomePageState extends ConsumerState { sig.setImageBytes(bytes); } - // removed invalid loader; not part of normal app - void _onDragSignature(Offset delta) { ref.read(signatureProvider.notifier).drag(delta); } @@ -239,8 +202,6 @@ class _PdfSignatureHomePageState extends ConsumerState { } } - // Removed manual full-path dialog; using file_selector.getSaveLocation via provider - String _ensurePdfExtension(String name) { if (!name.toLowerCase().endsWith('.pdf')) return '$name.pdf'; return name; diff --git a/pubspec.yaml b/pubspec.yaml index 17d9dad..8acb1b3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,12 +39,13 @@ dependencies: flutter_dotenv: ^6.0.0 file_selector: ^1.0.3 path_provider: ^2.1.5 - pdfrx: ^1.3.5 + pdfrx: ^2.1.9 pdf: ^3.10.8 hand_signature: ^3.1.0+2 image: ^4.2.0 printing: ^5.14.2 result_dart: ^2.1.1 + go_router: ^16.2.0 dev_dependencies: flutter_test: @@ -57,7 +58,9 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^5.0.0 + flutter_lints: ^6.0.0 + msix: ^3.16.12 + json_serializable: ^6.11.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/test/export_signature_test.dart b/test/export_signature_test.dart index 990aa6c..35f8b60 100644 --- a/test/export_signature_test.dart +++ b/test/export_signature_test.dart @@ -7,7 +7,7 @@ import 'package:image/image.dart' as img; import 'package:pdf/pdf.dart' as pdf; import 'package:pdf/widgets.dart' as pw; -import 'package:pdf_signature/features/share/export_service.dart'; +import 'package:pdf_signature/data/services/export_service.dart'; void main() { test( diff --git a/test/features/step/_helpers.dart b/test/features/step/_helpers.dart index befecf0..743f6fd 100644 --- a/test/features/step/_helpers.dart +++ b/test/features/step/_helpers.dart @@ -2,7 +2,7 @@ import 'dart:typed_data'; import 'dart:ui' show Rect, Size; import 'dart:io'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; // A lightweight fake exporter to avoid platform rasterization in tests. diff --git a/test/features/step/a_default_signature_rect_is_placed.dart b/test/features/step/a_default_signature_rect_is_placed.dart index 8159dcd..9ef9114 100644 --- a/test/features/step/a_default_signature_rect_is_placed.dart +++ b/test/features/step/a_default_signature_rect_is_placed.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a default signature rect is placed diff --git a/test/features/step/a_drawn_signature_exists_in_the_canvas.dart b/test/features/step/a_drawn_signature_exists_in_the_canvas.dart index d027157..b270cef 100644 --- a/test/features/step/a_drawn_signature_exists_in_the_canvas.dart +++ b/test/features/step/a_drawn_signature_exists_in_the_canvas.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a drawn signature exists in the canvas diff --git a/test/features/step/a_multipage_pdf_is_open.dart b/test/features/step/a_multipage_pdf_is_open.dart index 2dc3e82..42306f4 100644 --- a/test/features/step/a_multipage_pdf_is_open.dart +++ b/test/features/step/a_multipage_pdf_is_open.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a multi-page PDF is open diff --git a/test/features/step/a_pdf_document_is_available.dart b/test/features/step/a_pdf_document_is_available.dart index 006ca3c..3b24ba2 100644 --- a/test/features/step/a_pdf_document_is_available.dart +++ b/test/features/step/a_pdf_document_is_available.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a PDF document is available diff --git a/test/features/step/a_pdf_is_open_and_contains_at_least_one_placed_signature.dart b/test/features/step/a_pdf_is_open_and_contains_at_least_one_placed_signature.dart index ac1519f..4bff189 100644 --- a/test/features/step/a_pdf_is_open_and_contains_at_least_one_placed_signature.dart +++ b/test/features/step/a_pdf_is_open_and_contains_at_least_one_placed_signature.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a PDF is open and contains at least one placed signature diff --git a/test/features/step/a_pdf_is_open_with_no_signatures_placed.dart b/test/features/step/a_pdf_is_open_with_no_signatures_placed.dart index 97a0f65..8ec1fdb 100644 --- a/test/features/step/a_pdf_is_open_with_no_signatures_placed.dart +++ b/test/features/step/a_pdf_is_open_with_no_signatures_placed.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a PDF is open with no signatures placed diff --git a/test/features/step/a_pdf_is_open_with_path_and_pagecount.dart b/test/features/step/a_pdf_is_open_with_path_and_pagecount.dart index 06e8163..bb92ea7 100644 --- a/test/features/step/a_pdf_is_open_with_path_and_pagecount.dart +++ b/test/features/step/a_pdf_is_open_with_path_and_pagecount.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a pdf is open with path {'test.pdf'} and pageCount {5} diff --git a/test/features/step/a_pdf_page_is_selected_for_signing.dart b/test/features/step/a_pdf_page_is_selected_for_signing.dart index 08065c0..3abf2da 100644 --- a/test/features/step/a_pdf_page_is_selected_for_signing.dart +++ b/test/features/step/a_pdf_page_is_selected_for_signing.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a PDF page is selected for signing diff --git a/test/features/step/a_signature_image_is_created.dart b/test/features/step/a_signature_image_is_created.dart index f05e653..01a500c 100644 --- a/test/features/step/a_signature_image_is_created.dart +++ b/test/features/step/a_signature_image_is_created.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a signature image is created diff --git a/test/features/step/a_signature_image_is_placed_on_the_page.dart b/test/features/step/a_signature_image_is_placed_on_the_page.dart index f6ec732..e193b9d 100644 --- a/test/features/step/a_signature_image_is_placed_on_the_page.dart +++ b/test/features/step/a_signature_image_is_placed_on_the_page.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a signature image is placed on the page diff --git a/test/features/step/a_signature_image_is_selected.dart b/test/features/step/a_signature_image_is_selected.dart index a7d2bd0..9135a9f 100644 --- a/test/features/step/a_signature_image_is_selected.dart +++ b/test/features/step/a_signature_image_is_selected.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a signature image is selected diff --git a/test/features/step/a_signature_is_placed_with_a_position_and_size_relative_to_the_page.dart b/test/features/step/a_signature_is_placed_with_a_position_and_size_relative_to_the_page.dart index f0c3433..17d4d9b 100644 --- a/test/features/step/a_signature_is_placed_with_a_position_and_size_relative_to_the_page.dart +++ b/test/features/step/a_signature_is_placed_with_a_position_and_size_relative_to_the_page.dart @@ -2,7 +2,7 @@ import 'dart:typed_data'; import 'dart:ui'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: a signature is placed with a position and size relative to the page diff --git a/test/features/step/an_empty_signature_canvas.dart b/test/features/step/an_empty_signature_canvas.dart index ea83e46..f09a031 100644 --- a/test/features/step/an_empty_signature_canvas.dart +++ b/test/features/step/an_empty_signature_canvas.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: an empty signature canvas diff --git a/test/features/step/aspect_lock_is.dart b/test/features/step/aspect_lock_is.dart index 2b16549..f6db588 100644 --- a/test/features/step/aspect_lock_is.dart +++ b/test/features/step/aspect_lock_is.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: aspect lock is {true} diff --git a/test/features/step/i_drag_signature_by.dart b/test/features/step/i_drag_signature_by.dart index 0d9451c..4655273 100644 --- a/test/features/step/i_drag_signature_by.dart +++ b/test/features/step/i_drag_signature_by.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I drag signature by {Offset(10000, -10000)} diff --git a/test/features/step/i_jumpto.dart b/test/features/step/i_jumpto.dart index 9e7c7c2..462baf9 100644 --- a/test/features/step/i_jumpto.dart +++ b/test/features/step/i_jumpto.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I jumpTo {10} diff --git a/test/features/step/i_openpicked_with_path_and_pagecount.dart b/test/features/step/i_openpicked_with_path_and_pagecount.dart index 7b04805..ac7abc1 100644 --- a/test/features/step/i_openpicked_with_path_and_pagecount.dart +++ b/test/features/step/i_openpicked_with_path_and_pagecount.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I openPicked with path {'test.pdf'} and pageCount {7} diff --git a/test/features/step/i_place_default_signature_rect.dart b/test/features/step/i_place_default_signature_rect.dart index 256167c..f320695 100644 --- a/test/features/step/i_place_default_signature_rect.dart +++ b/test/features/step/i_place_default_signature_rect.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I place default signature rect diff --git a/test/features/step/i_resize_signature_by.dart b/test/features/step/i_resize_signature_by.dart index 762407c..861f928 100644 --- a/test/features/step/i_resize_signature_by.dart +++ b/test/features/step/i_resize_signature_by.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I resize signature by {Offset(1000, 1000)} diff --git a/test/features/step/i_set_page_count.dart b/test/features/step/i_set_page_count.dart index 28ad68c..0bd3c96 100644 --- a/test/features/step/i_set_page_count.dart +++ b/test/features/step/i_set_page_count.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I set page count {9} diff --git a/test/features/step/i_set_signature_image_bytes.dart b/test/features/step/i_set_signature_image_bytes.dart index 6c7e554..8529736 100644 --- a/test/features/step/i_set_signature_image_bytes.dart +++ b/test/features/step/i_set_signature_image_bytes.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I set signature image bytes {Uint8List.fromList([0, 1, 2])} diff --git a/test/features/step/i_set_tiny_signature_image_bytes.dart b/test/features/step/i_set_tiny_signature_image_bytes.dart index ce7364d..fdf3bfd 100644 --- a/test/features/step/i_set_tiny_signature_image_bytes.dart +++ b/test/features/step/i_set_tiny_signature_image_bytes.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I set tiny signature image bytes diff --git a/test/features/step/i_toggle_mark.dart b/test/features/step/i_toggle_mark.dart index f472495..0be11ac 100644 --- a/test/features/step/i_toggle_mark.dart +++ b/test/features/step/i_toggle_mark.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: I toggle mark diff --git a/test/features/step/it_is_placed_on_the_selected_page.dart b/test/features/step/it_is_placed_on_the_selected_page.dart index 54001d0..bd3c150 100644 --- a/test/features/step/it_is_placed_on_the_selected_page.dart +++ b/test/features/step/it_is_placed_on_the_selected_page.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: it is placed on the selected page diff --git a/test/features/step/multiple_strokes_were_drawn.dart b/test/features/step/multiple_strokes_were_drawn.dart index e8bb40a..784a4ca 100644 --- a/test/features/step/multiple_strokes_were_drawn.dart +++ b/test/features/step/multiple_strokes_were_drawn.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: multiple strokes were drawn diff --git a/test/features/step/nearwhite_background_becomes_transparent_in_the_preview.dart b/test/features/step/nearwhite_background_becomes_transparent_in_the_preview.dart index 29c629b..a1f9e9a 100644 --- a/test/features/step/nearwhite_background_becomes_transparent_in_the_preview.dart +++ b/test/features/step/nearwhite_background_becomes_transparent_in_the_preview.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: near-white background becomes transparent in the preview diff --git a/test/features/step/pdf_current_page_is.dart b/test/features/step/pdf_current_page_is.dart index b8c9c42..95a05f8 100644 --- a/test/features/step/pdf_current_page_is.dart +++ b/test/features/step/pdf_current_page_is.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: pdf current page is {1} diff --git a/test/features/step/pdf_marked_for_signing_is.dart b/test/features/step/pdf_marked_for_signing_is.dart index d6e779f..ce98b28 100644 --- a/test/features/step/pdf_marked_for_signing_is.dart +++ b/test/features/step/pdf_marked_for_signing_is.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: pdf marked for signing is {false} diff --git a/test/features/step/pdf_page_count_is.dart b/test/features/step/pdf_page_count_is.dart index 9038e37..24ec7ca 100644 --- a/test/features/step/pdf_page_count_is.dart +++ b/test/features/step/pdf_page_count_is.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: pdf page count is {7} diff --git a/test/features/step/pdf_picked_path_is.dart b/test/features/step/pdf_picked_path_is.dart index 0be1523..6e78923 100644 --- a/test/features/step/pdf_picked_path_is.dart +++ b/test/features/step/pdf_picked_path_is.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: pdf picked path is {'test.pdf'} diff --git a/test/features/step/pdf_state_is_loaded.dart b/test/features/step/pdf_state_is_loaded.dart index ff38e2e..fd4f802 100644 --- a/test/features/step/pdf_state_is_loaded.dart +++ b/test/features/step/pdf_state_is_loaded.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: pdf state is loaded {true} diff --git a/test/features/step/signature_aspect_ratio_is_preserved_within.dart b/test/features/step/signature_aspect_ratio_is_preserved_within.dart index 4982a87..7a02eaa 100644 --- a/test/features/step/signature_aspect_ratio_is_preserved_within.dart +++ b/test/features/step/signature_aspect_ratio_is_preserved_within.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature aspect ratio is preserved within {0.05} diff --git a/test/features/step/signature_image_bytes_is_not_null.dart b/test/features/step/signature_image_bytes_is_not_null.dart index b9d1e65..cd69d4c 100644 --- a/test/features/step/signature_image_bytes_is_not_null.dart +++ b/test/features/step/signature_image_bytes_is_not_null.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature image bytes is not null diff --git a/test/features/step/signature_rect_bottom.dart b/test/features/step/signature_rect_bottom.dart index 87fdd69..d0c03d2 100644 --- a/test/features/step/signature_rect_bottom.dart +++ b/test/features/step/signature_rect_bottom.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect bottom <= {560} diff --git a/test/features/step/signature_rect_height.dart b/test/features/step/signature_rect_height.dart index d0cc2f5..d020f6a 100644 --- a/test/features/step/signature_rect_height.dart +++ b/test/features/step/signature_rect_height.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect height > {20} diff --git a/test/features/step/signature_rect_is_not_null.dart b/test/features/step/signature_rect_is_not_null.dart index 2103d2c..7bb96c8 100644 --- a/test/features/step/signature_rect_is_not_null.dart +++ b/test/features/step/signature_rect_is_not_null.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect is not null diff --git a/test/features/step/signature_rect_is_null.dart b/test/features/step/signature_rect_is_null.dart index 26efd64..83aeb2b 100644 --- a/test/features/step/signature_rect_is_null.dart +++ b/test/features/step/signature_rect_is_null.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect is null diff --git a/test/features/step/signature_rect_left.dart b/test/features/step/signature_rect_left.dart index 0f502e8..718afc6 100644 --- a/test/features/step/signature_rect_left.dart +++ b/test/features/step/signature_rect_left.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect left >= {0} diff --git a/test/features/step/signature_rect_moved_from_center.dart b/test/features/step/signature_rect_moved_from_center.dart index 76323fd..b69fbe9 100644 --- a/test/features/step/signature_rect_moved_from_center.dart +++ b/test/features/step/signature_rect_moved_from_center.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect moved from center diff --git a/test/features/step/signature_rect_right.dart b/test/features/step/signature_rect_right.dart index 3ad120b..aff518b 100644 --- a/test/features/step/signature_rect_right.dart +++ b/test/features/step/signature_rect_right.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect right <= {400} diff --git a/test/features/step/signature_rect_top.dart b/test/features/step/signature_rect_top.dart index 6b0b691..42ee735 100644 --- a/test/features/step/signature_rect_top.dart +++ b/test/features/step/signature_rect_top.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect top >= {0} diff --git a/test/features/step/signature_rect_width.dart b/test/features/step/signature_rect_width.dart index 5e23060..f0ab9bb 100644 --- a/test/features/step/signature_rect_width.dart +++ b/test/features/step/signature_rect_width.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: signature rect width > {50} diff --git a/test/features/step/that_page_is_displayed.dart b/test/features/step/that_page_is_displayed.dart index f5f4cc1..18fab6d 100644 --- a/test/features/step/that_page_is_displayed.dart +++ b/test/features/step/that_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/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: that page is displayed diff --git a/test/features/step/the_canvas_becomes_blank.dart b/test/features/step/the_canvas_becomes_blank.dart index d1595ee..214d5c5 100644 --- a/test/features/step/the_canvas_becomes_blank.dart +++ b/test/features/step/the_canvas_becomes_blank.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the canvas becomes blank diff --git a/test/features/step/the_first_page_is_displayed.dart b/test/features/step/the_first_page_is_displayed.dart index 3f7eea4..638cad3 100644 --- a/test/features/step/the_first_page_is_displayed.dart +++ b/test/features/step/the_first_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/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the first page is displayed diff --git a/test/features/step/the_image_is_loaded_and_shown_as_a_signature_asset.dart b/test/features/step/the_image_is_loaded_and_shown_as_a_signature_asset.dart index 06fd21d..871f5f0 100644 --- a/test/features/step/the_image_is_loaded_and_shown_as_a_signature_asset.dart +++ b/test/features/step/the_image_is_loaded_and_shown_as_a_signature_asset.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the image is loaded and shown as a signature asset diff --git a/test/features/step/the_image_is_not_added_to_the_document.dart b/test/features/step/the_image_is_not_added_to_the_document.dart index 82cf612..45843e1 100644 --- a/test/features/step/the_image_is_not_added_to_the_document.dart +++ b/test/features/step/the_image_is_not_added_to_the_document.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the image is not added to the document diff --git a/test/features/step/the_image_scales_proportionally.dart b/test/features/step/the_image_scales_proportionally.dart index d223b9d..c2dd4c0 100644 --- a/test/features/step/the_image_scales_proportionally.dart +++ b/test/features/step/the_image_scales_proportionally.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the image scales proportionally diff --git a/test/features/step/the_last_stroke_is_removed.dart b/test/features/step/the_last_stroke_is_removed.dart index fffc00d..9b0c3f1 100644 --- a/test/features/step/the_last_stroke_is_removed.dart +++ b/test/features/step/the_last_stroke_is_removed.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the last stroke is removed diff --git a/test/features/step/the_preview_updates_immediately.dart b/test/features/step/the_preview_updates_immediately.dart index 77865b8..60f42b4 100644 --- a/test/features/step/the_preview_updates_immediately.dart +++ b/test/features/step/the_preview_updates_immediately.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the preview updates immediately diff --git a/test/features/step/the_signature_is_stamped_at_the_exact_pdf_page_coordinates_and_size.dart b/test/features/step/the_signature_is_stamped_at_the_exact_pdf_page_coordinates_and_size.dart index 9a321f2..a05e905 100644 --- a/test/features/step/the_signature_is_stamped_at_the_exact_pdf_page_coordinates_and_size.dart +++ b/test/features/step/the_signature_is_stamped_at_the_exact_pdf_page_coordinates_and_size.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the signature is stamped at the exact PDF page coordinates and size diff --git a/test/features/step/the_signature_remains_within_the_page_area.dart b/test/features/step/the_signature_remains_within_the_page_area.dart index 5561438..3f3ff87 100644 --- a/test/features/step/the_signature_remains_within_the_page_area.dart +++ b/test/features/step/the_signature_remains_within_the_page_area.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the signature remains within the page area diff --git a/test/features/step/the_signatures_appear_on_the_corresponding_page_in_the_output.dart b/test/features/step/the_signatures_appear_on_the_corresponding_page_in_the_output.dart index 627fcab..24f299e 100644 --- a/test/features/step/the_signatures_appear_on_the_corresponding_page_in_the_output.dart +++ b/test/features/step/the_signatures_appear_on_the_corresponding_page_in_the_output.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the signatures appear on the corresponding page in the output diff --git a/test/features/step/the_size_and_position_update_in_real_time.dart b/test/features/step/the_size_and_position_update_in_real_time.dart index cf364c3..617b526 100644 --- a/test/features/step/the_size_and_position_update_in_real_time.dart +++ b/test/features/step/the_size_and_position_update_in_real_time.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the size and position update in real time diff --git a/test/features/step/the_user_attempts_to_save.dart b/test/features/step/the_user_attempts_to_save.dart index caf7a2b..1768852 100644 --- a/test/features/step/the_user_attempts_to_save.dart +++ b/test/features/step/the_user_attempts_to_save.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user attempts to save diff --git a/test/features/step/the_user_can_apply_or_reset_adjustments.dart b/test/features/step/the_user_can_apply_or_reset_adjustments.dart index 64cdb9a..215c85e 100644 --- a/test/features/step/the_user_can_apply_or_reset_adjustments.dart +++ b/test/features/step/the_user_can_apply_or_reset_adjustments.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user can apply or reset adjustments diff --git a/test/features/step/the_user_can_move_to_the_next_or_previous_page.dart b/test/features/step/the_user_can_move_to_the_next_or_previous_page.dart index 99d57d1..0180289 100644 --- a/test/features/step/the_user_can_move_to_the_next_or_previous_page.dart +++ b/test/features/step/the_user_can_move_to_the_next_or_previous_page.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user can move to the next or previous page diff --git a/test/features/step/the_user_changes_contrast_and_brightness_controls.dart b/test/features/step/the_user_changes_contrast_and_brightness_controls.dart index 583ab98..c51d60c 100644 --- a/test/features/step/the_user_changes_contrast_and_brightness_controls.dart +++ b/test/features/step/the_user_changes_contrast_and_brightness_controls.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user changes contrast and brightness controls diff --git a/test/features/step/the_user_chooses_a_signature_image_file.dart b/test/features/step/the_user_chooses_a_signature_image_file.dart index 825bbf3..4681093 100644 --- a/test/features/step/the_user_chooses_a_signature_image_file.dart +++ b/test/features/step/the_user_chooses_a_signature_image_file.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user chooses a signature image file diff --git a/test/features/step/the_user_chooses_undo.dart b/test/features/step/the_user_chooses_undo.dart index fb616d2..299ea2e 100644 --- a/test/features/step/the_user_chooses_undo.dart +++ b/test/features/step/the_user_chooses_undo.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user chooses undo diff --git a/test/features/step/the_user_clears_the_canvas.dart b/test/features/step/the_user_clears_the_canvas.dart index 5fee34a..bac45da 100644 --- a/test/features/step/the_user_clears_the_canvas.dart +++ b/test/features/step/the_user_clears_the_canvas.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user clears the canvas diff --git a/test/features/step/the_user_drags_handles_to_resize_and_drags_to_reposition.dart b/test/features/step/the_user_drags_handles_to_resize_and_drags_to_reposition.dart index 277d98a..cf6a895 100644 --- a/test/features/step/the_user_drags_handles_to_resize_and_drags_to_reposition.dart +++ b/test/features/step/the_user_drags_handles_to_resize_and_drags_to_reposition.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user drags handles to resize and drags to reposition diff --git a/test/features/step/the_user_draws_strokes_and_confirms.dart b/test/features/step/the_user_draws_strokes_and_confirms.dart index f3f84c8..2bb2044 100644 --- a/test/features/step/the_user_draws_strokes_and_confirms.dart +++ b/test/features/step/the_user_draws_strokes_and_confirms.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user draws strokes and confirms diff --git a/test/features/step/the_user_enables_aspect_ratio_lock_and_resizes.dart b/test/features/step/the_user_enables_aspect_ratio_lock_and_resizes.dart index 48fed57..528804c 100644 --- a/test/features/step/the_user_enables_aspect_ratio_lock_and_resizes.dart +++ b/test/features/step/the_user_enables_aspect_ratio_lock_and_resizes.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user enables aspect ratio lock and resizes diff --git a/test/features/step/the_user_enables_background_removal.dart b/test/features/step/the_user_enables_background_removal.dart index ed5f1db..db42aba 100644 --- a/test/features/step/the_user_enables_background_removal.dart +++ b/test/features/step/the_user_enables_background_removal.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user enables background removal diff --git a/test/features/step/the_user_is_notified_of_the_issue.dart b/test/features/step/the_user_is_notified_of_the_issue.dart index c8eb343..fb5aa68 100644 --- a/test/features/step/the_user_is_notified_of_the_issue.dart +++ b/test/features/step/the_user_is_notified_of_the_issue.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user is notified of the issue diff --git a/test/features/step/the_user_savesexports_the_document.dart b/test/features/step/the_user_savesexports_the_document.dart index 95df2e6..39a469b 100644 --- a/test/features/step/the_user_savesexports_the_document.dart +++ b/test/features/step/the_user_savesexports_the_document.dart @@ -1,7 +1,7 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user saves/exports the document diff --git a/test/features/step/the_user_selects.dart b/test/features/step/the_user_selects.dart index 0c977db..7fb9cd2 100644 --- a/test/features/step/the_user_selects.dart +++ b/test/features/step/the_user_selects.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user selects "" diff --git a/test/features/step/the_user_selects_a_specific_page_number.dart b/test/features/step/the_user_selects_a_specific_page_number.dart index 0796486..eded234 100644 --- a/test/features/step/the_user_selects_a_specific_page_number.dart +++ b/test/features/step/the_user_selects_a_specific_page_number.dart @@ -1,6 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import '_world.dart'; /// Usage: the user selects a specific page number diff --git a/test/pdf_state_test.dart b/test/pdf_state_test.dart index f9a8ea2..993f778 100644 --- a/test/pdf_state_test.dart +++ b/test/pdf_state_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; void main() { diff --git a/test/signature_state_test.dart b/test/signature_state_test.dart index 84392ba..dabf636 100644 --- a/test/signature_state_test.dart +++ b/test/signature_state_test.dart @@ -2,7 +2,7 @@ import 'dart:typed_data'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/features/pdf/viewer.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; void main() { test('placeDefaultRect centers a reasonable default rect', () { diff --git a/test/widget/widget_test.dart b/test/widget/widget_test.dart index d4c0cab..b93c6c0 100644 --- a/test/widget/widget_test.dart +++ b/test/widget/widget_test.dart @@ -11,8 +11,12 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'dart:typed_data'; import 'dart:ui' show PointerDeviceKind; -import 'package:pdf_signature/features/pdf/viewer.dart'; -import 'package:pdf_signature/features/share/export_service.dart'; +import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; +import 'package:pdf_signature/data/services/providers.dart'; +import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart'; +import 'package:pdf_signature/ui/features/pdf/widgets/draw_canvas.dart'; + +import 'package:pdf_signature/data/services/export_service.dart'; import 'package:hand_signature/signature.dart' as hand; // Fakes for export service (top-level; Dart does not allow local class declarations)