diff --git a/analysis_options.yaml b/analysis_options.yaml index 2fc4fec6..7749c861 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -17,6 +17,7 @@ linter: - avoid_void_async - cascade_invocations - directives_ordering + - lines_longer_than_80_chars - omit_local_variable_types - prefer_const_constructors - prefer_const_constructors_in_immutables @@ -31,5 +32,6 @@ linter: - prefer_single_quotes - sort_constructors_first - sort_unnamed_constructors_first + - unnecessary_lambdas - unnecessary_parenthesis - unnecessary_string_interpolations diff --git a/example/lib/pages/home_page.dart b/example/lib/pages/home_page.dart index d40b4be2..e0f436f8 100644 --- a/example/lib/pages/home_page.dart +++ b/example/lib/pages/home_page.dart @@ -170,7 +170,8 @@ class _HomePageState extends State { } // Renders the image picked by imagePicker from local file storage - // You can also upload the picked image to any server (eg : AWS s3 or Firebase) and then return the uploaded image URL + // You can also upload the picked image to any server (eg : AWS s3 + // or Firebase) and then return the uploaded image URL. Future _onImagePickCallback(File file) async { // Copies the picked file from temporary cache to applications directory final appDocDir = await getApplicationDocumentsDirectory(); diff --git a/example/lib/universal_ui/universal_ui.dart b/example/lib/universal_ui/universal_ui.dart index d1bdc3f5..95047a31 100644 --- a/example/lib/universal_ui/universal_ui.dart +++ b/example/lib/universal_ui/universal_ui.dart @@ -3,9 +3,9 @@ library universal_ui; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_quill/flutter_quill.dart'; - import 'package:universal_html/html.dart' as html; +import '../widgets/responsive_widget.dart'; import 'fake_ui.dart' if (dart.library.html) 'real_ui.dart' as ui_instance; class PlatformViewRegistryFix { @@ -50,8 +50,9 @@ Widget defaultEmbedBuilderWeb(BuildContext context, Embed node) { default: throw UnimplementedError( - 'Embeddable type "${node.value.type}" is not supported by default embed ' - 'builder of QuillEditor. You must pass your own builder function to ' - 'embedBuilder property of QuillEditor or QuillField widgets.'); + 'Embeddable type "${node.value.type}" is not supported by default ' + 'embed builder of QuillEditor. You must pass your own builder function ' + 'to embedBuilder property of QuillEditor or QuillField widgets.', + ); } } diff --git a/lib/src/widgets/responsive_widget.dart b/example/lib/widgets/responsive_widget.dart similarity index 100% rename from lib/src/widgets/responsive_widget.dart rename to example/lib/widgets/responsive_widget.dart diff --git a/lib/flutter_quill.dart b/lib/flutter_quill.dart index 049786cd..6b6754ce 100644 --- a/lib/flutter_quill.dart +++ b/lib/flutter_quill.dart @@ -8,5 +8,4 @@ export 'src/models/quill_delta.dart'; export 'src/widgets/controller.dart'; export 'src/widgets/default_styles.dart'; export 'src/widgets/editor.dart'; -export 'src/widgets/responsive_widget.dart'; export 'src/widgets/toolbar.dart'; diff --git a/lib/models/documents/attribute.dart b/lib/models/documents/attribute.dart index 7411e232..e106383e 100644 --- a/lib/models/documents/attribute.dart +++ b/lib/models/documents/attribute.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/documents/attribute.dart'; +export '../../src/models/documents/attribute.dart'; diff --git a/lib/models/documents/document.dart b/lib/models/documents/document.dart index d946618a..a187d19d 100644 --- a/lib/models/documents/document.dart +++ b/lib/models/documents/document.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/documents/document.dart'; +export '../../src/models/documents/document.dart'; diff --git a/lib/models/documents/history.dart b/lib/models/documents/history.dart index 3ff6870e..b07c8e33 100644 --- a/lib/models/documents/history.dart +++ b/lib/models/documents/history.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/documents/history.dart'; +export '../../src/models/documents/history.dart'; diff --git a/lib/models/documents/style.dart b/lib/models/documents/style.dart index a4e06de4..6df9412b 100644 --- a/lib/models/documents/style.dart +++ b/lib/models/documents/style.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/documents/style.dart'; +export '../../src/models/documents/style.dart'; diff --git a/lib/models/quill_delta.dart b/lib/models/quill_delta.dart index 477fbe33..796d68ca 100644 --- a/lib/models/quill_delta.dart +++ b/lib/models/quill_delta.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/quill_delta.dart'; +export '../src/models/quill_delta.dart'; diff --git a/lib/models/rules/delete.dart b/lib/models/rules/delete.dart index 65a27b0e..0430686b 100644 --- a/lib/models/rules/delete.dart +++ b/lib/models/rules/delete.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/rules/delete.dart'; +export '../../src/models/rules/delete.dart'; diff --git a/lib/models/rules/format.dart b/lib/models/rules/format.dart index e6251d03..7d642af3 100644 --- a/lib/models/rules/format.dart +++ b/lib/models/rules/format.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/rules/format.dart'; +export '../../src/models/rules/format.dart'; diff --git a/lib/models/rules/insert.dart b/lib/models/rules/insert.dart index 4dfe6ab7..04e7a4fa 100644 --- a/lib/models/rules/insert.dart +++ b/lib/models/rules/insert.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/rules/insert.dart'; +export '../../src/models/rules/insert.dart'; diff --git a/lib/models/rules/rule.dart b/lib/models/rules/rule.dart index 11026f46..ccea0dda 100644 --- a/lib/models/rules/rule.dart +++ b/lib/models/rules/rule.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/models/rules/rule.dart'; +export '../../src/models/rules/rule.dart'; diff --git a/lib/src/models/documents/document.dart b/lib/src/models/documents/document.dart index a26d885a..346da93b 100644 --- a/lib/src/models/documents/document.dart +++ b/lib/src/models/documents/document.dart @@ -250,7 +250,7 @@ class Document { for (final op in doc.toList()) { if (!op.isInsert) { throw ArgumentError.value(doc, - 'Document Delta can only contain insert operations but ${op.key} found.'); + 'Document can only contain insert operations but ${op.key} found.'); } final style = op.attributes != null ? Style.fromJson(op.attributes) : null; diff --git a/lib/src/models/documents/nodes/container.dart b/lib/src/models/documents/nodes/container.dart index dbdd12d1..13f6aa2f 100644 --- a/lib/src/models/documents/nodes/container.dart +++ b/lib/src/models/documents/nodes/container.dart @@ -79,7 +79,7 @@ abstract class Container extends Node { if (last != null) last.adjust(); } - /// Queries the child [Node] at specified character [offset] in this container. + /// Queries the child [Node] at [offset] in this container. /// /// The result may contain the found node or `null` if no node is found /// at specified offset. diff --git a/lib/src/models/documents/nodes/embed.dart b/lib/src/models/documents/nodes/embed.dart index d6fe628a..07e6a6b3 100644 --- a/lib/src/models/documents/nodes/embed.dart +++ b/lib/src/models/documents/nodes/embed.dart @@ -4,7 +4,7 @@ /// /// * [BlockEmbed] which represents a block embed. class Embeddable { - Embeddable(this.type, this.data); + const Embeddable(this.type, this.data); /// The type of this object. final String type; @@ -32,9 +32,11 @@ class Embeddable { /// the document model itself does not make any assumptions about the types /// of embedded objects and allows users to define their own types. class BlockEmbed extends Embeddable { - BlockEmbed(String type, String data) : super(type, data); + const BlockEmbed(String type, String data) : super(type, data); - static BlockEmbed horizontalRule = BlockEmbed('divider', 'hr'); + static const String horizontalRuleType = 'divider'; + static BlockEmbed horizontalRule = const BlockEmbed(horizontalRuleType, 'hr'); - static BlockEmbed image(String imageUrl) => BlockEmbed('image', imageUrl); + static const String imageType = 'image'; + static BlockEmbed image(String imageUrl) => BlockEmbed(imageType, imageUrl); } diff --git a/lib/src/models/quill_delta.dart b/lib/src/models/quill_delta.dart index a0e608be..548e2afa 100644 --- a/lib/src/models/quill_delta.dart +++ b/lib/src/models/quill_delta.dart @@ -1,5 +1,6 @@ -// Copyright (c) 2018, Anatoly Pulyaevskiy. All rights reserved. Use of this source code -// is governed by a BSD-style license that can be found in the LICENSE file. +// Copyright (c) 2018, Anatoly Pulyaevskiy. All rights reserved. Use of this +// source code is governed by a BSD-style license that can be found in the +// LICENSE file. /// Implementation of Quill Delta format in Dart. library quill_delta; diff --git a/lib/src/models/rules/insert.dart b/lib/src/models/rules/insert.dart index 5801a10e..f50be23f 100644 --- a/lib/src/models/rules/insert.dart +++ b/lib/src/models/rules/insert.dart @@ -167,7 +167,8 @@ class AutoExitBlockRule extends InsertRule { // First check if `cur` length is greater than 1, this would indicate // that it contains multiple newline characters which share the same style. // This would mean we are not on the last line yet. - // `cur.value as String` is safe since we already called isEmptyLine and know it contains a newline + // `cur.value as String` is safe since we already called isEmptyLine and + // know it contains a newline if ((cur.value as String).length > 1) { // We are not on the last line of this block, ignore. return null; @@ -188,7 +189,7 @@ class AutoExitBlockRule extends InsertRule { // therefore we can exit this block. final attributes = cur.attributes ?? {}; final k = attributes.keys - .firstWhere((k) => Attribute.blockKeysExceptHeader.contains(k)); + .firstWhere(Attribute.blockKeysExceptHeader.contains); attributes[k] = null; // retain(1) should be '\n', set it with no attribute return Delta()..retain(index + (len ?? 0))..retain(1, attributes); diff --git a/lib/src/utils/diff_delta.dart b/lib/src/utils/diff_delta.dart index 003bae47..0e09946c 100644 --- a/lib/src/utils/diff_delta.dart +++ b/lib/src/utils/diff_delta.dart @@ -79,7 +79,8 @@ int getPositionDelta(Delta user, Delta actual) { final userOperation = userItr.next(length as int); final actualOperation = actualItr.next(length); if (userOperation.length != actualOperation.length) { - throw 'userOp ${userOperation.length} does not match actualOp ${actualOperation.length}'; + throw 'userOp ${userOperation.length} does not match actualOp ' + '${actualOperation.length}'; } if (userOperation.key == actualOperation.key) { continue; diff --git a/lib/src/widgets/controller.dart b/lib/src/widgets/controller.dart index bd669171..9edf805b 100644 --- a/lib/src/widgets/controller.dart +++ b/lib/src/widgets/controller.dart @@ -69,7 +69,7 @@ class QuillController extends ChangeNotifier { // if (this.selection.extentOffset >= document.length) { // // cursor exceeds the length of document, position it in the end // updateSelection( - // TextSelection.collapsed(offset: document.length), ChangeSource.LOCAL); + // TextSelection.collapsed(offset: document.length), ChangeSource.LOCAL); updateSelection( TextSelection.collapsed(offset: selection.baseOffset + len!), ChangeSource.LOCAL); diff --git a/lib/src/widgets/cursor.dart b/lib/src/widgets/cursor.dart index 44ba564f..9fef16e5 100644 --- a/lib/src/widgets/cursor.dart +++ b/lib/src/widgets/cursor.dart @@ -267,8 +267,9 @@ class CursorPainter { case TargetPlatform.fuchsia: case TargetPlatform.linux: case TargetPlatform.windows: - // Override the height to take the full height of the glyph at the TextPosition - // when not on iOS. iOS has special handling that creates a taller caret. + // Override the height to take the full height of the glyph at the + // TextPosition when not on iOS. iOS has special handling that + // creates a taller caret. caretRect = Rect.fromLTWH( caretRect.left, caretRect.top - 2.0, @@ -291,25 +292,39 @@ class CursorPainter { } } - final caretPosition = editable!.localToGlobal(caretRect.topLeft); - final pixelMultiple = 1.0 / devicePixelRatio; - caretRect = caretRect.shift(Offset( - caretPosition.dx.isFinite - ? (caretPosition.dx / pixelMultiple).round() * pixelMultiple - - caretPosition.dx - : caretPosition.dx, - caretPosition.dy.isFinite - ? (caretPosition.dy / pixelMultiple).round() * pixelMultiple - - caretPosition.dy - : caretPosition.dy)); + final pixelPerfectOffset = + _getPixelPerfectCursorOffset(editable!, caretRect, devicePixelRatio); + if (!pixelPerfectOffset.isFinite) { + return; + } + caretRect = caretRect.shift(pixelPerfectOffset); final paint = Paint()..color = color; if (style.radius == null) { canvas.drawRect(caretRect, paint); - return; + } else { + final caretRRect = RRect.fromRectAndRadius(caretRect, style.radius!); + canvas.drawRRect(caretRRect, paint); } + } + + Offset _getPixelPerfectCursorOffset( + RenderContentProxyBox editable, + Rect caretRect, + double devicePixelRatio, + ) { + final caretPosition = editable.localToGlobal(caretRect.topLeft); + final pixelMultiple = 1.0 / devicePixelRatio; + + final pixelPerfectOffsetX = caretPosition.dx.isFinite + ? (caretPosition.dx / pixelMultiple).round() * pixelMultiple - + caretPosition.dx + : caretPosition.dx; + final pixelPerfectOffsetY = caretPosition.dy.isFinite + ? (caretPosition.dy / pixelMultiple).round() * pixelMultiple - + caretPosition.dy + : caretPosition.dy; - final caretRRect = RRect.fromRectAndRadius(caretRect, style.radius!); - canvas.drawRRect(caretRRect, paint); + return Offset(pixelPerfectOffsetX, pixelPerfectOffsetY); } } diff --git a/lib/src/widgets/editor.dart b/lib/src/widgets/editor.dart index 662a018c..fb90db76 100644 --- a/lib/src/widgets/editor.dart +++ b/lib/src/widgets/editor.dart @@ -107,9 +107,10 @@ Widget _defaultEmbedBuilder(BuildContext context, leaf.Embed node) { : Image.file(io.File(imageUrl)); default: throw UnimplementedError( - 'Embeddable type "${node.value.type}" is not supported by default embed ' - 'builder of QuillEditor. You must pass your own builder function to ' - 'embedBuilder property of QuillEditor or QuillField widgets.'); + 'Embeddable type "${node.value.type}" is not supported by default ' + 'embed builder of QuillEditor. You must pass your own builder function ' + 'to embedBuilder property of QuillEditor or QuillField widgets.', + ); } } diff --git a/lib/src/widgets/keyboard_listener.dart b/lib/src/widgets/keyboard_listener.dart index 17c47aad..58df1725 100644 --- a/lib/src/widgets/keyboard_listener.dart +++ b/lib/src/widgets/keyboard_listener.dart @@ -64,7 +64,7 @@ class KeyboardListener { bool handleRawKeyEvent(RawKeyEvent event) { if (kIsWeb) { - // On web platform, we should ignore the key because it's processed already. + // On web platform, we ignore the key because it's already processed. return false; } diff --git a/lib/src/widgets/raw_editor.dart b/lib/src/widgets/raw_editor.dart index e52e18cd..b94472b6 100644 --- a/lib/src/widgets/raw_editor.dart +++ b/lib/src/widgets/raw_editor.dart @@ -483,8 +483,12 @@ class RawEditorState extends EditorState ..startCursorTimer(); } - SchedulerBinding.instance!.addPostFrameCallback( - (_) => _updateOrDisposeSelectionOverlayIfNeeded()); + SchedulerBinding.instance!.addPostFrameCallback((_) { + if (!mounted) { + return; + } + _updateOrDisposeSelectionOverlayIfNeeded(); + }); if (mounted) { setState(() { // Use widget.controller.value in build() @@ -559,13 +563,17 @@ class RawEditorState extends EditorState if (widget.scrollable) { _showCaretOnScreenScheduled = false; - final viewport = RenderAbstractViewport.of(getRenderEditor()); + final renderEditor = getRenderEditor(); + if (renderEditor == null) { + return; + } - final editorOffset = getRenderEditor()! - .localToGlobal(const Offset(0, 0), ancestor: viewport); + final viewport = RenderAbstractViewport.of(renderEditor); + final editorOffset = + renderEditor.localToGlobal(const Offset(0, 0), ancestor: viewport); final offsetInViewport = _scrollController!.offset + editorOffset.dy; - final offset = getRenderEditor()!.getOffsetToRevealCursor( + final offset = renderEditor.getOffsetToRevealCursor( _scrollController!.position.viewportDimension, _scrollController!.offset, offsetInViewport, @@ -584,7 +592,7 @@ class RawEditorState extends EditorState @override RenderEditor? getRenderEditor() { - return _editorKey.currentContext!.findRenderObject() as RenderEditor?; + return _editorKey.currentContext?.findRenderObject() as RenderEditor?; } @override @@ -672,7 +680,7 @@ class RawEditorState extends EditorState @override void userUpdateTextEditingValue( TextEditingValue value, SelectionChangedCause cause) { - // TODO: implement userUpdateTextEditingValue + updateEditingValue(value); } } diff --git a/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart b/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart index 527df582..bfb36106 100644 --- a/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart +++ b/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart @@ -103,7 +103,11 @@ mixin RawEditorStateTextInputClientMixin on EditorState final shouldRemember = getTextEditingValue().text != _lastKnownRemoteTextEditingValue!.text; _lastKnownRemoteTextEditingValue = actualValue; - _textInputConnection!.setEditingState(actualValue); + _textInputConnection!.setEditingState( + // Set composing to (-1, -1), otherwise an exception will be thrown if + // the values are different. + actualValue.copyWith(composing: const TextRange(start: -1, end: -1)), + ); if (shouldRemember) { // Only keep track if text changed (selection changes are not relevant) _sentRemoteValues.add(actualValue); diff --git a/lib/src/widgets/simple_viewer.dart b/lib/src/widgets/simple_viewer.dart index ee1a7732..559e5e1a 100644 --- a/lib/src/widgets/simple_viewer.dart +++ b/lib/src/widgets/simple_viewer.dart @@ -109,9 +109,11 @@ class _QuillSimpleViewerState extends State : Image.file(io.File(imageUrl)); default: throw UnimplementedError( - 'Embeddable type "${node.value.type}" is not supported by default embed ' - 'builder of QuillEditor. You must pass your own builder function to ' - 'embedBuilder property of QuillEditor or QuillField widgets.'); + 'Embeddable type "${node.value.type}" is not supported by default ' + 'embed builder of QuillEditor. You must pass your own builder ' + 'function to embedBuilder property of QuillEditor or QuillField ' + 'widgets.', + ); } } diff --git a/lib/src/widgets/text_block.dart b/lib/src/widgets/text_block.dart index f533a160..92c80f39 100644 --- a/lib/src/widgets/text_block.dart +++ b/lib/src/widgets/text_block.dart @@ -512,7 +512,8 @@ class RenderEditableTextBlock extends RenderEditableContainerBox offset.translate(decorationPadding.left, decorationPadding.top); _painter!.paint(context.canvas, decorationOffset, filledConfiguration); if (debugSaveCount != context.canvas.getSaveCount()) { - throw '${_decoration.runtimeType} painter had mismatching save and restore calls.'; + throw '${_decoration.runtimeType} painter had mismatching save and ' + 'restore calls.'; } if (decoration.isComplex) { context.setIsComplexHint(); diff --git a/lib/utils/color.dart b/lib/utils/color.dart index f126cf52..cfd8f803 100644 --- a/lib/utils/color.dart +++ b/lib/utils/color.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/utils/color.dart'; +export '../src/utils/color.dart'; diff --git a/lib/utils/diff_delta.dart b/lib/utils/diff_delta.dart index 08d30f51..607093c4 100644 --- a/lib/utils/diff_delta.dart +++ b/lib/utils/diff_delta.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../../src/utils/diff_delta.dart'; +export '../src/utils/diff_delta.dart'; diff --git a/lib/widgets/box.dart b/lib/widgets/box.dart index d97c610a..511c8149 100644 --- a/lib/widgets/box.dart +++ b/lib/widgets/box.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/box.dart'; +export '../src/widgets/box.dart'; diff --git a/lib/widgets/controller.dart b/lib/widgets/controller.dart index e1177f78..82cab553 100644 --- a/lib/widgets/controller.dart +++ b/lib/widgets/controller.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/controller.dart'; +export '../src/widgets/controller.dart'; diff --git a/lib/widgets/cursor.dart b/lib/widgets/cursor.dart index 3528ad16..540c9011 100644 --- a/lib/widgets/cursor.dart +++ b/lib/widgets/cursor.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/cursor.dart'; +export '../src/widgets/cursor.dart'; diff --git a/lib/widgets/default_styles.dart b/lib/widgets/default_styles.dart index 3fffda6f..6dd63fc8 100644 --- a/lib/widgets/default_styles.dart +++ b/lib/widgets/default_styles.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/default_styles.dart'; +export '../src/widgets/default_styles.dart'; diff --git a/lib/widgets/delegate.dart b/lib/widgets/delegate.dart index c1db553e..3a5057d2 100644 --- a/lib/widgets/delegate.dart +++ b/lib/widgets/delegate.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/delegate.dart'; +export '../src/widgets/delegate.dart'; diff --git a/lib/widgets/editor.dart b/lib/widgets/editor.dart index c0d754f9..db30762d 100644 --- a/lib/widgets/editor.dart +++ b/lib/widgets/editor.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/editor.dart'; +export '../src/widgets/editor.dart'; diff --git a/lib/widgets/image.dart b/lib/widgets/image.dart index 41a8a235..547279d1 100644 --- a/lib/widgets/image.dart +++ b/lib/widgets/image.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/image.dart'; +export '../src/widgets/image.dart'; diff --git a/lib/widgets/keyboard_listener.dart b/lib/widgets/keyboard_listener.dart index 0ee8d6e7..20c72b74 100644 --- a/lib/widgets/keyboard_listener.dart +++ b/lib/widgets/keyboard_listener.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/keyboard_listener.dart'; +export '../src/widgets/keyboard_listener.dart'; diff --git a/lib/widgets/proxy.dart b/lib/widgets/proxy.dart index 6d17bb7d..247f4897 100644 --- a/lib/widgets/proxy.dart +++ b/lib/widgets/proxy.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/proxy.dart'; +export '../src/widgets/proxy.dart'; diff --git a/lib/widgets/raw_editor.dart b/lib/widgets/raw_editor.dart index cf483dd1..84ebf6f2 100644 --- a/lib/widgets/raw_editor.dart +++ b/lib/widgets/raw_editor.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/raw_editor.dart'; +export '../src/widgets/raw_editor.dart'; diff --git a/lib/widgets/responsive_widget.dart b/lib/widgets/responsive_widget.dart deleted file mode 100644 index bb46820f..00000000 --- a/lib/widgets/responsive_widget.dart +++ /dev/null @@ -1,3 +0,0 @@ -/// TODO: Remove this file in the next breaking release, because implementation -/// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/responsive_widget.dart'; diff --git a/lib/widgets/simple_viewer.dart b/lib/widgets/simple_viewer.dart index 219babec..fbea8404 100644 --- a/lib/widgets/simple_viewer.dart +++ b/lib/widgets/simple_viewer.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/simple_viewer.dart'; +export '../src/widgets/simple_viewer.dart'; diff --git a/lib/widgets/text_block.dart b/lib/widgets/text_block.dart index 3e46ea80..b58e01ae 100644 --- a/lib/widgets/text_block.dart +++ b/lib/widgets/text_block.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/text_block.dart'; +export '../src/widgets/text_block.dart'; diff --git a/lib/widgets/text_line.dart b/lib/widgets/text_line.dart index 7c8dcc80..0d0e4098 100644 --- a/lib/widgets/text_line.dart +++ b/lib/widgets/text_line.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/text_line.dart'; +export '../src/widgets/text_line.dart'; diff --git a/lib/widgets/text_selection.dart b/lib/widgets/text_selection.dart index b35db3ea..e4c3f5e4 100644 --- a/lib/widgets/text_selection.dart +++ b/lib/widgets/text_selection.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/text_selection.dart'; +export '../src/widgets/text_selection.dart'; diff --git a/lib/widgets/toolbar.dart b/lib/widgets/toolbar.dart index c47f1353..1f9d4827 100644 --- a/lib/widgets/toolbar.dart +++ b/lib/widgets/toolbar.dart @@ -1,3 +1,3 @@ /// TODO: Remove this file in the next breaking release, because implementation /// files should be located in the src folder, https://bit.ly/3fA23Yz. -export '../../src/widgets/toolbar.dart'; +export '../src/widgets/toolbar.dart';