Flutter showDialog 带有导航键而不是传递上下文

Ayu*_*pta 5 flutter

目前,仅仅因为必须在其中传递上下文,就非常忙于从应用程序中的任何代码层显示对话框。因此我想通过 navigatorKey.currentContext (导航键是传递给 Material app navigatorKey 参数的全局键)来显示对话框。但我得到了错误

“使用不包含导航器的上下文请求的导航器操作。用于从导航器推送或弹出路由的上下文必须是作为导航器小部件后代的小部件的上下文。”

问题是 showDialog 在内部调用 Navigator.of(context) 并查找导航器祖先,该祖先当然会返回 null,因为导航器本身就是根。因此它不会找到作为祖先的导航器。

有没有办法可以直接将导航器状态/上下文传递给 showDialog 函数来显示对话框?或者,如果我们想从 bloc 显示它,是否有更简单的方法来显示 Dialog 而不将上下文传递给它?

小智 6

我找到了一个简单的解决方案:

navigatorKey.currentState.overlay.context

我在保留 navigatorKey 的 redux 中间件中使用它,并且希望在每次调度特定操作时在应用程序的任何位置全局显示一个对话框。


小智 6

由于这个已合并: https://github.com/flutter/flutter/pull/58259

您可以使用:

navigatorKey.currentContext;
Run Code Online (Sandbox Code Playgroud)