library flutter_quill_extensions; import 'package:flutter/material.dart'; import 'package:flutter_quill/flutter_quill.dart'; import 'embeds/builders.dart'; import 'embeds/embed_types.dart'; import 'embeds/toolbar/camera_button.dart'; import 'embeds/toolbar/formula_button.dart'; import 'embeds/toolbar/image_button.dart'; import 'embeds/toolbar/video_button.dart'; export 'embeds/embed_types.dart'; export 'embeds/toolbar/camera_button.dart'; export 'embeds/toolbar/formula_button.dart'; export 'embeds/toolbar/image_button.dart'; export 'embeds/toolbar/image_video_utils.dart'; export 'embeds/toolbar/media_button.dart'; export 'embeds/toolbar/video_button.dart'; export 'embeds/utils.dart'; class FlutterQuillEmbeds { /// Returns a list of embed builders for Quill editors. /// /// [onVideoInit] is called when a video is initialized. /// [onRemoveImage] is called when an image is removed from the editor. /// By default, [onRemoveImage] 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 [onRemoveImage] customization: /// ```dart /// onRemoveImage: (imageFile) async { /// // Your custom logic here /// // or leave it empty to do nothing /// } /// ``` static List builders({ void Function(GlobalKey videoContainerKey)? onVideoInit, ImageEmbedBuilderAfterRemoveImageFromEditor? afterRemoveImageFromEditor, }) => [ ImageEmbedBuilder( afterRemoveImageFromEditor: afterRemoveImageFromEditor ?? (imageFile) async { // TODO: Please change this default code final fileExists = await imageFile.exists(); if (fileExists) { await imageFile.delete(); } }, ), VideoEmbedBuilder(onVideoInit: onVideoInit), FormulaEmbedBuilder(), ]; static List webBuilders() => [ ImageEmbedBuilderWeb(), ]; static List buttons({ bool showImageButton = true, bool showVideoButton = true, bool showCameraButton = true, bool showFormulaButton = false, String? imageButtonTooltip, String? videoButtonTooltip, String? cameraButtonTooltip, String? formulaButtonTooltip, OnImagePickCallback? onImagePickCallback, OnVideoPickCallback? onVideoPickCallback, MediaPickSettingSelector? mediaPickSettingSelector, MediaPickSettingSelector? cameraPickSettingSelector, FilePickImpl? filePickImpl, WebImagePickImpl? webImagePickImpl, WebVideoPickImpl? webVideoPickImpl, RegExp? imageLinkRegExp, RegExp? videoLinkRegExp, }) => [ if (showImageButton) (controller, toolbarIconSize, iconTheme, dialogTheme) => ImageButton( icon: Icons.image, iconSize: toolbarIconSize, tooltip: imageButtonTooltip, controller: controller, onImagePickCallback: onImagePickCallback, filePickImpl: filePickImpl, webImagePickImpl: webImagePickImpl, mediaPickSettingSelector: mediaPickSettingSelector, iconTheme: iconTheme, dialogTheme: dialogTheme, linkRegExp: imageLinkRegExp, ), if (showVideoButton) (controller, toolbarIconSize, iconTheme, dialogTheme) => VideoButton( icon: Icons.movie_creation, iconSize: toolbarIconSize, tooltip: videoButtonTooltip, controller: controller, onVideoPickCallback: onVideoPickCallback, filePickImpl: filePickImpl, webVideoPickImpl: webImagePickImpl, mediaPickSettingSelector: mediaPickSettingSelector, iconTheme: iconTheme, dialogTheme: dialogTheme, linkRegExp: videoLinkRegExp, ), if ((onImagePickCallback != null || onVideoPickCallback != null) && showCameraButton) (controller, toolbarIconSize, iconTheme, dialogTheme) => CameraButton( icon: Icons.photo_camera, iconSize: toolbarIconSize, tooltip: cameraButtonTooltip, controller: controller, onImagePickCallback: onImagePickCallback, onVideoPickCallback: onVideoPickCallback, filePickImpl: filePickImpl, webImagePickImpl: webImagePickImpl, webVideoPickImpl: webVideoPickImpl, cameraPickSettingSelector: cameraPickSettingSelector, iconTheme: iconTheme, ), if (showFormulaButton) (controller, toolbarIconSize, iconTheme, dialogTheme) => FormulaButton( icon: Icons.functions, iconSize: toolbarIconSize, tooltip: formulaButtonTooltip, controller: controller, iconTheme: iconTheme, dialogTheme: dialogTheme, ) ]; }