diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 12ba798d..aed9a534 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ + + @@ -23,7 +25,8 @@ + android:label="Pocket Paint" + android:enableOnBackInvokedCallback="true"> + ImportCommand( + paint, + imageData, + offset, + scale, + rotation, + ); + TextCommand createTextCommand( Offset point, String text, diff --git a/lib/core/commands/command_implementation/command.dart b/lib/core/commands/command_implementation/command.dart index 63afcda1..36a759ea 100644 --- a/lib/core/commands/command_implementation/command.dart +++ b/lib/core/commands/command_implementation/command.dart @@ -1,5 +1,6 @@ import 'package:equatable/equatable.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/import_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart'; @@ -31,6 +32,8 @@ abstract class Command with EquatableMixin { return EllipseShapeCommand.fromJson(json); case SerializerType.CLIPBOARD_COMMAND: return ClipboardCommand.fromJson(json); + case SerializerType.IMPORT_COMMAND: + return ImportCommand.fromJson(json); case SerializerType.DELETE_REGION_COMMAND: return DeleteRegionCommand.fromJson(json); case SerializerType.TEXT_COMMAND: diff --git a/lib/core/commands/command_implementation/graphic/import_command.dart b/lib/core/commands/command_implementation/graphic/import_command.dart new file mode 100644 index 00000000..33e26a83 --- /dev/null +++ b/lib/core/commands/command_implementation/graphic/import_command.dart @@ -0,0 +1,122 @@ +// ignore_for_file: must_be_immutable + +import 'dart:ui' as ui; +import 'package:flutter/foundation.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart'; +import 'package:paintroid/core/json_serialization/converter/offset_converter.dart'; +import 'package:paintroid/core/json_serialization/converter/paint_converter.dart'; +import 'package:paintroid/core/json_serialization/converter/uint8list_base64_converter.dart'; +import 'package:paintroid/core/json_serialization/versioning/serializer_version.dart'; +import 'package:paintroid/core/json_serialization/versioning/version_strategy.dart'; +import 'package:paintroid/core/models/loggable_mixin.dart'; +import 'package:toast/toast.dart'; + +part 'import_command.g.dart'; + +@JsonSerializable() +class ImportCommand extends GraphicCommand with LoggableMixin { + @Uint8ListBase64Converter() + final Uint8List imageData; + @OffsetConverter() + final ui.Offset offset; + final double scale; + final double rotation; + + final int version; + final String type; + + @JsonKey(includeFromJson: false, includeToJson: false) + ui.Image? _runtimeImage; + + ImportCommand( + super.paint, + this.imageData, + this.offset, + this.scale, + this.rotation, { + int? version, + this.type = SerializerType.IMPORT_COMMAND, + }) : version = version ?? + VersionStrategyManager.strategy.getImportCommandVersion(); + + @override + Future prepareForRuntime() async { + if (_runtimeImage == null && imageData.isNotEmpty) { + try { + final buffer = await ui.ImmutableBuffer.fromUint8List(imageData); + final descriptor = await ui.ImageDescriptor.encoded(buffer); + final codec = await descriptor.instantiateCodec(); + final frameInfo = await codec.getNextFrame(); + _runtimeImage = frameInfo.image; + } catch (e, _) { + Toast.show( + 'Error: $e', + duration: Toast.lengthShort, + gravity: Toast.bottom, + ); + _runtimeImage = null; + } + } + } + + @override + void call(ui.Canvas canvas) { + if (_runtimeImage == null) { + Toast.show( + 'ImportCommand.call: _runtimeImage is null. Cannot draw.', + duration: Toast.lengthShort, + gravity: Toast.bottom, + ); + return; + } + + canvas.save(); + canvas.translate(offset.dx, offset.dy); + canvas.rotate(rotation); + canvas.scale(scale); + + final imageWidth = _runtimeImage!.width.toDouble(); + final imageHeight = _runtimeImage!.height.toDouble(); + + final src = ui.Rect.fromLTWH(0, 0, imageWidth, imageHeight); + final dst = ui.Rect.fromLTWH( + -imageWidth / 2, + -imageHeight / 2, + imageWidth, + imageHeight, + ); + final imagePaint = ui.Paint()..filterQuality = ui.FilterQuality.high; + canvas.drawImageRect(_runtimeImage!, src, dst, imagePaint); + canvas.restore(); + } + + @override + List get props => [ + paint, + imageData, + offset, + scale, + rotation, + version, + type, + ]; + + @override + Map toJson() => _$ImportCommandToJson(this); + + factory ImportCommand.fromJson(Map json) { + int version = json['version'] as int; + + switch (version) { + case Version.v1: + return _$ImportCommandFromJson(json); + case Version.v2: + // For different versions of ImportCommand the deserialization + // has to be implemented manually. + // Autogenerated code can only be used for one version + default: + return _$ImportCommandFromJson(json); + } + } +} diff --git a/lib/core/commands/command_implementation/graphic/import_command.g.dart b/lib/core/commands/command_implementation/graphic/import_command.g.dart new file mode 100644 index 00000000..7d74ce4b --- /dev/null +++ b/lib/core/commands/command_implementation/graphic/import_command.g.dart @@ -0,0 +1,29 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'import_command.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +ImportCommand _$ImportCommandFromJson(Map json) => + ImportCommand( + const PaintConverter().fromJson(json['paint'] as Map), + const Uint8ListBase64Converter().fromJson(json['imageData'] as String), + const OffsetConverter().fromJson(json['offset'] as Map), + (json['scale'] as num).toDouble(), + (json['rotation'] as num).toDouble(), + version: (json['version'] as num?)?.toInt(), + type: json['type'] as String? ?? SerializerType.IMPORT_COMMAND, + ); + +Map _$ImportCommandToJson(ImportCommand instance) => + { + 'paint': const PaintConverter().toJson(instance.paint), + 'imageData': const Uint8ListBase64Converter().toJson(instance.imageData), + 'offset': const OffsetConverter().toJson(instance.offset), + 'scale': instance.scale, + 'rotation': instance.rotation, + 'version': instance.version, + 'type': instance.type, + }; diff --git a/lib/core/commands/command_manager/command_manager.dart b/lib/core/commands/command_manager/command_manager.dart index dc3a00e5..a3cfcafd 100644 --- a/lib/core/commands/command_manager/command_manager.dart +++ b/lib/core/commands/command_manager/command_manager.dart @@ -2,6 +2,7 @@ import 'dart:ui'; import 'package:paintroid/core/commands/command_implementation/command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/import_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart'; @@ -25,6 +26,7 @@ class CommandManager { final List _redoStack = []; void addGraphicCommand(GraphicCommand command) { + _redoStack.clear(); _undoStack.add(command); } @@ -120,6 +122,8 @@ class CommandManager { return ToolData.SHAPES; } else if (command.runtimeType == ClipboardCommand) { return ToolData.CLIPBOARD; + } else if (command.runtimeType == ImportCommand) { + return ToolData.IMPORT; } else if (command.runtimeType == TextCommand) { return ToolData.TEXT; } else if (command.runtimeType == SprayCommand) { diff --git a/lib/core/commands/command_painter.dart b/lib/core/commands/command_painter.dart index aca3588f..2eb68b3b 100644 --- a/lib/core/commands/command_painter.dart +++ b/lib/core/commands/command_painter.dart @@ -7,6 +7,7 @@ import 'package:paintroid/core/providers/state/canvas_state_provider.dart'; import 'package:paintroid/core/providers/state/paint_provider.dart'; import 'package:paintroid/core/providers/state/toolbox_state_provider.dart'; import 'package:paintroid/core/tools/implementation/clipboard_tool.dart'; +import 'package:paintroid/core/tools/implementation/import_tool.dart'; import 'package:paintroid/core/tools/implementation/cursor_tool.dart'; import 'package:paintroid/core/tools/implementation/shapes_tool.dart'; import 'package:paintroid/core/tools/implementation/text_tool.dart'; @@ -22,10 +23,11 @@ class CommandPainter extends CustomPainter { final ui.Image? cachedImage; CommandPainter(this.ref, {this.cachedImage}) - : currentTool = ref.read(toolBoxStateProvider).currentTool, - commandManager = ref.read(commandManagerProvider), - isCachingCommand = ref.read( - canvasStateProvider.select((state) => state.isCachingCommand)); + : currentTool = ref.read(toolBoxStateProvider).currentTool, + commandManager = ref.read(commandManagerProvider), + isCachingCommand = ref.read( + canvasStateProvider.select((state) => state.isCachingCommand), + ); final WidgetRef ref; @@ -37,9 +39,10 @@ class CommandPainter extends CustomPainter { canvas.clipRect(Rect.fromLTWH(0, 0, size.width, size.height)); } - bool isEraserDrawing = currentTool.type == ToolType.ERASER && - currentTool is BrushTool && - ((currentTool as BrushTool).isDrawing || isCachingCommand); + bool isEraserDrawing = + currentTool.type == ToolType.ERASER && + currentTool is BrushTool && + ((currentTool as BrushTool).isDrawing || isCachingCommand); if (isEraserDrawing) { canvas.saveLayer(Rect.fromLTWH(0, 0, size.width, size.height), Paint()); @@ -60,11 +63,17 @@ class CommandPainter extends CustomPainter { break; case ToolType.CURSOR: commandManager.executeLastCommand(canvas); - (currentTool as CursorTool) - .drawCursorIcon(canvas, ref.read(paintProvider)); + (currentTool as CursorTool).drawCursorIcon( + canvas, + ref.read(paintProvider), + ); break; case ToolType.CLIPBOARD: (currentTool as ClipboardTool).paint(canvas, size); + break; + case ToolType.IMPORT: + (currentTool as ImportTool).paint(canvas, size); + break; case ToolType.TEXT: (currentTool as TextTool).drawGuides(canvas, ref.read(paintProvider)); break; @@ -78,7 +87,7 @@ class CommandPainter extends CustomPainter { } break; } - + if (isEraserDrawing) { canvas.restore(); } diff --git a/lib/core/json_serialization/versioning/serializer_version.dart b/lib/core/json_serialization/versioning/serializer_version.dart index 28d88e89..1b17cd62 100644 --- a/lib/core/json_serialization/versioning/serializer_version.dart +++ b/lib/core/json_serialization/versioning/serializer_version.dart @@ -10,6 +10,7 @@ class SerializerVersion { static const int HEART_SHAPE_COMMAND_VERSION = Version.v1; static const int SPRAY_COMMAND_VERSION = Version.v1; static const int CLIPBOARD_COMMAND_VERSION = Version.v1; + static const int IMPORT_COMMAND_VERSION = Version.v1; static const int DELETE_REGION_COMMAND_VERSION = Version.v1; static const int COLOR_CHANGED_COMMAND_VERSION = Version.v1; } @@ -33,6 +34,7 @@ class SerializerType { static const String HEART_SHAPE_COMMAND = 'HeartShapeCommand'; static const String SPRAY_COMMAND = 'SprayCommand'; static const String CLIPBOARD_COMMAND = 'ClipboardCommand'; + static const String IMPORT_COMMAND = 'ImportCommand'; static const String DELETE_REGION_COMMAND = 'DeleteRegionCommand'; static const String COLOR_CHANGED_COMMAND = 'ColorChangedCommand'; } diff --git a/lib/core/json_serialization/versioning/version_strategy.dart b/lib/core/json_serialization/versioning/version_strategy.dart index 42bf991e..59c72367 100644 --- a/lib/core/json_serialization/versioning/version_strategy.dart +++ b/lib/core/json_serialization/versioning/version_strategy.dart @@ -21,6 +21,8 @@ abstract class IVersionStrategy { int getClipboardCommandVersion(); + int getImportCommandVersion(); + int getDeleteRegionCommandVersion(); int getColorChangedCommandVersion(); @@ -62,6 +64,9 @@ class ProductionVersionStrategy implements IVersionStrategy { int getClipboardCommandVersion() => SerializerVersion.CLIPBOARD_COMMAND_VERSION; + @override + int getImportCommandVersion() => SerializerVersion.IMPORT_COMMAND_VERSION; + @override int getDeleteRegionCommandVersion() => SerializerVersion.DELETE_REGION_COMMAND_VERSION; diff --git a/lib/core/providers/object/sticker_service.dart b/lib/core/providers/object/sticker_service.dart new file mode 100644 index 00000000..072153dc --- /dev/null +++ b/lib/core/providers/object/sticker_service.dart @@ -0,0 +1,59 @@ +import 'dart:io'; +import 'dart:ui' as ui; + +import 'package:flutter/foundation.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:oxidized/oxidized.dart'; + +import 'package:paintroid/core/models/loggable_mixin.dart'; +import 'package:paintroid/core/providers/object/image_service.dart'; +import 'package:paintroid/core/utils/failure.dart'; +import 'package:paintroid/core/utils/load_image_failure.dart'; + +abstract class IStickerService { + Future> downloadSticker(String url); + + static final provider = Provider((ref) { + final imageService = ref.watch(IImageService.provider); + return StickerService(imageService); + }); +} + +class StickerService with LoggableMixin implements IStickerService { + final IImageService _imageService; + + StickerService(this._imageService); + + @override + Future> downloadSticker(String url) async { + final client = HttpClient(); + client.badCertificateCallback = (cert, host, port) => true; + + try { + final uri = Uri.parse(url); + logger.info('Downloading sticker from: $uri'); + + final request = await client.getUrl(uri); + final response = await request.close(); + + if (response.statusCode != HttpStatus.ok) { + logger.severe('Sticker download failed with status ${response.statusCode}'); + return const Result.err(LoadImageFailure.unidentified); + } + + final bytes = await consolidateHttpClientResponseBytes(response); + + if (bytes.isEmpty) { + logger.severe('Downloaded sticker bytes are empty'); + return const Result.err(LoadImageFailure.invalidImage); + } + + return await _imageService.import(bytes); + } catch (e, stacktrace) { + logger.severe('Error downloading sticker', e, stacktrace); + return const Result.err(LoadImageFailure.unidentified); + } finally { + client.close(); + } + } +} diff --git a/lib/core/providers/object/tools/import_tool_provider.dart b/lib/core/providers/object/tools/import_tool_provider.dart new file mode 100644 index 00000000..8e8dcdd4 --- /dev/null +++ b/lib/core/providers/object/tools/import_tool_provider.dart @@ -0,0 +1,29 @@ +import 'dart:ui'; + +import 'package:paintroid/core/enums/tool_types.dart'; +import 'package:paintroid/core/providers/state/canvas_state_provider.dart'; +import 'package:paintroid/core/tools/bounding_box.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:paintroid/core/commands/command_factory/command_factory_provider.dart'; +import 'package:paintroid/core/commands/command_manager/command_manager_provider.dart'; +import 'package:paintroid/core/tools/implementation/import_tool.dart'; + +part 'import_tool_provider.g.dart'; + +@Riverpod(keepAlive: true) +class ImportToolProvider extends _$ImportToolProvider { + @override + ImportTool build() { + Rect initialBoundingBox = Rect.fromCenter( + center: ref.read(canvasStateProvider).size.center(Offset.zero), + width: 300, + height: 300, + ); + return ImportTool( + commandManager: ref.watch(commandManagerProvider), + commandFactory: ref.watch(commandFactoryProvider), + boundingBox: BoundingBox.fromRect(initialBoundingBox), + type: ToolType.IMPORT, + ); + } +} diff --git a/lib/core/providers/object/tools/import_tool_provider.g.dart b/lib/core/providers/object/tools/import_tool_provider.g.dart new file mode 100644 index 00000000..3dac1839 --- /dev/null +++ b/lib/core/providers/object/tools/import_tool_provider.g.dart @@ -0,0 +1,27 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'import_tool_provider.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$importToolProviderHash() => + r'0c9c26ef432d992b740ee717780d9cec5c17e739'; + +/// See also [ImportToolProvider]. +@ProviderFor(ImportToolProvider) +final importToolProvider = + NotifierProvider.internal( + ImportToolProvider.new, + name: r'importToolProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$importToolProviderHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$ImportToolProvider = Notifier; +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/core/providers/state/canvas_state_provider.dart b/lib/core/providers/state/canvas_state_provider.dart index d1639536..dd8e7945 100644 --- a/lib/core/providers/state/canvas_state_provider.dart +++ b/lib/core/providers/state/canvas_state_provider.dart @@ -7,6 +7,7 @@ import 'package:paintroid/core/commands/command_manager/command_manager_provider import 'package:paintroid/core/commands/graphic_factory/graphic_factory_provider.dart'; import 'package:paintroid/core/models/loggable_mixin.dart'; import 'package:paintroid/core/providers/object/device_service.dart'; +import 'package:paintroid/core/providers/state/app_bar_provider.dart'; import 'package:paintroid/core/providers/state/canvas_state_data.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:paintroid/core/providers/state/workspace_state_notifier.dart'; @@ -90,6 +91,7 @@ class CanvasStateProvider extends _$CanvasStateProvider with LoggableMixin { state.commandManager.clearUndoStack(newCommands: preparedCommands); ref.read(workspaceStateProvider.notifier).updateLastSavedCommandCount(); + ref.read(appBarProvider.notifier).update(); if (preparedCommands.isEmpty) { state = state.copyWith(cachedImage: null); diff --git a/lib/core/providers/state/canvas_state_provider.g.dart b/lib/core/providers/state/canvas_state_provider.g.dart index 7c12698d..7eb3a018 100644 --- a/lib/core/providers/state/canvas_state_provider.g.dart +++ b/lib/core/providers/state/canvas_state_provider.g.dart @@ -7,7 +7,7 @@ part of 'canvas_state_provider.dart'; // ************************************************************************** String _$canvasStateProviderHash() => - r'6fa5c88a3b5be5465d87823e71be449753bb911a'; + r'dbd27bf82a2136fdce555ecb6764fd57e0ed67e7'; /// See also [CanvasStateProvider]. @ProviderFor(CanvasStateProvider) diff --git a/lib/core/providers/state/stickers_gallery_provider.dart b/lib/core/providers/state/stickers_gallery_provider.dart new file mode 100644 index 00000000..912ae9de --- /dev/null +++ b/lib/core/providers/state/stickers_gallery_provider.dart @@ -0,0 +1,15 @@ +import 'package:riverpod_annotation/riverpod_annotation.dart'; + +part 'stickers_gallery_provider.g.dart'; + +@riverpod +class StickersGalleryProvider extends _$StickersGalleryProvider { + @override + bool build() { + return false; + } + + void setLoading(bool loading) { + state = loading; + } +} diff --git a/lib/core/providers/state/stickers_gallery_provider.g.dart b/lib/core/providers/state/stickers_gallery_provider.g.dart new file mode 100644 index 00000000..ed319172 --- /dev/null +++ b/lib/core/providers/state/stickers_gallery_provider.g.dart @@ -0,0 +1,27 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'stickers_gallery_provider.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$stickersGalleryProviderHash() => + r'26705a61af0057837903047449a05b6138690387'; + +/// See also [StickersGalleryProvider]. +@ProviderFor(StickersGalleryProvider) +final stickersGalleryProvider = + AutoDisposeNotifierProvider.internal( + StickersGalleryProvider.new, + name: r'stickersGalleryProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$stickersGalleryProviderHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$StickersGalleryProvider = AutoDisposeNotifier; +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/core/providers/state/toolbox_state_provider.dart b/lib/core/providers/state/toolbox_state_provider.dart index b7fb5e47..18ded1ec 100644 --- a/lib/core/providers/state/toolbox_state_provider.dart +++ b/lib/core/providers/state/toolbox_state_provider.dart @@ -5,6 +5,7 @@ import 'package:paintroid/core/enums/tool_types.dart'; import 'package:paintroid/core/providers/object/canvas_painter_provider.dart'; import 'package:paintroid/core/providers/object/tools/brush_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/clipboard_tool_provider.dart'; +import 'package:paintroid/core/providers/object/tools/import_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/cursor_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/eraser_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/hand_tool_provider.dart'; @@ -95,6 +96,11 @@ class ToolBoxStateProvider extends _$ToolBoxStateProvider { state = state.copyWith(currentTool: ref.read(clipboardToolProvider)); ref.read(canvasPainterProvider.notifier).repaint(); break; + case ToolType.IMPORT: + final importTool = ref.read(importToolProvider); + state = state.copyWith(currentTool: importTool); + ref.read(canvasPainterProvider.notifier).repaint(); + break; case ToolType.PIPETTE: state = state.copyWith(currentTool: ref.read(pipetteToolProvider)); break; diff --git a/lib/core/providers/state/toolbox_state_provider.g.dart b/lib/core/providers/state/toolbox_state_provider.g.dart index f6c224e0..368c5b44 100644 --- a/lib/core/providers/state/toolbox_state_provider.g.dart +++ b/lib/core/providers/state/toolbox_state_provider.g.dart @@ -7,7 +7,7 @@ part of 'toolbox_state_provider.dart'; // ************************************************************************** String _$toolBoxStateProviderHash() => - r'c6fa1661445899c5abd6725b49ccbaf6ca3340e8'; + r'8f6bea9dc276719ae093d99fb30a0aa21c249217'; /// See also [ToolBoxStateProvider]. @ProviderFor(ToolBoxStateProvider) diff --git a/lib/core/tools/implementation/import_tool.dart b/lib/core/tools/implementation/import_tool.dart new file mode 100644 index 00000000..c116790d --- /dev/null +++ b/lib/core/tools/implementation/import_tool.dart @@ -0,0 +1,154 @@ +import 'dart:math' as dart_math; +import 'dart:ui' as ui; + +import 'package:flutter/material.dart'; +import 'package:paintroid/core/enums/bounding_box_action.dart'; +import 'package:paintroid/core/providers/object/load_image_from_photo_library.dart'; +import 'package:paintroid/core/tools/bounding_box.dart'; +import 'package:paintroid/core/tools/tool.dart'; + +class ImportTool extends Tool { + final BoundingBox boundingBox; + ui.Image? importedImage; + bool _isInteracting = false; + + ImportTool({ + required super.commandManager, + required super.commandFactory, + required this.boundingBox, + required super.type, + super.hasAddFunctionality = false, + super.hasFinalizeFunctionality = true, + }); + + Future pickImage( + LoadImageFromPhotoLibrary loadImageFromPhotoLibrary, + ui.Size canvasSize, + ) async { + final result = await loadImageFromPhotoLibrary.call(); + result.match( + (image) { + setImage(image, canvasSize); + }, + (failure) { + // If failed or cancelled, we don't change anything + }, + ); + } + + void setImage(ui.Image image, ui.Size canvasSize) { + importedImage = image; + + boundingBox.center = canvasSize.center(ui.Offset.zero); + + double initialWidth = image.width.toDouble(); + double initialHeight = image.height.toDouble(); + + const double minInteractionSize = 100.0; + if (initialWidth < minInteractionSize || initialHeight < minInteractionSize) { + final double scale = + dart_math.max(minInteractionSize / initialWidth, minInteractionSize / initialHeight); + initialWidth *= scale; + initialHeight *= scale; + } + + final double maxW = canvasSize.width * 0.8; + final double maxH = canvasSize.height * 0.8; + if (initialWidth > maxW || initialHeight > maxH) { + final double scale = dart_math.min(maxW / initialWidth, maxH / initialHeight); + initialWidth *= scale; + initialHeight *= scale; + } + + boundingBox.width = initialWidth; + boundingBox.height = initialHeight; + boundingBox.angle = 0.0; + } + + @override + void onDown(ui.Offset point, Paint paint) { + boundingBox.determineAction(point); + _isInteracting = boundingBox.currentAction != BoundingBoxAction.none; + } + + @override + void onDrag(ui.Offset point, Paint paint) { + if (_isInteracting) boundingBox.updateDrag(point); + } + + @override + void onUp(ui.Offset point, Paint paint) { + if (_isInteracting) { + boundingBox.endDrag(); + _isInteracting = false; + } + } + + @override + void onCancel() { + if (_isInteracting) { + boundingBox.endDrag(); + _isInteracting = false; + } + } + + void paint(Canvas canvas, Size size) { + final image = importedImage; + if (image == null) return; + + boundingBox.drawGuides(canvas); + + final src = ui.Rect.fromLTWH( + 0, + 0, + image.width.toDouble(), + image.height.toDouble(), + ); + final dst = ui.Rect.fromLTWH( + -boundingBox.width / 2, + -boundingBox.height / 2, + boundingBox.width, + boundingBox.height, + ); + + canvas.save(); + canvas.translate(boundingBox.center.dx, boundingBox.center.dy); + canvas.rotate(boundingBox.angle); + final paintImage = Paint()..filterQuality = FilterQuality.high; + canvas.drawImageRect(image, src, dst, paintImage); + canvas.restore(); + } + + @override + Future onCheckmark(Paint paint) async { + final image = importedImage; + if (image == null) return; + + final byteData = await image.toByteData(format: ui.ImageByteFormat.png); + if (byteData == null) return; + final bytes = byteData.buffer.asUint8List(); + + final pasteOffset = boundingBox.center; + final pasteRotation = boundingBox.angle; + final double pasteScale = boundingBox.width / image.width.toDouble(); + + final command = commandFactory.createImportCommand( + paint, + bytes, + pasteOffset, + pasteScale, + pasteRotation, + ); + await command.prepareForRuntime(); + commandManager.addGraphicCommand(command); + } + + @override + void onPlus() {} + + @override + void onUndo() => commandManager.undo(); + + @override + void onRedo() => commandManager.redo(); +} diff --git a/lib/core/tools/tool.dart b/lib/core/tools/tool.dart index dc0b9999..4c3bfc06 100644 --- a/lib/core/tools/tool.dart +++ b/lib/core/tools/tool.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:ui'; import 'package:flutter/cupertino.dart'; @@ -28,7 +29,7 @@ abstract class Tool { void onCancel(); - void onCheckmark(Paint paint); + FutureOr onCheckmark(Paint paint); void onPlus(); diff --git a/lib/ui/pages/workspace_page/components/bottom_bar/tools/tool_button.dart b/lib/ui/pages/workspace_page/components/bottom_bar/tools/tool_button.dart index 9f33ca00..5acbf125 100644 --- a/lib/ui/pages/workspace_page/components/bottom_bar/tools/tool_button.dart +++ b/lib/ui/pages/workspace_page/components/bottom_bar/tools/tool_button.dart @@ -9,6 +9,14 @@ import 'package:paintroid/ui/shared/icon_svg.dart'; import 'package:paintroid/ui/theme/theme.dart'; import 'package:paintroid/core/localization/app_localizations.dart'; +import 'package:paintroid/core/enums/tool_types.dart'; +import 'package:paintroid/ui/shared/dialogs/import_image_dialog.dart'; +import 'package:paintroid/ui/pages/workspace_page/components/import_tool/stickers_gallery_page.dart'; +import 'package:paintroid/core/providers/object/tools/import_tool_provider.dart'; +import 'package:paintroid/core/providers/object/load_image_from_photo_library.dart'; +import 'package:paintroid/core/providers/object/canvas_painter_provider.dart'; +import 'package:paintroid/core/providers/state/canvas_state_provider.dart'; +import 'dart:ui' as ui; class ToolButton extends StatelessWidget { final ToolData toolData; @@ -39,9 +47,38 @@ class ToolButton extends StatelessWidget { ), label: toolData.type.localizedName(localizations), key: ValueKey(toolData.name), - onPressed: () { - Navigator.pop(context); - ref.read(toolBoxStateProvider.notifier).switchTool(toolData); + onPressed: () async { + final toolboxNotifier = ref.read(toolBoxStateProvider.notifier); + final importTool = ref.read(importToolProvider); + final canvasNotifier = ref.read(canvasPainterProvider.notifier); + final photoLibrary = ref.read(LoadImageFromPhotoLibrary.provider); + final canvasSize = ref.read(canvasStateProvider).size; + final navigator = Navigator.of(context); + + navigator.pop(); + + if (toolData.type == ToolType.IMPORT) { + final source = await showImportImageDialog(context); + if (source == null) return; + if (source == ImportSource.gallery) { + toolboxNotifier.switchTool(toolData); + await importTool.pickImage(photoLibrary, canvasSize); + canvasNotifier.repaint(); + } else if (source == ImportSource.stickers) { + final ui.Image? image = await navigator.push( + MaterialPageRoute( + builder: (_) => const StickersGalleryPage(), + ), + ); + if (image != null) { + toolboxNotifier.switchTool(toolData); + importTool.setImage(image, canvasSize); + canvasNotifier.repaint(); + } + } + } else { + toolboxNotifier.switchTool(toolData); + } }, ), ), diff --git a/lib/ui/pages/workspace_page/components/import_tool/stickers_gallery_page.dart b/lib/ui/pages/workspace_page/components/import_tool/stickers_gallery_page.dart new file mode 100644 index 00000000..18154563 --- /dev/null +++ b/lib/ui/pages/workspace_page/components/import_tool/stickers_gallery_page.dart @@ -0,0 +1,128 @@ + +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:webview_flutter/webview_flutter.dart'; +import 'package:webview_flutter_android/webview_flutter_android.dart'; + +import 'package:paintroid/core/providers/object/sticker_service.dart'; +import 'package:paintroid/core/providers/state/stickers_gallery_provider.dart'; + +class StickersGalleryPage extends ConsumerStatefulWidget { + const StickersGalleryPage({super.key}); + + @override + ConsumerState createState() => _StickersGalleryPageState(); +} + +class _StickersGalleryPageState extends ConsumerState { + late final WebViewController _controller; + + static const String _figuresUrl = 'https://catrobat.org/figures-download/'; + + @override + void initState() { + super.initState(); + + _controller = WebViewController() + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setNavigationDelegate( + NavigationDelegate( + onPageStarted: (_) => ref.read(stickersGalleryProvider.notifier).setLoading(true), + onPageFinished: (url) async { + if (!mounted) return; + ref.read(stickersGalleryProvider.notifier).setLoading(false); + + await _controller.runJavaScript(''' + const buttons = document.querySelectorAll('a, button'); + buttons.forEach(function(element) { + const text = element.innerText.trim().toLowerCase(); + if (text === 'show figures') { + element.click(); + } + }); + '''); + }, + onWebResourceError: (error) { + debugPrint('WebView error: ${error.description}'); + }, + onNavigationRequest: (request) { + final url = request.url; + if (_isImageUrl(url)) { + _downloadAndReturnImage(url); + return NavigationDecision.prevent; + } + return NavigationDecision.navigate; + }, + ), + ) + ..loadRequest(Uri.parse(_figuresUrl)); + } + + bool _isImageUrl(String url) { + final uri = Uri.tryParse(url); + if (uri == null) return false; + final path = uri.path.toLowerCase(); + return path.endsWith('.png') || + path.endsWith('.jpg') || + path.endsWith('.jpeg') || + path.endsWith('.webp'); + } + + Future _downloadAndReturnImage(String url) async { + final notifier = ref.read(stickersGalleryProvider.notifier); + notifier.setLoading(true); + + final stickerService = ref.read(IStickerService.provider); + final result = await stickerService.downloadSticker(url); + + result.match( + (image) { + if (mounted) { + Navigator.of(context).pop(image); + } else { + image.dispose(); + } + }, + (failure) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Failed to download sticker.')), + ); + } + }, + ); + + if (mounted) { + notifier.setLoading(false); + } + } + + @override + Widget build(BuildContext context) { + final isLoading = ref.watch(stickersGalleryProvider); + + return Scaffold( + body: SafeArea( + child: Stack( + children: [ + _buildWebView(), + if (isLoading) const Center(child: CircularProgressIndicator()), + ], + ), + ), + ); + } + + Widget _buildWebView() { + if (WebViewPlatform.instance is AndroidWebViewPlatform) { + return WebViewWidget.fromPlatformCreationParams( + key: const ValueKey('stickers_webview'), + params: AndroidWebViewWidgetCreationParams( + controller: _controller.platform, + displayWithHybridComposition: true, + ), + ); + } + return WebViewWidget(controller: _controller); + } +} diff --git a/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart b/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart index 319a2f39..e4a841c4 100644 --- a/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart +++ b/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart @@ -7,8 +7,9 @@ import 'package:paintroid/core/providers/state/app_bar_provider.dart'; import 'package:paintroid/core/providers/state/canvas_state_provider.dart'; import 'package:paintroid/core/providers/state/paint_provider.dart'; import 'package:paintroid/core/providers/state/toolbox_state_provider.dart'; -import 'package:paintroid/core/tools/implementation/text_tool.dart'; +import 'package:paintroid/core/tools/implementation/import_tool.dart'; import 'package:paintroid/core/tools/line_tool/line_tool.dart'; +import 'package:paintroid/core/tools/implementation/text_tool.dart'; import 'package:paintroid/core/tools/tool.dart'; import 'package:paintroid/ui/pages/workspace_page/components/top_bar/overflow_menu.dart'; import 'package:paintroid/ui/shared/action_button.dart'; @@ -66,6 +67,7 @@ class TopAppBar extends ConsumerWidget implements PreferredSizeWidget { ) { var nextTool = commandManager.getNextTool(actionType); if (currentTool.type == nextTool.type) return; + if (nextTool.type == ToolType.IMPORT) return; ref.read(toolBoxStateProvider.notifier).switchTool(nextTool); } @@ -74,9 +76,11 @@ class TopAppBar extends ConsumerWidget implements PreferredSizeWidget { currentTool is LineTool && currentTool.vertexStack.isNotEmpty; final isShapeTool = currentTool.type == ToolType.SHAPES; final isTextTool = currentTool is TextTool; - if (isLineTool || isShapeTool || isTextTool) { - return () { - currentTool.onCheckmark(ref.read(paintProvider)); + final isImportTool = currentTool is ImportTool && + currentTool.importedImage != null; + if (isLineTool || isShapeTool || isTextTool || isImportTool) { + return () async { + await currentTool.onCheckmark(ref.read(paintProvider)); ref.read(appBarProvider.notifier).update(); ref .read(canvasStateProvider.notifier) diff --git a/lib/ui/shared/dialogs/import_image_dialog.dart b/lib/ui/shared/dialogs/import_image_dialog.dart new file mode 100644 index 00000000..365246c3 --- /dev/null +++ b/lib/ui/shared/dialogs/import_image_dialog.dart @@ -0,0 +1,81 @@ +import 'package:flutter/material.dart'; +import 'package:paintroid/ui/theme/theme.dart'; + +enum ImportSource { gallery, stickers } + +Future showImportImageDialog(BuildContext context) => + showGeneralDialog( + context: context, + pageBuilder: (context, _, __) => AlertDialog( + backgroundColor: PaintroidTheme.of(context).onSurfaceColor, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(2.0))), + title: Text( + 'Import image', + style: TextStyle(color: PaintroidTheme.of(context).shadowColor), + ), + content: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => Navigator.of(context).pop(ImportSource.gallery), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.image, + size: 48, + color: PaintroidTheme.of(context).shadowColor, + ), + const SizedBox(height: 8), + Text( + 'Gallery', + style: TextStyle( + color: PaintroidTheme.of(context).shadowColor), + ), + ], + ), + ), + ), + GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => Navigator.of(context).pop(ImportSource.stickers), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.emoji_emotions, + size: 48, + color: PaintroidTheme.of(context).shadowColor, + ), + const SizedBox(height: 8), + Text( + 'Stickers', + style: TextStyle( + color: PaintroidTheme.of(context).shadowColor), + ), + ], + ), + ), + ), + ], + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text( + 'CANCEL', + style: TextStyle( + color: PaintroidTheme.of(context).primaryColor, + ), + ), + ), + ], + ), + barrierDismissible: true, + barrierLabel: 'Dismiss import image dialog box'); diff --git a/pubspec.lock b/pubspec.lock index b723e89f..49000c79 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1440,6 +1440,38 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.4" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + sha256: d53e1ccf5516f25017e3c9d44c39034db352d20fa34fe200674270242c2c5111 + url: "https://pub.dev" + source: hosted + version: "4.14.1" + webview_flutter_android: + dependency: "direct main" + description: + name: webview_flutter_android + sha256: ad5182eff9a550925330cb9f0cb038eddfdd5712aba8b77aa0f0400e50f6e688 + url: "https://pub.dev" + source: hosted + version: "4.12.0" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: "1221c1b12f5278791042f2ec2841743784cf25c5a644e23d6680e5d718824f04" + url: "https://pub.dev" + source: hosted + version: "2.15.1" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: "82648217f537573e1ca9ae9952d3eacedca6ab5aee69dc84445fc763766dcea2" + url: "https://pub.dev" + source: hosted + version: "3.25.1" win32: dependency: transitive description: @@ -1482,4 +1514,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.11.0 <4.0.0" - flutter: ">=3.29.0" + flutter: ">=3.38.0" diff --git a/pubspec.yaml b/pubspec.yaml index e0575327..82ca0fd6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,6 +42,8 @@ dependencies: path_drawing: ^1.0.1 colorpicker: path: packages/colorpicker + webview_flutter: ^4.14.1 + webview_flutter_android: ^4.12.0 dev_dependencies: flutter_test: diff --git a/test/unit/serialization/utils/dummy_version_strategy.dart b/test/unit/serialization/utils/dummy_version_strategy.dart index 0ccc3a37..2fd8ef77 100644 --- a/test/unit/serialization/utils/dummy_version_strategy.dart +++ b/test/unit/serialization/utils/dummy_version_strategy.dart @@ -11,6 +11,7 @@ class DummyVersionStrategy implements IVersionStrategy { final int heartShapeCommandVersion; final int sprayCommandVersion; final int clipboardCommandVersion; + final int importCommandVersion; final int deleteRegionCommandVersion; final int textCommandVersion; final int colorChangedCommandVersion; @@ -28,6 +29,7 @@ class DummyVersionStrategy implements IVersionStrategy { SerializerVersion.HEART_SHAPE_COMMAND_VERSION, this.sprayCommandVersion = SerializerVersion.SPRAY_COMMAND_VERSION, this.clipboardCommandVersion = SerializerVersion.CLIPBOARD_COMMAND_VERSION, + this.importCommandVersion = SerializerVersion.IMPORT_COMMAND_VERSION, this.deleteRegionCommandVersion = SerializerVersion.DELETE_REGION_COMMAND_VERSION, this.textCommandVersion = SerializerVersion.TEXT_COMMAND_VERSION, @@ -62,6 +64,9 @@ class DummyVersionStrategy implements IVersionStrategy { @override int getClipboardCommandVersion() => clipboardCommandVersion; + @override + int getImportCommandVersion() => importCommandVersion; + @override int getDeleteRegionCommandVersion() => deleteRegionCommandVersion; diff --git a/test/unit/tools/clipboard_tool_test.mocks.dart b/test/unit/tools/clipboard_tool_test.mocks.dart index c7c26633..7a5508c6 100644 --- a/test/unit/tools/clipboard_tool_test.mocks.dart +++ b/test/unit/tools/clipboard_tool_test.mocks.dart @@ -3,26 +3,28 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i29; -import 'dart:typed_data' as _i27; +import 'dart:async' as _i30; +import 'dart:typed_data' as _i28; import 'dart:ui' as _i2; -import 'package:flutter/material.dart' as _i28; -import 'package:logging/logging.dart' as _i16; +import 'package:flutter/material.dart' as _i29; +import 'package:logging/logging.dart' as _i17; import 'package:mockito/mockito.dart' as _i1; -import 'package:mockito/src/dummies.dart' as _i20; +import 'package:mockito/src/dummies.dart' as _i21; import 'package:paintroid/core/commands/command_factory/command_factory.dart' - as _i24; + as _i25; import 'package:paintroid/core/commands/command_implementation/command.dart' as _i3; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' as _i9; import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' - as _i15; + as _i16; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' - as _i14; + as _i15; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' - as _i22; + as _i23; +import 'package:paintroid/core/commands/command_implementation/graphic/import_command.dart' + as _i10; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' as _i6; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' @@ -30,23 +32,23 @@ import 'package:paintroid/core/commands/command_implementation/graphic/path_comm import 'package:paintroid/core/commands/command_implementation/graphic/shape/ellipse_shape_command.dart' as _i8; import 'package:paintroid/core/commands/command_implementation/graphic/shape/heart_shape_command.dart' - as _i12; + as _i13; import 'package:paintroid/core/commands/command_implementation/graphic/shape/square_shape_command.dart' as _i7; import 'package:paintroid/core/commands/command_implementation/graphic/shape/star_shape_command.dart' - as _i11; + as _i12; import 'package:paintroid/core/commands/command_implementation/graphic/spray_command.dart' - as _i13; + as _i14; import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' - as _i10; + as _i11; import 'package:paintroid/core/commands/command_manager/command_manager.dart' - as _i21; -import 'package:paintroid/core/commands/path_with_action_history.dart' as _i25; -import 'package:paintroid/core/enums/bounding_box_action.dart' as _i18; -import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i19; -import 'package:paintroid/core/enums/shape_style.dart' as _i26; -import 'package:paintroid/core/tools/bounding_box.dart' as _i17; -import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i23; + as _i22; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i26; +import 'package:paintroid/core/enums/bounding_box_action.dart' as _i19; +import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i20; +import 'package:paintroid/core/enums/shape_style.dart' as _i27; +import 'package:paintroid/core/tools/bounding_box.dart' as _i18; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i24; import 'package:paintroid/core/tools/tool_data.dart' as _i4; // ignore_for_file: type=lint @@ -155,8 +157,18 @@ class _FakeClipboardCommand_8 extends _i1.SmartFake ); } -class _FakeTextCommand_9 extends _i1.SmartFake implements _i10.TextCommand { - _FakeTextCommand_9( +class _FakeImportCommand_9 extends _i1.SmartFake implements _i10.ImportCommand { + _FakeImportCommand_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeTextCommand_10 extends _i1.SmartFake implements _i11.TextCommand { + _FakeTextCommand_10( Object parent, Invocation parentInvocation, ) : super( @@ -165,9 +177,9 @@ class _FakeTextCommand_9 extends _i1.SmartFake implements _i10.TextCommand { ); } -class _FakeStarShapeCommand_10 extends _i1.SmartFake - implements _i11.StarShapeCommand { - _FakeStarShapeCommand_10( +class _FakeStarShapeCommand_11 extends _i1.SmartFake + implements _i12.StarShapeCommand { + _FakeStarShapeCommand_11( Object parent, Invocation parentInvocation, ) : super( @@ -176,9 +188,9 @@ class _FakeStarShapeCommand_10 extends _i1.SmartFake ); } -class _FakeHeartShapeCommand_11 extends _i1.SmartFake - implements _i12.HeartShapeCommand { - _FakeHeartShapeCommand_11( +class _FakeHeartShapeCommand_12 extends _i1.SmartFake + implements _i13.HeartShapeCommand { + _FakeHeartShapeCommand_12( Object parent, Invocation parentInvocation, ) : super( @@ -187,8 +199,8 @@ class _FakeHeartShapeCommand_11 extends _i1.SmartFake ); } -class _FakeSprayCommand_12 extends _i1.SmartFake implements _i13.SprayCommand { - _FakeSprayCommand_12( +class _FakeSprayCommand_13 extends _i1.SmartFake implements _i14.SprayCommand { + _FakeSprayCommand_13( Object parent, Invocation parentInvocation, ) : super( @@ -197,9 +209,9 @@ class _FakeSprayCommand_12 extends _i1.SmartFake implements _i13.SprayCommand { ); } -class _FakeDeleteRegionCommand_13 extends _i1.SmartFake - implements _i14.DeleteRegionCommand { - _FakeDeleteRegionCommand_13( +class _FakeDeleteRegionCommand_14 extends _i1.SmartFake + implements _i15.DeleteRegionCommand { + _FakeDeleteRegionCommand_14( Object parent, Invocation parentInvocation, ) : super( @@ -208,9 +220,9 @@ class _FakeDeleteRegionCommand_13 extends _i1.SmartFake ); } -class _FakeColorChangedCommand_14 extends _i1.SmartFake - implements _i15.ColorChangedCommand { - _FakeColorChangedCommand_14( +class _FakeColorChangedCommand_15 extends _i1.SmartFake + implements _i16.ColorChangedCommand { + _FakeColorChangedCommand_15( Object parent, Invocation parentInvocation, ) : super( @@ -219,8 +231,8 @@ class _FakeColorChangedCommand_14 extends _i1.SmartFake ); } -class _FakeLogger_15 extends _i1.SmartFake implements _i16.Logger { - _FakeLogger_15( +class _FakeLogger_16 extends _i1.SmartFake implements _i17.Logger { + _FakeLogger_16( Object parent, Invocation parentInvocation, ) : super( @@ -229,8 +241,8 @@ class _FakeLogger_15 extends _i1.SmartFake implements _i16.Logger { ); } -class _FakeImage_16 extends _i1.SmartFake implements _i2.Image { - _FakeImage_16( +class _FakeImage_17 extends _i1.SmartFake implements _i2.Image { + _FakeImage_17( Object parent, Invocation parentInvocation, ) : super( @@ -242,7 +254,7 @@ class _FakeImage_16 extends _i1.SmartFake implements _i2.Image { /// A class which mocks [BoundingBox]. /// /// See the documentation for Mockito's code generation for more information. -class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { +class MockBoundingBox extends _i1.Mock implements _i18.BoundingBox { MockBoundingBox() { _i1.throwOnMissingStub(this); } @@ -311,13 +323,13 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { ); @override - _i18.BoundingBoxAction get currentAction => (super.noSuchMethod( + _i19.BoundingBoxAction get currentAction => (super.noSuchMethod( Invocation.getter(#currentAction), - returnValue: _i18.BoundingBoxAction.none, - ) as _i18.BoundingBoxAction); + returnValue: _i19.BoundingBoxAction.none, + ) as _i19.BoundingBoxAction); @override - set currentAction(_i18.BoundingBoxAction? _currentAction) => + set currentAction(_i19.BoundingBoxAction? _currentAction) => super.noSuchMethod( Invocation.setter( #currentAction, @@ -327,15 +339,15 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { ); @override - _i19.BoundingBoxResizeAction get currentBoundingBoxResizeAction => + _i20.BoundingBoxResizeAction get currentBoundingBoxResizeAction => (super.noSuchMethod( Invocation.getter(#currentBoundingBoxResizeAction), - returnValue: _i19.BoundingBoxResizeAction.none, - ) as _i19.BoundingBoxResizeAction); + returnValue: _i20.BoundingBoxResizeAction.none, + ) as _i20.BoundingBoxResizeAction); @override set currentBoundingBoxResizeAction( - _i19.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => + _i20.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => super.noSuchMethod( Invocation.setter( #currentBoundingBoxResizeAction, @@ -383,7 +395,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { @override _i2.Paint get boxPaint => (super.noSuchMethod( Invocation.getter(#boxPaint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#boxPaint), ), @@ -401,7 +413,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { @override _i2.Paint get handlePaint => (super.noSuchMethod( Invocation.getter(#handlePaint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#handlePaint), ), @@ -419,7 +431,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { @override _i2.Paint get rotationHandlePaint => (super.noSuchMethod( Invocation.getter(#rotationHandlePaint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#rotationHandlePaint), ), @@ -508,7 +520,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { /// A class which mocks [CommandManager]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandManager extends _i1.Mock implements _i21.CommandManager { +class MockCommandManager extends _i1.Mock implements _i22.CommandManager { MockCommandManager() { _i1.throwOnMissingStub(this); } @@ -526,7 +538,7 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { ) as List<_i3.Command>); @override - void addGraphicCommand(_i22.GraphicCommand? command) => super.noSuchMethod( + void addGraphicCommand(_i23.GraphicCommand? command) => super.noSuchMethod( Invocation.method( #addGraphicCommand, [command], @@ -611,7 +623,7 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { @override void drawLineToolVertices( _i2.Canvas? canvas, - _i23.VertexStack? vertexStack, + _i24.VertexStack? vertexStack, ) => super.noSuchMethod( Invocation.method( @@ -649,7 +661,7 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { ); @override - _i4.ToolData getNextTool(_i21.ActionType? actionType) => (super.noSuchMethod( + _i4.ToolData getNextTool(_i22.ActionType? actionType) => (super.noSuchMethod( Invocation.method( #getNextTool, [actionType], @@ -676,14 +688,14 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { /// A class which mocks [CommandFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { +class MockCommandFactory extends _i1.Mock implements _i25.CommandFactory { MockCommandFactory() { _i1.throwOnMissingStub(this); } @override _i5.PathCommand createPathCommand( - _i25.PathWithActionHistory? path, + _i26.PathWithActionHistory? path, _i2.Paint? paint, { bool? isCursor = false, }) => @@ -711,7 +723,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { @override _i6.LineCommand createLineCommand( - _i25.PathWithActionHistory? path, + _i26.PathWithActionHistory? path, _i2.Paint? paint, _i2.Offset? startPoint, _i2.Offset? endPoint, @@ -747,7 +759,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { _i2.Offset? topRight, _i2.Offset? bottomLeft, _i2.Offset? bottomRight, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -783,7 +795,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { double? radiusX, double? radiusY, _i2.Offset? center, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, double? angle, ) => (super.noSuchMethod( @@ -817,7 +829,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { @override _i9.ClipboardCommand createClipboardCommand( _i2.Paint? paint, - _i27.Uint8List? imageData, + _i28.Uint8List? imageData, _i2.Offset? offset, double? scale, double? rotation, @@ -849,10 +861,44 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { ) as _i9.ClipboardCommand); @override - _i10.TextCommand createTextCommand( + _i10.ImportCommand createImportCommand( + _i2.Paint? paint, + _i28.Uint8List? imageData, + _i2.Offset? offset, + double? scale, + double? rotation, + ) => + (super.noSuchMethod( + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + returnValue: _FakeImportCommand_9( + this, + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + ), + ) as _i10.ImportCommand); + + @override + _i11.TextCommand createTextCommand( _i2.Offset? point, String? text, - _i28.TextStyle? style, + _i29.TextStyle? style, double? fontSize, _i2.Paint? paint, double? rotationAngle, { @@ -875,7 +921,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { #scaleY: scaleY, }, ), - returnValue: _FakeTextCommand_9( + returnValue: _FakeTextCommand_10( this, Invocation.method( #createTextCommand, @@ -893,15 +939,15 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { }, ), ), - ) as _i10.TextCommand); + ) as _i11.TextCommand); @override - _i11.StarShapeCommand createStarShapeCommand( + _i12.StarShapeCommand createStarShapeCommand( _i2.Paint? paint, int? numPoints, double? angle, _i2.Offset? center, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, double? radiusX, double? radiusY, ) => @@ -918,7 +964,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { radiusY, ], ), - returnValue: _FakeStarShapeCommand_10( + returnValue: _FakeStarShapeCommand_11( this, Invocation.method( #createStarShapeCommand, @@ -933,16 +979,16 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { ], ), ), - ) as _i11.StarShapeCommand); + ) as _i12.StarShapeCommand); @override - _i12.HeartShapeCommand createHeartShapeCommand( + _i13.HeartShapeCommand createHeartShapeCommand( _i2.Paint? paint, double? width, double? height, double? angle, _i2.Offset? center, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -956,7 +1002,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { style, ], ), - returnValue: _FakeHeartShapeCommand_11( + returnValue: _FakeHeartShapeCommand_12( this, Invocation.method( #createHeartShapeCommand, @@ -970,10 +1016,10 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { ], ), ), - ) as _i12.HeartShapeCommand); + ) as _i13.HeartShapeCommand); @override - _i13.SprayCommand createSprayCommand( + _i14.SprayCommand createSprayCommand( List<_i2.Offset>? points, _i2.Paint? paint, ) => @@ -985,7 +1031,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { paint, ], ), - returnValue: _FakeSprayCommand_12( + returnValue: _FakeSprayCommand_13( this, Invocation.method( #createSprayCommand, @@ -995,26 +1041,26 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { ], ), ), - ) as _i13.SprayCommand); + ) as _i14.SprayCommand); @override - _i14.DeleteRegionCommand createDeleteRegionCommand(_i2.Rect? region) => + _i15.DeleteRegionCommand createDeleteRegionCommand(_i2.Rect? region) => (super.noSuchMethod( Invocation.method( #createDeleteRegionCommand, [region], ), - returnValue: _FakeDeleteRegionCommand_13( + returnValue: _FakeDeleteRegionCommand_14( this, Invocation.method( #createDeleteRegionCommand, [region], ), ), - ) as _i14.DeleteRegionCommand); + ) as _i15.DeleteRegionCommand); @override - _i15.ColorChangedCommand createColorChangedCommand( + _i16.ColorChangedCommand createColorChangedCommand( _i2.Color? oldColor, _i2.Color? newColor, _i2.Paint? paint, @@ -1028,7 +1074,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { paint, ], ), - returnValue: _FakeColorChangedCommand_14( + returnValue: _FakeColorChangedCommand_15( this, Invocation.method( #createColorChangedCommand, @@ -1039,7 +1085,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { ], ), ), - ) as _i15.ColorChangedCommand); + ) as _i16.ColorChangedCommand); } /// A class which mocks [ClipboardCommand]. @@ -1051,10 +1097,10 @@ class MockClipboardCommand extends _i1.Mock implements _i9.ClipboardCommand { } @override - _i27.Uint8List get imageData => (super.noSuchMethod( + _i28.Uint8List get imageData => (super.noSuchMethod( Invocation.getter(#imageData), - returnValue: _i27.Uint8List(0), - ) as _i27.Uint8List); + returnValue: _i28.Uint8List(0), + ) as _i28.Uint8List); @override _i2.Offset get offset => (super.noSuchMethod( @@ -1086,7 +1132,7 @@ class MockClipboardCommand extends _i1.Mock implements _i9.ClipboardCommand { @override String get type => (super.noSuchMethod( Invocation.getter(#type), - returnValue: _i20.dummyValue( + returnValue: _i21.dummyValue( this, Invocation.getter(#type), ), @@ -1101,30 +1147,30 @@ class MockClipboardCommand extends _i1.Mock implements _i9.ClipboardCommand { @override _i2.Paint get paint => (super.noSuchMethod( Invocation.getter(#paint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#paint), ), ) as _i2.Paint); @override - _i16.Logger get logger => (super.noSuchMethod( + _i17.Logger get logger => (super.noSuchMethod( Invocation.getter(#logger), - returnValue: _FakeLogger_15( + returnValue: _FakeLogger_16( this, Invocation.getter(#logger), ), - ) as _i16.Logger); + ) as _i17.Logger); @override - _i29.Future prepareForRuntime() => (super.noSuchMethod( + _i30.Future prepareForRuntime() => (super.noSuchMethod( Invocation.method( #prepareForRuntime, [], ), - returnValue: _i29.Future.value(), - returnValueForMissingStub: _i29.Future.value(), - ) as _i29.Future); + returnValue: _i30.Future.value(), + returnValueForMissingStub: _i30.Future.value(), + ) as _i30.Future); @override void call(_i2.Canvas? canvas) => super.noSuchMethod( @@ -1187,7 +1233,7 @@ class MockImage extends _i1.Mock implements _i2.Image { ); @override - _i29.Future<_i27.ByteData?> toByteData( + _i30.Future<_i28.ByteData?> toByteData( {_i2.ImageByteFormat? format = _i2.ImageByteFormat.rawRgba}) => (super.noSuchMethod( Invocation.method( @@ -1195,8 +1241,8 @@ class MockImage extends _i1.Mock implements _i2.Image { [], {#format: format}, ), - returnValue: _i29.Future<_i27.ByteData?>.value(), - ) as _i29.Future<_i27.ByteData?>); + returnValue: _i30.Future<_i28.ByteData?>.value(), + ) as _i30.Future<_i28.ByteData?>); @override _i2.Image clone() => (super.noSuchMethod( @@ -1204,7 +1250,7 @@ class MockImage extends _i1.Mock implements _i2.Image { #clone, [], ), - returnValue: _FakeImage_16( + returnValue: _FakeImage_17( this, Invocation.method( #clone, diff --git a/test/unit/tools/import_tool_test.dart b/test/unit/tools/import_tool_test.dart new file mode 100644 index 00000000..861f0517 --- /dev/null +++ b/test/unit/tools/import_tool_test.dart @@ -0,0 +1,151 @@ +import 'dart:typed_data'; +import 'dart:ui' as ui; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:oxidized/oxidized.dart'; + +import 'package:paintroid/core/enums/bounding_box_action.dart'; +import 'package:paintroid/core/enums/tool_types.dart'; +import 'package:paintroid/core/tools/bounding_box.dart'; +import 'package:paintroid/core/tools/implementation/import_tool.dart'; +import 'package:paintroid/core/commands/command_factory/command_factory.dart'; +import 'package:paintroid/core/commands/command_manager/command_manager.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/import_command.dart'; +import 'package:paintroid/core/providers/object/load_image_from_photo_library.dart'; +import 'package:paintroid/core/utils/load_image_failure.dart'; + +import '../../utils/clipboard_tool_util.dart'; +import 'import_tool_test.mocks.dart'; + +@GenerateMocks([ + BoundingBox, + CommandManager, + CommandFactory, + ImportCommand, + ui.Image, + LoadImageFromPhotoLibrary, +]) +void main() { + late ImportTool sut; + late MockBoundingBox boundingBox; + late MockCommandManager commandManager; + late MockCommandFactory commandFactory; + late MockImage mockImage; + late MockLoadImageFromPhotoLibrary mockPicker; + + setUp(() { + boundingBox = MockBoundingBox(); + commandManager = MockCommandManager(); + commandFactory = MockCommandFactory(); + mockImage = MockImage(); + mockPicker = MockLoadImageFromPhotoLibrary(); + + when(boundingBox.rect).thenReturn(const ui.Rect.fromLTWH(0, 0, 100, 100)); + when(boundingBox.center).thenReturn(const ui.Offset(50, 50)); + when(boundingBox.width).thenReturn(100.0); + when(boundingBox.height).thenReturn(100.0); + when(boundingBox.angle).thenReturn(0.0); + when(boundingBox.currentAction).thenReturn(BoundingBoxAction.none); + + sut = ImportTool( + commandManager: commandManager, + commandFactory: commandFactory, + boundingBox: boundingBox, + type: ToolType.IMPORT, + ); + }); + + group('image selection', () { + test('pickImage updates importedImage and boundingBox dimensions on success', () async { + when(mockImage.width).thenReturn(200); + when(mockImage.height).thenReturn(150); + when(mockPicker.call()).thenAnswer((_) async => Result.ok(mockImage)); + + await sut.pickImage(mockPicker, const ui.Size(400, 300)); + + expect(sut.importedImage, equals(mockImage)); + verify(boundingBox.center = const ui.Offset(200, 150)).called(1); + verify(boundingBox.width = 200.0).called(1); + verify(boundingBox.height = 150.0).called(1); + verify(boundingBox.angle = 0.0).called(1); + }); + + test('keeps the current image when image selection fails', () async { + sut.importedImage = mockImage; + when(mockPicker.call()).thenAnswer((_) async => + const Result.err(LoadImageFailure.permissionDenied)); + + await sut.pickImage(mockPicker, const ui.Size(400, 300)); + + expect(sut.importedImage, same(mockImage)); + verifyNever(boundingBox.width = any); + verifyNever(boundingBox.height = any); + }); + }); + + group('bounding box gestures', () { + test('delegates a complete interaction to the bounding box', () { + when(boundingBox.determineAction(any)).thenAnswer((_) { + when(boundingBox.currentAction).thenReturn(BoundingBoxAction.move); + }); + + sut.onDown(ui.Offset.zero, ui.Paint()); + verify(boundingBox.determineAction(ui.Offset.zero)).called(1); + + sut.onDrag(ui.Offset.zero, ui.Paint()); + verify(boundingBox.updateDrag(ui.Offset.zero)).called(1); + + sut.onUp(ui.Offset.zero, ui.Paint()); + verify(boundingBox.endDrag()).called(1); + + sut.onDrag(ui.Offset.zero, ui.Paint()); + verifyNever(boundingBox.updateDrag(any)); + }); + + test('ignores a drag when no handle or image is being interacted with', () { + sut.onDown(ui.Offset.zero, ui.Paint()); + sut.onDrag(ui.Offset.zero, ui.Paint()); + sut.onUp(ui.Offset.zero, ui.Paint()); + + verifyNever(boundingBox.updateDrag(any)); + verifyNever(boundingBox.endDrag()); + }); + }); + + group('finalization and command integration', () { + test('does nothing when no image has been selected', () async { + await sut.onCheckmark(ui.Paint()); + + verifyNever( + commandFactory.createImportCommand(any, any, any, any, any)); + verifyNever(commandManager.addGraphicCommand(any)); + }); + + test('creates a transformed import command and keeps the preview', + () async { + final image = await ClipboardIntegrationTestUtils.createTestImage(50, 50); + sut.importedImage = image; + + final command = MockImportCommand(); + when(commandFactory.createImportCommand(any, any, any, any, any)) + .thenReturn(command); + when(command.prepareForRuntime()).thenAnswer((_) async {}); + + await sut.onCheckmark(ui.Paint()); + + final imageBytes = verify(commandFactory.createImportCommand( + any, + captureAny, + const ui.Offset(50, 50), + 2.0, + 0.0, + )).captured.single as Uint8List; + expect(imageBytes, isNotEmpty); + verify(command.prepareForRuntime()).called(1); + verify(commandManager.addGraphicCommand(any)).called(1); + expect(sut.importedImage, isNotNull); + }); + }); +} diff --git a/test/unit/tools/import_tool_test.mocks.dart b/test/unit/tools/import_tool_test.mocks.dart new file mode 100644 index 00000000..3bd4855c --- /dev/null +++ b/test/unit/tools/import_tool_test.mocks.dart @@ -0,0 +1,1377 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in paintroid/test/unit/tools/import_tool_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i34; +import 'dart:typed_data' as _i32; +import 'dart:ui' as _i2; + +import 'package:flutter/material.dart' as _i33; +import 'package:logging/logging.dart' as _i17; +import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i25; +import 'package:oxidized/oxidized.dart' as _i21; +import 'package:paintroid/core/commands/command_factory/command_factory.dart' + as _i29; +import 'package:paintroid/core/commands/command_implementation/command.dart' + as _i3; +import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' + as _i9; +import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' + as _i16; +import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' + as _i15; +import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' + as _i27; +import 'package:paintroid/core/commands/command_implementation/graphic/import_command.dart' + as _i10; +import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' + as _i6; +import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' + as _i5; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/ellipse_shape_command.dart' + as _i8; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/heart_shape_command.dart' + as _i13; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/square_shape_command.dart' + as _i7; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/star_shape_command.dart' + as _i12; +import 'package:paintroid/core/commands/command_implementation/graphic/spray_command.dart' + as _i14; +import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' + as _i11; +import 'package:paintroid/core/commands/command_manager/command_manager.dart' + as _i26; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i30; +import 'package:paintroid/core/enums/bounding_box_action.dart' as _i23; +import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i24; +import 'package:paintroid/core/enums/shape_style.dart' as _i31; +import 'package:paintroid/core/providers/object/image_service.dart' as _i18; +import 'package:paintroid/core/providers/object/load_image_from_photo_library.dart' + as _i35; +import 'package:paintroid/core/providers/object/permission_service.dart' + as _i19; +import 'package:paintroid/core/providers/object/photo_library_service.dart' + as _i20; +import 'package:paintroid/core/tools/bounding_box.dart' as _i22; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i28; +import 'package:paintroid/core/tools/tool_data.dart' as _i4; +import 'package:paintroid/core/utils/failure.dart' as _i36; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeOffset_0 extends _i1.SmartFake implements _i2.Offset { + _FakeOffset_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeRect_1 extends _i1.SmartFake implements _i2.Rect { + _FakeRect_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeCommand_2 extends _i1.SmartFake implements _i3.Command { + _FakeCommand_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeToolData_3 extends _i1.SmartFake implements _i4.ToolData { + _FakeToolData_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePathCommand_4 extends _i1.SmartFake implements _i5.PathCommand { + _FakePathCommand_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeLineCommand_5 extends _i1.SmartFake implements _i6.LineCommand { + _FakeLineCommand_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSquareShapeCommand_6 extends _i1.SmartFake + implements _i7.SquareShapeCommand { + _FakeSquareShapeCommand_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeEllipseShapeCommand_7 extends _i1.SmartFake + implements _i8.EllipseShapeCommand { + _FakeEllipseShapeCommand_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeClipboardCommand_8 extends _i1.SmartFake + implements _i9.ClipboardCommand { + _FakeClipboardCommand_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeImportCommand_9 extends _i1.SmartFake implements _i10.ImportCommand { + _FakeImportCommand_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeTextCommand_10 extends _i1.SmartFake implements _i11.TextCommand { + _FakeTextCommand_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeStarShapeCommand_11 extends _i1.SmartFake + implements _i12.StarShapeCommand { + _FakeStarShapeCommand_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeHeartShapeCommand_12 extends _i1.SmartFake + implements _i13.HeartShapeCommand { + _FakeHeartShapeCommand_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSprayCommand_13 extends _i1.SmartFake implements _i14.SprayCommand { + _FakeSprayCommand_13( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeDeleteRegionCommand_14 extends _i1.SmartFake + implements _i15.DeleteRegionCommand { + _FakeDeleteRegionCommand_14( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeColorChangedCommand_15 extends _i1.SmartFake + implements _i16.ColorChangedCommand { + _FakeColorChangedCommand_15( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeLogger_16 extends _i1.SmartFake implements _i17.Logger { + _FakeLogger_16( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeImage_17 extends _i1.SmartFake implements _i2.Image { + _FakeImage_17( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeIImageService_18 extends _i1.SmartFake + implements _i18.IImageService { + _FakeIImageService_18( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeIPermissionService_19 extends _i1.SmartFake + implements _i19.IPermissionService { + _FakeIPermissionService_19( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeIPhotoLibraryService_20 extends _i1.SmartFake + implements _i20.IPhotoLibraryService { + _FakeIPhotoLibraryService_20( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeResult_21 extends _i1.SmartFake + implements _i21.Result { + _FakeResult_21( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [BoundingBox]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockBoundingBox extends _i1.Mock implements _i22.BoundingBox { + MockBoundingBox() { + _i1.throwOnMissingStub(this); + } + + @override + _i2.Offset get center => (super.noSuchMethod( + Invocation.getter(#center), + returnValue: _FakeOffset_0( + this, + Invocation.getter(#center), + ), + ) as _i2.Offset); + + @override + set center(_i2.Offset? _center) => super.noSuchMethod( + Invocation.setter( + #center, + _center, + ), + returnValueForMissingStub: null, + ); + + @override + double get width => (super.noSuchMethod( + Invocation.getter(#width), + returnValue: 0.0, + ) as double); + + @override + set width(double? _width) => super.noSuchMethod( + Invocation.setter( + #width, + _width, + ), + returnValueForMissingStub: null, + ); + + @override + double get height => (super.noSuchMethod( + Invocation.getter(#height), + returnValue: 0.0, + ) as double); + + @override + set height(double? _height) => super.noSuchMethod( + Invocation.setter( + #height, + _height, + ), + returnValueForMissingStub: null, + ); + + @override + double get angle => (super.noSuchMethod( + Invocation.getter(#angle), + returnValue: 0.0, + ) as double); + + @override + set angle(double? _angle) => super.noSuchMethod( + Invocation.setter( + #angle, + _angle, + ), + returnValueForMissingStub: null, + ); + + @override + _i23.BoundingBoxAction get currentAction => (super.noSuchMethod( + Invocation.getter(#currentAction), + returnValue: _i23.BoundingBoxAction.none, + ) as _i23.BoundingBoxAction); + + @override + set currentAction(_i23.BoundingBoxAction? _currentAction) => + super.noSuchMethod( + Invocation.setter( + #currentAction, + _currentAction, + ), + returnValueForMissingStub: null, + ); + + @override + _i24.BoundingBoxResizeAction get currentBoundingBoxResizeAction => + (super.noSuchMethod( + Invocation.getter(#currentBoundingBoxResizeAction), + returnValue: _i24.BoundingBoxResizeAction.none, + ) as _i24.BoundingBoxResizeAction); + + @override + set currentBoundingBoxResizeAction( + _i24.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => + super.noSuchMethod( + Invocation.setter( + #currentBoundingBoxResizeAction, + _currentBoundingBoxResizeAction, + ), + returnValueForMissingStub: null, + ); + + @override + set lastDragGlobalPosition(_i2.Offset? _lastDragGlobalPosition) => + super.noSuchMethod( + Invocation.setter( + #lastDragGlobalPosition, + _lastDragGlobalPosition, + ), + returnValueForMissingStub: null, + ); + + @override + set dragStartLocalPosition(_i2.Offset? _dragStartLocalPosition) => + super.noSuchMethod( + Invocation.setter( + #dragStartLocalPosition, + _dragStartLocalPosition, + ), + returnValueForMissingStub: null, + ); + + @override + int get activeRotationArcIndex => (super.noSuchMethod( + Invocation.getter(#activeRotationArcIndex), + returnValue: 0, + ) as int); + + @override + set activeRotationArcIndex(int? _activeRotationArcIndex) => + super.noSuchMethod( + Invocation.setter( + #activeRotationArcIndex, + _activeRotationArcIndex, + ), + returnValueForMissingStub: null, + ); + + @override + _i2.Paint get boxPaint => (super.noSuchMethod( + Invocation.getter(#boxPaint), + returnValue: _i25.dummyValue<_i2.Paint>( + this, + Invocation.getter(#boxPaint), + ), + ) as _i2.Paint); + + @override + set boxPaint(_i2.Paint? _boxPaint) => super.noSuchMethod( + Invocation.setter( + #boxPaint, + _boxPaint, + ), + returnValueForMissingStub: null, + ); + + @override + _i2.Paint get handlePaint => (super.noSuchMethod( + Invocation.getter(#handlePaint), + returnValue: _i25.dummyValue<_i2.Paint>( + this, + Invocation.getter(#handlePaint), + ), + ) as _i2.Paint); + + @override + set handlePaint(_i2.Paint? _handlePaint) => super.noSuchMethod( + Invocation.setter( + #handlePaint, + _handlePaint, + ), + returnValueForMissingStub: null, + ); + + @override + _i2.Paint get rotationHandlePaint => (super.noSuchMethod( + Invocation.getter(#rotationHandlePaint), + returnValue: _i25.dummyValue<_i2.Paint>( + this, + Invocation.getter(#rotationHandlePaint), + ), + ) as _i2.Paint); + + @override + set rotationHandlePaint(_i2.Paint? _rotationHandlePaint) => + super.noSuchMethod( + Invocation.setter( + #rotationHandlePaint, + _rotationHandlePaint, + ), + returnValueForMissingStub: null, + ); + + @override + bool get isAspectRatioLocked => (super.noSuchMethod( + Invocation.getter(#isAspectRatioLocked), + returnValue: false, + ) as bool); + + @override + set isAspectRatioLocked(bool? _isAspectRatioLocked) => super.noSuchMethod( + Invocation.setter( + #isAspectRatioLocked, + _isAspectRatioLocked, + ), + returnValueForMissingStub: null, + ); + + @override + _i2.Rect get rect => (super.noSuchMethod( + Invocation.getter(#rect), + returnValue: _FakeRect_1( + this, + Invocation.getter(#rect), + ), + ) as _i2.Rect); + + @override + List<_i2.Offset> getCorners() => (super.noSuchMethod( + Invocation.method( + #getCorners, + [], + ), + returnValue: <_i2.Offset>[], + ) as List<_i2.Offset>); + + @override + void determineAction(_i2.Offset? globalPoint) => super.noSuchMethod( + Invocation.method( + #determineAction, + [globalPoint], + ), + returnValueForMissingStub: null, + ); + + @override + void updateDrag(_i2.Offset? globalPoint) => super.noSuchMethod( + Invocation.method( + #updateDrag, + [globalPoint], + ), + returnValueForMissingStub: null, + ); + + @override + void endDrag() => super.noSuchMethod( + Invocation.method( + #endDrag, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void drawGuides(_i2.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #drawGuides, + [canvas], + ), + returnValueForMissingStub: null, + ); +} + +/// A class which mocks [CommandManager]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockCommandManager extends _i1.Mock implements _i26.CommandManager { + MockCommandManager() { + _i1.throwOnMissingStub(this); + } + + @override + List<_i3.Command> get redoStack => (super.noSuchMethod( + Invocation.getter(#redoStack), + returnValue: <_i3.Command>[], + ) as List<_i3.Command>); + + @override + List<_i3.Command> get undoStack => (super.noSuchMethod( + Invocation.getter(#undoStack), + returnValue: <_i3.Command>[], + ) as List<_i3.Command>); + + @override + void addGraphicCommand(_i27.GraphicCommand? command) => super.noSuchMethod( + Invocation.method( + #addGraphicCommand, + [command], + ), + returnValueForMissingStub: null, + ); + + @override + void setUndoStack(List<_i3.Command>? commands) => super.noSuchMethod( + Invocation.method( + #setUndoStack, + [commands], + ), + returnValueForMissingStub: null, + ); + + @override + void executeLastCommand(_i2.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #executeLastCommand, + [canvas], + ), + returnValueForMissingStub: null, + ); + + @override + void executeAllCommands(_i2.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #executeAllCommands, + [canvas], + ), + returnValueForMissingStub: null, + ); + + @override + void discardLastCommand() => super.noSuchMethod( + Invocation.method( + #discardLastCommand, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void clearUndoStack({Iterable<_i3.Command>? newCommands}) => + super.noSuchMethod( + Invocation.method( + #clearUndoStack, + [], + {#newCommands: newCommands}, + ), + returnValueForMissingStub: null, + ); + + @override + void clearRedoStack() => super.noSuchMethod( + Invocation.method( + #clearRedoStack, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void drawLineToolGhostPaths( + _i2.Canvas? canvas, + _i6.LineCommand? ingoingGhostPathCommand, + _i6.LineCommand? outgoingGhostPathCommand, + ) => + super.noSuchMethod( + Invocation.method( + #drawLineToolGhostPaths, + [ + canvas, + ingoingGhostPathCommand, + outgoingGhostPathCommand, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void drawLineToolVertices( + _i2.Canvas? canvas, + _i28.VertexStack? vertexStack, + ) => + super.noSuchMethod( + Invocation.method( + #drawLineToolVertices, + [ + canvas, + vertexStack, + ], + ), + returnValueForMissingStub: null, + ); + + @override + _i3.Command redo() => (super.noSuchMethod( + Invocation.method( + #redo, + [], + ), + returnValue: _FakeCommand_2( + this, + Invocation.method( + #redo, + [], + ), + ), + ) as _i3.Command); + + @override + void undo() => super.noSuchMethod( + Invocation.method( + #undo, + [], + ), + returnValueForMissingStub: null, + ); + + @override + _i4.ToolData getNextTool(_i26.ActionType? actionType) => (super.noSuchMethod( + Invocation.method( + #getNextTool, + [actionType], + ), + returnValue: _FakeToolData_3( + this, + Invocation.method( + #getNextTool, + [actionType], + ), + ), + ) as _i4.ToolData); + + @override + List<_i6.LineCommand> getTopLineCommandSequence() => (super.noSuchMethod( + Invocation.method( + #getTopLineCommandSequence, + [], + ), + returnValue: <_i6.LineCommand>[], + ) as List<_i6.LineCommand>); +} + +/// A class which mocks [CommandFactory]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockCommandFactory extends _i1.Mock implements _i29.CommandFactory { + MockCommandFactory() { + _i1.throwOnMissingStub(this); + } + + @override + _i5.PathCommand createPathCommand( + _i30.PathWithActionHistory? path, + _i2.Paint? paint, { + bool? isCursor = false, + }) => + (super.noSuchMethod( + Invocation.method( + #createPathCommand, + [ + path, + paint, + ], + {#isCursor: isCursor}, + ), + returnValue: _FakePathCommand_4( + this, + Invocation.method( + #createPathCommand, + [ + path, + paint, + ], + {#isCursor: isCursor}, + ), + ), + ) as _i5.PathCommand); + + @override + _i6.LineCommand createLineCommand( + _i30.PathWithActionHistory? path, + _i2.Paint? paint, + _i2.Offset? startPoint, + _i2.Offset? endPoint, + ) => + (super.noSuchMethod( + Invocation.method( + #createLineCommand, + [ + path, + paint, + startPoint, + endPoint, + ], + ), + returnValue: _FakeLineCommand_5( + this, + Invocation.method( + #createLineCommand, + [ + path, + paint, + startPoint, + endPoint, + ], + ), + ), + ) as _i6.LineCommand); + + @override + _i7.SquareShapeCommand createSquareShapeCommand( + _i2.Paint? paint, + _i2.Offset? topLeft, + _i2.Offset? topRight, + _i2.Offset? bottomLeft, + _i2.Offset? bottomRight, + _i31.ShapeStyle? style, + ) => + (super.noSuchMethod( + Invocation.method( + #createSquareShapeCommand, + [ + paint, + topLeft, + topRight, + bottomLeft, + bottomRight, + style, + ], + ), + returnValue: _FakeSquareShapeCommand_6( + this, + Invocation.method( + #createSquareShapeCommand, + [ + paint, + topLeft, + topRight, + bottomLeft, + bottomRight, + style, + ], + ), + ), + ) as _i7.SquareShapeCommand); + + @override + _i8.EllipseShapeCommand createEllipseShapeCommand( + _i2.Paint? paint, + double? radiusX, + double? radiusY, + _i2.Offset? center, + _i31.ShapeStyle? style, + double? angle, + ) => + (super.noSuchMethod( + Invocation.method( + #createEllipseShapeCommand, + [ + paint, + radiusX, + radiusY, + center, + style, + angle, + ], + ), + returnValue: _FakeEllipseShapeCommand_7( + this, + Invocation.method( + #createEllipseShapeCommand, + [ + paint, + radiusX, + radiusY, + center, + style, + angle, + ], + ), + ), + ) as _i8.EllipseShapeCommand); + + @override + _i9.ClipboardCommand createClipboardCommand( + _i2.Paint? paint, + _i32.Uint8List? imageData, + _i2.Offset? offset, + double? scale, + double? rotation, + ) => + (super.noSuchMethod( + Invocation.method( + #createClipboardCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + returnValue: _FakeClipboardCommand_8( + this, + Invocation.method( + #createClipboardCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + ), + ) as _i9.ClipboardCommand); + + @override + _i10.ImportCommand createImportCommand( + _i2.Paint? paint, + _i32.Uint8List? imageData, + _i2.Offset? offset, + double? scale, + double? rotation, + ) => + (super.noSuchMethod( + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + returnValue: _FakeImportCommand_9( + this, + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + ), + ) as _i10.ImportCommand); + + @override + _i11.TextCommand createTextCommand( + _i2.Offset? point, + String? text, + _i33.TextStyle? style, + double? fontSize, + _i2.Paint? paint, + double? rotationAngle, { + double? scaleX = 1.0, + double? scaleY = 1.0, + }) => + (super.noSuchMethod( + Invocation.method( + #createTextCommand, + [ + point, + text, + style, + fontSize, + paint, + rotationAngle, + ], + { + #scaleX: scaleX, + #scaleY: scaleY, + }, + ), + returnValue: _FakeTextCommand_10( + this, + Invocation.method( + #createTextCommand, + [ + point, + text, + style, + fontSize, + paint, + rotationAngle, + ], + { + #scaleX: scaleX, + #scaleY: scaleY, + }, + ), + ), + ) as _i11.TextCommand); + + @override + _i12.StarShapeCommand createStarShapeCommand( + _i2.Paint? paint, + int? numPoints, + double? angle, + _i2.Offset? center, + _i31.ShapeStyle? style, + double? radiusX, + double? radiusY, + ) => + (super.noSuchMethod( + Invocation.method( + #createStarShapeCommand, + [ + paint, + numPoints, + angle, + center, + style, + radiusX, + radiusY, + ], + ), + returnValue: _FakeStarShapeCommand_11( + this, + Invocation.method( + #createStarShapeCommand, + [ + paint, + numPoints, + angle, + center, + style, + radiusX, + radiusY, + ], + ), + ), + ) as _i12.StarShapeCommand); + + @override + _i13.HeartShapeCommand createHeartShapeCommand( + _i2.Paint? paint, + double? width, + double? height, + double? angle, + _i2.Offset? center, + _i31.ShapeStyle? style, + ) => + (super.noSuchMethod( + Invocation.method( + #createHeartShapeCommand, + [ + paint, + width, + height, + angle, + center, + style, + ], + ), + returnValue: _FakeHeartShapeCommand_12( + this, + Invocation.method( + #createHeartShapeCommand, + [ + paint, + width, + height, + angle, + center, + style, + ], + ), + ), + ) as _i13.HeartShapeCommand); + + @override + _i14.SprayCommand createSprayCommand( + List<_i2.Offset>? points, + _i2.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createSprayCommand, + [ + points, + paint, + ], + ), + returnValue: _FakeSprayCommand_13( + this, + Invocation.method( + #createSprayCommand, + [ + points, + paint, + ], + ), + ), + ) as _i14.SprayCommand); + + @override + _i15.DeleteRegionCommand createDeleteRegionCommand(_i2.Rect? region) => + (super.noSuchMethod( + Invocation.method( + #createDeleteRegionCommand, + [region], + ), + returnValue: _FakeDeleteRegionCommand_14( + this, + Invocation.method( + #createDeleteRegionCommand, + [region], + ), + ), + ) as _i15.DeleteRegionCommand); + + @override + _i16.ColorChangedCommand createColorChangedCommand( + _i2.Color? oldColor, + _i2.Color? newColor, + _i2.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createColorChangedCommand, + [ + oldColor, + newColor, + paint, + ], + ), + returnValue: _FakeColorChangedCommand_15( + this, + Invocation.method( + #createColorChangedCommand, + [ + oldColor, + newColor, + paint, + ], + ), + ), + ) as _i16.ColorChangedCommand); +} + +/// A class which mocks [ImportCommand]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockImportCommand extends _i1.Mock implements _i10.ImportCommand { + MockImportCommand() { + _i1.throwOnMissingStub(this); + } + + @override + _i32.Uint8List get imageData => (super.noSuchMethod( + Invocation.getter(#imageData), + returnValue: _i32.Uint8List(0), + ) as _i32.Uint8List); + + @override + _i2.Offset get offset => (super.noSuchMethod( + Invocation.getter(#offset), + returnValue: _FakeOffset_0( + this, + Invocation.getter(#offset), + ), + ) as _i2.Offset); + + @override + double get scale => (super.noSuchMethod( + Invocation.getter(#scale), + returnValue: 0.0, + ) as double); + + @override + double get rotation => (super.noSuchMethod( + Invocation.getter(#rotation), + returnValue: 0.0, + ) as double); + + @override + int get version => (super.noSuchMethod( + Invocation.getter(#version), + returnValue: 0, + ) as int); + + @override + String get type => (super.noSuchMethod( + Invocation.getter(#type), + returnValue: _i25.dummyValue( + this, + Invocation.getter(#type), + ), + ) as String); + + @override + List get props => (super.noSuchMethod( + Invocation.getter(#props), + returnValue: [], + ) as List); + + @override + _i2.Paint get paint => (super.noSuchMethod( + Invocation.getter(#paint), + returnValue: _i25.dummyValue<_i2.Paint>( + this, + Invocation.getter(#paint), + ), + ) as _i2.Paint); + + @override + _i17.Logger get logger => (super.noSuchMethod( + Invocation.getter(#logger), + returnValue: _FakeLogger_16( + this, + Invocation.getter(#logger), + ), + ) as _i17.Logger); + + @override + _i34.Future prepareForRuntime() => (super.noSuchMethod( + Invocation.method( + #prepareForRuntime, + [], + ), + returnValue: _i34.Future.value(), + returnValueForMissingStub: _i34.Future.value(), + ) as _i34.Future); + + @override + void call(_i2.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #call, + [canvas], + ), + returnValueForMissingStub: null, + ); + + @override + Map toJson() => (super.noSuchMethod( + Invocation.method( + #toJson, + [], + ), + returnValue: {}, + ) as Map); +} + +/// A class which mocks [Image]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockImage extends _i1.Mock implements _i2.Image { + MockImage() { + _i1.throwOnMissingStub(this); + } + + @override + int get width => (super.noSuchMethod( + Invocation.getter(#width), + returnValue: 0, + ) as int); + + @override + int get height => (super.noSuchMethod( + Invocation.getter(#height), + returnValue: 0, + ) as int); + + @override + bool get debugDisposed => (super.noSuchMethod( + Invocation.getter(#debugDisposed), + returnValue: false, + ) as bool); + + @override + _i2.ColorSpace get colorSpace => (super.noSuchMethod( + Invocation.getter(#colorSpace), + returnValue: _i2.ColorSpace.sRGB, + ) as _i2.ColorSpace); + + @override + void dispose() => super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValueForMissingStub: null, + ); + + @override + _i34.Future<_i32.ByteData?> toByteData( + {_i2.ImageByteFormat? format = _i2.ImageByteFormat.rawRgba}) => + (super.noSuchMethod( + Invocation.method( + #toByteData, + [], + {#format: format}, + ), + returnValue: _i34.Future<_i32.ByteData?>.value(), + ) as _i34.Future<_i32.ByteData?>); + + @override + _i2.Image clone() => (super.noSuchMethod( + Invocation.method( + #clone, + [], + ), + returnValue: _FakeImage_17( + this, + Invocation.method( + #clone, + [], + ), + ), + ) as _i2.Image); + + @override + bool isCloneOf(_i2.Image? other) => (super.noSuchMethod( + Invocation.method( + #isCloneOf, + [other], + ), + returnValue: false, + ) as bool); +} + +/// A class which mocks [LoadImageFromPhotoLibrary]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockLoadImageFromPhotoLibrary extends _i1.Mock + implements _i35.LoadImageFromPhotoLibrary { + MockLoadImageFromPhotoLibrary() { + _i1.throwOnMissingStub(this); + } + + @override + _i18.IImageService get imageService => (super.noSuchMethod( + Invocation.getter(#imageService), + returnValue: _FakeIImageService_18( + this, + Invocation.getter(#imageService), + ), + ) as _i18.IImageService); + + @override + _i19.IPermissionService get permissionService => (super.noSuchMethod( + Invocation.getter(#permissionService), + returnValue: _FakeIPermissionService_19( + this, + Invocation.getter(#permissionService), + ), + ) as _i19.IPermissionService); + + @override + _i20.IPhotoLibraryService get photoLibraryService => (super.noSuchMethod( + Invocation.getter(#photoLibraryService), + returnValue: _FakeIPhotoLibraryService_20( + this, + Invocation.getter(#photoLibraryService), + ), + ) as _i20.IPhotoLibraryService); + + @override + _i34.Future<_i21.Result<_i2.Image, _i36.Failure>> call() => + (super.noSuchMethod( + Invocation.method( + #call, + [], + ), + returnValue: _i34.Future<_i21.Result<_i2.Image, _i36.Failure>>.value( + _FakeResult_21<_i2.Image, _i36.Failure>( + this, + Invocation.method( + #call, + [], + ), + )), + ) as _i34.Future<_i21.Result<_i2.Image, _i36.Failure>>); +} diff --git a/test/unit/tools/pipette_tool_test.mocks.dart b/test/unit/tools/pipette_tool_test.mocks.dart index 20b51656..652153c5 100644 --- a/test/unit/tools/pipette_tool_test.mocks.dart +++ b/test/unit/tools/pipette_tool_test.mocks.dart @@ -3,26 +3,28 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i31; -import 'dart:typed_data' as _i25; -import 'dart:ui' as _i16; +import 'dart:async' as _i32; +import 'dart:typed_data' as _i26; +import 'dart:ui' as _i17; -import 'package:flutter/material.dart' as _i26; -import 'package:logging/logging.dart' as _i18; +import 'package:flutter/material.dart' as _i27; +import 'package:logging/logging.dart' as _i19; import 'package:mockito/mockito.dart' as _i1; -import 'package:mockito/src/dummies.dart' as _i28; +import 'package:mockito/src/dummies.dart' as _i29; import 'package:paintroid/core/commands/command_factory/command_factory.dart' - as _i23; + as _i24; import 'package:paintroid/core/commands/command_implementation/command.dart' as _i2; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' as _i8; import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' - as _i14; + as _i15; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' - as _i13; + as _i14; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' - as _i21; + as _i22; +import 'package:paintroid/core/commands/command_implementation/graphic/import_command.dart' + as _i9; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' as _i5; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' @@ -30,29 +32,29 @@ import 'package:paintroid/core/commands/command_implementation/graphic/path_comm import 'package:paintroid/core/commands/command_implementation/graphic/shape/ellipse_shape_command.dart' as _i7; import 'package:paintroid/core/commands/command_implementation/graphic/shape/heart_shape_command.dart' - as _i11; + as _i12; import 'package:paintroid/core/commands/command_implementation/graphic/shape/square_shape_command.dart' as _i6; import 'package:paintroid/core/commands/command_implementation/graphic/shape/star_shape_command.dart' - as _i10; + as _i11; import 'package:paintroid/core/commands/command_implementation/graphic/spray_command.dart' - as _i12; + as _i13; import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' - as _i9; + as _i10; import 'package:paintroid/core/commands/command_manager/command_manager.dart' - as _i20; + as _i21; import 'package:paintroid/core/commands/graphic_factory/graphic_factory.dart' - as _i32; -import 'package:paintroid/core/commands/path_with_action_history.dart' as _i19; -import 'package:paintroid/core/enums/shape_style.dart' as _i24; -import 'package:paintroid/core/enums/tool_types.dart' as _i29; -import 'package:paintroid/core/providers/state/canvas_state_data.dart' as _i17; + as _i33; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i20; +import 'package:paintroid/core/enums/shape_style.dart' as _i25; +import 'package:paintroid/core/enums/tool_types.dart' as _i30; +import 'package:paintroid/core/providers/state/canvas_state_data.dart' as _i18; import 'package:paintroid/core/providers/state/canvas_state_provider.dart' - as _i30; -import 'package:paintroid/core/providers/state/paint_provider.dart' as _i27; -import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i22; + as _i31; +import 'package:paintroid/core/providers/state/paint_provider.dart' as _i28; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i23; import 'package:paintroid/core/tools/tool_data.dart' as _i3; -import 'package:riverpod_annotation/riverpod_annotation.dart' as _i15; +import 'package:riverpod_annotation/riverpod_annotation.dart' as _i16; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -140,8 +142,18 @@ class _FakeClipboardCommand_6 extends _i1.SmartFake ); } -class _FakeTextCommand_7 extends _i1.SmartFake implements _i9.TextCommand { - _FakeTextCommand_7( +class _FakeImportCommand_7 extends _i1.SmartFake implements _i9.ImportCommand { + _FakeImportCommand_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeTextCommand_8 extends _i1.SmartFake implements _i10.TextCommand { + _FakeTextCommand_8( Object parent, Invocation parentInvocation, ) : super( @@ -150,9 +162,9 @@ class _FakeTextCommand_7 extends _i1.SmartFake implements _i9.TextCommand { ); } -class _FakeStarShapeCommand_8 extends _i1.SmartFake - implements _i10.StarShapeCommand { - _FakeStarShapeCommand_8( +class _FakeStarShapeCommand_9 extends _i1.SmartFake + implements _i11.StarShapeCommand { + _FakeStarShapeCommand_9( Object parent, Invocation parentInvocation, ) : super( @@ -161,9 +173,9 @@ class _FakeStarShapeCommand_8 extends _i1.SmartFake ); } -class _FakeHeartShapeCommand_9 extends _i1.SmartFake - implements _i11.HeartShapeCommand { - _FakeHeartShapeCommand_9( +class _FakeHeartShapeCommand_10 extends _i1.SmartFake + implements _i12.HeartShapeCommand { + _FakeHeartShapeCommand_10( Object parent, Invocation parentInvocation, ) : super( @@ -172,8 +184,8 @@ class _FakeHeartShapeCommand_9 extends _i1.SmartFake ); } -class _FakeSprayCommand_10 extends _i1.SmartFake implements _i12.SprayCommand { - _FakeSprayCommand_10( +class _FakeSprayCommand_11 extends _i1.SmartFake implements _i13.SprayCommand { + _FakeSprayCommand_11( Object parent, Invocation parentInvocation, ) : super( @@ -182,9 +194,9 @@ class _FakeSprayCommand_10 extends _i1.SmartFake implements _i12.SprayCommand { ); } -class _FakeDeleteRegionCommand_11 extends _i1.SmartFake - implements _i13.DeleteRegionCommand { - _FakeDeleteRegionCommand_11( +class _FakeDeleteRegionCommand_12 extends _i1.SmartFake + implements _i14.DeleteRegionCommand { + _FakeDeleteRegionCommand_12( Object parent, Invocation parentInvocation, ) : super( @@ -193,9 +205,9 @@ class _FakeDeleteRegionCommand_11 extends _i1.SmartFake ); } -class _FakeColorChangedCommand_12 extends _i1.SmartFake - implements _i14.ColorChangedCommand { - _FakeColorChangedCommand_12( +class _FakeColorChangedCommand_13 extends _i1.SmartFake + implements _i15.ColorChangedCommand { + _FakeColorChangedCommand_13( Object parent, Invocation parentInvocation, ) : super( @@ -204,9 +216,9 @@ class _FakeColorChangedCommand_12 extends _i1.SmartFake ); } -class _FakeNotifierProviderRef_13 extends _i1.SmartFake - implements _i15.NotifierProviderRef { - _FakeNotifierProviderRef_13( +class _FakeNotifierProviderRef_14 extends _i1.SmartFake + implements _i16.NotifierProviderRef { + _FakeNotifierProviderRef_14( Object parent, Invocation parentInvocation, ) : super( @@ -215,8 +227,8 @@ class _FakeNotifierProviderRef_13 extends _i1.SmartFake ); } -class _FakeSize_14 extends _i1.SmartFake implements _i16.Size { - _FakeSize_14( +class _FakeSize_15 extends _i1.SmartFake implements _i17.Size { + _FakeSize_15( Object parent, Invocation parentInvocation, ) : super( @@ -225,9 +237,9 @@ class _FakeSize_14 extends _i1.SmartFake implements _i16.Size { ); } -class _FakeCanvasStateData_15 extends _i1.SmartFake - implements _i17.CanvasStateData { - _FakeCanvasStateData_15( +class _FakeCanvasStateData_16 extends _i1.SmartFake + implements _i18.CanvasStateData { + _FakeCanvasStateData_16( Object parent, Invocation parentInvocation, ) : super( @@ -236,8 +248,8 @@ class _FakeCanvasStateData_15 extends _i1.SmartFake ); } -class _FakeLogger_16 extends _i1.SmartFake implements _i18.Logger { - _FakeLogger_16( +class _FakeLogger_17 extends _i1.SmartFake implements _i19.Logger { + _FakeLogger_17( Object parent, Invocation parentInvocation, ) : super( @@ -246,8 +258,8 @@ class _FakeLogger_16 extends _i1.SmartFake implements _i18.Logger { ); } -class _FakeColor_17 extends _i1.SmartFake implements _i16.Color { - _FakeColor_17( +class _FakeColor_18 extends _i1.SmartFake implements _i17.Color { + _FakeColor_18( Object parent, Invocation parentInvocation, ) : super( @@ -256,9 +268,9 @@ class _FakeColor_17 extends _i1.SmartFake implements _i16.Color { ); } -class _FakePathWithActionHistory_18 extends _i1.SmartFake - implements _i19.PathWithActionHistory { - _FakePathWithActionHistory_18( +class _FakePathWithActionHistory_19 extends _i1.SmartFake + implements _i20.PathWithActionHistory { + _FakePathWithActionHistory_19( Object parent, Invocation parentInvocation, ) : super( @@ -267,9 +279,9 @@ class _FakePathWithActionHistory_18 extends _i1.SmartFake ); } -class _FakePictureRecorder_19 extends _i1.SmartFake - implements _i16.PictureRecorder { - _FakePictureRecorder_19( +class _FakePictureRecorder_20 extends _i1.SmartFake + implements _i17.PictureRecorder { + _FakePictureRecorder_20( Object parent, Invocation parentInvocation, ) : super( @@ -278,8 +290,8 @@ class _FakePictureRecorder_19 extends _i1.SmartFake ); } -class _FakeCanvas_20 extends _i1.SmartFake implements _i16.Canvas { - _FakeCanvas_20( +class _FakeCanvas_21 extends _i1.SmartFake implements _i17.Canvas { + _FakeCanvas_21( Object parent, Invocation parentInvocation, ) : super( @@ -291,7 +303,7 @@ class _FakeCanvas_20 extends _i1.SmartFake implements _i16.Canvas { /// A class which mocks [CommandManager]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandManager extends _i1.Mock implements _i20.CommandManager { +class MockCommandManager extends _i1.Mock implements _i21.CommandManager { MockCommandManager() { _i1.throwOnMissingStub(this); } @@ -309,7 +321,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ) as List<_i2.Command>); @override - void addGraphicCommand(_i21.GraphicCommand? command) => super.noSuchMethod( + void addGraphicCommand(_i22.GraphicCommand? command) => super.noSuchMethod( Invocation.method( #addGraphicCommand, [command], @@ -327,7 +339,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ); @override - void executeLastCommand(_i16.Canvas? canvas) => super.noSuchMethod( + void executeLastCommand(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeLastCommand, [canvas], @@ -336,7 +348,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ); @override - void executeAllCommands(_i16.Canvas? canvas) => super.noSuchMethod( + void executeAllCommands(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeAllCommands, [canvas], @@ -375,7 +387,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { @override void drawLineToolGhostPaths( - _i16.Canvas? canvas, + _i17.Canvas? canvas, _i5.LineCommand? ingoingGhostPathCommand, _i5.LineCommand? outgoingGhostPathCommand, ) => @@ -393,8 +405,8 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { @override void drawLineToolVertices( - _i16.Canvas? canvas, - _i22.VertexStack? vertexStack, + _i17.Canvas? canvas, + _i23.VertexStack? vertexStack, ) => super.noSuchMethod( Invocation.method( @@ -432,7 +444,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ); @override - _i3.ToolData getNextTool(_i20.ActionType? actionType) => (super.noSuchMethod( + _i3.ToolData getNextTool(_i21.ActionType? actionType) => (super.noSuchMethod( Invocation.method( #getNextTool, [actionType], @@ -459,15 +471,15 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { /// A class which mocks [CommandFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { +class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { MockCommandFactory() { _i1.throwOnMissingStub(this); } @override _i4.PathCommand createPathCommand( - _i19.PathWithActionHistory? path, - _i16.Paint? paint, { + _i20.PathWithActionHistory? path, + _i17.Paint? paint, { bool? isCursor = false, }) => (super.noSuchMethod( @@ -494,10 +506,10 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i5.LineCommand createLineCommand( - _i19.PathWithActionHistory? path, - _i16.Paint? paint, - _i16.Offset? startPoint, - _i16.Offset? endPoint, + _i20.PathWithActionHistory? path, + _i17.Paint? paint, + _i17.Offset? startPoint, + _i17.Offset? endPoint, ) => (super.noSuchMethod( Invocation.method( @@ -525,12 +537,12 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i6.SquareShapeCommand createSquareShapeCommand( - _i16.Paint? paint, - _i16.Offset? topLeft, - _i16.Offset? topRight, - _i16.Offset? bottomLeft, - _i16.Offset? bottomRight, - _i24.ShapeStyle? style, + _i17.Paint? paint, + _i17.Offset? topLeft, + _i17.Offset? topRight, + _i17.Offset? bottomLeft, + _i17.Offset? bottomRight, + _i25.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -562,11 +574,11 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i7.EllipseShapeCommand createEllipseShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, double? radiusX, double? radiusY, - _i16.Offset? center, - _i24.ShapeStyle? style, + _i17.Offset? center, + _i25.ShapeStyle? style, double? angle, ) => (super.noSuchMethod( @@ -599,9 +611,9 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i8.ClipboardCommand createClipboardCommand( - _i16.Paint? paint, - _i25.Uint8List? imageData, - _i16.Offset? offset, + _i17.Paint? paint, + _i26.Uint8List? imageData, + _i17.Offset? offset, double? scale, double? rotation, ) => @@ -632,12 +644,46 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ) as _i8.ClipboardCommand); @override - _i9.TextCommand createTextCommand( - _i16.Offset? point, + _i9.ImportCommand createImportCommand( + _i17.Paint? paint, + _i26.Uint8List? imageData, + _i17.Offset? offset, + double? scale, + double? rotation, + ) => + (super.noSuchMethod( + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + returnValue: _FakeImportCommand_7( + this, + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + ), + ) as _i9.ImportCommand); + + @override + _i10.TextCommand createTextCommand( + _i17.Offset? point, String? text, - _i26.TextStyle? style, + _i27.TextStyle? style, double? fontSize, - _i16.Paint? paint, + _i17.Paint? paint, double? rotationAngle, { double? scaleX = 1.0, double? scaleY = 1.0, @@ -658,7 +704,7 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { #scaleY: scaleY, }, ), - returnValue: _FakeTextCommand_7( + returnValue: _FakeTextCommand_8( this, Invocation.method( #createTextCommand, @@ -676,15 +722,15 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { }, ), ), - ) as _i9.TextCommand); + ) as _i10.TextCommand); @override - _i10.StarShapeCommand createStarShapeCommand( - _i16.Paint? paint, + _i11.StarShapeCommand createStarShapeCommand( + _i17.Paint? paint, int? numPoints, double? angle, - _i16.Offset? center, - _i24.ShapeStyle? style, + _i17.Offset? center, + _i25.ShapeStyle? style, double? radiusX, double? radiusY, ) => @@ -701,7 +747,7 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { radiusY, ], ), - returnValue: _FakeStarShapeCommand_8( + returnValue: _FakeStarShapeCommand_9( this, Invocation.method( #createStarShapeCommand, @@ -716,16 +762,16 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ], ), ), - ) as _i10.StarShapeCommand); + ) as _i11.StarShapeCommand); @override - _i11.HeartShapeCommand createHeartShapeCommand( - _i16.Paint? paint, + _i12.HeartShapeCommand createHeartShapeCommand( + _i17.Paint? paint, double? width, double? height, double? angle, - _i16.Offset? center, - _i24.ShapeStyle? style, + _i17.Offset? center, + _i25.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -739,7 +785,7 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { style, ], ), - returnValue: _FakeHeartShapeCommand_9( + returnValue: _FakeHeartShapeCommand_10( this, Invocation.method( #createHeartShapeCommand, @@ -753,12 +799,12 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ], ), ), - ) as _i11.HeartShapeCommand); + ) as _i12.HeartShapeCommand); @override - _i12.SprayCommand createSprayCommand( - List<_i16.Offset>? points, - _i16.Paint? paint, + _i13.SprayCommand createSprayCommand( + List<_i17.Offset>? points, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -768,7 +814,7 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { paint, ], ), - returnValue: _FakeSprayCommand_10( + returnValue: _FakeSprayCommand_11( this, Invocation.method( #createSprayCommand, @@ -778,29 +824,29 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ], ), ), - ) as _i12.SprayCommand); + ) as _i13.SprayCommand); @override - _i13.DeleteRegionCommand createDeleteRegionCommand(_i16.Rect? region) => + _i14.DeleteRegionCommand createDeleteRegionCommand(_i17.Rect? region) => (super.noSuchMethod( Invocation.method( #createDeleteRegionCommand, [region], ), - returnValue: _FakeDeleteRegionCommand_11( + returnValue: _FakeDeleteRegionCommand_12( this, Invocation.method( #createDeleteRegionCommand, [region], ), ), - ) as _i13.DeleteRegionCommand); + ) as _i14.DeleteRegionCommand); @override - _i14.ColorChangedCommand createColorChangedCommand( - _i16.Color? oldColor, - _i16.Color? newColor, - _i16.Paint? paint, + _i15.ColorChangedCommand createColorChangedCommand( + _i17.Color? oldColor, + _i17.Color? newColor, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -811,7 +857,7 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { paint, ], ), - returnValue: _FakeColorChangedCommand_12( + returnValue: _FakeColorChangedCommand_13( this, Invocation.method( #createColorChangedCommand, @@ -822,46 +868,46 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ], ), ), - ) as _i14.ColorChangedCommand); + ) as _i15.ColorChangedCommand); } /// A class which mocks [PaintProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { +class MockPaintProvider extends _i1.Mock implements _i28.PaintProvider { MockPaintProvider() { _i1.throwOnMissingStub(this); } @override - _i16.Paint get currentState => (super.noSuchMethod( + _i17.Paint get currentState => (super.noSuchMethod( Invocation.getter(#currentState), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.getter(#currentState), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i15.NotifierProviderRef<_i16.Paint> get ref => (super.noSuchMethod( + _i16.NotifierProviderRef<_i17.Paint> get ref => (super.noSuchMethod( Invocation.getter(#ref), - returnValue: _FakeNotifierProviderRef_13<_i16.Paint>( + returnValue: _FakeNotifierProviderRef_14<_i17.Paint>( this, Invocation.getter(#ref), ), - ) as _i15.NotifierProviderRef<_i16.Paint>); + ) as _i16.NotifierProviderRef<_i17.Paint>); @override - _i16.Paint get state => (super.noSuchMethod( + _i17.Paint get state => (super.noSuchMethod( Invocation.getter(#state), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.getter(#state), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set state(_i16.Paint? value) => super.noSuchMethod( + set state(_i17.Paint? value) => super.noSuchMethod( Invocation.setter( #state, value, @@ -870,19 +916,19 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - _i16.Paint build() => (super.noSuchMethod( + _i17.Paint build() => (super.noSuchMethod( Invocation.method( #build, [], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #build, [], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override void updateStrokeWidth(double? newStrokeWidth) => super.noSuchMethod( @@ -894,7 +940,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateStrokeCap(_i16.StrokeCap? newStrokeCap) => super.noSuchMethod( + void updateStrokeCap(_i17.StrokeCap? newStrokeCap) => super.noSuchMethod( Invocation.method( #updateStrokeCap, [newStrokeCap], @@ -903,7 +949,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateColor(_i16.Color? newColor) => super.noSuchMethod( + void updateColor(_i17.Color? newColor) => super.noSuchMethod( Invocation.method( #updateColor, [newColor], @@ -912,7 +958,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateBlendMode(_i16.BlendMode? newMode) => super.noSuchMethod( + void updateBlendMode(_i17.BlendMode? newMode) => super.noSuchMethod( Invocation.method( #updateBlendMode, [newMode], @@ -921,7 +967,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateBlendModeByToolType(_i29.ToolType? toolType) => super.noSuchMethod( + void updateBlendModeByToolType(_i30.ToolType? toolType) => super.noSuchMethod( Invocation.method( #updateBlendModeByToolType, [toolType], @@ -932,8 +978,8 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { @override void listenSelf( void Function( - _i16.Paint?, - _i16.Paint, + _i17.Paint?, + _i17.Paint, )? listener, { void Function( Object, @@ -951,8 +997,8 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { @override bool updateShouldNotify( - _i16.Paint? previous, - _i16.Paint? next, + _i17.Paint? previous, + _i17.Paint? next, ) => (super.noSuchMethod( Invocation.method( @@ -970,22 +1016,22 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { /// /// See the documentation for Mockito's code generation for more information. class MockCanvasStateProvider extends _i1.Mock - implements _i30.CanvasStateProvider { + implements _i31.CanvasStateProvider { MockCanvasStateProvider() { _i1.throwOnMissingStub(this); } @override - _i16.Size get initialCanvasSize => (super.noSuchMethod( + _i17.Size get initialCanvasSize => (super.noSuchMethod( Invocation.getter(#initialCanvasSize), - returnValue: _FakeSize_14( + returnValue: _FakeSize_15( this, Invocation.getter(#initialCanvasSize), ), - ) as _i16.Size); + ) as _i17.Size); @override - set initialCanvasSize(_i16.Size? _initialCanvasSize) => super.noSuchMethod( + set initialCanvasSize(_i17.Size? _initialCanvasSize) => super.noSuchMethod( Invocation.setter( #initialCanvasSize, _initialCanvasSize, @@ -994,34 +1040,34 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i17.CanvasStateData get currentState => (super.noSuchMethod( + _i18.CanvasStateData get currentState => (super.noSuchMethod( Invocation.getter(#currentState), - returnValue: _FakeCanvasStateData_15( + returnValue: _FakeCanvasStateData_16( this, Invocation.getter(#currentState), ), - ) as _i17.CanvasStateData); + ) as _i18.CanvasStateData); @override - _i15.NotifierProviderRef<_i17.CanvasStateData> get ref => (super.noSuchMethod( + _i16.NotifierProviderRef<_i18.CanvasStateData> get ref => (super.noSuchMethod( Invocation.getter(#ref), - returnValue: _FakeNotifierProviderRef_13<_i17.CanvasStateData>( + returnValue: _FakeNotifierProviderRef_14<_i18.CanvasStateData>( this, Invocation.getter(#ref), ), - ) as _i15.NotifierProviderRef<_i17.CanvasStateData>); + ) as _i16.NotifierProviderRef<_i18.CanvasStateData>); @override - _i17.CanvasStateData get state => (super.noSuchMethod( + _i18.CanvasStateData get state => (super.noSuchMethod( Invocation.getter(#state), - returnValue: _FakeCanvasStateData_15( + returnValue: _FakeCanvasStateData_16( this, Invocation.getter(#state), ), - ) as _i17.CanvasStateData); + ) as _i18.CanvasStateData); @override - set state(_i17.CanvasStateData? value) => super.noSuchMethod( + set state(_i18.CanvasStateData? value) => super.noSuchMethod( Invocation.setter( #state, value, @@ -1030,13 +1076,13 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i18.Logger get logger => (super.noSuchMethod( + _i19.Logger get logger => (super.noSuchMethod( Invocation.getter(#logger), - returnValue: _FakeLogger_16( + returnValue: _FakeLogger_17( this, Invocation.getter(#logger), ), - ) as _i18.Logger); + ) as _i19.Logger); @override void requestResetView() => super.noSuchMethod( @@ -1048,22 +1094,22 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i17.CanvasStateData build() => (super.noSuchMethod( + _i18.CanvasStateData build() => (super.noSuchMethod( Invocation.method( #build, [], ), - returnValue: _FakeCanvasStateData_15( + returnValue: _FakeCanvasStateData_16( this, Invocation.method( #build, [], ), ), - ) as _i17.CanvasStateData); + ) as _i18.CanvasStateData); @override - void setBackgroundImage(_i16.Image? image) => super.noSuchMethod( + void setBackgroundImage(_i17.Image? image) => super.noSuchMethod( Invocation.method( #setBackgroundImage, [image], @@ -1081,42 +1127,42 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i31.Future updateCachedImage() => (super.noSuchMethod( + _i32.Future updateCachedImage() => (super.noSuchMethod( Invocation.method( #updateCachedImage, [], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); @override - _i31.Future resetCanvasWithNewCommands( + _i32.Future resetCanvasWithNewCommands( Iterable<_i2.Command>? commands) => (super.noSuchMethod( Invocation.method( #resetCanvasWithNewCommands, [commands], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); @override - _i31.Future resetCanvasWithExistingCommands() => (super.noSuchMethod( + _i32.Future resetCanvasWithExistingCommands() => (super.noSuchMethod( Invocation.method( #resetCanvasWithExistingCommands, [], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); @override void listenSelf( void Function( - _i17.CanvasStateData?, - _i17.CanvasStateData, + _i18.CanvasStateData?, + _i18.CanvasStateData, )? listener, { void Function( Object, @@ -1134,8 +1180,8 @@ class MockCanvasStateProvider extends _i1.Mock @override bool updateShouldNotify( - _i17.CanvasStateData? previous, - _i17.CanvasStateData? next, + _i18.CanvasStateData? previous, + _i18.CanvasStateData? next, ) => (super.noSuchMethod( Invocation.method( @@ -1153,7 +1199,7 @@ class MockCanvasStateProvider extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockColorChangedCommand extends _i1.Mock - implements _i14.ColorChangedCommand { + implements _i15.ColorChangedCommand { MockColorChangedCommand() { _i1.throwOnMissingStub(this); } @@ -1161,7 +1207,7 @@ class MockColorChangedCommand extends _i1.Mock @override String get type => (super.noSuchMethod( Invocation.getter(#type), - returnValue: _i28.dummyValue( + returnValue: _i29.dummyValue( this, Invocation.getter(#type), ), @@ -1174,22 +1220,22 @@ class MockColorChangedCommand extends _i1.Mock ) as int); @override - _i16.Color get oldColor => (super.noSuchMethod( + _i17.Color get oldColor => (super.noSuchMethod( Invocation.getter(#oldColor), - returnValue: _FakeColor_17( + returnValue: _FakeColor_18( this, Invocation.getter(#oldColor), ), - ) as _i16.Color); + ) as _i17.Color); @override - _i16.Color get newColor => (super.noSuchMethod( + _i17.Color get newColor => (super.noSuchMethod( Invocation.getter(#newColor), - returnValue: _FakeColor_17( + returnValue: _FakeColor_18( this, Invocation.getter(#newColor), ), - ) as _i16.Color); + ) as _i17.Color); @override List get props => (super.noSuchMethod( @@ -1198,16 +1244,16 @@ class MockColorChangedCommand extends _i1.Mock ) as List); @override - _i16.Paint get paint => (super.noSuchMethod( + _i17.Paint get paint => (super.noSuchMethod( Invocation.getter(#paint), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.getter(#paint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - void call(_i16.Canvas? canvas) => super.noSuchMethod( + void call(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #call, [canvas], @@ -1225,89 +1271,89 @@ class MockColorChangedCommand extends _i1.Mock ) as Map); @override - _i31.Future prepareForRuntime() => (super.noSuchMethod( + _i32.Future prepareForRuntime() => (super.noSuchMethod( Invocation.method( #prepareForRuntime, [], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); } /// A class which mocks [GraphicFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockGraphicFactory extends _i1.Mock implements _i32.GraphicFactory { +class MockGraphicFactory extends _i1.Mock implements _i33.GraphicFactory { MockGraphicFactory() { _i1.throwOnMissingStub(this); } @override - _i16.Paint createPaint() => (super.noSuchMethod( + _i17.Paint createPaint() => (super.noSuchMethod( Invocation.method( #createPaint, [], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #createPaint, [], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i19.PathWithActionHistory createPathWithActionHistory() => + _i20.PathWithActionHistory createPathWithActionHistory() => (super.noSuchMethod( Invocation.method( #createPathWithActionHistory, [], ), - returnValue: _FakePathWithActionHistory_18( + returnValue: _FakePathWithActionHistory_19( this, Invocation.method( #createPathWithActionHistory, [], ), ), - ) as _i19.PathWithActionHistory); + ) as _i20.PathWithActionHistory); @override - _i16.PictureRecorder createPictureRecorder() => (super.noSuchMethod( + _i17.PictureRecorder createPictureRecorder() => (super.noSuchMethod( Invocation.method( #createPictureRecorder, [], ), - returnValue: _FakePictureRecorder_19( + returnValue: _FakePictureRecorder_20( this, Invocation.method( #createPictureRecorder, [], ), ), - ) as _i16.PictureRecorder); + ) as _i17.PictureRecorder); @override - _i16.Canvas createCanvasWithRecorder(_i16.PictureRecorder? recorder) => + _i17.Canvas createCanvasWithRecorder(_i17.PictureRecorder? recorder) => (super.noSuchMethod( Invocation.method( #createCanvasWithRecorder, [recorder], ), - returnValue: _FakeCanvas_20( + returnValue: _FakeCanvas_21( this, Invocation.method( #createCanvasWithRecorder, [recorder], ), ), - ) as _i16.Canvas); + ) as _i17.Canvas); @override - _i16.Paint createWatercolorPaint( - _i16.Paint? originalPaint, + _i17.Paint createWatercolorPaint( + _i17.Paint? originalPaint, double? blurSigma, ) => (super.noSuchMethod( @@ -1318,7 +1364,7 @@ class MockGraphicFactory extends _i1.Mock implements _i32.GraphicFactory { blurSigma, ], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #createWatercolorPaint, @@ -1328,20 +1374,20 @@ class MockGraphicFactory extends _i1.Mock implements _i32.GraphicFactory { ], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i16.Paint copyPaint(_i16.Paint? original) => (super.noSuchMethod( + _i17.Paint copyPaint(_i17.Paint? original) => (super.noSuchMethod( Invocation.method( #copyPaint, [original], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #copyPaint, [original], ), ), - ) as _i16.Paint); + ) as _i17.Paint); } diff --git a/test/unit/tools/text_tool_test.mocks.dart b/test/unit/tools/text_tool_test.mocks.dart index 7d9297a5..606a8908 100644 --- a/test/unit/tools/text_tool_test.mocks.dart +++ b/test/unit/tools/text_tool_test.mocks.dart @@ -3,25 +3,27 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i26; -import 'dart:typed_data' as _i24; -import 'dart:ui' as _i16; +import 'dart:async' as _i27; +import 'dart:typed_data' as _i25; +import 'dart:ui' as _i17; -import 'package:flutter/material.dart' as _i17; +import 'package:flutter/material.dart' as _i18; import 'package:mockito/mockito.dart' as _i1; -import 'package:mockito/src/dummies.dart' as _i25; +import 'package:mockito/src/dummies.dart' as _i26; import 'package:paintroid/core/commands/command_factory/command_factory.dart' - as _i22; + as _i23; import 'package:paintroid/core/commands/command_implementation/command.dart' as _i2; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' as _i8; import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' - as _i14; + as _i15; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' - as _i13; + as _i14; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' - as _i20; + as _i21; +import 'package:paintroid/core/commands/command_implementation/graphic/import_command.dart' + as _i9; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' as _i5; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' @@ -29,27 +31,27 @@ import 'package:paintroid/core/commands/command_implementation/graphic/path_comm import 'package:paintroid/core/commands/command_implementation/graphic/shape/ellipse_shape_command.dart' as _i7; import 'package:paintroid/core/commands/command_implementation/graphic/shape/heart_shape_command.dart' - as _i11; + as _i12; import 'package:paintroid/core/commands/command_implementation/graphic/shape/square_shape_command.dart' as _i6; import 'package:paintroid/core/commands/command_implementation/graphic/shape/star_shape_command.dart' - as _i10; + as _i11; import 'package:paintroid/core/commands/command_implementation/graphic/spray_command.dart' - as _i12; + as _i13; import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' - as _i9; + as _i10; import 'package:paintroid/core/commands/command_manager/command_manager.dart' - as _i19; + as _i20; import 'package:paintroid/core/commands/graphic_factory/graphic_factory.dart' - as _i27; -import 'package:paintroid/core/commands/path_with_action_history.dart' as _i18; -import 'package:paintroid/core/enums/bounding_box_action.dart' as _i29; -import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i30; -import 'package:paintroid/core/enums/shape_style.dart' as _i23; -import 'package:paintroid/core/tools/bounding_box.dart' as _i28; -import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i21; + as _i28; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i19; +import 'package:paintroid/core/enums/bounding_box_action.dart' as _i30; +import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i31; +import 'package:paintroid/core/enums/shape_style.dart' as _i24; +import 'package:paintroid/core/tools/bounding_box.dart' as _i29; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i22; import 'package:paintroid/core/tools/tool_data.dart' as _i3; -import 'package:riverpod/src/internals.dart' as _i15; +import 'package:riverpod/src/internals.dart' as _i16; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -137,8 +139,18 @@ class _FakeClipboardCommand_6 extends _i1.SmartFake ); } -class _FakeTextCommand_7 extends _i1.SmartFake implements _i9.TextCommand { - _FakeTextCommand_7( +class _FakeImportCommand_7 extends _i1.SmartFake implements _i9.ImportCommand { + _FakeImportCommand_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeTextCommand_8 extends _i1.SmartFake implements _i10.TextCommand { + _FakeTextCommand_8( Object parent, Invocation parentInvocation, ) : super( @@ -147,9 +159,9 @@ class _FakeTextCommand_7 extends _i1.SmartFake implements _i9.TextCommand { ); } -class _FakeStarShapeCommand_8 extends _i1.SmartFake - implements _i10.StarShapeCommand { - _FakeStarShapeCommand_8( +class _FakeStarShapeCommand_9 extends _i1.SmartFake + implements _i11.StarShapeCommand { + _FakeStarShapeCommand_9( Object parent, Invocation parentInvocation, ) : super( @@ -158,9 +170,9 @@ class _FakeStarShapeCommand_8 extends _i1.SmartFake ); } -class _FakeHeartShapeCommand_9 extends _i1.SmartFake - implements _i11.HeartShapeCommand { - _FakeHeartShapeCommand_9( +class _FakeHeartShapeCommand_10 extends _i1.SmartFake + implements _i12.HeartShapeCommand { + _FakeHeartShapeCommand_10( Object parent, Invocation parentInvocation, ) : super( @@ -169,8 +181,8 @@ class _FakeHeartShapeCommand_9 extends _i1.SmartFake ); } -class _FakeSprayCommand_10 extends _i1.SmartFake implements _i12.SprayCommand { - _FakeSprayCommand_10( +class _FakeSprayCommand_11 extends _i1.SmartFake implements _i13.SprayCommand { + _FakeSprayCommand_11( Object parent, Invocation parentInvocation, ) : super( @@ -179,9 +191,9 @@ class _FakeSprayCommand_10 extends _i1.SmartFake implements _i12.SprayCommand { ); } -class _FakeDeleteRegionCommand_11 extends _i1.SmartFake - implements _i13.DeleteRegionCommand { - _FakeDeleteRegionCommand_11( +class _FakeDeleteRegionCommand_12 extends _i1.SmartFake + implements _i14.DeleteRegionCommand { + _FakeDeleteRegionCommand_12( Object parent, Invocation parentInvocation, ) : super( @@ -190,9 +202,9 @@ class _FakeDeleteRegionCommand_11 extends _i1.SmartFake ); } -class _FakeColorChangedCommand_12 extends _i1.SmartFake - implements _i14.ColorChangedCommand { - _FakeColorChangedCommand_12( +class _FakeColorChangedCommand_13 extends _i1.SmartFake + implements _i15.ColorChangedCommand { + _FakeColorChangedCommand_13( Object parent, Invocation parentInvocation, ) : super( @@ -201,9 +213,9 @@ class _FakeColorChangedCommand_12 extends _i1.SmartFake ); } -class _FakeProviderContainer_13 extends _i1.SmartFake - implements _i15.ProviderContainer { - _FakeProviderContainer_13( +class _FakeProviderContainer_14 extends _i1.SmartFake + implements _i16.ProviderContainer { + _FakeProviderContainer_14( Object parent, Invocation parentInvocation, ) : super( @@ -212,9 +224,9 @@ class _FakeProviderContainer_13 extends _i1.SmartFake ); } -class _FakeKeepAliveLink_14 extends _i1.SmartFake - implements _i15.KeepAliveLink { - _FakeKeepAliveLink_14( +class _FakeKeepAliveLink_15 extends _i1.SmartFake + implements _i16.KeepAliveLink { + _FakeKeepAliveLink_15( Object parent, Invocation parentInvocation, ) : super( @@ -223,9 +235,9 @@ class _FakeKeepAliveLink_14 extends _i1.SmartFake ); } -class _FakeProviderSubscription_15 extends _i1.SmartFake - implements _i15.ProviderSubscription { - _FakeProviderSubscription_15( +class _FakeProviderSubscription_16 extends _i1.SmartFake + implements _i16.ProviderSubscription { + _FakeProviderSubscription_16( Object parent, Invocation parentInvocation, ) : super( @@ -234,8 +246,8 @@ class _FakeProviderSubscription_15 extends _i1.SmartFake ); } -class _FakeRect_16 extends _i1.SmartFake implements _i16.Rect { - _FakeRect_16( +class _FakeRect_17 extends _i1.SmartFake implements _i17.Rect { + _FakeRect_17( Object parent, Invocation parentInvocation, ) : super( @@ -244,8 +256,8 @@ class _FakeRect_16 extends _i1.SmartFake implements _i16.Rect { ); } -class _FakeOffset_17 extends _i1.SmartFake implements _i16.Offset { - _FakeOffset_17( +class _FakeOffset_18 extends _i1.SmartFake implements _i17.Offset { + _FakeOffset_18( Object parent, Invocation parentInvocation, ) : super( @@ -254,8 +266,8 @@ class _FakeOffset_17 extends _i1.SmartFake implements _i16.Offset { ); } -class _FakeTextStyle_18 extends _i1.SmartFake implements _i17.TextStyle { - _FakeTextStyle_18( +class _FakeTextStyle_19 extends _i1.SmartFake implements _i18.TextStyle { + _FakeTextStyle_19( Object parent, Invocation parentInvocation, ) : super( @@ -265,13 +277,13 @@ class _FakeTextStyle_18 extends _i1.SmartFake implements _i17.TextStyle { @override String toString( - {_i17.DiagnosticLevel? minLevel = _i17.DiagnosticLevel.info}) => + {_i18.DiagnosticLevel? minLevel = _i18.DiagnosticLevel.info}) => super.toString(); } -class _FakePathWithActionHistory_19 extends _i1.SmartFake - implements _i18.PathWithActionHistory { - _FakePathWithActionHistory_19( +class _FakePathWithActionHistory_20 extends _i1.SmartFake + implements _i19.PathWithActionHistory { + _FakePathWithActionHistory_20( Object parent, Invocation parentInvocation, ) : super( @@ -280,9 +292,9 @@ class _FakePathWithActionHistory_19 extends _i1.SmartFake ); } -class _FakePictureRecorder_20 extends _i1.SmartFake - implements _i16.PictureRecorder { - _FakePictureRecorder_20( +class _FakePictureRecorder_21 extends _i1.SmartFake + implements _i17.PictureRecorder { + _FakePictureRecorder_21( Object parent, Invocation parentInvocation, ) : super( @@ -291,8 +303,8 @@ class _FakePictureRecorder_20 extends _i1.SmartFake ); } -class _FakeCanvas_21 extends _i1.SmartFake implements _i16.Canvas { - _FakeCanvas_21( +class _FakeCanvas_22 extends _i1.SmartFake implements _i17.Canvas { + _FakeCanvas_22( Object parent, Invocation parentInvocation, ) : super( @@ -304,7 +316,7 @@ class _FakeCanvas_21 extends _i1.SmartFake implements _i16.Canvas { /// A class which mocks [CommandManager]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandManager extends _i1.Mock implements _i19.CommandManager { +class MockCommandManager extends _i1.Mock implements _i20.CommandManager { MockCommandManager() { _i1.throwOnMissingStub(this); } @@ -322,7 +334,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ) as List<_i2.Command>); @override - void addGraphicCommand(_i20.GraphicCommand? command) => super.noSuchMethod( + void addGraphicCommand(_i21.GraphicCommand? command) => super.noSuchMethod( Invocation.method( #addGraphicCommand, [command], @@ -340,7 +352,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ); @override - void executeLastCommand(_i16.Canvas? canvas) => super.noSuchMethod( + void executeLastCommand(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeLastCommand, [canvas], @@ -349,7 +361,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ); @override - void executeAllCommands(_i16.Canvas? canvas) => super.noSuchMethod( + void executeAllCommands(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeAllCommands, [canvas], @@ -388,7 +400,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { @override void drawLineToolGhostPaths( - _i16.Canvas? canvas, + _i17.Canvas? canvas, _i5.LineCommand? ingoingGhostPathCommand, _i5.LineCommand? outgoingGhostPathCommand, ) => @@ -406,8 +418,8 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { @override void drawLineToolVertices( - _i16.Canvas? canvas, - _i21.VertexStack? vertexStack, + _i17.Canvas? canvas, + _i22.VertexStack? vertexStack, ) => super.noSuchMethod( Invocation.method( @@ -445,7 +457,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ); @override - _i3.ToolData getNextTool(_i19.ActionType? actionType) => (super.noSuchMethod( + _i3.ToolData getNextTool(_i20.ActionType? actionType) => (super.noSuchMethod( Invocation.method( #getNextTool, [actionType], @@ -472,15 +484,15 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { /// A class which mocks [CommandFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { +class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { MockCommandFactory() { _i1.throwOnMissingStub(this); } @override _i4.PathCommand createPathCommand( - _i18.PathWithActionHistory? path, - _i16.Paint? paint, { + _i19.PathWithActionHistory? path, + _i17.Paint? paint, { bool? isCursor = false, }) => (super.noSuchMethod( @@ -507,10 +519,10 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i5.LineCommand createLineCommand( - _i18.PathWithActionHistory? path, - _i16.Paint? paint, - _i16.Offset? startPoint, - _i16.Offset? endPoint, + _i19.PathWithActionHistory? path, + _i17.Paint? paint, + _i17.Offset? startPoint, + _i17.Offset? endPoint, ) => (super.noSuchMethod( Invocation.method( @@ -538,12 +550,12 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i6.SquareShapeCommand createSquareShapeCommand( - _i16.Paint? paint, - _i16.Offset? topLeft, - _i16.Offset? topRight, - _i16.Offset? bottomLeft, - _i16.Offset? bottomRight, - _i23.ShapeStyle? style, + _i17.Paint? paint, + _i17.Offset? topLeft, + _i17.Offset? topRight, + _i17.Offset? bottomLeft, + _i17.Offset? bottomRight, + _i24.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -575,11 +587,11 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i7.EllipseShapeCommand createEllipseShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, double? radiusX, double? radiusY, - _i16.Offset? center, - _i23.ShapeStyle? style, + _i17.Offset? center, + _i24.ShapeStyle? style, double? angle, ) => (super.noSuchMethod( @@ -612,9 +624,9 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i8.ClipboardCommand createClipboardCommand( - _i16.Paint? paint, - _i24.Uint8List? imageData, - _i16.Offset? offset, + _i17.Paint? paint, + _i25.Uint8List? imageData, + _i17.Offset? offset, double? scale, double? rotation, ) => @@ -645,12 +657,46 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ) as _i8.ClipboardCommand); @override - _i9.TextCommand createTextCommand( - _i16.Offset? point, + _i9.ImportCommand createImportCommand( + _i17.Paint? paint, + _i25.Uint8List? imageData, + _i17.Offset? offset, + double? scale, + double? rotation, + ) => + (super.noSuchMethod( + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + returnValue: _FakeImportCommand_7( + this, + Invocation.method( + #createImportCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + ), + ) as _i9.ImportCommand); + + @override + _i10.TextCommand createTextCommand( + _i17.Offset? point, String? text, - _i17.TextStyle? style, + _i18.TextStyle? style, double? fontSize, - _i16.Paint? paint, + _i17.Paint? paint, double? rotationAngle, { double? scaleX = 1.0, double? scaleY = 1.0, @@ -671,7 +717,7 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { #scaleY: scaleY, }, ), - returnValue: _FakeTextCommand_7( + returnValue: _FakeTextCommand_8( this, Invocation.method( #createTextCommand, @@ -689,15 +735,15 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { }, ), ), - ) as _i9.TextCommand); + ) as _i10.TextCommand); @override - _i10.StarShapeCommand createStarShapeCommand( - _i16.Paint? paint, + _i11.StarShapeCommand createStarShapeCommand( + _i17.Paint? paint, int? numPoints, double? angle, - _i16.Offset? center, - _i23.ShapeStyle? style, + _i17.Offset? center, + _i24.ShapeStyle? style, double? radiusX, double? radiusY, ) => @@ -714,7 +760,7 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { radiusY, ], ), - returnValue: _FakeStarShapeCommand_8( + returnValue: _FakeStarShapeCommand_9( this, Invocation.method( #createStarShapeCommand, @@ -729,16 +775,16 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ], ), ), - ) as _i10.StarShapeCommand); + ) as _i11.StarShapeCommand); @override - _i11.HeartShapeCommand createHeartShapeCommand( - _i16.Paint? paint, + _i12.HeartShapeCommand createHeartShapeCommand( + _i17.Paint? paint, double? width, double? height, double? angle, - _i16.Offset? center, - _i23.ShapeStyle? style, + _i17.Offset? center, + _i24.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -752,7 +798,7 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { style, ], ), - returnValue: _FakeHeartShapeCommand_9( + returnValue: _FakeHeartShapeCommand_10( this, Invocation.method( #createHeartShapeCommand, @@ -766,12 +812,12 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ], ), ), - ) as _i11.HeartShapeCommand); + ) as _i12.HeartShapeCommand); @override - _i12.SprayCommand createSprayCommand( - List<_i16.Offset>? points, - _i16.Paint? paint, + _i13.SprayCommand createSprayCommand( + List<_i17.Offset>? points, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -781,7 +827,7 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { paint, ], ), - returnValue: _FakeSprayCommand_10( + returnValue: _FakeSprayCommand_11( this, Invocation.method( #createSprayCommand, @@ -791,29 +837,29 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ], ), ), - ) as _i12.SprayCommand); + ) as _i13.SprayCommand); @override - _i13.DeleteRegionCommand createDeleteRegionCommand(_i16.Rect? region) => + _i14.DeleteRegionCommand createDeleteRegionCommand(_i17.Rect? region) => (super.noSuchMethod( Invocation.method( #createDeleteRegionCommand, [region], ), - returnValue: _FakeDeleteRegionCommand_11( + returnValue: _FakeDeleteRegionCommand_12( this, Invocation.method( #createDeleteRegionCommand, [region], ), ), - ) as _i13.DeleteRegionCommand); + ) as _i14.DeleteRegionCommand); @override - _i14.ColorChangedCommand createColorChangedCommand( - _i16.Color? oldColor, - _i16.Color? newColor, - _i16.Paint? paint, + _i15.ColorChangedCommand createColorChangedCommand( + _i17.Color? oldColor, + _i17.Color? newColor, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -824,7 +870,7 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { paint, ], ), - returnValue: _FakeColorChangedCommand_12( + returnValue: _FakeColorChangedCommand_13( this, Invocation.method( #createColorChangedCommand, @@ -835,34 +881,34 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ], ), ), - ) as _i14.ColorChangedCommand); + ) as _i15.ColorChangedCommand); } /// A class which mocks [Ref]. /// /// See the documentation for Mockito's code generation for more information. class MockRef extends _i1.Mock - implements _i15.Ref { + implements _i16.Ref { MockRef() { _i1.throwOnMissingStub(this); } @override - _i15.ProviderContainer get container => (super.noSuchMethod( + _i16.ProviderContainer get container => (super.noSuchMethod( Invocation.getter(#container), - returnValue: _FakeProviderContainer_13( + returnValue: _FakeProviderContainer_14( this, Invocation.getter(#container), ), - ) as _i15.ProviderContainer); + ) as _i16.ProviderContainer); @override - T refresh(_i15.Refreshable? provider) => (super.noSuchMethod( + T refresh(_i16.Refreshable? provider) => (super.noSuchMethod( Invocation.method( #refresh, [provider], ), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.method( #refresh, @@ -872,7 +918,7 @@ class MockRef extends _i1.Mock ) as T); @override - void invalidate(_i15.ProviderOrFamily? provider) => super.noSuchMethod( + void invalidate(_i16.ProviderOrFamily? provider) => super.noSuchMethod( Invocation.method( #invalidate, [provider], @@ -964,12 +1010,12 @@ class MockRef extends _i1.Mock ); @override - T read(_i15.ProviderListenable? provider) => (super.noSuchMethod( + T read(_i16.ProviderListenable? provider) => (super.noSuchMethod( Invocation.method( #read, [provider], ), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.method( #read, @@ -979,7 +1025,7 @@ class MockRef extends _i1.Mock ) as T); @override - bool exists(_i15.ProviderBase? provider) => (super.noSuchMethod( + bool exists(_i16.ProviderBase? provider) => (super.noSuchMethod( Invocation.method( #exists, [provider], @@ -988,12 +1034,12 @@ class MockRef extends _i1.Mock ) as bool); @override - T watch(_i15.ProviderListenable? provider) => (super.noSuchMethod( + T watch(_i16.ProviderListenable? provider) => (super.noSuchMethod( Invocation.method( #watch, [provider], ), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.method( #watch, @@ -1003,23 +1049,23 @@ class MockRef extends _i1.Mock ) as T); @override - _i15.KeepAliveLink keepAlive() => (super.noSuchMethod( + _i16.KeepAliveLink keepAlive() => (super.noSuchMethod( Invocation.method( #keepAlive, [], ), - returnValue: _FakeKeepAliveLink_14( + returnValue: _FakeKeepAliveLink_15( this, Invocation.method( #keepAlive, [], ), ), - ) as _i15.KeepAliveLink); + ) as _i16.KeepAliveLink); @override - _i15.ProviderSubscription listen( - _i15.ProviderListenable? provider, + _i16.ProviderSubscription listen( + _i16.ProviderListenable? provider, void Function( T?, T, @@ -1042,7 +1088,7 @@ class MockRef extends _i1.Mock #fireImmediately: fireImmediately, }, ), - returnValue: _FakeProviderSubscription_15( + returnValue: _FakeProviderSubscription_16( this, Invocation.method( #listen, @@ -1056,13 +1102,13 @@ class MockRef extends _i1.Mock }, ), ), - ) as _i15.ProviderSubscription); + ) as _i16.ProviderSubscription); } /// A class which mocks [Canvas]. /// /// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i16.Canvas { +class MockCanvas extends _i1.Mock implements _i17.Canvas { MockCanvas() { _i1.throwOnMissingStub(this); } @@ -1078,8 +1124,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void saveLayer( - _i16.Rect? bounds, - _i16.Paint? paint, + _i17.Rect? bounds, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1177,7 +1223,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - void transform(_i24.Float64List? matrix4) => super.noSuchMethod( + void transform(_i25.Float64List? matrix4) => super.noSuchMethod( Invocation.method( #transform, [matrix4], @@ -1186,18 +1232,18 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - _i24.Float64List getTransform() => (super.noSuchMethod( + _i25.Float64List getTransform() => (super.noSuchMethod( Invocation.method( #getTransform, [], ), - returnValue: _i24.Float64List(0), - ) as _i24.Float64List); + returnValue: _i25.Float64List(0), + ) as _i25.Float64List); @override void clipRect( - _i16.Rect? rect, { - _i16.ClipOp? clipOp = _i16.ClipOp.intersect, + _i17.Rect? rect, { + _i17.ClipOp? clipOp = _i17.ClipOp.intersect, bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1214,7 +1260,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void clipRRect( - _i16.RRect? rrect, { + _i17.RRect? rrect, { bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1228,7 +1274,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void clipRSuperellipse( - _i16.RSuperellipse? rsuperellipse, { + _i17.RSuperellipse? rsuperellipse, { bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1242,7 +1288,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void clipPath( - _i16.Path? path, { + _i17.Path? path, { bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1255,39 +1301,39 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - _i16.Rect getLocalClipBounds() => (super.noSuchMethod( + _i17.Rect getLocalClipBounds() => (super.noSuchMethod( Invocation.method( #getLocalClipBounds, [], ), - returnValue: _FakeRect_16( + returnValue: _FakeRect_17( this, Invocation.method( #getLocalClipBounds, [], ), ), - ) as _i16.Rect); + ) as _i17.Rect); @override - _i16.Rect getDestinationClipBounds() => (super.noSuchMethod( + _i17.Rect getDestinationClipBounds() => (super.noSuchMethod( Invocation.method( #getDestinationClipBounds, [], ), - returnValue: _FakeRect_16( + returnValue: _FakeRect_17( this, Invocation.method( #getDestinationClipBounds, [], ), ), - ) as _i16.Rect); + ) as _i17.Rect); @override void drawColor( - _i16.Color? color, - _i16.BlendMode? blendMode, + _i17.Color? color, + _i17.BlendMode? blendMode, ) => super.noSuchMethod( Invocation.method( @@ -1302,9 +1348,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawLine( - _i16.Offset? p1, - _i16.Offset? p2, - _i16.Paint? paint, + _i17.Offset? p1, + _i17.Offset? p2, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1319,7 +1365,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - void drawPaint(_i16.Paint? paint) => super.noSuchMethod( + void drawPaint(_i17.Paint? paint) => super.noSuchMethod( Invocation.method( #drawPaint, [paint], @@ -1329,8 +1375,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRect( - _i16.Rect? rect, - _i16.Paint? paint, + _i17.Rect? rect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1345,8 +1391,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRRect( - _i16.RRect? rrect, - _i16.Paint? paint, + _i17.RRect? rrect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1361,9 +1407,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawDRRect( - _i16.RRect? outer, - _i16.RRect? inner, - _i16.Paint? paint, + _i17.RRect? outer, + _i17.RRect? inner, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1379,8 +1425,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRSuperellipse( - _i16.RSuperellipse? rsuperellipse, - _i16.Paint? paint, + _i17.RSuperellipse? rsuperellipse, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1395,8 +1441,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawOval( - _i16.Rect? rect, - _i16.Paint? paint, + _i17.Rect? rect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1411,9 +1457,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawCircle( - _i16.Offset? c, + _i17.Offset? c, double? radius, - _i16.Paint? paint, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1429,11 +1475,11 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawArc( - _i16.Rect? rect, + _i17.Rect? rect, double? startAngle, double? sweepAngle, bool? useCenter, - _i16.Paint? paint, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1451,8 +1497,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawPath( - _i16.Path? path, - _i16.Paint? paint, + _i17.Path? path, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1467,9 +1513,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawImage( - _i16.Image? image, - _i16.Offset? offset, - _i16.Paint? paint, + _i17.Image? image, + _i17.Offset? offset, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1485,10 +1531,10 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawImageRect( - _i16.Image? image, - _i16.Rect? src, - _i16.Rect? dst, - _i16.Paint? paint, + _i17.Image? image, + _i17.Rect? src, + _i17.Rect? dst, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1505,10 +1551,10 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawImageNine( - _i16.Image? image, - _i16.Rect? center, - _i16.Rect? dst, - _i16.Paint? paint, + _i17.Image? image, + _i17.Rect? center, + _i17.Rect? dst, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1524,7 +1570,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - void drawPicture(_i16.Picture? picture) => super.noSuchMethod( + void drawPicture(_i17.Picture? picture) => super.noSuchMethod( Invocation.method( #drawPicture, [picture], @@ -1534,8 +1580,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawParagraph( - _i16.Paragraph? paragraph, - _i16.Offset? offset, + _i17.Paragraph? paragraph, + _i17.Offset? offset, ) => super.noSuchMethod( Invocation.method( @@ -1550,9 +1596,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawPoints( - _i16.PointMode? pointMode, - List<_i16.Offset>? points, - _i16.Paint? paint, + _i17.PointMode? pointMode, + List<_i17.Offset>? points, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1568,9 +1614,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRawPoints( - _i16.PointMode? pointMode, - _i24.Float32List? points, - _i16.Paint? paint, + _i17.PointMode? pointMode, + _i25.Float32List? points, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1586,9 +1632,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawVertices( - _i16.Vertices? vertices, - _i16.BlendMode? blendMode, - _i16.Paint? paint, + _i17.Vertices? vertices, + _i17.BlendMode? blendMode, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1604,13 +1650,13 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawAtlas( - _i16.Image? atlas, - List<_i16.RSTransform>? transforms, - List<_i16.Rect>? rects, - List<_i16.Color>? colors, - _i16.BlendMode? blendMode, - _i16.Rect? cullRect, - _i16.Paint? paint, + _i17.Image? atlas, + List<_i17.RSTransform>? transforms, + List<_i17.Rect>? rects, + List<_i17.Color>? colors, + _i17.BlendMode? blendMode, + _i17.Rect? cullRect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1630,13 +1676,13 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRawAtlas( - _i16.Image? atlas, - _i24.Float32List? rstTransforms, - _i24.Float32List? rects, - _i24.Int32List? colors, - _i16.BlendMode? blendMode, - _i16.Rect? cullRect, - _i16.Paint? paint, + _i17.Image? atlas, + _i25.Float32List? rstTransforms, + _i25.Float32List? rects, + _i25.Int32List? colors, + _i17.BlendMode? blendMode, + _i17.Rect? cullRect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1656,8 +1702,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawShadow( - _i16.Path? path, - _i16.Color? color, + _i17.Path? path, + _i17.Color? color, double? elevation, bool? transparentOccluder, ) => @@ -1678,22 +1724,22 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { /// A class which mocks [TextCommand]. /// /// See the documentation for Mockito's code generation for more information. -class MockTextCommand extends _i1.Mock implements _i9.TextCommand { +class MockTextCommand extends _i1.Mock implements _i10.TextCommand { MockTextCommand() { _i1.throwOnMissingStub(this); } @override - _i16.Offset get point => (super.noSuchMethod( + _i17.Offset get point => (super.noSuchMethod( Invocation.getter(#point), - returnValue: _FakeOffset_17( + returnValue: _FakeOffset_18( this, Invocation.getter(#point), ), - ) as _i16.Offset); + ) as _i17.Offset); @override - set point(_i16.Offset? _point) => super.noSuchMethod( + set point(_i17.Offset? _point) => super.noSuchMethod( Invocation.setter( #point, _point, @@ -1702,18 +1748,18 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { ); @override - _i17.TextStyle get style => (super.noSuchMethod( + _i18.TextStyle get style => (super.noSuchMethod( Invocation.getter(#style), - returnValue: _FakeTextStyle_18( + returnValue: _FakeTextStyle_19( this, Invocation.getter(#style), ), - ) as _i17.TextStyle); + ) as _i18.TextStyle); @override String get text => (super.noSuchMethod( Invocation.getter(#text), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.getter(#text), ), @@ -1734,7 +1780,7 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { @override String get type => (super.noSuchMethod( Invocation.getter(#type), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.getter(#type), ), @@ -1771,16 +1817,16 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { ) as bool); @override - _i16.Paint get paint => (super.noSuchMethod( + _i17.Paint get paint => (super.noSuchMethod( Invocation.getter(#paint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#paint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - void call(_i16.Canvas? canvas) => super.noSuchMethod( + void call(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #call, [canvas], @@ -1798,89 +1844,89 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { ) as Map); @override - _i26.Future prepareForRuntime() => (super.noSuchMethod( + _i27.Future prepareForRuntime() => (super.noSuchMethod( Invocation.method( #prepareForRuntime, [], ), - returnValue: _i26.Future.value(), - returnValueForMissingStub: _i26.Future.value(), - ) as _i26.Future); + returnValue: _i27.Future.value(), + returnValueForMissingStub: _i27.Future.value(), + ) as _i27.Future); } /// A class which mocks [GraphicFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockGraphicFactory extends _i1.Mock implements _i27.GraphicFactory { +class MockGraphicFactory extends _i1.Mock implements _i28.GraphicFactory { MockGraphicFactory() { _i1.throwOnMissingStub(this); } @override - _i16.Paint createPaint() => (super.noSuchMethod( + _i17.Paint createPaint() => (super.noSuchMethod( Invocation.method( #createPaint, [], ), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.method( #createPaint, [], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i18.PathWithActionHistory createPathWithActionHistory() => + _i19.PathWithActionHistory createPathWithActionHistory() => (super.noSuchMethod( Invocation.method( #createPathWithActionHistory, [], ), - returnValue: _FakePathWithActionHistory_19( + returnValue: _FakePathWithActionHistory_20( this, Invocation.method( #createPathWithActionHistory, [], ), ), - ) as _i18.PathWithActionHistory); + ) as _i19.PathWithActionHistory); @override - _i16.PictureRecorder createPictureRecorder() => (super.noSuchMethod( + _i17.PictureRecorder createPictureRecorder() => (super.noSuchMethod( Invocation.method( #createPictureRecorder, [], ), - returnValue: _FakePictureRecorder_20( + returnValue: _FakePictureRecorder_21( this, Invocation.method( #createPictureRecorder, [], ), ), - ) as _i16.PictureRecorder); + ) as _i17.PictureRecorder); @override - _i16.Canvas createCanvasWithRecorder(_i16.PictureRecorder? recorder) => + _i17.Canvas createCanvasWithRecorder(_i17.PictureRecorder? recorder) => (super.noSuchMethod( Invocation.method( #createCanvasWithRecorder, [recorder], ), - returnValue: _FakeCanvas_21( + returnValue: _FakeCanvas_22( this, Invocation.method( #createCanvasWithRecorder, [recorder], ), ), - ) as _i16.Canvas); + ) as _i17.Canvas); @override - _i16.Paint createWatercolorPaint( - _i16.Paint? originalPaint, + _i17.Paint createWatercolorPaint( + _i17.Paint? originalPaint, double? blurSigma, ) => (super.noSuchMethod( @@ -1891,7 +1937,7 @@ class MockGraphicFactory extends _i1.Mock implements _i27.GraphicFactory { blurSigma, ], ), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.method( #createWatercolorPaint, @@ -1901,43 +1947,43 @@ class MockGraphicFactory extends _i1.Mock implements _i27.GraphicFactory { ], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i16.Paint copyPaint(_i16.Paint? original) => (super.noSuchMethod( + _i17.Paint copyPaint(_i17.Paint? original) => (super.noSuchMethod( Invocation.method( #copyPaint, [original], ), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.method( #copyPaint, [original], ), ), - ) as _i16.Paint); + ) as _i17.Paint); } /// A class which mocks [BoundingBox]. /// /// See the documentation for Mockito's code generation for more information. -class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { +class MockBoundingBox extends _i1.Mock implements _i29.BoundingBox { MockBoundingBox() { _i1.throwOnMissingStub(this); } @override - _i16.Offset get center => (super.noSuchMethod( + _i17.Offset get center => (super.noSuchMethod( Invocation.getter(#center), - returnValue: _FakeOffset_17( + returnValue: _FakeOffset_18( this, Invocation.getter(#center), ), - ) as _i16.Offset); + ) as _i17.Offset); @override - set center(_i16.Offset? _center) => super.noSuchMethod( + set center(_i17.Offset? _center) => super.noSuchMethod( Invocation.setter( #center, _center, @@ -1991,13 +2037,13 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i29.BoundingBoxAction get currentAction => (super.noSuchMethod( + _i30.BoundingBoxAction get currentAction => (super.noSuchMethod( Invocation.getter(#currentAction), - returnValue: _i29.BoundingBoxAction.none, - ) as _i29.BoundingBoxAction); + returnValue: _i30.BoundingBoxAction.none, + ) as _i30.BoundingBoxAction); @override - set currentAction(_i29.BoundingBoxAction? _currentAction) => + set currentAction(_i30.BoundingBoxAction? _currentAction) => super.noSuchMethod( Invocation.setter( #currentAction, @@ -2007,15 +2053,15 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i30.BoundingBoxResizeAction get currentBoundingBoxResizeAction => + _i31.BoundingBoxResizeAction get currentBoundingBoxResizeAction => (super.noSuchMethod( Invocation.getter(#currentBoundingBoxResizeAction), - returnValue: _i30.BoundingBoxResizeAction.none, - ) as _i30.BoundingBoxResizeAction); + returnValue: _i31.BoundingBoxResizeAction.none, + ) as _i31.BoundingBoxResizeAction); @override set currentBoundingBoxResizeAction( - _i30.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => + _i31.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => super.noSuchMethod( Invocation.setter( #currentBoundingBoxResizeAction, @@ -2025,7 +2071,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - set lastDragGlobalPosition(_i16.Offset? _lastDragGlobalPosition) => + set lastDragGlobalPosition(_i17.Offset? _lastDragGlobalPosition) => super.noSuchMethod( Invocation.setter( #lastDragGlobalPosition, @@ -2035,7 +2081,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - set dragStartLocalPosition(_i16.Offset? _dragStartLocalPosition) => + set dragStartLocalPosition(_i17.Offset? _dragStartLocalPosition) => super.noSuchMethod( Invocation.setter( #dragStartLocalPosition, @@ -2061,16 +2107,16 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Paint get boxPaint => (super.noSuchMethod( + _i17.Paint get boxPaint => (super.noSuchMethod( Invocation.getter(#boxPaint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#boxPaint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set boxPaint(_i16.Paint? _boxPaint) => super.noSuchMethod( + set boxPaint(_i17.Paint? _boxPaint) => super.noSuchMethod( Invocation.setter( #boxPaint, _boxPaint, @@ -2079,16 +2125,16 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Paint get handlePaint => (super.noSuchMethod( + _i17.Paint get handlePaint => (super.noSuchMethod( Invocation.getter(#handlePaint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#handlePaint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set handlePaint(_i16.Paint? _handlePaint) => super.noSuchMethod( + set handlePaint(_i17.Paint? _handlePaint) => super.noSuchMethod( Invocation.setter( #handlePaint, _handlePaint, @@ -2097,16 +2143,16 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Paint get rotationHandlePaint => (super.noSuchMethod( + _i17.Paint get rotationHandlePaint => (super.noSuchMethod( Invocation.getter(#rotationHandlePaint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#rotationHandlePaint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set rotationHandlePaint(_i16.Paint? _rotationHandlePaint) => + set rotationHandlePaint(_i17.Paint? _rotationHandlePaint) => super.noSuchMethod( Invocation.setter( #rotationHandlePaint, @@ -2131,25 +2177,25 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Rect get rect => (super.noSuchMethod( + _i17.Rect get rect => (super.noSuchMethod( Invocation.getter(#rect), - returnValue: _FakeRect_16( + returnValue: _FakeRect_17( this, Invocation.getter(#rect), ), - ) as _i16.Rect); + ) as _i17.Rect); @override - List<_i16.Offset> getCorners() => (super.noSuchMethod( + List<_i17.Offset> getCorners() => (super.noSuchMethod( Invocation.method( #getCorners, [], ), - returnValue: <_i16.Offset>[], - ) as List<_i16.Offset>); + returnValue: <_i17.Offset>[], + ) as List<_i17.Offset>); @override - void determineAction(_i16.Offset? globalPoint) => super.noSuchMethod( + void determineAction(_i17.Offset? globalPoint) => super.noSuchMethod( Invocation.method( #determineAction, [globalPoint], @@ -2158,7 +2204,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - void updateDrag(_i16.Offset? globalPoint) => super.noSuchMethod( + void updateDrag(_i17.Offset? globalPoint) => super.noSuchMethod( Invocation.method( #updateDrag, [globalPoint], @@ -2176,7 +2222,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - void drawGuides(_i16.Canvas? canvas) => super.noSuchMethod( + void drawGuides(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #drawGuides, [canvas], diff --git a/test/widget/workspace_page/import_tool_test.dart b/test/widget/workspace_page/import_tool_test.dart new file mode 100644 index 00000000..40100342 --- /dev/null +++ b/test/widget/workspace_page/import_tool_test.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:paintroid/core/commands/command_factory/command_factory.dart'; +import 'package:paintroid/core/commands/command_manager/command_manager.dart'; +import 'package:paintroid/core/enums/tool_types.dart'; +import 'package:paintroid/core/providers/state/toolbox_state_data.dart'; +import 'package:paintroid/core/providers/state/toolbox_state_provider.dart'; +import 'package:paintroid/core/localization/app_localizations.dart'; +import 'package:paintroid/core/tools/bounding_box.dart'; +import 'package:paintroid/core/tools/implementation/import_tool.dart'; +import 'package:paintroid/ui/pages/workspace_page/components/top_bar/top_app_bar.dart'; +import 'package:paintroid/ui/theme/theme.dart'; +import 'package:paintroid/ui/utils/top_bar_action_data.dart'; + +import '../../utils/fake_toolbox_state_provider.dart'; + +void main() { + Widget createSut(ImportTool importTool) { + final lightTheme = LightPaintroidThemeData(); + final darkTheme = DarkPaintroidThemeData(); + return ProviderScope( + overrides: [ + toolBoxStateProvider.overrideWith(() => FakeToolBoxStateProvider( + ToolBoxStateData(currentTool: importTool, isDown: false), + )), + ], + child: PaintroidTheme( + lightTheme: lightTheme, + darkTheme: darkTheme, + child: MaterialApp( + theme: lightTheme.materialThemeData, + darkTheme: darkTheme.materialThemeData, + localizationsDelegates: const [ + AppLocalizations.delegate, + ], + home: const Scaffold(appBar: TopAppBar(title: 'Paintroid')), + ), + ), + ); + } + + ImportTool createImportTool() { + return ImportTool( + commandManager: CommandManager(), + commandFactory: const CommandFactory(), + boundingBox: BoundingBox.fromCenter( + center: const Offset(100, 100), + width: 100, + height: 100, + ), + type: ToolType.IMPORT, + ); + } + + testWidgets('shows a disabled checkmark until an image is selected', + (tester) async { + await tester.pumpWidget(createSut(createImportTool())); + + final checkmark = tester.widget( + find.byKey(ValueKey(TopBarActionData.CHECKMARK.name)), + ); + expect(checkmark.onPressed, isNull); + }); +}