feat: alt+click to add block above (#2988)

This commit is contained in:
Mathias Mogensen 2023-07-13 12:33:16 +02:00 committed by GitHub
parent c12aa66b2a
commit 5085ea115f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 10 deletions

View File

@ -0,0 +1,11 @@
import 'package:flutter/services.dart';
extension RawKeyboardExtension on RawKeyboard {
bool get isAltPressed => keysPressed.any(
(key) => [
LogicalKeyboardKey.alt,
LogicalKeyboardKey.altLeft,
LogicalKeyboardKey.altRight,
].contains(key),
);
}

View File

@ -312,7 +312,7 @@ class _AppFlowyEditorPageState extends State<AppFlowyEditorPage> {
builder.actionBuilder = (context, state) {
final padding = context.node.type == HeadingBlockKeys.type
? const EdgeInsets.only(top: 8.0)
: const EdgeInsets.all(0);
: EdgeInsets.zero;
return Padding(
padding: padding,
child: BlockActionList(
@ -320,9 +320,7 @@ class _AppFlowyEditorPageState extends State<AppFlowyEditorPage> {
blockComponentState: state,
editorState: widget.editorState,
actions: actions,
showSlashMenu: () => showSlashMenu(
widget.editorState,
),
showSlashMenu: () => showSlashMenu(widget.editorState),
),
);
};

View File

@ -1,6 +1,12 @@
import 'dart:io';
import 'package:appflowy/core/raw_keyboard_extension.dart';
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/document/presentation/editor_plugins/actions/block_action_button.dart';
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class BlockAddButton extends StatelessWidget {
const BlockAddButton({
@ -21,25 +27,41 @@ class BlockAddButton extends StatelessWidget {
Widget build(BuildContext context) {
return BlockActionButton(
svgName: 'editor/add',
richMessage: const TextSpan(
richMessage: TextSpan(
children: [
TextSpan(
// todo: l10n.
text: 'Click to add below',
text: LocaleKeys.blockActions_addBelowTooltip.tr(),
),
const TextSpan(text: '\n'),
TextSpan(
text: Platform.isMacOS
? LocaleKeys.blockActions_addAboveMacCmd.tr()
: LocaleKeys.blockActions_addAboveCmd.tr(),
),
const TextSpan(text: ' '),
TextSpan(
text: LocaleKeys.blockActions_addAboveTooltip.tr(),
),
],
),
onTap: () {
final isAltPressed = RawKeyboard.instance.isAltPressed;
final transaction = editorState.transaction;
// if the current block is not a empty paragraph block, then insert a new block below the current block.
// If the current block is not an empty paragraph block,
// then insert a new block above/below the current block.
final node = blockComponentContext.node;
if (node.type != ParagraphBlockKeys.type ||
(node.delta?.isNotEmpty ?? true)) {
transaction.insertNode(node.path.next, paragraphNode());
transaction.afterSelection = Selection.collapse(node.path.next, 0);
final path = isAltPressed ? node.path : node.path.next;
transaction.insertNode(path, paragraphNode());
transaction.afterSelection = Selection.collapse(path, 0);
} else {
transaction.afterSelection = Selection.collapse(node.path, 0);
}
// show the slash menu.
editorState.apply(transaction).then(
(_) => WidgetsBinding.instance.addPostFrameCallback(

View File

@ -8,6 +8,12 @@
"title": "Title",
"youCanAlso": "You can also",
"and": "and",
"blockActions": {
"addBelowTooltip": "Click to add below",
"addAboveCmd": "Alt+click",
"addAboveMacCmd": "Option+click",
"addAboveTooltip": "to add above"
},
"signUp": {
"buttonText": "Sign Up",
"title": "Sign Up to @:appName",