Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件

这篇具有很好参考价值的文章主要介绍了Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


theme: cyanosis

在桌面端的开发中,键盘快捷键是非常常见而必要的,比如 Ctrl + F 搜索, Ctrl + C 复制等。Flutter 既然可以开发桌面端应用,那必然要提供自定义快捷键,触发事件的功能支持。这就是本节要介绍的 Shortcuts 组件体系,相关代码后续会放入 FlutterUnit 中,敬请关注 ~


1. Shortcuts 组件的简单使用

首先,来个简单的功能体验一下。还是那初始的计数器项目来开刀,之前是点击按钮数字增加,现在试一下通过快捷键触发更新的逻辑:

Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件

快捷键体系中,Shortcuts 组件维护快捷键(ShortcutActivator)和意图(Intent) 数据的映射,也就是说一个 Shortcuts 组件内部可以定义若干个快捷键。比如下面定义 Ctrl + Q 的快捷键,其对应的意图是 IncrementIntent

dart Widget buildShortcuts({required Widget child}) { return Shortcuts( shortcuts: <ShortcutActivator, Intent>{ LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.keyQ): const IncrementIntent(), }, child: Actions( actions: <Type, Action<Intent>>{ IncrementIntent: CallbackAction<IncrementIntent>(onInvoke: _incrementCounter), }, child: Focus( autofocus: true, child: child, ), ), ); }

我们需要派生 Intent 来自定义需要的意图,作为事件响应的标识。通过 Actions 组件根据意图来响应快捷键,其中通过 actions 参数维护类型和 Action 回调事件,触发状态类中 _incrementCounter 方法即可。

另外,快捷键体系需要焦点的支持,所以需要 Focus 组件,只有焦点在激活状态,快捷键才可以响应,通过焦点可以控制快捷键是否响应。想要默认情况下响应,可以将 autofocus 置为 true 。

``` ---->[状态类中]---- void _incrementCounter(IncrementIntent intent) { setState(() { _counter++; }); }

class IncrementIntent extends Intent { const IncrementIntent(); } ```

在事件响应时,可以获取意图对象。所以可以在意图派生类中提供成员数据,以便在事件响应时进行访问。比如这里 IncrementIntent 可以有一个增加值的成员,这样在 _incrementCounter 可以获取到意图对象,处理每次自增多少的逻辑。


最后,使用 buildShortcuts 方法包裹在想要响应快捷键的组件上即可,当然你可以直接套上去,或者封装一个组件单独维护快捷键的处理。这属于代码结构的问题,可以自己斟酌。

Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件


2. 快捷键与焦点的关联

下面实现一些输入框通过 Ctrl + Enter 快捷键发送的功能,介绍一下快捷键和焦点的关联。现在的目的是只有当输入框获取焦点之后,才可以响应快捷键。对于输入框来说,它内部有 Focus 组件,并且可以提供 FocusNode 焦点对象来控制焦点:对于输入框来说,焦点激活就是可输入状态:

final FocusNode _inputNode = FocusNode();

Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件

TextField 组件可以设置 focusNode 参数设置焦点对象,

Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件

如下所示,提供 buildShortcutsSend 方法,使用 Ctrl + enter 触发 SendMessageIntent 意图。快捷键触发时,回调 _sendMessage 方法,其中取消焦点,清空文字。焦点取消之后,就无法响应快捷键了,当点击输入框时,焦点会再次激活,可以响应快捷键。

``` Widget buildShortcutsSend({required Widget child}) { return Shortcuts( shortcuts: { LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.enter): const SendMessageIntent(), }, child: Actions( actions: >{ SendMessageIntent: CallbackAction (onInvoke: _sendMessage), }, child: child, ), ); }

void sendMessage(SendMessageIntent intent) { print("====sendMessage:${ctrl.text}==================="); _inputNode.unfocus(); ctrl.clear(); }

class SendMessageIntent extends Intent { const SendMessageIntent(); } ```

到这里,键盘快捷键的使用就介绍得差不多了,希望可以对你在桌面端的开发有所帮助。关于 Focus 体系也是一个比较复杂的东西,以后有机会再详细介绍。那本文就到这了,谢谢观看 ~ 文章来源地址https://www.toymoban.com/news/detail-451134.html

到了这里,关于Flutter 桌面开发 | 键盘快捷键功能 - Shortcuts 组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 键盘快捷键

    键盘快捷键通常用于现代操作系统和计算机软件程序中。 学习和使用键盘快捷键可以节省大量时间。 描述 Windows Mac OS 编辑菜单 Alt + E Ctrl + F2 + F 文件菜单 Alt + F Ctrl + F2 + E 查看菜单 Alt + V Ctrl + F2 + V 选取所有文本 Ctrl + A Cmd + A 复制文本 Ctrl + C Cmd + C 查找文本 Ctrl + F Cmd + F 查找

    2024年02月02日
    浏览(33)
  • Chrome 键盘快捷键

    很多人喜欢使用键盘快捷键来操作电脑,因为在熟练的情况下,使用键盘会比使用鼠标点击更快、更高效。本文对Chrome浏览器常用的快捷键做个说明。 希望能够凭自己的一己之力,能够帮助到各位初学开发的小伙伴,避免走弯路,费时费力,你们的成长是我最大的幸福。愿小

    2024年02月11日
    浏览(52)
  • vue 键盘快捷键标注

    参考:用html加css画个新拟态键盘_html 模拟键盘_背着行囊去远方的博客-CSDN博客

    2024年02月15日
    浏览(33)
  • 安卓设备蓝牙键盘快捷键

    日期:2023年1月。 安卓设备可以通过蓝牙或有线外接键盘,值得一提的是,安卓平板连接蓝牙键盘和蓝牙鼠标是一个不错的组合。本文以鸿蒙3.0平板进行测试,介绍一些安卓设备常用的快捷键,内容包含鼠标按键、系统快捷键、桌面快捷键、输入法快捷键、其它快捷键、等等

    2024年02月09日
    浏览(36)
  • RKH81 键盘快捷键

    ⌨️ 旋钮功能篇: ⚡ 电量提示篇: FN + ENTER — 查看电池用量情况 🌟 背光控制篇: FN + ↑ — 背光亮度 + FN + ↓ — 背光亮度 - FN + ← — 背光速度 - FN + → — 背光速度 + FN + — 切换背光颜色 FN + | — 支持多种背光效果切换 FN + — — 长按三秒,恢复出厂设置 FN + windo

    2024年02月11日
    浏览(54)
  • Python | PyCharm 键盘快捷键

    创建和编辑 Alt  +  Enter 显示意图动作 Ctrl  +  Space 基本代码完成 Ctrl  +  Shift  +  Space 智能代码完成 Ctrl  +  Alt  +  Space 类型名称完成 Ctrl  +  Shift  +  Enter 完整声明 Ctrl  +  P  /  Alt  +  Q 参数信息/上下文信息 Ctrl  +  Shift  +  I 快速定义 Ctrl  +  Q  /  Shift  +  F1 快速

    2024年04月10日
    浏览(36)
  • Modelsim键盘快捷键和鼠标操作

    Modelsim键盘快捷键和鼠标操作 使用Modelsim查看波形,大多数的操作是键盘和鼠标配合,通过熟悉快捷键操作可以帮助提操作效率。 内容来自Modelsim的官方指导手册,在GUI界面中可以这样查询: Help - SE Documentation - InfoHub(HTML Brower Required),如下图所示: 也可以通过安装目录进

    2024年02月16日
    浏览(39)
  • 自定义键盘快捷键调节电脑音量

    外接的键盘没有Fn。。。也没有调音量的键😅于是想自己弄一个 新建记事本文件打开,粘贴如下内容: 修改文件名后缀为.reg,双击运行会在注册表的HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout路径下新建Scancode Map,重启电脑后即可生效。 以上代码的内容为:F1静音或

    2024年02月09日
    浏览(40)
  • JS设置键盘快捷键、组合键

    键码了解下 [JavaScript键码表]身为一个键盘侠,不搞清楚键码映射表怎么可以???_码表映射脚本_你挚爱的强哥的博客-CSDN博客 keycode 0 =keycode 1 =keycode 2 =keycode 3 =keycode 4 =keycode 5 =keycode 6 =keycode 7 =keycode 8 = BackSpacekeycode 9 = Tabkeycode 10 =keycode 11 =keycode 12 = Clearkeycode 13 = Enterkeycode

    2024年02月03日
    浏览(35)
  • mpv播放器键盘快捷键

    作为个人认为最好用的播放器之一的MPV播放器,其开源,体积小,支持的格式多样等等非常优秀的功能。但其中也有部分麻烦的地方,因为功能太过强大,导致不知道某些功能的快捷键是什么,这就非常需要一个可以查阅的表了。但是官方给的说明太过长了,我还是自己整理

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包