如何解决在Flutter Web中禁用转义键导航
在Flutter网站上键入转义键时,Flutter会执行Navigator.of(context).pop()
。如何禁用此功能?
这是我测试过的场景,所有这些场景都导致功能一致:
- Mac上的Chrome,Windows上的Edge以及DartPad 1.20.0中的
-
MaterialApp
,CupertinoApp
和WidgetsApp
- 调试模式和发布模式
我可以使用WillPopScope
禁用它,但是这也禁用了按浏览器中的“后退”按钮。我仍然希望允许用户使用浏览器进行导航,因此这不是一个可行的选择。
侧面问题:有人知道为什么这是默认功能吗?这是网站上的预期行为(不包括弹出菜单)。
解决方法
Flutter Web (以及台式机)也使用 Esc 快捷方式关闭模式对话框或弹出菜单。此绑定是在WidgetsApp.defaultShortcuts的应用程序级别定义的,不幸的是,它也会影响Navigator。当然,在页面之间导航时,键盘快捷键应该有所不同,但是目前 Flutter web 的状态为 beta ,并且某些功能仍在开发中。
作为一种解决方法,我们可以从MaterialApp
中删除此快捷方式:
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
final shortcuts = Map.of(WidgetsApp.defaultShortcuts)
..remove(LogicalKeySet(LogicalKeyboardKey.escape));
return MaterialApp(
shortcuts: shortcuts,home: HomePage(),);
}
}
,并且必须根据需要在本地还原一个:
Future<void> openDialog(BuildContext context) async {
final shortcuts = Shortcuts.of(context).shortcuts;
final key = LogicalKeySet(LogicalKeyboardKey.escape);
shortcuts[key] = WidgetsApp.defaultShortcuts[key];
await showDialog(
context: context,builder: (BuildContext context) {
return AlertDialog(
title: Text("Alert Dialog"),content: Text("Dialog Content"),);
},);
shortcuts.remove(key);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。