Flutter使用全局Context调用showDialog报错:未包含Navigator,如何修复?
问题修复方案
错误原因
你拿到的globalContext和scaffoldMessengerKey.currentContext都是MaterialApp层级的上下文,这个节点在Navigator的上层,Flutter调用showDialog时会从传入的context向上查找Navigator实例,自然找不到,所以抛出错误。
解决方法:使用AutoRoute自带的NavigatorKey
AutoRoute生成的AppRouter自带navigatorKey,这个Key关联的是Router内部的Navigator上下文,能正确找到Navigator实例。
具体代码修改
- 确保你的
_appRouter是全局可访问的(比如定义在顶层,或者通过全局状态管理拿到) - 调用
showDialog时传入_appRouter.navigatorKey.currentContext:
showDialog( context: _appRouter.navigatorKey.currentContext!, builder: (BuildContext context) { return DialogDesignSimple( child: child, title: title, maxWidth: maxWidth ); } );
额外优化方案
AutoRoute本身支持直接弹窗的API,无需手动调用showDialog,可以更简洁地实现:
AutoRouter.of(context).pushDialog( DialogDesignSimple( child: child, title: title, maxWidth: maxWidth ) );
内容的提问来源于stack exchange,提问作者DG Hub
相关产品推荐
相关产品推荐

