使用带有嵌套导航器的 Escape 键关闭对话框
Dismissing dialog with Escape key with nested navigator
我正在编写一个针对 macOS 的 Flutter 应用程序,并希望能够显示一个允许在该对话框中导航的模态对话框(有点像一系列入门屏幕)。
为了便于在对话框中导航,我需要将小部件包装在某种导航器中。请参阅以下(简化的)代码:
showDialog(
context: context,
builder: (context) => Dialog(
child: SizedBox(
width: 400,
height: 400,
child: Navigator(
onGenerateRoute: (_) => MaterialPageRoute(
builder: (_) => const Center(child: Text('hi there'))
),
),
),
),
);
现在这完美地工作了 - 除了解雇。我可以通过点击障碍区域来关闭对话框(这很好),但是,按键盘上的 ESC 键不会关闭对话框。
如果我只是直接嵌入子项(没有导航器),按 ESC 键可以完美关闭对话框。但出于某种原因,看起来 Navigator
正在吞下 ESC 键。我也试过使用 MaterialApp
作为导航器,它也吃掉了 ESC 键。
关于如何让导航器让我使用 ESC 键关闭对话框的任何理论?谢谢
您可以使用 RawKeyboardListener 来监听按键,并在触发 ESC 事件时弹出。
无效的旧响应:尝试使用 WillPopScope
将小部件包装在页面路由(在本例中为 Center
)内。在内部 Navigator
收到 ESC 事件之前,您应该能够在 onWillPop
回调上接收到 ESC 事件,然后您可以在外部 Navigator
上调用 pop
来关闭对话框。
我正在编写一个针对 macOS 的 Flutter 应用程序,并希望能够显示一个允许在该对话框中导航的模态对话框(有点像一系列入门屏幕)。
为了便于在对话框中导航,我需要将小部件包装在某种导航器中。请参阅以下(简化的)代码:
showDialog(
context: context,
builder: (context) => Dialog(
child: SizedBox(
width: 400,
height: 400,
child: Navigator(
onGenerateRoute: (_) => MaterialPageRoute(
builder: (_) => const Center(child: Text('hi there'))
),
),
),
),
);
现在这完美地工作了 - 除了解雇。我可以通过点击障碍区域来关闭对话框(这很好),但是,按键盘上的 ESC 键不会关闭对话框。
如果我只是直接嵌入子项(没有导航器),按 ESC 键可以完美关闭对话框。但出于某种原因,看起来 Navigator
正在吞下 ESC 键。我也试过使用 MaterialApp
作为导航器,它也吃掉了 ESC 键。
关于如何让导航器让我使用 ESC 键关闭对话框的任何理论?谢谢
您可以使用 RawKeyboardListener 来监听按键,并在触发 ESC 事件时弹出。
无效的旧响应:尝试使用 WillPopScope
将小部件包装在页面路由(在本例中为 Center
)内。在内部 Navigator
收到 ESC 事件之前,您应该能够在 onWillPop
回调上接收到 ESC 事件,然后您可以在外部 Navigator
上调用 pop
来关闭对话框。