From 09f2778acba116cdc8b44de9256fe5dc2b936363 Mon Sep 17 00:00:00 2001 From: Jonathan Salmon Date: Wed, 4 Oct 2023 23:09:01 +0100 Subject: [PATCH] extensions: update docs and release package 0.5.0 --- .../Flutter/GeneratedPluginRegistrant.swift | 2 -- flutter_quill_extensions/CHANGELOG.md | 4 +++ .../lib/embeds/builders.dart | 33 +++++++----------- .../lib/embeds/embed_types.dart | 5 ++- .../lib/flutter_quill_extensions.dart | 34 +++++++++---------- flutter_quill_extensions/pubspec.yaml | 19 ++++------- 6 files changed, 42 insertions(+), 55 deletions(-) diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift index 9245196c..8a76d078 100644 --- a/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -11,7 +11,6 @@ import gal import pasteboard import path_provider_foundation import url_launcher_macos -import video_player_avfoundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) @@ -20,5 +19,4 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PasteboardPlugin.register(with: registry.registrar(forPlugin: "PasteboardPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) - FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) } diff --git a/flutter_quill_extensions/CHANGELOG.md b/flutter_quill_extensions/CHANGELOG.md index 82e52442..19db1f35 100644 --- a/flutter_quill_extensions/CHANGELOG.md +++ b/flutter_quill_extensions/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.0 +- Migrated from `gallery_saver` to `gal` for saving images +- Added callbacks for greater control of editing images + ## 0.4.1 - Updated dependencies to support image_picker 1.0 diff --git a/flutter_quill_extensions/lib/embeds/builders.dart b/flutter_quill_extensions/lib/embeds/builders.dart index 58ad4ff8..0e5e38ea 100644 --- a/flutter_quill_extensions/lib/embeds/builders.dart +++ b/flutter_quill_extensions/lib/embeds/builders.dart @@ -20,13 +20,13 @@ import 'widgets/video_app.dart'; import 'widgets/youtube_video_app.dart'; class ImageEmbedBuilder extends EmbedBuilder { - ImageEmbedBuilder({ - this.afterRemoveImageFromEditor, - this.shouldRemoveImageFromEditor, + const ImageEmbedBuilder({ + this.onImageRemovedCallback, + this.shouldRemoveImageCallback, }); - final ImageEmbedBuilderAfterRemoveImageFromEditor? afterRemoveImageFromEditor; - final ImageEmbedBuilderShouldRemoveImageFromEditor? - shouldRemoveImageFromEditor; + + final ImageEmbedBuilderOnRemovedCallback? onImageRemovedCallback; + final ImageEmbedBuilderWillRemoveCallback? shouldRemoveImageCallback; @override String get key => BlockEmbed.imageType; @@ -136,18 +136,12 @@ class ImageEmbedBuilder extends EmbedBuilder { final imageFile = File(imageUrl); - final shouldRemoveImageEvent = shouldRemoveImageFromEditor; - - var shouldRemoveImage = true; - if (shouldRemoveImageEvent != null) { - shouldRemoveImage = await shouldRemoveImageEvent( - imageFile, - ); - } - - if (!shouldRemoveImage) { + // Call the remove check callback if set + if (await shouldRemoveImageCallback?.call(imageFile) == + false) { return; } + final offset = getEmbedNode( controller, controller.selection.start, @@ -158,10 +152,9 @@ class ImageEmbedBuilder extends EmbedBuilder { '', TextSelection.collapsed(offset: offset), ); - final afterRemoveImageEvent = afterRemoveImageFromEditor; - if (afterRemoveImageEvent != null) { - await afterRemoveImageEvent(imageFile); - } + + // Call the post remove callback if set + await onImageRemovedCallback?.call(imageFile); }, ); return Padding( diff --git a/flutter_quill_extensions/lib/embeds/embed_types.dart b/flutter_quill_extensions/lib/embeds/embed_types.dart index a785fb70..1ce9d0e2 100644 --- a/flutter_quill_extensions/lib/embeds/embed_types.dart +++ b/flutter_quill_extensions/lib/embeds/embed_types.dart @@ -45,11 +45,10 @@ class QuillFile { final Uint8List bytes; } -typedef ImageEmbedBuilderAfterRemoveImageFromEditor = Future Function( +typedef ImageEmbedBuilderWillRemoveCallback = Future Function( File imageFile, ); -typedef ImageEmbedBuilderShouldRemoveImageFromEditor = Future Function( +typedef ImageEmbedBuilderOnRemovedCallback = Future Function( File imageFile, ); - diff --git a/flutter_quill_extensions/lib/flutter_quill_extensions.dart b/flutter_quill_extensions/lib/flutter_quill_extensions.dart index 2686581e..a443bcb0 100644 --- a/flutter_quill_extensions/lib/flutter_quill_extensions.dart +++ b/flutter_quill_extensions/lib/flutter_quill_extensions.dart @@ -27,28 +27,26 @@ class FlutterQuillEmbeds { /// /// [onVideoInit] is called when a video is initialized. /// - /// [afterRemoveImageFromEditor] is called when an image - /// is removed from the editor. - /// By default, [afterRemoveImageFromEditor] deletes the cached - /// image if it still exists. - /// If you want to customize the behavior, pass your own function - /// that handles the removal. - /// - /// Example of [afterRemoveImageFromEditor] customization: + /// [onImageRemovedCallback] is called when an image + /// is removed from the editor. This can be used to + /// delete the image from storage, for example: + /// /// ```dart - /// afterRemoveImageFromEditor: (imageFile) async { - /// // Your custom logic here - /// // or leave it empty to do nothing - /// } + /// (imageFile) async { + /// final fileExists = await imageFile.exists(); + /// if (fileExists) { + /// await imageFile.delete(); + /// } + /// }, /// ``` /// - /// [shouldRemoveImageFromEditor] is called when the user + /// [shouldRemoveImageCallback] is called when the user /// attempts to remove an image /// from the editor. It allows you to control whether the image /// should be removed /// based on your custom logic. /// - /// Example of [shouldRemoveImageFromEditor] customization: + /// Example of [shouldRemoveImageCallback] customization: /// ```dart /// shouldRemoveImageFromEditor: (imageFile) async { /// // Show a confirmation dialog before removing the image @@ -67,13 +65,13 @@ class FlutterQuillEmbeds { /// ``` static List builders({ void Function(GlobalKey videoContainerKey)? onVideoInit, - ImageEmbedBuilderAfterRemoveImageFromEditor? afterRemoveImageFromEditor, - ImageEmbedBuilderShouldRemoveImageFromEditor? shouldRemoveImageFromEditor, + ImageEmbedBuilderOnRemovedCallback? onImageRemovedCallback, + ImageEmbedBuilderWillRemoveCallback? shouldRemoveImageCallback, }) => [ ImageEmbedBuilder( - afterRemoveImageFromEditor: afterRemoveImageFromEditor, - shouldRemoveImageFromEditor: shouldRemoveImageFromEditor, + onImageRemovedCallback: onImageRemovedCallback, + shouldRemoveImageCallback: shouldRemoveImageCallback, ), VideoEmbedBuilder(onVideoInit: onVideoInit), FormulaEmbedBuilder(), diff --git a/flutter_quill_extensions/pubspec.yaml b/flutter_quill_extensions/pubspec.yaml index c3efe10e..0ea3297a 100644 --- a/flutter_quill_extensions/pubspec.yaml +++ b/flutter_quill_extensions/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_quill_extensions description: Embed extensions for flutter_quill including image, video, formula and etc. -version: 0.4.1 +version: 0.5.0 homepage: https://bulletjournal.us/home/index.html repository: https://github.com/singerdmx/flutter-quill/tree/master/flutter_quill_extensions @@ -14,19 +14,14 @@ dependencies: flutter_quill: ^7.4.7 + gal: ^2.1.1 http: ^1.1.0 - image_picker: ">=1.0.4" + image_picker: ">=0.8.5 <2.0.0" + math_keyboard: ">=0.1.8 <0.3.0" photo_view: ^0.14.0 - video_player: ^2.7.2 - youtube_player_flutter: ^8.1.2 - # gallery_saver: ^2.1.1 - math_keyboard: ">=0.2.1" - # string_validator: ^1.0.0 - universal_html: ^2.2.4 - # url_launcher: ^6.1.14 - # dio: ^5.3.3 - - gal: ^2.1.1 + universal_html: ^2.2.1 + video_player: ^2.7.0 + youtube_player_flutter: ^8.1.1 dev_dependencies: flutter_test: