parent
1321190926
commit
d7bf271bd0
6 changed files with 162 additions and 18 deletions
@ -0,0 +1,129 @@ |
||||
/* |
||||
* @Author: joahyan joahyan@163.com |
||||
* @Date: 2022-07-19 14:26:22 |
||||
* @LastEditors: joahyan joahyan@163.com |
||||
* @LastEditTime: 2022-07-19 17:05:52 |
||||
* @FilePath: \flutter-quill\lib\src\widgets\shortcuts\edit_shortcuts.dart |
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
||||
*/ |
||||
|
||||
import 'dart:io'; |
||||
|
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter/services.dart'; |
||||
|
||||
import '../../../flutter_quill.dart'; |
||||
|
||||
typedef EditKeyboardAction = dynamic Function(); |
||||
|
||||
enum EditKeyboardKey { |
||||
onEnter, |
||||
onOverstriking, |
||||
onRecover, |
||||
} |
||||
|
||||
abstract class EditShortcuts extends Widget { |
||||
const EditShortcuts({Key? key}) : super(key: key); |
||||
|
||||
Map<EditKeyboardKey, EditKeyboardAction> get shortcutHandlers; |
||||
} |
||||
|
||||
class GridEditShortcuts extends StatelessWidget { |
||||
final Widget child; |
||||
final QuillController controller; |
||||
|
||||
LogicalKeyboardKey controlKey = |
||||
Platform.isMacOS ? LogicalKeyboardKey.meta : LogicalKeyboardKey.control; |
||||
|
||||
GridEditShortcuts({ |
||||
required this.child, |
||||
required this.controller, |
||||
}); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return Shortcuts( |
||||
shortcuts: { |
||||
// Ctrl + B |
||||
LogicalKeySet( |
||||
controlKey, |
||||
LogicalKeyboardKey.keyB, |
||||
): const OverstrikingIntent(), |
||||
// Ctrl + Z |
||||
LogicalKeySet( |
||||
controlKey, |
||||
LogicalKeyboardKey.keyZ, |
||||
): const RecoverIntent(), |
||||
// Ctrl + Alt + Z |
||||
LogicalKeySet( |
||||
controlKey, |
||||
LogicalKeyboardKey.alt, |
||||
LogicalKeyboardKey.keyZ, |
||||
): const UnRecoverIntent(), |
||||
}, |
||||
child: Actions( |
||||
actions: { |
||||
OverstrikingIntent: OverstrikingAction(controller: controller), |
||||
RecoverIntent: RecoverAction(controller: controller), |
||||
UnRecoverIntent: UnRecoverAction(controller: controller), |
||||
}, |
||||
child: child, |
||||
), |
||||
); |
||||
} |
||||
} |
||||
|
||||
// 加粗 |
||||
class OverstrikingIntent extends Intent { |
||||
const OverstrikingIntent(); |
||||
} |
||||
|
||||
class OverstrikingAction extends Action<OverstrikingIntent> { |
||||
OverstrikingAction({required this.controller}); |
||||
|
||||
final QuillController controller; |
||||
@override |
||||
void invoke(covariant OverstrikingIntent intent) { |
||||
if (controller.getSelectionStyle().attributes.keys.contains('bold')) { |
||||
controller.formatSelection(Attribute.clone(Attribute.bold, null)); |
||||
} else { |
||||
controller.formatSelection(Attribute.bold); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// 恢复 |
||||
class RecoverIntent extends Intent { |
||||
const RecoverIntent(); |
||||
} |
||||
|
||||
class RecoverAction extends Action<RecoverIntent> { |
||||
RecoverAction({required this.controller}); |
||||
|
||||
final QuillController controller; |
||||
|
||||
@override |
||||
void invoke(covariant RecoverIntent intent) { |
||||
if (controller.hasUndo) { |
||||
controller.undo(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// 恢复反操作 |
||||
class UnRecoverIntent extends Intent { |
||||
const UnRecoverIntent(); |
||||
} |
||||
|
||||
class UnRecoverAction extends Action<UnRecoverIntent> { |
||||
UnRecoverAction({required this.controller}); |
||||
|
||||
final QuillController controller; |
||||
|
||||
@override |
||||
void invoke(covariant UnRecoverIntent intent) { |
||||
if (controller.hasRedo) { |
||||
controller.redo(); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue