You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用全局Context调用showDialog报错:未包含Navigator,如何修复?

问题修复方案

错误原因

你拿到的globalContext和scaffoldMessengerKey.currentContext都是MaterialApp层级的上下文,这个节点在Navigator的上层,Flutter调用showDialog时会从传入的context向上查找Navigator实例,自然找不到,所以抛出错误。

解决方法:使用AutoRoute自带的NavigatorKey

AutoRoute生成的AppRouter自带navigatorKey,这个Key关联的是Router内部的Navigator上下文,能正确找到Navigator实例。

具体代码修改

  1. 确保你的_appRouter是全局可访问的(比如定义在顶层,或者通过全局状态管理拿到)
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:48:10