diff --git a/frontend/app_flowy/packages/flowy_editor/lib/src/render/rich_text/checkbox_text.dart b/frontend/app_flowy/packages/flowy_editor/lib/src/render/rich_text/checkbox_text.dart index c7ba8607a6..bfcc938b8b 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/src/render/rich_text/checkbox_text.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/src/render/rich_text/checkbox_text.dart @@ -72,8 +72,8 @@ class _CheckboxNodeWidgetState extends State crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( + key: iconKey, child: FlowySvg( - key: iconKey, size: Size.square(_iconSize), padding: EdgeInsets.only( top: topPadding, right: _iconRightPadding), @@ -149,7 +149,11 @@ class _CheckboxNodeWidgetState extends State style: widget.textNode.attributes.check ? span.style?.copyWith( color: Colors.grey, - decoration: TextDecoration.lineThrough, + decoration: TextDecoration.combine([ + TextDecoration.lineThrough, + if (span.style?.decoration != null) + span.style!.decoration! + ]), ) : span.style, recognizer: span.recognizer, diff --git a/frontend/app_flowy/packages/flowy_editor/test/infra/test_editor.dart b/frontend/app_flowy/packages/flowy_editor/test/infra/test_editor.dart index 61ece83c5a..17b0a95318 100644 --- a/frontend/app_flowy/packages/flowy_editor/test/infra/test_editor.dart +++ b/frontend/app_flowy/packages/flowy_editor/test/infra/test_editor.dart @@ -47,13 +47,11 @@ class EditorWidgetTester { insert(TextNode.empty()); } - void insertTextNode(String? text, {Attributes? attributes}) { + void insertTextNode(String? text, {Attributes? attributes, Delta? delta}) { insert( TextNode( type: 'text', - delta: Delta( - [TextInsert(text ?? 'Test')], - ), + delta: delta ?? Delta([TextInsert(text ?? 'Test')]), attributes: attributes, ), ); diff --git a/frontend/app_flowy/packages/flowy_editor/test/render/rich_text/checkbox_text_test.dart b/frontend/app_flowy/packages/flowy_editor/test/render/rich_text/checkbox_text_test.dart new file mode 100644 index 0000000000..84f6b93990 --- /dev/null +++ b/frontend/app_flowy/packages/flowy_editor/test/render/rich_text/checkbox_text_test.dart @@ -0,0 +1,73 @@ +import 'package:flowy_editor/flowy_editor.dart'; +import 'package:flowy_editor/src/render/rich_text/default_selectable.dart'; +import 'package:flowy_editor/src/render/rich_text/rich_text_style.dart'; +import 'package:flowy_editor/src/extensions/text_node_extensions.dart'; +import 'package:flutter_test/flutter_test.dart'; +import '../../infra/test_editor.dart'; + +void main() async { + setUpAll(() { + TestWidgetsFlutterBinding.ensureInitialized(); + }); + + group('delete_text_handler.dart', () { + testWidgets('Presses backspace key in empty document', (tester) async { + // Before + // + // [BIUS]Welcome to Appflowy 😁[BIUS] + // + // After + // + // [checkbox]Welcome to Appflowy 😁 + // + const text = 'Welcome to Appflowy 😁'; + final editor = tester.editor + ..insertTextNode( + '', + attributes: { + StyleKey.subtype: StyleKey.checkbox, + StyleKey.checkbox: false, + }, + delta: Delta([ + TextInsert(text, { + StyleKey.bold: true, + StyleKey.italic: true, + StyleKey.underline: true, + StyleKey.strikethrough: true, + }), + ]), + ); + await editor.startTesting(); + await editor.updateSelection( + Selection.single(path: [0], startOffset: 0), + ); + + final selection = + Selection.single(path: [0], startOffset: 0, endOffset: text.length); + var node = editor.nodeAtPath([0]) as TextNode; + var state = node.key?.currentState as DefaultSelectable; + var checkboxWidget = find.byKey(state.iconKey!); + await tester.tap(checkboxWidget); + await tester.pumpAndSettle(); + + expect(node.attributes.check, true); + + expect(node.allSatisfyBoldInSelection(selection), true); + expect(node.allSatisfyItalicInSelection(selection), true); + expect(node.allSatisfyUnderlineInSelection(selection), true); + expect(node.allSatisfyStrikethroughInSelection(selection), true); + + node = editor.nodeAtPath([0]) as TextNode; + state = node.key?.currentState as DefaultSelectable; + await tester.ensureVisible(find.byKey(state.iconKey!)); + await tester.tap(find.byKey(state.iconKey!)); + await tester.pump(); + + expect(node.attributes.check, false); + expect(node.allSatisfyBoldInSelection(selection), true); + expect(node.allSatisfyItalicInSelection(selection), true); + expect(node.allSatisfyUnderlineInSelection(selection), true); + expect(node.allSatisfyStrikethroughInSelection(selection), true); + }); + }); +}