fix: checkbox + underline doesn’t work when the checkbox is checked

This commit is contained in:
Lucas.Xu 2022-08-16 11:31:43 +08:00
parent a7681f86e5
commit ad26f9c86d
3 changed files with 81 additions and 6 deletions

View File

@ -72,8 +72,8 @@ class _CheckboxNodeWidgetState extends State<CheckboxNodeWidget>
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<CheckboxNodeWidget>
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,

View File

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

View File

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