FlutterDesktop(二)--快捷键操作

  FlutterDesktop因为要在多个平台上运行,所以如果想自己实现快捷键操作的话还是有点麻烦的.最近写了个方便进行快捷键操作的库shortcut_keys,能够在多个平台方便的使用快捷键

引入库

  • 由于库没有发布到pub上,所以库的引入可以使用git的方式引入,经常使用这个方式的话还得记得常清理缓存,不然可能库更新的却不刷新
1
2
3
dependencies:
shortcut_keys:
git: https://github.com/xiaohuihuiold/shortcut_keys
  • 然后在页面里面导入库文件shortcut_keys.dart
1
import 'package:shortcut_keys/shortcut_keys.dart';

使用

  • 把要使用快捷键的区域用ShortcutKeysListener包裹起来,needFocus参数是指是否需要FocusNode来获取焦点,如果不需要的话,则默认在当前页面都能触发快捷键.shortcutData参数里面就是一个快捷键列表,可以包含普通的快捷键以及带鼠标的快捷键
1
2
3
4
5
ShortcutKeysListener(
needFocus: false,
child: ... ,
shortcutData: [...] ,
),
  • 添加普通的快捷键以及事件,比如复制ctrl c,运行后鼠标在页面上,然后按下复制的快捷键应该就会看到打印了一条复制消息
1
2
3
4
5
6
7
8
9
10
11
shortcutData: [
ShortcutData(
shortcuts: [
ShortcutKeys.CTRL_LEFT,
ShortcutKeys.C,
],
trigger: () {
print('复制');
},
),
],
  • 添加带鼠标的快捷键,因为鼠标操作还有坐标等数据,所以trigger里面的加上一个参数来接收详细数据.这里以按下ctrl同时鼠标在当前区域时会触发输出当前鼠标坐标的快捷键为例子,event就是鼠标事件的详细信息.
1
2
3
4
5
6
7
8
9
10
11
12
shortcutData: [
ShortcutData(
shortcuts: [
ShortcutKeys.CTRL_LEFT,
ShortcutKeys.MOUSE_REGION,
],
trigger: (event) {
PointerHoverEvent point = event;
print('${point.position.dx},${point.position.dy}');
},
),
],
  • 鼠标事件并不能多个一起使用.除了上面的在区域内触发,还有滚轮滚动MOUSE_SCROLL,左键单击MOUSE_LEFT

开源地址

https://github.com/xiaohuihuiold/shortcut_keys