Flutter中如何通过Shortcuts/Intent/Actions注册应用全局操作
Flutter 主从布局跨焦点快捷键实现方案
完全可以将Actions和Shortcuts注册在应用根层级,该用法符合Shortcuts/Intent/Action框架的设计逻辑,不需要绕开原生体系,具体实现可以参考以下方案:
- 全局注册快捷键:在应用根节点(
MaterialApp/CupertinoApp外层)包裹Shortcuts组件,统一注册所有跨区域触发的快捷键与对应Intent的映射关系 - 根层级绑定通用
Actions:对应每个全局Intent的触发回调,不要直接写死业务逻辑,可通过两种方式路由到对应视图处理:- 事件分发模式:通过状态管理工具或者自定义事件总线,将Intent触发事件全局广播,主视图、详情视图在自身生命周期内订阅对应的事件,收到事件后执行自身的处理逻辑即可:
- 详情视图订阅
CopyPasswordIntent的触发事件,不管当前焦点在哪里,收到事件就执行密码复制逻辑 - 主视图订阅
SearchIntent的触发事件,收到事件后直接将焦点定位到搜索框
- 详情视图订阅
- 直接调用模式:自定义
Action子类,在invoke方法中通过提前定义的GlobalKey获取主视图、详情视图的State实例,直接调用对应State中提前写好的处理方法,完全遵循原生Action的调用逻辑
- 事件分发模式:通过状态管理工具或者自定义事件总线,将Intent触发事件全局广播,主视图、详情视图在自身生命周期内订阅对应的事件,收到事件后执行自身的处理逻辑即可:
注意如果使用GlobalKey方式,需要确保调用时对应组件的State已完成挂载,避免出现空指针问题
内容的提问来源于stack exchange,提问作者Herbert Poul
相关产品推荐
相关产品推荐

