refactor: pdf/view_model/view_model.dart to smaller files
This commit is contained in:
parent
6dc095e23e
commit
c152531b20
|
@ -7,7 +7,9 @@ import 'package:image/image.dart' as img;
|
|||
|
||||
import 'package:pdf_signature/data/services/export_service.dart';
|
||||
import 'package:pdf_signature/data/services/export_providers.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_library.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
import 'package:flutter_localized_locales/flutter_localized_locales.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/welcome/widgets/welcome_screen.dart';
|
||||
import 'data/services/preferences_providers.dart';
|
||||
import 'package:pdf_signature/ui/features/preferences/widgets/settings_screen.dart';
|
||||
|
|
|
@ -0,0 +1,172 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../../../../data/model/model.dart';
|
||||
|
||||
class PdfController extends StateNotifier<PdfState> {
|
||||
PdfController() : super(PdfState.initial());
|
||||
static const int samplePageCount = 5;
|
||||
|
||||
@visibleForTesting
|
||||
void openSample() {
|
||||
state = state.copyWith(
|
||||
loaded: true,
|
||||
pageCount: samplePageCount,
|
||||
currentPage: 1,
|
||||
pickedPdfPath: null,
|
||||
signedPage: null,
|
||||
placementsByPage: {},
|
||||
placementImageByPage: {},
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
|
||||
void openPicked({
|
||||
required String path,
|
||||
int pageCount = samplePageCount,
|
||||
Uint8List? bytes,
|
||||
}) {
|
||||
state = state.copyWith(
|
||||
loaded: true,
|
||||
pageCount: pageCount,
|
||||
currentPage: 1,
|
||||
pickedPdfPath: path,
|
||||
pickedPdfBytes: bytes,
|
||||
signedPage: null,
|
||||
placementsByPage: {},
|
||||
placementImageByPage: {},
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
|
||||
void jumpTo(int page) {
|
||||
if (!state.loaded) return;
|
||||
final clamped = page.clamp(1, state.pageCount);
|
||||
state = state.copyWith(currentPage: clamped, selectedPlacementIndex: null);
|
||||
}
|
||||
|
||||
// Set or clear the page that will receive the signature overlay.
|
||||
void setSignedPage(int? page) {
|
||||
if (!state.loaded) return;
|
||||
if (page == null) {
|
||||
state = state.copyWith(signedPage: null, selectedPlacementIndex: null);
|
||||
} else {
|
||||
final clamped = page.clamp(1, state.pageCount);
|
||||
state = state.copyWith(signedPage: clamped, selectedPlacementIndex: null);
|
||||
}
|
||||
}
|
||||
|
||||
void setPageCount(int count) {
|
||||
if (!state.loaded) return;
|
||||
state = state.copyWith(pageCount: count.clamp(1, 9999));
|
||||
}
|
||||
|
||||
// Multiple-signature helpers (rects are stored in normalized fractions 0..1
|
||||
// relative to the page size: left/top/width/height are all 0..1)
|
||||
void addPlacement({
|
||||
required int page,
|
||||
required Rect rect,
|
||||
String image = 'default.png',
|
||||
}) {
|
||||
if (!state.loaded) return;
|
||||
final p = page.clamp(1, state.pageCount);
|
||||
final map = Map<int, List<Rect>>.from(state.placementsByPage);
|
||||
final list = List<Rect>.from(map[p] ?? const []);
|
||||
list.add(rect);
|
||||
map[p] = list;
|
||||
// Sync image mapping list
|
||||
final imgMap = Map<int, List<String>>.from(state.placementImageByPage);
|
||||
final imgList = List<String>.from(imgMap[p] ?? const []);
|
||||
imgList.add(image);
|
||||
imgMap[p] = imgList;
|
||||
state = state.copyWith(
|
||||
placementsByPage: map,
|
||||
placementImageByPage: imgMap,
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
|
||||
void removePlacement({required int page, required int index}) {
|
||||
if (!state.loaded) return;
|
||||
final p = page.clamp(1, state.pageCount);
|
||||
final map = Map<int, List<Rect>>.from(state.placementsByPage);
|
||||
final list = List<Rect>.from(map[p] ?? const []);
|
||||
if (index >= 0 && index < list.length) {
|
||||
list.removeAt(index);
|
||||
// Sync image mapping
|
||||
final imgMap = Map<int, List<String>>.from(state.placementImageByPage);
|
||||
final imgList = List<String>.from(imgMap[p] ?? const []);
|
||||
if (index >= 0 && index < imgList.length) {
|
||||
imgList.removeAt(index);
|
||||
}
|
||||
if (list.isEmpty) {
|
||||
map.remove(p);
|
||||
imgMap.remove(p);
|
||||
} else {
|
||||
map[p] = list;
|
||||
imgMap[p] = imgList;
|
||||
}
|
||||
state = state.copyWith(
|
||||
placementsByPage: map,
|
||||
placementImageByPage: imgMap,
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the rect of an existing placement on a page.
|
||||
void updatePlacementRect({
|
||||
required int page,
|
||||
required int index,
|
||||
required Rect rect,
|
||||
}) {
|
||||
if (!state.loaded) return;
|
||||
final p = page.clamp(1, state.pageCount);
|
||||
final map = Map<int, List<Rect>>.from(state.placementsByPage);
|
||||
final list = List<Rect>.from(map[p] ?? const []);
|
||||
if (index >= 0 && index < list.length) {
|
||||
list[index] = rect;
|
||||
map[p] = list;
|
||||
state = state.copyWith(placementsByPage: map);
|
||||
}
|
||||
}
|
||||
|
||||
List<Rect> placementsOn(int page) {
|
||||
return List<Rect>.from(state.placementsByPage[page] ?? const []);
|
||||
}
|
||||
|
||||
void selectPlacement(int? index) {
|
||||
if (!state.loaded) return;
|
||||
// Only allow valid index on current page; otherwise clear
|
||||
if (index == null) {
|
||||
state = state.copyWith(selectedPlacementIndex: null);
|
||||
return;
|
||||
}
|
||||
final list = state.placementsByPage[state.currentPage] ?? const [];
|
||||
if (index >= 0 && index < list.length) {
|
||||
state = state.copyWith(selectedPlacementIndex: index);
|
||||
} else {
|
||||
state = state.copyWith(selectedPlacementIndex: null);
|
||||
}
|
||||
}
|
||||
|
||||
void deleteSelectedPlacement() {
|
||||
final idx = state.selectedPlacementIndex;
|
||||
if (idx == null) return;
|
||||
removePlacement(page: state.currentPage, index: idx);
|
||||
}
|
||||
|
||||
// NOTE: Programmatic reassignment of images has been removed.
|
||||
|
||||
// Convenience to get image name for a placement
|
||||
String? imageOfPlacement({required int page, required int index}) {
|
||||
final list = state.placementImageByPage[page] ?? const [];
|
||||
if (index < 0 || index >= list.length) return null;
|
||||
return list[index];
|
||||
}
|
||||
}
|
||||
|
||||
final pdfProvider = StateNotifierProvider<PdfController, PdfState>(
|
||||
(ref) => PdfController(),
|
||||
);
|
|
@ -7,211 +7,8 @@ import 'package:image/image.dart' as img;
|
|||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
import '../../../../data/model/model.dart';
|
||||
|
||||
class PdfController extends StateNotifier<PdfState> {
|
||||
PdfController() : super(PdfState.initial());
|
||||
static const int samplePageCount = 5;
|
||||
|
||||
@visibleForTesting
|
||||
void openSample() {
|
||||
state = state.copyWith(
|
||||
loaded: true,
|
||||
pageCount: samplePageCount,
|
||||
currentPage: 1,
|
||||
pickedPdfPath: null,
|
||||
signedPage: null,
|
||||
placementsByPage: {},
|
||||
placementImageByPage: {},
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
|
||||
void openPicked({
|
||||
required String path,
|
||||
int pageCount = samplePageCount,
|
||||
Uint8List? bytes,
|
||||
}) {
|
||||
state = state.copyWith(
|
||||
loaded: true,
|
||||
pageCount: pageCount,
|
||||
currentPage: 1,
|
||||
pickedPdfPath: path,
|
||||
pickedPdfBytes: bytes,
|
||||
signedPage: null,
|
||||
placementsByPage: {},
|
||||
placementImageByPage: {},
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
|
||||
void jumpTo(int page) {
|
||||
if (!state.loaded) return;
|
||||
final clamped = page.clamp(1, state.pageCount);
|
||||
state = state.copyWith(currentPage: clamped, selectedPlacementIndex: null);
|
||||
}
|
||||
|
||||
// Set or clear the page that will receive the signature overlay.
|
||||
void setSignedPage(int? page) {
|
||||
if (!state.loaded) return;
|
||||
if (page == null) {
|
||||
state = state.copyWith(signedPage: null, selectedPlacementIndex: null);
|
||||
} else {
|
||||
final clamped = page.clamp(1, state.pageCount);
|
||||
state = state.copyWith(signedPage: clamped, selectedPlacementIndex: null);
|
||||
}
|
||||
}
|
||||
|
||||
void setPageCount(int count) {
|
||||
if (!state.loaded) return;
|
||||
state = state.copyWith(pageCount: count.clamp(1, 9999));
|
||||
}
|
||||
|
||||
// Multiple-signature helpers (rects are stored in normalized fractions 0..1
|
||||
// relative to the page size: left/top/width/height are all 0..1)
|
||||
void addPlacement({
|
||||
required int page,
|
||||
required Rect rect,
|
||||
String image = 'default.png',
|
||||
}) {
|
||||
if (!state.loaded) return;
|
||||
final p = page.clamp(1, state.pageCount);
|
||||
final map = Map<int, List<Rect>>.from(state.placementsByPage);
|
||||
final list = List<Rect>.from(map[p] ?? const []);
|
||||
list.add(rect);
|
||||
map[p] = list;
|
||||
// Sync image mapping list
|
||||
final imgMap = Map<int, List<String>>.from(state.placementImageByPage);
|
||||
final imgList = List<String>.from(imgMap[p] ?? const []);
|
||||
imgList.add(image);
|
||||
imgMap[p] = imgList;
|
||||
state = state.copyWith(
|
||||
placementsByPage: map,
|
||||
placementImageByPage: imgMap,
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
|
||||
void removePlacement({required int page, required int index}) {
|
||||
if (!state.loaded) return;
|
||||
final p = page.clamp(1, state.pageCount);
|
||||
final map = Map<int, List<Rect>>.from(state.placementsByPage);
|
||||
final list = List<Rect>.from(map[p] ?? const []);
|
||||
if (index >= 0 && index < list.length) {
|
||||
list.removeAt(index);
|
||||
// Sync image mapping
|
||||
final imgMap = Map<int, List<String>>.from(state.placementImageByPage);
|
||||
final imgList = List<String>.from(imgMap[p] ?? const []);
|
||||
if (index >= 0 && index < imgList.length) {
|
||||
imgList.removeAt(index);
|
||||
}
|
||||
if (list.isEmpty) {
|
||||
map.remove(p);
|
||||
imgMap.remove(p);
|
||||
} else {
|
||||
map[p] = list;
|
||||
imgMap[p] = imgList;
|
||||
}
|
||||
state = state.copyWith(
|
||||
placementsByPage: map,
|
||||
placementImageByPage: imgMap,
|
||||
selectedPlacementIndex: null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the rect of an existing placement on a page.
|
||||
void updatePlacementRect({
|
||||
required int page,
|
||||
required int index,
|
||||
required Rect rect,
|
||||
}) {
|
||||
if (!state.loaded) return;
|
||||
final p = page.clamp(1, state.pageCount);
|
||||
final map = Map<int, List<Rect>>.from(state.placementsByPage);
|
||||
final list = List<Rect>.from(map[p] ?? const []);
|
||||
if (index >= 0 && index < list.length) {
|
||||
list[index] = rect;
|
||||
map[p] = list;
|
||||
state = state.copyWith(placementsByPage: map);
|
||||
}
|
||||
}
|
||||
|
||||
List<Rect> placementsOn(int page) {
|
||||
return List<Rect>.from(state.placementsByPage[page] ?? const []);
|
||||
}
|
||||
|
||||
void selectPlacement(int? index) {
|
||||
if (!state.loaded) return;
|
||||
// Only allow valid index on current page; otherwise clear
|
||||
if (index == null) {
|
||||
state = state.copyWith(selectedPlacementIndex: null);
|
||||
return;
|
||||
}
|
||||
final list = state.placementsByPage[state.currentPage] ?? const [];
|
||||
if (index >= 0 && index < list.length) {
|
||||
state = state.copyWith(selectedPlacementIndex: index);
|
||||
} else {
|
||||
state = state.copyWith(selectedPlacementIndex: null);
|
||||
}
|
||||
}
|
||||
|
||||
void deleteSelectedPlacement() {
|
||||
final idx = state.selectedPlacementIndex;
|
||||
if (idx == null) return;
|
||||
removePlacement(page: state.currentPage, index: idx);
|
||||
}
|
||||
|
||||
// NOTE: Programmatic reassignment of images has been removed.
|
||||
|
||||
// Convenience to get image name for a placement
|
||||
String? imageOfPlacement({required int page, required int index}) {
|
||||
final list = state.placementImageByPage[page] ?? const [];
|
||||
if (index < 0 || index >= list.length) return null;
|
||||
return list[index];
|
||||
}
|
||||
}
|
||||
|
||||
final pdfProvider = StateNotifierProvider<PdfController, PdfState>(
|
||||
(ref) => PdfController(),
|
||||
);
|
||||
|
||||
/// A simple library of signature images available to the user in the sidebar.
|
||||
class SignatureAsset {
|
||||
final String id; // unique id
|
||||
final Uint8List bytes;
|
||||
final String? name; // optional display name (e.g., filename)
|
||||
const SignatureAsset({required this.id, required this.bytes, this.name});
|
||||
}
|
||||
|
||||
class SignatureLibraryController extends StateNotifier<List<SignatureAsset>> {
|
||||
SignatureLibraryController() : super(const []);
|
||||
|
||||
String add(Uint8List bytes, {String? name}) {
|
||||
// Always add a new asset (allow duplicates). This lets users create multiple cards
|
||||
// even when loading the same image repeatedly for different adjustments/usages.
|
||||
if (bytes.isEmpty) return '';
|
||||
final id = DateTime.now().microsecondsSinceEpoch.toString();
|
||||
state = List.of(state)
|
||||
..add(SignatureAsset(id: id, bytes: bytes, name: name));
|
||||
return id;
|
||||
}
|
||||
|
||||
void remove(String id) {
|
||||
state = state.where((a) => a.id != id).toList(growable: false);
|
||||
}
|
||||
|
||||
SignatureAsset? byId(String id) {
|
||||
for (final a in state) {
|
||||
if (a.id == id) return a;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
final signatureLibraryProvider =
|
||||
StateNotifierProvider<SignatureLibraryController, List<SignatureAsset>>(
|
||||
(ref) => SignatureLibraryController(),
|
||||
);
|
||||
import 'pdf_controller.dart';
|
||||
import 'signature_library.dart';
|
||||
|
||||
class SignatureController extends StateNotifier<SignatureState> {
|
||||
SignatureController() : super(SignatureState.initial());
|
|
@ -0,0 +1,40 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
/// A simple library of signature images available to the user in the sidebar.
|
||||
class SignatureAsset {
|
||||
final String id; // unique id
|
||||
final Uint8List bytes;
|
||||
final String? name; // optional display name (e.g., filename)
|
||||
const SignatureAsset({required this.id, required this.bytes, this.name});
|
||||
}
|
||||
|
||||
class SignatureLibraryController extends StateNotifier<List<SignatureAsset>> {
|
||||
SignatureLibraryController() : super(const []);
|
||||
|
||||
String add(Uint8List bytes, {String? name}) {
|
||||
// Always add a new asset (allow duplicates). This lets users create multiple cards
|
||||
// even when loading the same image repeatedly for different adjustments/usages.
|
||||
if (bytes.isEmpty) return '';
|
||||
final id = DateTime.now().microsecondsSinceEpoch.toString();
|
||||
state = List.of(state)
|
||||
..add(SignatureAsset(id: id, bytes: bytes, name: name));
|
||||
return id;
|
||||
}
|
||||
|
||||
void remove(String id) {
|
||||
state = state.where((a) => a.id != id).toList(growable: false);
|
||||
}
|
||||
|
||||
SignatureAsset? byId(String id) {
|
||||
for (final a in state) {
|
||||
if (a.id == id) return a;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
final signatureLibraryProvider =
|
||||
StateNotifierProvider<SignatureLibraryController, List<SignatureAsset>>(
|
||||
(ref) => SignatureLibraryController(),
|
||||
);
|
|
@ -3,7 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
import '../../../../data/model/model.dart';
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_controller.dart';
|
||||
|
||||
class AdjustmentsPanel extends ConsumerWidget {
|
||||
const AdjustmentsPanel({super.key, required this.sig});
|
||||
|
|
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_controller.dart';
|
||||
import 'adjustments_panel.dart';
|
||||
import 'rotated_signature_image.dart';
|
||||
|
||||
|
|
|
@ -4,7 +4,8 @@ import 'package:pdf_signature/l10n/app_localizations.dart';
|
|||
import 'package:pdfrx/pdfrx.dart';
|
||||
|
||||
import '../../../../data/services/export_providers.dart';
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_controller.dart';
|
||||
import '../view_model/pdf_controller.dart';
|
||||
import 'signature_drag_data.dart';
|
||||
import 'pdf_mock_continuous_list.dart';
|
||||
import 'pdf_page_overlays.dart';
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_controller.dart';
|
||||
import '../view_model/pdf_controller.dart';
|
||||
import 'signature_overlay.dart';
|
||||
|
||||
/// Builds all overlays for a given page: placed signatures and the active one.
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
import 'package:pdfrx/pdfrx.dart';
|
||||
|
||||
import '../../../../data/services/export_providers.dart';
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/pdf_controller.dart';
|
||||
|
||||
class PdfPagesOverview extends ConsumerWidget {
|
||||
const PdfPagesOverview({super.key});
|
||||
|
|
|
@ -10,7 +10,9 @@ import 'package:multi_split_view/multi_split_view.dart';
|
|||
|
||||
import '../../../../data/services/export_providers.dart';
|
||||
import 'package:image/image.dart' as img;
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_controller.dart';
|
||||
import '../view_model/pdf_controller.dart';
|
||||
import '../view_model/signature_library.dart';
|
||||
import 'draw_canvas.dart';
|
||||
import 'pdf_toolbar.dart';
|
||||
import 'pdf_page_area.dart';
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter/services.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/pdf_controller.dart';
|
||||
|
||||
class PdfToolbar extends ConsumerStatefulWidget {
|
||||
const PdfToolbar({
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_library.dart';
|
||||
import 'signature_drag_data.dart';
|
||||
import '../../../common/menu_labels.dart';
|
||||
import 'rotated_signature_image.dart';
|
||||
|
|
|
@ -4,7 +4,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
import '../../../../data/services/export_providers.dart';
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_controller.dart';
|
||||
import '../view_model/signature_library.dart';
|
||||
import 'image_editor_dialog.dart';
|
||||
import 'signature_card.dart';
|
||||
|
||||
|
|
|
@ -5,7 +5,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
import '../../../../data/model/model.dart';
|
||||
import '../view_model/view_model.dart';
|
||||
import '../view_model/signature_controller.dart';
|
||||
import '../view_model/pdf_controller.dart';
|
||||
import '../view_model/signature_library.dart';
|
||||
import 'image_editor_dialog.dart';
|
||||
import '../../../common/menu_labels.dart';
|
||||
import 'rotated_signature_image.dart';
|
||||
|
|
|
@ -7,7 +7,8 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
import '../../pdf/view_model/view_model.dart';
|
||||
import '../../pdf/view_model/signature_controller.dart';
|
||||
import '../../pdf/view_model/pdf_controller.dart';
|
||||
// Settings dialog is provided via global AppBar in MyApp
|
||||
|
||||
// Abstraction to make drop handling testable without constructing
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a drawn signature exists in the canvas
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a multi-page PDF is open
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a PDF is open and contains at least one placed signature
|
||||
|
|
|
@ -2,7 +2,8 @@ import 'dart:typed_data';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a PDF is open and contains multiple placed signatures across pages
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a PDF is open with no signatures placed
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a PDF page is selected for signing
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a sample multi-page PDF (5 pages) is available
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a signature image is created
|
||||
|
|
|
@ -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/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a signature image is loaded or drawn
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a signature image is placed on the page
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a signature image is selected
|
||||
|
|
|
@ -2,7 +2,8 @@ import 'dart:typed_data';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a signature is placed on page {2}
|
||||
|
|
|
@ -2,7 +2,8 @@ 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/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: a signature is placed with a position and size relative to the page
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: adjusting one instance does not affect the others
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: all placed signatures appear on their corresponding pages in the output
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: an empty signature canvas
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: both signatures are shown on their respective pages
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import 'dart:ui';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: dragging or resizing one does not change the other
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: each signature can be dragged and resized independently
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: identical signature instances appear in each location
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: it is placed on the selected page
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: multiple strokes were drawn
|
||||
|
|
|
@ -2,7 +2,7 @@ import 'dart:typed_data';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:image/image.dart' as img;
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: near-white background becomes transparent in the preview
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: only the selected signature is removed
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: page {5} becomes visible in the scroll area
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: page {1} is displayed
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the canvas becomes blank
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the document is open
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the first page is displayed
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the Go to input cannot be used
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the image is loaded and shown as a signature asset
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the image is not added to the document
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the image scales proportionally
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the last page is displayed (page {5})
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the last stroke is removed
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the left pages overview highlights page {5}
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the other signatures remain unchanged
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the page label shows "Page {5} of {5}"
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the preview updates immediately
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the signature is stamped at the exact PDF page coordinates and size
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the signature on page {5} is shown on page {5}
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the signature on page {2} remains
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the signature remains within the page area
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the signatures appear on the corresponding page in the output
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the size and position update in real time
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user attempts to save
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user can apply or reset adjustments
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user can move to the next or previous page
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user changes contrast and brightness controls
|
||||
|
|
|
@ -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/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user chooses a signature image file
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user chooses undo
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user clears the canvas
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user clicks the Go to apply button
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user clicks the thumbnail for page {2}
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user deletes one selected signature
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user drags handles to resize and drags to reposition
|
||||
|
|
|
@ -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/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user draws strokes and confirms
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user enables aspect ratio lock and resizes
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user enables background removal
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user enters {99} into the Go to input and applies it
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user is notified of the issue
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user jumps to page {2}
|
||||
|
|
|
@ -2,7 +2,8 @@ import 'dart:typed_data';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user navigates to page {3} and places another signature
|
||||
|
|
|
@ -2,7 +2,8 @@ import 'dart:typed_data';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user places a signature from picture <second_image> on page <second_page>
|
||||
|
|
|
@ -2,7 +2,8 @@ import 'dart:typed_data';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user places a signature on page {1}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user places it in multiple locations in the document
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user places two signatures on the same page
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user saves/exports the document
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user selects "<file>"
|
||||
|
|
|
@ -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/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: the user types {3} into the Go to input and presses Enter
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import '_world.dart';
|
||||
|
||||
/// Usage: three signatures are placed on the current page
|
||||
|
|
|
@ -4,7 +4,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
|
||||
import 'package:pdf_signature/data/services/export_service.dart';
|
||||
import 'package:pdf_signature/data/services/export_providers.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
||||
|
|
|
@ -5,7 +5,8 @@ import 'package:image/image.dart' as img;
|
|||
import 'dart:typed_data';
|
||||
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/data/services/export_providers.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
// preferences_providers.dart no longer exports pageViewModeProvider
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_test/flutter_test.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/data/model/model.dart';
|
||||
import 'package:pdf_signature/data/services/export_providers.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_test/flutter_test.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_page_area.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/data/services/export_providers.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
import 'package:pdf_signature/data/model/model.dart';
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_test/flutter_test.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_page_area.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/data/services/export_providers.dart';
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
import 'package:pdf_signature/data/model/model.dart';
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_test/flutter_test.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_page_area.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/data/services/export_providers.dart';
|
||||
|
||||
void main() {
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_library.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/widgets/pdf_screen.dart';
|
||||
|
||||
import 'helpers.dart';
|
||||
|
|
|
@ -6,7 +6,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
|
||||
import 'package:pdf_signature/l10n/app_localizations.dart';
|
||||
import 'package:pdf_signature/ui/features/welcome/widgets/welcome_screen.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/signature_controller.dart';
|
||||
import 'package:pdf_signature/ui/features/pdf/view_model/pdf_controller.dart';
|
||||
|
||||
class _FakeDropReadable implements DropReadable {
|
||||
final String _name;
|
||||
|
|
Loading…
Reference in New Issue