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

Flutter热重载报错:'!navigator._debugLocked' is not true 求解决方案

解决Flutter热重载时!navigator._debugLocked断言失败问题

这个报错的核心原因是热重载过程中,Navigator组件处于锁定状态(比如正在执行导航动画、或者代码在Widget生命周期阶段直接触发导航操作,热重载时重复执行导致冲突),而热重启会重置整个应用状态,所以不会触发该问题。以下是具体解决方案:

  • 禁止在initState、build等Widget生命周期方法中直接调用导航操作(如Navigator.push/pop),改用WidgetsBinding.instance.addPostFrameCallback延迟执行,确保Widget树完全构建完成后再操作导航:

    @override
    void initState() {
      super.initState();
      WidgetsBinding.instance.addPostFrameCallback((_) {
        // 此处放置导航逻辑
        Navigator.push(context, MaterialPageRoute(builder: (_) => TargetPage()));
      });
    }
    
  • 避免在导航动画执行过程中触发热重载,等页面跳转/返回的动画完全结束后再执行热重载操作。

  • 给导航逻辑添加执行状态标记,防止热重载时重复触发:在State类中新增布尔变量记录导航是否已执行,热重载时跳过重复操作:

    bool _hasTriggeredNavigation = false;
    
    @override
    void initState() {
      super.initState();
      WidgetsBinding.instance.addPostFrameCallback((_) {
        if (!_hasTriggeredNavigation) {
          Navigator.push(context, MaterialPageRoute(builder: (_) => TargetPage()));
          _hasTriggeredNavigation = true;
        }
      });
    }
    
  • 若使用GlobalKey<NavigatorState>进行全局导航,同样需要添加状态锁控制,确保热重载时不会重复执行导航逻辑。

内容的提问来源于stack exchange,提问作者Utsav Donda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:57:05