From 5e6115d137df20647464d13542565c99600c99d5 Mon Sep 17 00:00:00 2001 From: Ellet Date: Wed, 6 Dec 2023 14:47:54 +0300 Subject: [PATCH] Bug fixes --- CHANGELOG.md | 3 +++ .../{quill_editor.dart => my_quill_editor.dart} | 11 +++-------- ...quill_toolbar.dart => my_quill_toolbar.dart} | 0 .../lib/presentation/quill/quill_screen.dart | 16 +++++++++++----- flutter_quill_extensions/README.md | 16 +++++++++------- .../lib/embeds/image/editor/image_embed.dart | 5 +++-- .../embeds/image/editor/image_embed_types.dart | 1 + .../lib/embeds/image/editor/image_menu.dart | 2 +- .../lib/embeds/image/toolbar/image_button.dart | 2 +- .../others/camera_button/camera_button.dart | 2 +- .../lib/embeds/video/toolbar/video_button.dart | 2 +- .../lib/embeds/widgets/image.dart | 6 +++++- .../models/config/shared_configurations.dart | 17 +++++++++-------- .../config/editor/editor_configurations.dart | 6 ------ .../config/quill_shared_configurations.dart | 4 ++++ 15 files changed, 52 insertions(+), 41 deletions(-) rename example/lib/presentation/quill/{quill_editor.dart => my_quill_editor.dart} (93%) rename example/lib/presentation/quill/{quill_toolbar.dart => my_quill_toolbar.dart} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index b91fce56..a07d0fde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. ## 9.0.0-dev-6 * Move the `child` from `QuillToolbarConfigurations` into `QuillToolbar` directly +* Bug fixes +* Flutter Quill Extensions: + * **Breaking Change**: The `imageProviderBuilder`is now providing the context and image url ## 9.0.0-dev-5 * The `QuillToolbar` is now accepting only `child` with no configurations so you can customize everything you wants, the `QuillToolbar.simple()` or `QuillSimpleToolbar` implements a simple toolbar that is based on `QuillToolbar`, you are free to use it but it just an example and not standard diff --git a/example/lib/presentation/quill/quill_editor.dart b/example/lib/presentation/quill/my_quill_editor.dart similarity index 93% rename from example/lib/presentation/quill/quill_editor.dart rename to example/lib/presentation/quill/my_quill_editor.dart index 6acc968d..390f0857 100644 --- a/example/lib/presentation/quill/quill_editor.dart +++ b/example/lib/presentation/quill/my_quill_editor.dart @@ -33,12 +33,6 @@ class MyQuillEditor extends StatelessWidget { scrollController: scrollController, focusNode: focusNode, configurations: configurations.copyWith( - extraConfigurations: { - QuillEditorExtensionsConfigurations.key: - const QuillEditorExtensionsConfigurations( - assetsPrefix: 'dsadsasda', // Defaults to assets - ), - }, customStyles: const DefaultStyles( h1: DefaultTextBlockStyle( TextStyle( @@ -88,7 +82,7 @@ class MyQuillEditor extends StatelessWidget { 'Error while loading an image: ${error.toString()}', ); }, - imageProviderBuilder: (imageUrl) { + imageProviderBuilder: (context, imageUrl) { // cached_network_image is supported // only for Android, iOS and web @@ -105,7 +99,8 @@ class MyQuillEditor extends StatelessWidget { return getImageProviderByImageSource( imageUrl, imageProviderBuilder: null, - assetsPrefix: QuillEditorExtensionsConfigurations.get( + context: context, + assetsPrefix: QuillSharedExtensionsConfigurations.get( context: context) .assetsPrefix, ); diff --git a/example/lib/presentation/quill/quill_toolbar.dart b/example/lib/presentation/quill/my_quill_toolbar.dart similarity index 100% rename from example/lib/presentation/quill/quill_toolbar.dart rename to example/lib/presentation/quill/my_quill_toolbar.dart diff --git a/example/lib/presentation/quill/quill_screen.dart b/example/lib/presentation/quill/quill_screen.dart index ef893524..0cf6eea0 100644 --- a/example/lib/presentation/quill/quill_screen.dart +++ b/example/lib/presentation/quill/quill_screen.dart @@ -3,15 +3,15 @@ import 'dart:convert' show jsonEncode; import 'package:flutter/material.dart'; import 'package:flutter_quill/flutter_quill.dart'; import 'package:flutter_quill_extensions/flutter_quill_extensions.dart' - show FlutterQuillEmbeds; + show FlutterQuillEmbeds, QuillSharedExtensionsConfigurations; import 'package:quill_html_converter/quill_html_converter.dart'; import 'package:share_plus/share_plus.dart' show Share; import '../extensions/scaffold_messenger.dart'; import '../shared/widgets/home_screen_button.dart'; -import 'quill_editor.dart'; -import 'quill_toolbar.dart'; +import 'my_quill_editor.dart'; +import 'my_quill_toolbar.dart'; @immutable class QuillScreenArgs { @@ -133,7 +133,13 @@ class _QuillScreenState extends State { QuillSharedConfigurations get _sharedConfigurations { return const QuillSharedConfigurations( - // locale: Locale('en'), - ); + // locale: Locale('en'), + extraConfigurations: { + QuillSharedExtensionsConfigurations.key: + QuillSharedExtensionsConfigurations( + assetsPrefix: 'assets', // Defaults to assets + ), + }, + ); } } diff --git a/flutter_quill_extensions/README.md b/flutter_quill_extensions/README.md index 441277f0..26d2fb02 100644 --- a/flutter_quill_extensions/README.md +++ b/flutter_quill_extensions/README.md @@ -170,17 +170,19 @@ This works for all platforms except Web If you want to use image assets in the Quill Editor, you need to make sure your assets folder is `assets` otherwise: ```dart - QuillEditor.basic( - configurations: const QuillEditorConfigurations( - // ... +QuillEditor.basic( + configurations: const QuillEditorConfigurations( + // ... + sharedConfigurations: QuillSharedConfigurations( extraConfigurations: { - QuillEditorExtensionsConfigurations.key: - QuillEditorExtensionsConfigurations( - assetsPrefix: 'your-assets-folder-name', // Defaults to assets + QuillSharedExtensionsConfigurations.key: + QuillSharedExtensionsConfigurations( + assetsPrefix: 'your-assets-folder-name', // Defaults to `assets` ), }, ), - ) + ), +); ``` This info is needed by the package to check if it asset image to use the `AssetImage` provider diff --git a/flutter_quill_extensions/lib/embeds/image/editor/image_embed.dart b/flutter_quill_extensions/lib/embeds/image/editor/image_embed.dart index 0fc025ea..ecdefe2d 100644 --- a/flutter_quill_extensions/lib/embeds/image/editor/image_embed.dart +++ b/flutter_quill_extensions/lib/embeds/image/editor/image_embed.dart @@ -41,18 +41,19 @@ class QuillEditorImageEmbedBuilder extends EmbedBuilder { final height = imageSize.height; final image = getImageWidgetByImageSource( + context: context, imageSource, imageProviderBuilder: configurations.imageProviderBuilder, imageErrorWidgetBuilder: configurations.imageErrorWidgetBuilder, alignment: alignment, height: height, width: width, - assetsPrefix: QuillEditorExtensionsConfigurations.get(context: context) + assetsPrefix: QuillSharedExtensionsConfigurations.get(context: context) .assetsPrefix, ); final imageSaverService = - QuillEditorExtensionsConfigurations.get(context: context) + QuillSharedExtensionsConfigurations.get(context: context) .imageSaverService; return GestureDetector( onTap: configurations.onImageClicked ?? diff --git a/flutter_quill_extensions/lib/embeds/image/editor/image_embed_types.dart b/flutter_quill_extensions/lib/embeds/image/editor/image_embed_types.dart index 44d2dfaa..c2503675 100644 --- a/flutter_quill_extensions/lib/embeds/image/editor/image_embed_types.dart +++ b/flutter_quill_extensions/lib/embeds/image/editor/image_embed_types.dart @@ -76,6 +76,7 @@ typedef ImageEmbedBuilderOnRemovedCallback = Future Function( ); typedef ImageEmbedBuilderProviderBuilder = ImageProvider Function( + BuildContext context, String imageUrl, ); diff --git a/flutter_quill_extensions/lib/embeds/image/editor/image_menu.dart b/flutter_quill_extensions/lib/embeds/image/editor/image_menu.dart index a7d57cb3..bc1e1414 100644 --- a/flutter_quill_extensions/lib/embeds/image/editor/image_menu.dart +++ b/flutter_quill_extensions/lib/embeds/image/editor/image_menu.dart @@ -184,7 +184,7 @@ class ImageOptionsMenu extends StatelessWidget { MaterialPageRoute( builder: (_) => ImageTapWrapper( assetsPrefix: - QuillEditorExtensionsConfigurations.get(context: context) + QuillSharedExtensionsConfigurations.get(context: context) .assetsPrefix, imageUrl: imageSource, configurations: configurations, diff --git a/flutter_quill_extensions/lib/embeds/image/toolbar/image_button.dart b/flutter_quill_extensions/lib/embeds/image/toolbar/image_button.dart index 5baeecdd..f943dabd 100644 --- a/flutter_quill_extensions/lib/embeds/image/toolbar/image_button.dart +++ b/flutter_quill_extensions/lib/embeds/image/toolbar/image_button.dart @@ -116,7 +116,7 @@ class QuillToolbarImageButton extends StatelessWidget { Future _onPressedHandler(BuildContext context) async { final imagePickerService = - QuillEditorExtensionsConfigurations.get(context: context) + QuillSharedExtensionsConfigurations.get(context: context) .imagePickerService; final onRequestPickImage = diff --git a/flutter_quill_extensions/lib/embeds/others/camera_button/camera_button.dart b/flutter_quill_extensions/lib/embeds/others/camera_button/camera_button.dart index 74cbee38..ef7ad3da 100644 --- a/flutter_quill_extensions/lib/embeds/others/camera_button/camera_button.dart +++ b/flutter_quill_extensions/lib/embeds/others/camera_button/camera_button.dart @@ -132,7 +132,7 @@ class QuillToolbarCameraButton extends StatelessWidget { QuillController controller, ) async { final imagePickerService = - QuillEditorExtensionsConfigurations.get(context: context) + QuillSharedExtensionsConfigurations.get(context: context) .imagePickerService; final cameraAction = await _getCameraAction(context); diff --git a/flutter_quill_extensions/lib/embeds/video/toolbar/video_button.dart b/flutter_quill_extensions/lib/embeds/video/toolbar/video_button.dart index c2093c94..74875978 100644 --- a/flutter_quill_extensions/lib/embeds/video/toolbar/video_button.dart +++ b/flutter_quill_extensions/lib/embeds/video/toolbar/video_button.dart @@ -115,7 +115,7 @@ class QuillToolbarVideoButton extends StatelessWidget { Future _onPressedHandler(BuildContext context) async { final imagePickerService = - QuillEditorExtensionsConfigurations.get(context: context) + QuillSharedExtensionsConfigurations.get(context: context) .imagePickerService; final onRequestPickVideo = options.videoConfigurations.onRequestPickVideo; diff --git a/flutter_quill_extensions/lib/embeds/widgets/image.dart b/flutter_quill_extensions/lib/embeds/widgets/image.dart index 03168b60..c2d4f240 100644 --- a/flutter_quill_extensions/lib/embeds/widgets/image.dart +++ b/flutter_quill_extensions/lib/embeds/widgets/image.dart @@ -36,9 +36,10 @@ ImageProvider getImageProviderByImageSource( String imageSource, { required ImageEmbedBuilderProviderBuilder? imageProviderBuilder, required String assetsPrefix, + required BuildContext context, }) { if (imageProviderBuilder != null) { - return imageProviderBuilder(imageSource); + return imageProviderBuilder(context, imageSource); } if (isImageBase64(imageSource)) { @@ -57,6 +58,7 @@ ImageProvider getImageProviderByImageSource( Image getImageWidgetByImageSource( String imageSource, { + required BuildContext context, required ImageEmbedBuilderProviderBuilder? imageProviderBuilder, required ImageErrorWidgetBuilder? imageErrorWidgetBuilder, required String assetsPrefix, @@ -66,6 +68,7 @@ Image getImageWidgetByImageSource( }) { return Image( image: getImageProviderByImageSource( + context: context, imageSource, imageProviderBuilder: imageProviderBuilder, assetsPrefix: assetsPrefix, @@ -126,6 +129,7 @@ class ImageTapWrapper extends StatelessWidget { children: [ PhotoView( imageProvider: getImageProviderByImageSource( + context: context, imageUrl, imageProviderBuilder: configurations.imageProviderBuilder, assetsPrefix: assetsPrefix, diff --git a/flutter_quill_extensions/lib/models/config/shared_configurations.dart b/flutter_quill_extensions/lib/models/config/shared_configurations.dart index 381d0160..402260b8 100644 --- a/flutter_quill_extensions/lib/models/config/shared_configurations.dart +++ b/flutter_quill_extensions/lib/models/config/shared_configurations.dart @@ -5,10 +5,11 @@ import 'package:meta/meta.dart' show immutable; import '../../services/image_picker/s_image_picker.dart'; import '../../services/image_saver/s_image_saver.dart'; -/// Configurations for Flutter Quill Editor Extensions +/// Configurations for Flutter Editor Extensions +/// shared between toolbar and editor @immutable -class QuillEditorExtensionsConfigurations { - const QuillEditorExtensionsConfigurations({ +class QuillSharedExtensionsConfigurations { + const QuillSharedExtensionsConfigurations({ ImagePickerService? imagePickerService, ImageSaverService? imageSaverService, this.assetsPrefix = 'assets', @@ -17,12 +18,12 @@ class QuillEditorExtensionsConfigurations { /// Get the instance from the widget tree in [QuillSharedConfigurations] /// if it doesn't exists, we will create new one with default options - factory QuillEditorExtensionsConfigurations.get({ + factory QuillSharedExtensionsConfigurations.get({ required BuildContext context, }) { - final value = context.quillEditorConfigurations?.extraConfigurations[key]; + final value = context.quillSharedConfigurations?.extraConfigurations[key]; if (value != null) { - if (value is! QuillEditorExtensionsConfigurations) { + if (value is! QuillSharedExtensionsConfigurations) { throw ArgumentError( 'The value of key `$key` should be of type ' '$key', @@ -30,7 +31,7 @@ class QuillEditorExtensionsConfigurations { } return value; } - return const QuillEditorExtensionsConfigurations(); + return const QuillSharedExtensionsConfigurations(); } /// The key to be used in the `extraConfigurations` property @@ -38,7 +39,7 @@ class QuillEditorExtensionsConfigurations { /// which lives in the [QuillConfigurations] /// /// which exists in the [QuillEditorConfigurations] - static const String key = 'QuillEditorExtensionsConfigurations'; + static const String key = 'QuillSharedExtensionsConfigurations'; /// Defaults to [ImagePickerService.defaultImpl] final ImagePickerService? _imagePickerService; diff --git a/lib/src/models/config/editor/editor_configurations.dart b/lib/src/models/config/editor/editor_configurations.dart index 97904f66..b96886c3 100644 --- a/lib/src/models/config/editor/editor_configurations.dart +++ b/lib/src/models/config/editor/editor_configurations.dart @@ -75,14 +75,10 @@ class QuillEditorConfigurations extends Equatable { this.builder, this.magnifierConfiguration, this.textInputAction = TextInputAction.newline, - this.extraConfigurations = const {}, }); final QuillSharedConfigurations sharedConfigurations; - /// Store custom configurations in here and use it in the widget tree - final Map extraConfigurations; - final QuillController controller; /// The text placeholder in the quill editor @@ -343,7 +339,6 @@ class QuillEditorConfigurations extends Equatable { QuillEditorConfigurations copyWith({ QuillSharedConfigurations? sharedConfigurations, - Map? extraConfigurations, QuillController? controller, String? placeholder, bool? readOnly, @@ -391,7 +386,6 @@ class QuillEditorConfigurations extends Equatable { }) { return QuillEditorConfigurations( sharedConfigurations: sharedConfigurations ?? this.sharedConfigurations, - extraConfigurations: extraConfigurations ?? this.extraConfigurations, controller: controller ?? this.controller, placeholder: placeholder ?? this.placeholder, readOnly: readOnly ?? this.readOnly, diff --git a/lib/src/models/config/quill_shared_configurations.dart b/lib/src/models/config/quill_shared_configurations.dart index 8bf224da..beadc432 100644 --- a/lib/src/models/config/quill_shared_configurations.dart +++ b/lib/src/models/config/quill_shared_configurations.dart @@ -15,6 +15,7 @@ class QuillSharedConfigurations extends Equatable { this.dialogBarrierColor = Colors.black54, this.dialogTheme, this.locale, + this.extraConfigurations = const {}, }); // This is just example or showcase of this major update to make the library @@ -33,6 +34,9 @@ class QuillSharedConfigurations extends Equatable { /// `MaterialApp` or `WidgetsApp` final Locale? locale; + /// Store custom configurations in here and use it in the widget tree + final Map extraConfigurations; + @override List get props => [ dialogBarrierColor,