From 602af7faab8398e3a7c50cf16bc92bafb646f9db Mon Sep 17 00:00:00 2001 From: Ellet Date: Mon, 13 Nov 2023 03:02:38 +0300 Subject: [PATCH] Update flutter_quill_extensions --- flutter_quill_extensions/CHANGELOG.md | 3 +++ .../lib/flutter_quill_extensions.dart | 4 +--- .../models/config/shared_configurations.dart | 20 ++++++++++++++++++ .../embeds/editor/image/image.dart | 2 ++ .../embeds/editor/image/image_menu.dart | 4 +--- .../presentation/embeds/widgets/image.dart | 21 ++++++++++++------- 6 files changed, 41 insertions(+), 13 deletions(-) diff --git a/flutter_quill_extensions/CHANGELOG.md b/flutter_quill_extensions/CHANGELOG.md index 777b8097..3d46440d 100644 --- a/flutter_quill_extensions/CHANGELOG.md +++ b/flutter_quill_extensions/CHANGELOG.md @@ -1,3 +1,6 @@ +## 0.6.8 +- Feature: Allow the developer to override the `assetsPrefix` and default value is `assets`, you should define this correctly if you planning on using asset images in the `QuillEditor`, take a look at `QuillSharedExtensionsConfigurations` class for more info + ## 0.6.7 - Support the new localization system of `flutter_quill` diff --git a/flutter_quill_extensions/lib/flutter_quill_extensions.dart b/flutter_quill_extensions/lib/flutter_quill_extensions.dart index ece3a84f..3a5eaa00 100644 --- a/flutter_quill_extensions/lib/flutter_quill_extensions.dart +++ b/flutter_quill_extensions/lib/flutter_quill_extensions.dart @@ -12,7 +12,6 @@ import 'presentation/embeds/editor/webview.dart'; import 'presentation/embeds/toolbar/camera_button/camera_button.dart'; import 'presentation/embeds/toolbar/formula_button.dart'; import 'presentation/embeds/toolbar/image_button/image_button.dart'; - import 'presentation/embeds/toolbar/video_button/video_button.dart'; import 'presentation/models/config/editor/image/image.dart'; import 'presentation/models/config/editor/image/image_web.dart'; @@ -43,9 +42,7 @@ export 'presentation/embeds/toolbar/image_button/image_button.dart'; export 'presentation/embeds/toolbar/media_button/media_button.dart'; export 'presentation/embeds/toolbar/utils/image_video_utils.dart'; export 'presentation/embeds/toolbar/video_button/video_button.dart'; -export 'presentation/utils/utils.dart'; export 'presentation/models/config/editor/image/image.dart'; - export 'presentation/models/config/editor/image/image_web.dart'; export 'presentation/models/config/editor/video/video.dart'; export 'presentation/models/config/editor/video/video_web.dart'; @@ -54,6 +51,7 @@ export 'presentation/models/config/toolbar/buttons/formula.dart'; export 'presentation/models/config/toolbar/buttons/image.dart'; export 'presentation/models/config/toolbar/buttons/media_button.dart'; export 'presentation/models/config/toolbar/buttons/video.dart'; +export 'presentation/utils/utils.dart'; @immutable class FlutterQuillEmbeds { diff --git a/flutter_quill_extensions/lib/logic/models/config/shared_configurations.dart b/flutter_quill_extensions/lib/logic/models/config/shared_configurations.dart index 6b4075a9..1badf553 100644 --- a/flutter_quill_extensions/lib/logic/models/config/shared_configurations.dart +++ b/flutter_quill_extensions/lib/logic/models/config/shared_configurations.dart @@ -32,11 +32,13 @@ import '../../services/image_saver/s_image_saver.dart'; // ), /// ) /// ``` +/// @immutable class QuillSharedExtensionsConfigurations { const QuillSharedExtensionsConfigurations({ ImagePickerService? imagePickerService, ImageSaverService? imageSaverService, + this.assetsPrefix = 'assets', }) : _imagePickerService = imagePickerService, _imageSaverService = imageSaverService; @@ -84,4 +86,22 @@ class QuillSharedExtensionsConfigurations { ImageSaverService get imageSaverService { return _imageSaverService ?? ImageSaverService.defaultImpl(); } + + /// The property [assetsPrefix] should be the start of your assets folder + /// by default it to `assets` and the reason why we need to know it + /// + /// Because in case when you don't define a value for [ImageProviderBuilder] + /// in the [QuillEditorImageEmbedConfigurations] which exists in + /// [FlutterQuillEmbeds.editorBuilders] + /// + /// then the only way of how to know if this is asset image that you added + /// in the `pubspec.yaml` is by asking you the assetsPrefix, how should the + /// start of your asset images usualy looks like?? in most projects it's + /// assets so we will go with that as a default + /// + /// but if you are using different name and you want to use assets images + /// in the [QuillEditor] then it's important to override this + /// + /// if you want a custom solution then please use [imageProviderBuilder] + final String assetsPrefix; } diff --git a/flutter_quill_extensions/lib/presentation/embeds/editor/image/image.dart b/flutter_quill_extensions/lib/presentation/embeds/editor/image/image.dart index 8badfa3a..4689097f 100644 --- a/flutter_quill_extensions/lib/presentation/embeds/editor/image/image.dart +++ b/flutter_quill_extensions/lib/presentation/embeds/editor/image/image.dart @@ -44,6 +44,8 @@ class QuillEditorImageEmbedBuilder extends EmbedBuilder { alignment: alignment, height: height, width: width, + assetsPrefix: QuillSharedExtensionsConfigurations.get(context: context) + .assetsPrefix, ); // OptionalSize? imageSize; diff --git a/flutter_quill_extensions/lib/presentation/embeds/editor/image/image_menu.dart b/flutter_quill_extensions/lib/presentation/embeds/editor/image/image_menu.dart index d5017263..50cc1ad8 100644 --- a/flutter_quill_extensions/lib/presentation/embeds/editor/image/image_menu.dart +++ b/flutter_quill_extensions/lib/presentation/embeds/editor/image/image_menu.dart @@ -180,9 +180,7 @@ class ImageOptionsMenu extends StatelessWidget { MaterialPageRoute( builder: (context) => ImageTapWrapper( imageUrl: imageSource, - imageProviderBuilder: configurations.imageProviderBuilder, - imageErrorWidgetBuilder: - configurations.imageErrorWidgetBuilder, + configurations: configurations, ), ), ), diff --git a/flutter_quill_extensions/lib/presentation/embeds/widgets/image.dart b/flutter_quill_extensions/lib/presentation/embeds/widgets/image.dart index ea63b0d7..7a387956 100644 --- a/flutter_quill_extensions/lib/presentation/embeds/widgets/image.dart +++ b/flutter_quill_extensions/lib/presentation/embeds/widgets/image.dart @@ -5,6 +5,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_quill/flutter_quill.dart'; import 'package:photo_view/photo_view.dart'; +import '../../../logic/models/config/shared_configurations.dart'; +import '../../models/config/editor/image/image.dart'; import '../embed_types/image.dart'; import '../../utils/utils.dart'; @@ -34,6 +36,7 @@ String getImageStyleString(QuillController controller) { ImageProvider getImageProviderByImageSource( String imageSource, { required ImageEmbedBuilderProviderBuilder? imageProviderBuilder, + required String assetsPrefix, }) { if (imageProviderBuilder != null) { return imageProviderBuilder(imageSource); @@ -46,7 +49,8 @@ ImageProvider getImageProviderByImageSource( if (isHttpBasedUrl(imageSource)) { return NetworkImage(imageSource); } - if (imageSource.startsWith('assets')) { + + if (imageSource.startsWith(assetsPrefix)) { // TODO: This impl needs to be improved return AssetImage(imageSource); } @@ -57,6 +61,7 @@ Image getImageWidgetByImageSource( String imageSource, { required ImageEmbedBuilderProviderBuilder? imageProviderBuilder, required ImageErrorWidgetBuilder? imageErrorWidgetBuilder, + required String assetsPrefix, double? width, double? height, AlignmentGeometry alignment = Alignment.center, @@ -65,6 +70,7 @@ Image getImageWidgetByImageSource( image: getImageProviderByImageSource( imageSource, imageProviderBuilder: imageProviderBuilder, + assetsPrefix: assetsPrefix, ), width: width, height: height, @@ -102,14 +108,12 @@ String appendFileExtensionToImageUrl(String url) { class ImageTapWrapper extends StatelessWidget { const ImageTapWrapper({ required this.imageUrl, - required this.imageProviderBuilder, - required this.imageErrorWidgetBuilder, + required this.configurations, super.key, }); final String imageUrl; - final ImageEmbedBuilderProviderBuilder? imageProviderBuilder; - final ImageEmbedBuilderErrorWidgetBuilder? imageErrorWidgetBuilder; + final QuillEditorImageEmbedConfigurations configurations; @override Widget build(BuildContext context) { @@ -123,9 +127,12 @@ class ImageTapWrapper extends StatelessWidget { PhotoView( imageProvider: getImageProviderByImageSource( imageUrl, - imageProviderBuilder: imageProviderBuilder, + imageProviderBuilder: configurations.imageProviderBuilder, + assetsPrefix: + QuillSharedExtensionsConfigurations.get(context: context) + .assetsPrefix, ), - errorBuilder: imageErrorWidgetBuilder, + errorBuilder: configurations.imageErrorWidgetBuilder, loadingBuilder: (context, event) { return Container( color: Colors.black,