今天跟着大家一起学习桌面开发使用快捷键插件,插件地址
hotkey_manager,https://pub.flutter-io.cn/packages/hotkey_manager
安装
将此添加到你的软件包的 pubspec.yaml 文件:
dependencies:
hotkey_manager: ^0.1.7
全局初始化
import 'package:hotkey_manager/hotkey_manager.dart';
void main() async {
// 必须加上这一行。
WidgetsFlutterBinding.ensureInitialized();
// 对于热重载,`unregisterAll()` 需要被调用。
await hotKeyManager.unregisterAll();
runApp(MyApp());
}
常用方法
- 注册/卸载一个系统/应用范围的热键。
// ⌥ + Q
HotKey _hotKey = HotKey(
KeyCode.keyQ,
modifiers: [KeyModifier.alt],
// 设置热键范围(默认为 HotKeyScope.system)
scope: HotKeyScope.inapp, // 设置为应用范围的热键。
);
await hotKeyManager.register(
_hotKey,
keyDownHandler: (hotKey) {
print('onKeyDown+${hotKey.toJson()}');
},
// 只在 macOS 上工作。
keyUpHandler: (hotKey){
print('onKeyUp+${hotKey.toJson()}');
} ,
);
await hotKeyManager.unregister(_hotKey);
await hotKeyManager.unregisterAll();
- 使用 HotKeyRecorder 小部件帮助您录制一个热键
HotKeyRecorder(
onHotKeyRecorded: (hotKey) {
_hotKey = hotKey;
setState(() {});
},
);
最后我整理成一个HotKeyUtil,方便维护和使用
import 'package:flutter/material.dart';
//import 'package:flutter_money_tool/utils/window_util.dart';
import 'package:hotkey_manager/hotkey_manager.dart';
class HotKeyUtil {
//注册一个系统/应用范围的热键。
static Future registerHotKey(
KeyCode keyCode, {
List<KeyModifier>? modifiers,
String? identifier,
HotKeyScope? scope,
//监听回调
HotKeyHandler? keyDownHandler,
//仅支持macOS
HotKeyHandler? keyUpHandler,
}) async {
HotKey _hotKey = HotKey(
keyCode,
modifiers: modifiers,
identifier: identifier,
scope: scope,
);
return await hotKeyManager.register(
_hotKey,
keyDownHandler: keyDownHandler,
// 只在 macOS 上工作。
keyUpHandler: keyUpHandler,
);
}
//监听按键录入,录入后可以做注册热键及之后的逻辑
static void onHotKeyRecorded({
HotKey? initalHotKey,
required ValueChanged<HotKey> onHotKeyRecorded,
}) {
HotKeyRecorder(
initalHotKey: initalHotKey,
onHotKeyRecorded: onHotKeyRecorded,
);
}
/// 对于热重载,`unregisterAll()` 需要被调用。
static Future unregisterAll() async {
return await hotKeyManager.unregisterAll();
}
//卸载 unregisterHotKey
static Future unregisterHotKey(HotKey hotKey) async {
return await hotKeyManager.unregister(hotKey);
}
///-----------------业务相关,根据模块需求而定--------------------------
//注册一个关闭的热键。shift + alt + E
static void registerCloseHotKey() async {
registerHotKey(
KeyCode.keyE,
modifiers: [KeyModifier.shift, KeyModifier.alt],
scope: HotKeyScope.system,
keyDownHandler: (hotKey) {
//做关闭操作
//WindowUtil.close();
},
);
}
}