mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: bold the text by command/control + b/B
This commit is contained in:
parent
b577489c2f
commit
d058f2d591
@ -1,4 +1,5 @@
|
||||
import 'package:flowy_editor/service/internal_key_event_handlers/delele_text_handler.dart';
|
||||
import 'package:flowy_editor/service/internal_key_event_handlers/update_text_style_by_command_x_handler.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flowy_editor/editor_state.dart';
|
||||
@ -36,6 +37,7 @@ List<FlowyKeyEventHandler> defaultKeyEventHandler = [
|
||||
flowyDeleteNodesHandler,
|
||||
arrowKeysHandler,
|
||||
enterInEdgeOfTextNodeHandler,
|
||||
updateTextStyleByCommandXHandler,
|
||||
];
|
||||
|
||||
class FlowyEditor extends StatefulWidget {
|
||||
|
@ -0,0 +1,83 @@
|
||||
import 'package:flowy_editor/document/node.dart';
|
||||
import 'package:flowy_editor/document/selection.dart';
|
||||
import 'package:flowy_editor/editor_state.dart';
|
||||
import 'package:flowy_editor/operation/transaction_builder.dart';
|
||||
import 'package:flowy_editor/service/keyboard_service.dart';
|
||||
import 'package:flowy_editor/render/rich_text/rich_text_style.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
FlowyKeyEventHandler updateTextStyleByCommandXHandler = (editorState, event) {
|
||||
if (!event.isMetaPressed || event.character == null) {
|
||||
return KeyEventResult.ignored;
|
||||
}
|
||||
|
||||
final selection = editorState.service.selectionService.currentSelection;
|
||||
final nodes = editorState.service.selectionService.currentSelectedNodes.value
|
||||
.whereType<TextNode>()
|
||||
.toList();
|
||||
|
||||
if (selection == null || nodes.isEmpty) {
|
||||
return KeyEventResult.ignored;
|
||||
}
|
||||
|
||||
switch (event.character!) {
|
||||
// bold
|
||||
case 'B':
|
||||
case 'b':
|
||||
_makeBold(editorState, nodes, selection);
|
||||
return KeyEventResult.handled;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return KeyEventResult.ignored;
|
||||
};
|
||||
|
||||
// TODO: implement unBold.
|
||||
void _makeBold(
|
||||
EditorState editorState, List<TextNode> nodes, Selection selection) {
|
||||
final builder = TransactionBuilder(editorState);
|
||||
if (nodes.length == 1) {
|
||||
builder.formatText(
|
||||
nodes.first,
|
||||
selection.start.offset,
|
||||
selection.end.offset - selection.start.offset,
|
||||
{
|
||||
'bold': true,
|
||||
},
|
||||
);
|
||||
} else {
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
final node = nodes[i];
|
||||
if (i == 0) {
|
||||
builder.formatText(
|
||||
node,
|
||||
selection.start.offset,
|
||||
node.toRawString().length - selection.start.offset,
|
||||
{
|
||||
'bold': true,
|
||||
},
|
||||
);
|
||||
} else if (i == nodes.length - 1) {
|
||||
builder.formatText(
|
||||
node,
|
||||
0,
|
||||
selection.end.offset,
|
||||
{
|
||||
'bold': true,
|
||||
},
|
||||
);
|
||||
} else {
|
||||
builder.formatText(
|
||||
node,
|
||||
0,
|
||||
node.toRawString().length,
|
||||
{
|
||||
'bold': true,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
builder.commit();
|
||||
}
|
Loading…
Reference in New Issue
Block a user