pull/1566/head
Ellet 1 year ago
parent ec2d28c1bc
commit 5e6115d137
No known key found for this signature in database
GPG Key ID: C488CC70BBCEF0D1
  1. 3
      CHANGELOG.md
  2. 11
      example/lib/presentation/quill/my_quill_editor.dart
  3. 0
      example/lib/presentation/quill/my_quill_toolbar.dart
  4. 16
      example/lib/presentation/quill/quill_screen.dart
  5. 16
      flutter_quill_extensions/README.md
  6. 5
      flutter_quill_extensions/lib/embeds/image/editor/image_embed.dart
  7. 1
      flutter_quill_extensions/lib/embeds/image/editor/image_embed_types.dart
  8. 2
      flutter_quill_extensions/lib/embeds/image/editor/image_menu.dart
  9. 2
      flutter_quill_extensions/lib/embeds/image/toolbar/image_button.dart
  10. 2
      flutter_quill_extensions/lib/embeds/others/camera_button/camera_button.dart
  11. 2
      flutter_quill_extensions/lib/embeds/video/toolbar/video_button.dart
  12. 6
      flutter_quill_extensions/lib/embeds/widgets/image.dart
  13. 17
      flutter_quill_extensions/lib/models/config/shared_configurations.dart
  14. 6
      lib/src/models/config/editor/editor_configurations.dart
  15. 4
      lib/src/models/config/quill_shared_configurations.dart

@ -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

@ -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,
);

@ -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<QuillScreen> {
QuillSharedConfigurations get _sharedConfigurations {
return const QuillSharedConfigurations(
// locale: Locale('en'),
);
// locale: Locale('en'),
extraConfigurations: {
QuillSharedExtensionsConfigurations.key:
QuillSharedExtensionsConfigurations(
assetsPrefix: 'assets', // Defaults to assets
),
},
);
}
}

@ -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

@ -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 ??

@ -76,6 +76,7 @@ typedef ImageEmbedBuilderOnRemovedCallback = Future<void> Function(
);
typedef ImageEmbedBuilderProviderBuilder = ImageProvider Function(
BuildContext context,
String imageUrl,
);

@ -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,

@ -116,7 +116,7 @@ class QuillToolbarImageButton extends StatelessWidget {
Future<void> _onPressedHandler(BuildContext context) async {
final imagePickerService =
QuillEditorExtensionsConfigurations.get(context: context)
QuillSharedExtensionsConfigurations.get(context: context)
.imagePickerService;
final onRequestPickImage =

@ -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);

@ -115,7 +115,7 @@ class QuillToolbarVideoButton extends StatelessWidget {
Future<void> _onPressedHandler(BuildContext context) async {
final imagePickerService =
QuillEditorExtensionsConfigurations.get(context: context)
QuillSharedExtensionsConfigurations.get(context: context)
.imagePickerService;
final onRequestPickVideo = options.videoConfigurations.onRequestPickVideo;

@ -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,

@ -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;

@ -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<String, Object?> extraConfigurations;
final QuillController controller;
/// The text placeholder in the quill editor
@ -343,7 +339,6 @@ class QuillEditorConfigurations extends Equatable {
QuillEditorConfigurations copyWith({
QuillSharedConfigurations? sharedConfigurations,
Map<String, Object?>? 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,

@ -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<String, Object?> extraConfigurations;
@override
List<Object?> get props => [
dialogBarrierColor,

Loading…
Cancel
Save